Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Błędny warunek w pętli do...while

Ostatnio zmodyfikowano 2012-11-20 19:46
Autor Wiadomość
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:

C/C++
#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;
}
P-69278
kynol
Temat założony przez niniejszego użytkownika
» 2012-11-14 23:25:55
refresh
P-69282
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.
P-69298
kubawal
» 2012-11-15 19:55:14
C/C++
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:
C/C++
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);

P-69334
kynol
Temat założony przez niniejszego użytkownika
» 2012-11-15 22:37:48
Problem rozwiazany. Doszedlem juz sam. Podaje poprawny kod:

C/C++
#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;
}
P-69349
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
P-69350
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
C/C++
#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;
}
P-69351
przemko06
» 2012-11-15 23:27:49
to:
while(( f <= 0 ) ||( f > 7 ) );


zmien na:
while(( f <= 0 ) ||( f >= 7 ) );
P-69352
« 1 » 2
  Strona 1 z 2 Następna strona