GRY-Online.pl --> Archiwum Forum

Pętla oraz IF w C++!

31.08.2007
09:29
[1]

czekers [ make love not war ]

Pętla oraz IF w C++!

Szybkie ^^ pytanie, szybka odpowiedź:

#include <iostream>

using namespace std;

int main()

char znak;
int liczba1;
int liczba2;


cout <<"Ile to 12+12?: ";
cin >>znak;
cin.ignore();
if (znak=='24') // jesli wyszlo 24
cout <<"Brawo! Suma liczb to 24!"<<'\n';
else //znak nie jest 24

cout <<"Zle! Zacznij jeszcze raz";


cout <<"\nNacisnij ENTER aby zakonczyc\n";
getchar();
return 0;



Napisałem oto takie cosik, ale mi nie wychodzi :P Chce, żeby aby po wpisaniu liczby innej niz 24, program Pokazywał napis "Zle! Zacznij jeszcze raz", po czym zapętlał sie do początku. natomiast aby po wpisaniu liczby 24 pokazywał się stosowny komunikat.

31.08.2007
09:35
[2]

Sir Skull [ Charr Shaman ]

Poczytaj o instrukcji while.

31.08.2007
09:37
[3]

SPMKSJ [ Konsul ]

czekers----> potrzebujesz uzyc petli while, zeby program nie konczyl sie


Program nie dziala Ci dlatego, ze zmienna znak masz jako char (char to 1 znak), wiec cin zawsze bedzie pobierac pierwszy znak z ciagu, ktory podal uzytkownik. W przypadku wpisania 22, bedzie to dwa.
Zadeklaruj znak jako zmienna typu int.
Po co dekladrujesz liczba1, liczba2 ?? Przeciez nie uzywasz tych zmiennych

31.08.2007
09:44
[4]

czekers [ make love not war ]

Ok, co do char - przeoczyłem to. Poprostu pisze to na szablonie innego programu :P
wartości liczba1 i liczba 2 wykasowałem... Zostało mi takie cuś:




#include <iostream>

using namespace std;

int main()

int znak;

cout <<"Ile to 12+12?: ";
cin >>znak;
cin.ignore();
if (znak=='24') // nie wiem czy to jest poprawne. Może powiniennem zamiast 24 ustalić wartość 24, a nastepnie wpisać ją w to miejsce?
cout <<"Brawo! Suma liczb to 24!"<<'\n';
else //znak nie jest 24

cout <<"Zle! Zacznij jeszcze raz";
//I tutaj mam wstawić pętle while, tak?


cout <<"\nNacisnij ENTER aby zakonczyc\n";
getchar();
return 0;


31.08.2007
09:56
[5]

Mikur [ Konsul ]

hmm wydaje mi sie ze petla while wyglada tak : do (operacje) while warunek. Wiec to powinno dzilac mniej wiecej tak - do, podaj liczbe, wyswietl nie, while liczba=24, wyswietl zgadles. Cos takiego, ale na C sie znam slabiutko, to tak po pascalowemu:)

31.08.2007
09:57
[6]

SPMKSJ [ Konsul ]

jezeli piszesz

znak=='24' , to tymi pojedynczymi cudzyslowiami '24' informujesz kompilator, ze wyrazenie 24 ma byc traktowane jako ciag znakow

a wiec liczba 24 to nie to samo co ciag znakow '24'

31.08.2007
10:00
[7]

Ramz [ Generaďż˝ ]

int liczba;

for(;;)

std::cin>>liczba;
if(liczba == 24)

std::cout<<"Brawo";
break;

else

std::cout<<"glupi jestes";



Taki szablonik, mysle ze dobry bo zem dawno w c++ nic nie napisal (c(sharp) :) ).

PS. Ale gol ma zajewiste formatowanie :) ja chcialem ladnie ze wcieciami a tu kicha wyszla
PS2. A i jeszcze jedno: uwaznie stosuj w swoich programach konstrukcje for(;;) bo jest ona bardzo niebezpieczna. Jesli sam jej nie przerwiesz poprzez break (albo jakas szatanska instrukcja goto ktorej ja w swoim skromnym zyciu ani razu nie uzylem) to jedynym wyjsciem bedzie ctrl+alt+del i zakoncz zadanie.
PS3. A i jeszcze wyjasnie bo jestes poczatkujacy konstrukcja for(;;) (bez zadnych warunkow) jest niczym wiecej niz nieskonczona petla

