Ładny brzuch

Witam
Mam taki problem :( mam napisac program na zaliczenie w c++ ktry ma rysowac litere H z wczesniej podanej ilosci gwiazdek. Bawiem sie z tym ale nie moge se poradzic z tym zeby gwiazdki byy malowane poziomo, pionowo jest OK a te co maja byc poziomo doczaja cie do pionowych i sie sumuj :mad:
Daje kod kttry stworzyem, zdaje sobie sprawe ze ma mase bubw, ale nie mam specjalnie czasu na wgebianie sie.
Prosze o POMOC :helpsmilie:

#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) {    int a, b, c, d;      cout << "podaj liczbe z zakresu 3-15" << endl;    cin >> b;       while (b==0)    {          cout << "Podaj ponownie" << endl;          cin >> b;    }           while (b==1)    {          cout << "Podaj ponownie" << endl;          cin >> b;    }       while (b==2)    {          cout << "Podaj ponownie" << endl;          cin >> b;    }    cout << "Podaj liczbe poziomom gwiazdek z zakresu liczb 2-7" << endl;    cin >> d;    while (d==0)    {          cout << "Podaj ponownie" << endl;          cin >> d;          }         while (d==1)    {          cout << "Podaj ponownie" << endl;          cin >> d;    }    cout << "" << endl;    cout << "" << endl;    cout << "" << endl;    cout << "" << endl;    cout << "" << endl;   {    for(c=1; c<=d;c++)/*petla rysowania poziomego*/       {       cout<<"                *" << endl;      }      for( a=1; a<=b; a++)/*petla rysowania pionowego*/     {       cout<<"                *" << endl;      }                  cout << "" << endl;    cout << "" << endl;    cout << "" << endl;    cout << "" << endl;    cout << "" << endl;    system("PAUSE");    return EXIT_SUCCESS;   } }



O jak sodko bezsensownie napisany program. ;)
Zacznij od zmiany tego sprawdzania czy liczba jest w odpowiednim przedziale, bo to jest raczej mocno takie sobie, a ja za chwil napisz jak by to mogo wyglda. ;)


O jak sodko bezsensownie napisany program. ;)
Zacznij od zmiany tego sprawdzania czy liczba jest w odpowiednim przedziale, bo to jest raczej mocno takie sobie, a ja za chwil napisz jak by to mogo wyglda. ;)

To napisz mi co ma robi, bo na razie zaczem od przerobienia tego co napisae na troch krtsz i lepsz wersj.
I sorry, e tak napisaem, ale to sprawdzanie poprawnoci danych mnie troch rozbawio. ;)
#include <iostream> using namespace std; int main(int argc, char *argv[]) {   int a, b, c, d;   b = 0;   while (b < 3 || b > 15)   {     cout << "podaj liczbe z zakresu 3-15" << endl;     cin >> b;   }   d = 0;   while (d < 2 || d > 7)   {     cout << "Podaj liczbe poziomom gwiazdek z zakresu liczb 2-7" << endl;     cin >> d;   }   cout << "\n\n\n\n\n";   for(c=1; c<=d;c++)/*petla rysowania poziomego*/     cout<<"                *" << endl;   for( a=1; a<=b; a++)/*petla rysowania pionowego*/     cout<<"                *" << endl;              cout << "\n\n\n\n\n";   system("PAUSE");   return EXIT_SUCCESS; }
Uytkownik Chmurek edytowa ten post 31 marzec 2006, 12:08


Zdaje sobie sprawe ze cie rozbawiem i to mnie cieszy, ale naprawde c++ to dla mnie jak narazie czarna magia.
Zaozenia programu maja byc takie:
Pobiera dwie wartosci
1) liczba gwiazdek w poziomie
2) liczba gwiazdek w pionie
i z tych danych ma namalowac literke H
Niby proste ale juz siwieje z nerww przy tym :(

Wazne zeby malowa ta literke H, nie musi byc obsugi bedy, to rozwiaze na swj prymitywny i mam nadzieje skuteczny sposb ;)

Pobieranie danych dziaa jak nalezy :clap:
Uytkownik DEDAL edytowa ten post 31 marzec 2006, 12:19
To raczej nie zaleao od jzyka, bo wida, e znasz ptl while. ;)
W kadym razie:
#include <iostream> using namespace std; int main(int argc, char *argv[]) {   int szerokosc, wysokosc;   wysokosc = 0;   while (wysokosc < 3 || wysokosc > 15)   {     cout << "podaj liczbe z zakresu 3-15" << endl;     cin >> wysokosc;   }   szerokosc = 0;   while (szerokosc < 2 || wysokosc > 7)   {     cout << "Podaj liczbe poziomom gwiazdek z zakresu liczb 2-7" << endl;     cin >> szerokosc;   }   char ekran[80][21];   for (int y=0;y<21;y++)     for (int x=0;x<80;x++)       ekran[x][y] = ' ';   /* zmienne pomocnicze, zeby lepiej zobrazowac co robie;) */   int x_od = 40-szerokosc/2;   int x_do = x_od+szerokosc;   int y_od = 10-wysokosc/2;   int y_do = y_od+wysokosc;   for (int y = y_od; y <= y_do; y++)     ekran[x_od][y] = '*';   for (int y = y_od; y <= y_do; y++)     ekran[x_do][y] = '*';   int y_sr = (y_od + y_do)/2;   for (int x = x_od+1; x < x_do; x++)     ekran[x][y_sr] = '*';   for (int y=0;y<21;y++)   {     for (int x=0;x<80;x++)       cout << ekran[x][y];     cout << endl;   }   return 0; }

