// Podatkovna zbirka: lik.cpp
// Program za izris lika naslednje oblike:
//
// *
// ***
// *****
// *******
// * *
// * *
// *
//
// Visino polovice lika podamo preko tipkovnice
// Poseben primer so liki, katerih dimenzije so manjse od 3.
// Za lik, ki ima visino polovice lika enako 1 se izrise: *
// Za lik, ki ima visino polovice lika enako 2 se izrise: *
// ***
// *
// Likov, ki imajo visino polovice lika vecjo od 30 ne izrisujemo.
//
#include <iostream>
using namespace std;
// Funkcija za izris dolocenega stevila zvezdic
void izris_zvezdic
(int st_zvez) // vhod: stevilo izrisanih zvezdic
{
cout.width(st_zvez); // za izpis rezerviraj st_zvez mest
cout.fill('*'); // izpis polni z zvezdicami
cout << '*'; // izpisi zvezdico
return;
} // konec izris_zvezdic
// Funkcija za izris dolocenega stevila praznih mest
void izris_pr_mest
(int st_pr_mest) // vhod: stevilo praznih mest
{
cout.width(st_pr_mest); // za izpis rezerviraj st_pr_mest mest
cout.fill(' '); // izpis polni s praznimi mesti
cout << ' '; // izpisi prazno mesto
return;
} // konec izris_pr_mest
// Glavna funkcija za izris lika
// Lik je razdeljen na stiri razlicne dele.
// V prvem delu izrisemo prazna mesta (39 praznih mest) in zvezdico.
// V drugem delu izrisemo vec vrstic, ki vsebujejo same zvezdice.
// Stevilo zvezdic se v tem delu povecuje za dve.
// Zacetno stevilo zvezdic je enako 3.
// Stevilo praznih mest pred likom pa se v tem delu zmanjsuje za 1.
// Stevilo izrisov vrstic z zvezdicami je v tem delu enako visini
// polovice lika -1.
// V tretjem delu izrisujemo vec vrstic, ki vsebujejo zvezdico,
// stevilo praznih mest in zopet zvezdico.
// Stevilo praznih mest med zvezdicama se v tem delu zmanjsuje za dve.
// Zacetno stevilo praznih mest med zvezdicama je enako visina
// polovica lika * 2 - 5.
// Stevilo praznih mest pred likom pa se v tem delu povecuje za 1.
// Stevilo izrisov vrstic z zvezdicami je v tem delu enako
// visini polovice lika -2.
// V cetrtem delu izrisemo prazna mesta (39 praznih mest) in zvezdico.
void main ()
{
// vnos visine polovice lika
int vis_pol_lika; // vhodni podatek, ki ga vnesemo preko tipkovnice
do // ponavljaj dokler je visina lika manjsa od 1 ali vecja od 30
{
cout << "Vpisi sirino lika >=1 ali <= 30:";
cin >> vis_pol_lika;
}
while ((vis_pol_lika < 1) || (vis_pol_lika > 30));
// izris prvega dela lika
int st_pr_m_pred = 39; // stevilo praznih mest pred likom
izris_pr_mest(st_pr_m_pred);
cout << "*" << endl;
// izris drugega dela lika
int st_zvezdic = 3; // stevilo zvezdic
int st_vrstic; // stevilo izrisanih vrstic v drugem
// in tretjem delu lika
if (vis_pol_lika > 1)
{
for (st_vrstic = 1; st_vrstic <= vis_pol_lika - 1; st_vrstic++)
{
izris_pr_mest(--st_pr_m_pred);
izris_zvezdic(st_zvezdic);
cout << endl;
st_zvezdic = st_zvezdic + 2;
}
}
// izris tretjega dela lika
int st_pr_m_med; // stevilo praznih mest med zvezdicama
if (vis_pol_lika > 2)
{
st_pr_m_med =vis_pol_lika * 2 - 5;
st_pr_m_pred = st_pr_m_pred + 1;
for (st_vrstic = 1; st_vrstic <= vis_pol_lika - 2; st_vrstic++)
{
izris_pr_mest(st_pr_m_pred++);
cout << "*";
izris_pr_mest(st_pr_m_med);
cout << "*" << endl;
st_pr_m_med = st_pr_m_med - 2;
}
}
// izris cetrtega dela lika
if (vis_pol_lika > 1)
{
if (vis_pol_lika == 2)
st_pr_m_pred = st_pr_m_pred + 1;
izris_pr_mest(st_pr_m_pred);
cout << "*" << endl;
}
system("pause");
return;
} // konec izrisa lika