31.08.2007
10:32
[8]

czekers [ make love not war ]

Juhuhu! W końcu mi się udało. Co prawda nie tak wspaniale jak miało być (Po wpisaniu nieprawidlowego wyniku program nie cofa do początku, ale pokazuje się komunikat, naprawienie tego to kwestia kilku minut).
Zamieszczam swój progs. Prosty że prosty, ale ile frajdy sprawia :P teraz bede się uczył funkcji Random, dzięki temu będe mógł stworzyc program matematyczny.

31.08.2007
10:52
[9]

czekers [ make love not war ]

Zamieszczam Wersję Finalną!

31.08.2007
11:29
[10]

czekers [ make love not war ]

Hłe, Hłe, kolejny problem. Otóż chcę zrobić maszynkę sprawdzająca tabliczke mnożenia. Wszystko jest ok poza tym najważniejszym ^^ Chodzi mi o "randomize". Za każdem razem mi wychodzi działanie 2*8... Zupełnie nie wiem co jest nie tak.

#include <iostream>

using namespace std;

int main()

int l1;
int l2;
int wynik;

l1=rand()%10+1;
l2=rand()%10+1;
poczatek:
cout <<"Ile jest "<<l1<<" x "<<l2<<" : ";
cin >>wynik;

if (wynik==l1*l2)
cout <<"Brawo!"<<'\n';

else
cout <<"Zle, sproboj jeszcze raz!"<<'\n';
goto poczatek;

getchar();
return 0;

31.08.2007
11:37
[11]

czekers [ make love not war ]

hehe, jestem samowystarczalny :P Pozmieniałem trochę kod źródłowy i jest!

31.08.2007
11:46
[12]

pecet007 [ Talk to the claw ]

musisz dodać zaraz po main srand do zainicjowania generatora liczb losowych najlepiej z jakąś w "miarę losową" wartością, np. czasem
czyli np. srand ( time(NULL) );



jak użyjesz time'a to dodaj jeszcze do deklaracji bibliotek #include <ctime> lub #include <time.h> (wszystko jedno które)

31.08.2007
12:00
[13]

Ramz [ Generaďż˝ ]

NIE UZYWAJ INSTUKCJI GOTO !!!! - powoduje ona zacieranie sie drogi wykonywania programu. Powie ci to kazdy programista, a zaden profesjonalny jej nie stosuje (podobno istnieje jedna rzecz ktorej obejsc sie nie da bez goto ale ja jej nie znam :) jak pisalem nigdy tego nie uzywalem).

31.08.2007
12:20
[14]

GBreal.II [ floydian ]

Taka dygresja:
Ramz --> wyjscie z zagniezdzonej petli. Jedyna mozliwosc uzycia goto w Javie. Co ciekawe w Javie goto jest slowem kluczowym, ale tylko po to, aby uzyc go w zagniezdzonej petli, albo napisac blad, ze goto jest zabronione.

czekers:
zamiast goto zrob to wszystko w petli

while(true)‹
cout <<"Ile jest "<<l1<<" x "<<l2<<" : ";
cin >>wynik;

if (wynik==l1*l2)‹
cout<<"brawo!"<<'\n';
break;›

cout <<"Zle, sproboj jeszcze raz!"<<'\n';


Moze tez malo eleganckie, ale nie ma goto, ktore jest zlem wcielonym :)

31.08.2007
12:31
[15]

Ramz [ Generaďż˝ ]

GBreal.II - z wyjsciem z zagniezdzonej petli mozna poradzic sobie inaczej np. zmienna bool. Chodzilo mi o to ze wykladowca (dobry w c++, w tej chwili juz nie na uczelni a zatrudnil sie w jaiejs firmie ) twierdzil ze istnieje przypadek gdy ominiecie insrukcji goto jest niemozliwe, a jedynym wyjsciem jest jej zastosowanie (nie mozna tego ominac zmiennymi, ani innymi rzeczami). Sekretu nie wyjawil ;), a ja tego nie szukalem.

31.08.2007
15:16
[16]

Katane [ Useful Idiot ]

GBreal.II --> W Javie goto jest slowem kluczowym, zarezerwowanym, ale nie mozna go stosowac. Zamiast tego uzywa sie tzw. etykietowanego break.

31.08.2007
15:55
[17]

GBreal.II [ floydian ]

Katane --> Przepraszam, moj blad. Pomylilo mi sie. Jezeli kogos niechcacy urazilem czy wprowadzilem w blad, to bardzo przepraszam (widac jak sluchalem wykladow ;) )

31.08.2007
16:37
[18]

czekers [ make love not war ]

Yyyy, to zaraz... Wpisałem kod GB.Reala.II No i owszem, kompuetr wypisał mi działanie 2 x 46 (zamierzałem zrobić tabliczke mnożenia do 100 :P), ale najgorsze że po wpisaniu wyniku program się po prostu zamknął...
Ja tam nie wiem co wy do goto macie :P
Próbóje teraz zrobić trochę bardziej rozwinięty projekt:P Ale od goto się tam aż roi...



#include <iostream>

using namespace std;

int main()

int l1;
int l2;
int wynik;
int wiek;

cout <<"Witaj w moim programie matematycznym WatEmaTica '08!"<<'\n';
cout <<"Na poczatek napisz ile masz lat, a ja dostosuje sie do ciebie!"<<'\n';
cout <<"Ile masz lat?"<<'\n';
cin >>wiek;
cin.ignore();
if (wiek==1<10)
goto najmlodszy;
if (wiek==11<15)
goto mlody;
if (wiek==16<99)
goto stary;


najmlodszy:
poczatek1:
getchar();
l1=rand()%10+1;
l2=rand()%10+1;
wynik=l2*l1;

cout <<"Ile jest "<<l1<<" x "<<l2<<" : "<<'\a';
cin >>wynik;

if (wynik==l1*l2)
cout <<"Brawo!"<<'\n';

else
cout <<"Niestety - zle!"<<'\n';
goto poczatek1;


mlody:
poczatek2:
getchar();
l1=rand()%100+1;
l2=rand()%10+1;
wynik=l2*l1;

cout <<"Ile jest "<<l1<<" x "<<l2<<" : "<<'\a';
cin >>wynik;

if (wynik==l1*l2)
cout <<"Brawo!"<<'\n';

else
cout <<"Niestety - zle!"<<'\n';
goto poczatek2;


stary:
poczatek3:
l1=rand()%100+1;
l2=rand()%100+1;
wynik=l2*l1;

cout <<"Ile jest "<<l1<<" x "<<l2<<" : "<<'\a';
cin >>wynik;

if (wynik==l1*l2)
cout <<"Brawo!"<<'\n';

else
cout <<"Niestety - zle!"<<'\n';
goto poczatek3;
getchar();
return 0;




Łatwo się chyba domyślić o co mi w tym chodzi :P Jednak coś nie pasuje, i zawsze, nawet jak się wpisze wiek np 67, wychodzą działania na poziomie "najmłodszy" czyli te najrpostsze... Możecie pomoć mi rozwiącać ten problem?

31.08.2007
17:54
[19]

Katane [ Useful Idiot ]

czekers --> Nie wyrabiaj sobie zlych nawykow juz na poczatku nauki programowania. Instrukcja goto zaburza porzadek programu i sprawia, ze kod staje sie znacznie mniej czytelny - a jak ktos madry napisal (Eckel albo jeden z panow Hortsmann/Cornell ;) ), kod jest znacznie czesciej czytany niz pisany.

Przy okazji, twoje instrukcje if z wiekiem nie beda dzialac - powinny wygladac tak:

if(wiek >= 10 && wiek <= 10) ‹
costam


itd.

© 2000-2024 GRY-OnLine S.A.