Wielkie dzieki chmurek, jak cie kiedys moze gdzies spotkam to postawie ci Bronksa :drunk:
To jest to o co mi dokadnie chodzio ;)
Az wruciy mi checi do zycia ;)
Mozna zamknac temat

Gdyby program pobra ilo gwiazdek w pionie nastpnie podzieli przez 2 i wyszedby rodek litery, ale jakby bya ona parzysta to by musia odj od tego wyniku 1. Np.
pion -6
6:2=3
zmienna1=3
3-1=2
zmienna2=2
ptla(zmienna2) rysuje
* *
* *
stop i zaczyna poziom
***
druga ptla(zmienna3)
* *
* *
* *

pion- 7
7:2=3
zmienna1=3
7-zmienna1=zmienna2

ptla zmienna1
* *
* *
itd.
Wielkoc lini poziomych mgby ustawi switch() case 3: case 4: .....
Moe si przyda ???

Hheehhe Za pno.
Uytkownik Kula_17 edytowa ten post 31 marzec 2006, 12:57
Powiem szczeze ze tez sie nad tym zastanawiaem! A le dzieki za podpowiedzi, jeszcze bede ten kod Chmurka modyfikowa, i moze cos zaporzycze z tego kodu ;)


Gdyby program pobra ilo gwiazdek w pionie nastpnie podzieli przez 2 i wyszedby rodek litery, ale jakby bya ona parzysta to by musia odj od tego wyniku 1.
Dlaczego? W wypadku, gdy liczba gwiazdek jest parzysta wiadomo, e nie da si wyznaczy rodkowej, ale co za rnica czy przyblienie tego rodka bdzie wyej czy niej niego?


Wielkoc lini poziomych mgby ustawi switch() case 3: case 4: .....
A tu nie jestem pewien co miae na myli. ;)

Co do samego algorytmu to u mnie jak wida rysuj si najpierw pionowe, a pniej pozioma bez punktw kracowych, bo one ju s narysowane.

switch (LiczbaGwiazPoziom)
case 3:
.....
itd.
Po prostu nie ustaliem algoytmu do robienia gwiazdek w poziomie, dlatego mona by przygotowa gotowe rozstawienie. Takie prostackie posunicie :)
A do tej liczby gwiazzdek parzystych to wiadomo, e jest bez rnicy, tak mi si po prostu napisao i nie widz problemu :):)
Uytkownik Kula_17 edytowa ten post 31 marzec 2006, 15:07
Witam ponownie ;)
Przedewszystkim Sorry za odkopywanie skamieliny, ale nie widziaem potrzeby zakadania nowego tematu, a tym bardziej ze sie tyczy wasnie w/w programiku.
Ok przechodze do sendna sprawy :)

Jak zrobiz do tego menu na poczatku (textowe)
1) Wejscie
2) Pomoc
3) Wyjscie

Jak uzywam cout do wyswietlania tegoz menu to wywala mi wszystki couty nawwet te ktre sa zawarte wewnatrz programu.
Jak zrobic menu i w zaleznosci od wybranej liczby 1-3 wykonuje odpowiednie czynnosci.

Prosibym o jak najatwiejjsze rozwiazanie (najprymitywniejsze jakie mozna zastosowac) ;)

NIe krzyczec za skamieline ^_^

Prosz oto ver prosta do blu#include <iostream> #include <conio.h> using namespace std; void rysuj(); void pomoc(); int main() { bool bKoniec=false; do { system("cls"); cout << "1.Wejscie\n2.Pomoc\n3.Wyjscie" << endl; int nWybor; cin >> nWybor; switch(nWybor) { case 1: rysuj(); break; case 2: pomoc(); break; case 3: bKoniec=true; break; default: cout << "Niema takiej opcji!" << endl; getch(); } }while(!nKoniec); return 0; } void rysuj() { system("cls"); int szerokosc, wysokosc; wysokosc = 0; while (wysokosc < 3 || wysokosc > 15) { cout << "podaj liczbe z zakresu 3-15" << endl; cin >> wysokosc; } szerokosc = 0; while (szerokosc < 2 || wysokosc > 7) { cout << "Podaj liczbe poziomom gwiazdek z zakresu liczb 2-7" << endl; cin >> szerokosc; } char ekran[80][21]; for (int y=0;y<21;y++) for (int x=0;x<80;x++) ekran[x][y] = ' '; /* zmienne pomocnicze, zeby lepiej zobrazowac co robie;) */ int x_od = 40-szerokosc/2; int x_do = x_od+szerokosc; int y_od = 10-wysokosc/2; int y_do = y_od+wysokosc; for (int y = y_od; y <= y_do; y++) ekran[x_od][y] = '*'; for (int y = y_od; y <= y_do; y++) ekran[x_do][y] = '*'; int y_sr = (y_od + y_do)/2; for (int x = x_od+1; x < x_do; x++) ekran[x][y_sr] = '*'; for (int y=0;y<21;y++) { for (int x=0;x<80;x++) cout << ekran[x][y]; cout << endl; } getch(); } void pomoc() { system("cls"); cout << "Pomoc" << endl; getch(); }
Uytkownik reVis edytowa ten post 03 maj 2006, 17:31

Prosz oto ver prosta do blu

Wielki dzieki :coolio:
To jest juz ostateczna wersja :) :) :)

Teraz temat juz mozna zamknac na 4 spusty ;)

JESZCZE RAZ WSZYSTKIM DZINX ZA UDZIELENIE POMOCY !!!
Uytkownik DEDAL edytowa ten post 03 maj 2006, 15:56
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •