kynol Temat założony przez niniejszego użytkownika |
[C++] Błędny warunek w pętli do...while » 2012-11-14 22:39:09 Witam, otoz mecze sie z ta petla sporo. Probowalem wielu metod rozwiazania tego problemu lecz nic mi nie wychodzilo. Kiedys ogarnialem ta petle i nie mialem z nia problemow, lecz przez dluzsza przerwe juz cos mi nie wychodzi. Wytlumaczy mi ktos dlaczego dany program sie nie zapetla?. W programie chodzi o to ze jesli uzytkownik poda liczbe wieksza od 6 a mniejsza od 0 to wyskoczy blad i podanie ponownie liczby(czyli ta petla do...while) i jesli znow podana liczba bedzie wieksza od 0 a mniejsza od 7 to program pozwoli wykonac dalsze dzialania. Prosze o wskazowki co jest zle. Wklejam kod: #include <cstdlib> #include <iostream>
using namespace std;
double Kolo( double r ) { double n = 3.14 * r * r; return n; }
double Szescian( double a ) { double x = 6 * a * a; return x; }
int Trojkat( int y, int h ) { double w = 0.5 * y * h; return w; }
int Trapez( int k, int b, int o ) { double t =( k + b ) / 2 * o; return t; }
int Stozek( int h, double r ) { double s = 3.14 * r * r * h / 3; return s; }
int Prostokat( int a, int b ) { double p = a * b; return p; }
float Ulamki( float licznik, float mianownik ) { float ulm =( licznik / mianownik ); return ulm; }
int main() { double a, x, y, h, w, r, n, k, b, o, s; char f; float licznik, mianownik; bool zabezpieczenie = f; cout << "\tProgram obliczajacy pole powierzchni i objetosc podannych ponizej figur \n"; cout << "Wybierz figure: \n 1 - Szescian \n 2 - Trojkat \n 3 - Kolo \n 4 - Trapez \n 5 - Stozek \n 6 - Prostokat" << endl; cout << "\n\tWybierasz figure nr: "; cin >> f; if(( f > 0 ) &&( f < 7 ) ) { zabezpieczenie = false; switch( f ) { case '1': cout << "Podaj dlugosc bokow a= "; cin >> a; cout << "Pole powierzchni szescianu wynosi: " << Szescian( a ) << "\n"; cout << "Objetosc szecianu wynosi: " << a * a * a << "\n"; break; case '2': cout << "Podaj dlugosc boku a= "; cin >> y; cout << "Podaj wysokosc trojkata= "; cin >> h; cout << "Pole powierzchni trojkata wynosi: " << Trojkat( y, h ) << "\n"; cout << "Objetosc trojkata wynosi: Nie da sie obliczyc objetosci" << "\n"; break; case '3': cout << "Podaj dlugosc promienia= "; cin >> r; cout << "Pole powierzchni kola wynosi: " << Kolo( r ) << "\n"; cin.clear(); cin.sync(); licznik = 4; mianownik = 3; cout << "Objetosc kola wynosi: " << Ulamki( licznik, mianownik ) * 3.14 * r * r * r << "\n"; break; case '4': cout << "Podaj dlugosc boku a= "; cin >> k; cout << "Podaj dlugosc boku b= "; cin >> b; cout << "Podaj wysokosc trapezu= "; cin >> o; cout << "Pole powierzchni trapezu wynosi: " << Trapez( k, b, o ) << "\n"; cout << "Objetosc trapezu wynosi: Nie da sie obliczyc objetosci" << "\n"; break; case '5': cout << "Podaj dlugosc promienia= "; cin >> r; cout << "Podaj wysokosc = "; cin >> h; cout << "Pole powierzchni stozka wynosi: " << Stozek( h, r ) << "\n"; cin.clear(); cin.sync(); licznik = 1; mianownik = 3; cout << "Objetosc stozka wynosi: " << Ulamki( licznik, mianownik ) * 3.14 * r * r * h << "\n"; break; case '6': cout << "Podaj dlugosc boku a= "; cin >> a; cout << "Podaj dlugosc boku b= "; cin >> b; cout << "Pole powierzchni prostokata wynosi: " << Prostokat( a, b ) << "\n"; cout << "Objetosc prostokata wynosi: Nie da sie obliczyc objetosci" << "\n"; break; default: cout << "\tNie ma takiej liczby, figury! \n"; } } else do { cout << "Podales zla liczbe\n"; cout << "Podana liczba musi byc wieksza od 0 i mniejsza od 7\n"; cout << "Podaj poprawna liczbe: "; cin.sync(); cin.clear(); cin >> zabezpieczenie; } while( zabezpieczenie != true ); system( "PAUSE" ); return EXIT_SUCCESS; }
|
|
kynol Temat założony przez niniejszego użytkownika |
» 2012-11-14 23:25:55 refresh |
|
przemko06 |
» 2012-11-15 14:20:58 to co jest w tym: do { twój kod }
będzie się powtarzało. Czyli zastanów sie... to "do" chyba powinno znajdować sie w całkiem innym miejscu, jak dobrze myśle. Chociaż tak to nic nie da bo tu coś namieszane masz :/ teraz nie mam czasu później napisze co mi sie nie widzi. |
|
kubawal |
» 2012-11-15 19:55:14 char f; bool zabezpieczenie = f;
|
Tak nie może być. Tworzysz zmienną f bez inicjalizowania jej, a później konwertujesz ja na typ bool /edit: cout << "Podales zla liczbe\n"; cout << "Podana liczba musi byc wieksza od 0 i mniejsza od 7\n"; cout << "Podaj poprawna liczbe: "; cin.sync(); cin.clear(); cin >> zabezpieczenie;
|
Co to jest? @przemko06 to co jest w tym: do { twój kod }
będzie się powtarzało.
|
To musiałoby być: do { twój kod } while(warunek_wyjscia); |
|
kynol Temat założony przez niniejszego użytkownika |
» 2012-11-15 22:37:48 Problem rozwiazany. Doszedlem juz sam. Podaje poprawny kod: #include <cstdlib> #include <iostream>
using namespace std;
double Kolo( double r ) { double n = 3.14 * r * r; return n; }
double Szescian( double a ) { double x = 6 * a * a; return x; }
int Trojkat( int y, int h ) { double w = 0.5 * y * h; return w; }
int Trapez( int k, int b, int o ) { double t =( k + b ) / 2 * o; return t; }
int Stozek( int h, double r ) { double s = 3.14 * r * r * h / 3; return s; }
int Prostokat( int a, int b ) { double p = a * b; return p; }
float Ulamki( float licznik, float mianownik ) { float ulm =( licznik / mianownik ); return ulm; }
int main() { double a, y, h, r, k, b, o; float licznik, mianownik; int f; cout << "\tProgram obliczajacy pole powierzchni i objetosc podannych ponizej figur \n"; cout << "Wybierz figure: \n 1 - Szescian \n 2 - Trojkat \n 3 - Kolo \n 4 - Trapez \n 5 - Stozek \n 6 - Prostokat" << endl; do { cout << "\nWybierasz figure nr: "; cin >> f; cout << endl; } while(( f <= 0 ) ||( f > 7 ) ); switch( f ) { case 1: { cout << "Wybrales szescian" << endl; cout << "Podaj dlugosc bokow a= "; cin >> a; cout << "Pole powierzchni szescianu wynosi: " << Szescian( a ) << "\n"; cout << "Objetosc szecianu wynosi: " << a * a * a << "\n"; } break; case 2: { cout << "Wybrales trojkat" << endl; cout << "Podaj dlugosc boku a= "; cin >> y; cout << "Podaj wysokosc trojkata= "; cin >> h; cout << "Pole powierzchni trojkata wynosi: " << Trojkat( y, h ) << "\n"; cout << "Objetosc trojkata wynosi: Nie da sie obliczyc objetosci" << "\n"; } break; case 3: { cout << "Wybrales kolo" << endl; cout << "Podaj dlugosc promienia= "; cin >> r; cout << "Pole powierzchni kola wynosi: " << Kolo( r ) << "\n"; cin.clear(); cin.sync(); licznik = 4; mianownik = 3; cout << "Objetosc kola wynosi: " << Ulamki( licznik, mianownik ) * 3.14 * r * r * r << "\n"; } break; case 4: { cout << "Wybrales trapez" << endl; cout << "Podaj dlugosc boku a= "; cin >> k; cout << "Podaj dlugosc boku b= "; cin >> b; cout << "Podaj wysokosc trapezu= "; cin >> o; cout << "Pole powierzchni trapezu wynosi: " << Trapez( k, b, o ) << "\n"; cout << "Objetosc trapezu wynosi: Nie da sie obliczyc objetosci" << "\n"; } break; case 5: { cout << "Wybrales stozek" << endl; cout << "Podaj dlugosc promienia= "; cin >> r; cout << "Podaj wysokosc = "; cin >> h; cout << "Pole powierzchni stozka wynosi: " << Stozek( h, r ) << "\n"; cin.clear(); cin.sync(); licznik = 1; mianownik = 3; cout << "Objetosc stozka wynosi: " << Ulamki( licznik, mianownik ) * 3.14 * r * r * h << "\n"; } break; case 6: { cout << "Wybrales prostokat" << endl; cout << "Podaj dlugosc boku a= "; cin >> a; cout << "Podaj dlugosc boku b= "; cin >> b; cout << "Pole powierzchni prostokata wynosi: " << Prostokat( a, b ) << "\n"; cout << "Objetosc prostokata wynosi: Nie da sie obliczyc objetosci" << "\n"; } break; } system( "PAUSE" ); return 0; }
|
|
przemko06 |
» 2012-11-15 22:54:51 tak racja "kubawal" nie dopisałem. Czy napewno dziala dobrze kod? Wybierz numer figury z poza menu czyli np 8, 20 ,1000 albo co innego to ok, ponownie program pyta o wybranie figury a wpisz np 7 i zobacz co sie stanie ;) I tak samo masz nie zabezpieczony kod przed podaniem jakiegoś znaku czy litery :P |
|
kynol Temat założony przez niniejszego użytkownika |
» 2012-11-15 23:11:29 Wlasnie wiem o tym 7.. Moze wskazowka jak moge naprawic by po wpisaniu liczby 7 petla dalej sie zapetlala? Co do zabezpieczenia liter to zaraz zrobie:) Daje przerobiony kod. Zabezpieczony na litery i znaki lecz nadal nie wiem jak naprawic ta 7 #include <cstdlib> #include <iostream>
using namespace std;
double Kolo( double r ) { double n = 3.14 * r * r; return n; }
double Szescian( double a ) { double x = 6 * a * a; return x; }
int Trojkat( int y, int h ) { double w = 0.5 * y * h; return w; }
int Trapez( int k, int b, int o ) { double t =( k + b ) / 2 * o; return t; }
int Stozek( int h, double r ) { double s = 3.14 * r * r * h / 3; return s; }
int Prostokat( int a, int b ) { double p = a * b; return p; }
float Ulamki( float licznik, float mianownik ) { float ulm =( licznik / mianownik ); return ulm; }
int main() { double a, y, h, r, k, b, o; float licznik, mianownik; int f; bool poprawnosc; cout << "\tProgram obliczajacy pole powierzchni i objetosc podannych ponizej figur \n"; cout << "Wybierz figure: \n 1 - Szescian \n 2 - Trojkat \n 3 - Kolo \n 4 - Trapez \n 5 - Stozek \n 6 - Prostokat" << endl; do { cout << "\n\tJesli nie podasz liczby z zakresu 1 - 6, program nie przejdzie dalej!" << endl; cout << "\nWybierasz figure nr: "; cin.clear(); cin.sync(); cin >> f; poprawnosc = cin.good(); if( poprawnosc == true ); } while(( f <= 0 ) ||( f > 7 ) ); switch( f ) { case 1: { cout << "Wybrales szescian" << endl; cout << "Podaj dlugosc bokow a= "; cin >> a; cout << "Pole powierzchni szescianu wynosi: " << Szescian( a ) << "\n"; cout << "Objetosc szecianu wynosi: " << a * a * a << "\n"; } break; case 2: { cout << "Wybrales trojkat" << endl; cout << "Podaj dlugosc boku a= "; cin >> y; cout << "Podaj wysokosc trojkata= "; cin >> h; cout << "Pole powierzchni trojkata wynosi: " << Trojkat( y, h ) << "\n"; cout << "Objetosc trojkata wynosi: Nie da sie obliczyc objetosci" << "\n"; } break; case 3: { cout << "Wybrales kolo" << endl; cout << "Podaj dlugosc promienia= "; cin >> r; cout << "Pole powierzchni kola wynosi: " << Kolo( r ) << "\n"; cin.clear(); cin.sync(); licznik = 4; mianownik = 3; cout << "Objetosc kola wynosi: " << Ulamki( licznik, mianownik ) * 3.14 * r * r * r << "\n"; } break; case 4: { cout << "Wybrales trapez" << endl; cout << "Podaj dlugosc boku a= "; cin >> k; cout << "Podaj dlugosc boku b= "; cin >> b; cout << "Podaj wysokosc trapezu= "; cin >> o; cout << "Pole powierzchni trapezu wynosi: " << Trapez( k, b, o ) << "\n"; cout << "Objetosc trapezu wynosi: Nie da sie obliczyc objetosci" << "\n"; } break; case 5: { cout << "Wybrales stozek" << endl; cout << "Podaj dlugosc promienia= "; cin >> r; cout << "Podaj wysokosc = "; cin >> h; cout << "Pole powierzchni stozka wynosi: " << Stozek( h, r ) << "\n"; cin.clear(); cin.sync(); licznik = 1; mianownik = 3; cout << "Objetosc stozka wynosi: " << Ulamki( licznik, mianownik ) * 3.14 * r * r * h << "\n"; } break; case 6: { cout << "Wybrales prostokat" << endl; cout << "Podaj dlugosc boku a= "; cin >> a; cout << "Podaj dlugosc boku b= "; cin >> b; cout << "Pole powierzchni prostokata wynosi: " << Prostokat( a, b ) << "\n"; cout << "Objetosc prostokata wynosi: Nie da sie obliczyc objetosci" << "\n"; } break; } system( "PAUSE" ); return 0; }
|
|
przemko06 |
» 2012-11-15 23:27:49 to: while(( f <= 0 ) ||( f > 7 ) ); zmien na: while(( f <= 0 ) ||( f >= 7 ) ); |
|
« 1 » 2 |