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

Praca domowa rozdział 15

Ostatnio zmodyfikowano 2016-11-22 13:06
Autor Wiadomość
kirito1996
» 2016-09-11 18:03:43
tak jeszcze z ciekawości bo się patrze na ten poprawiony kod i nie daje mi spać po nocach to
cin.sync(); i cin.clear()
 to wystarczy raz w kodzie napisać i działa na cały program ?
heh teraz ja mam problem z tym zadaniem ;) mój kod:
C/C++
#include <cstdio>
#include <iostream>
using namespace std;

int main()
{
    int wynik = 0;
    float a;
    float b;
    int c;
    bool sukces;
   
    do
    {
       
       
        cout << "obecny wynik to = " << wynik << endl;
        cin.clear();
        cin.sync();
       
        cout << "Podaj liczbe pierwsza = ";
        cin >> a;
        sukces = cin.good();
       
        if( a != 0 )
        {
            cout << "podaj liczbe druga = ";
            cin >> b;
        }
        else
             return 0;
       
        if( b != 0 && a != 0 )
        {
            cout << " [1] Dodawania \n [2] Odejmowanie \n [3] mnozenie \n [4] dzielenie \n [5] rezygnuj \n";
            cin >> c;
            switch( c )
            {
            case 1:
                wynik = a + b;
                cout << a << " + " << b << " = " << wynik << endl;
                break;
            case 2:
                wynik = a - b;
                cout << a << " - " << b << " = " << wynik << endl;
                break;
            case 3:
                wynik = a * b;
                cout << a << " * " << b << " = " << wynik << endl;
                break;
            case 4:
                wynik = a / b;
                cout << a << " / " << b << " = " << wynik << endl;
                break;
            case 5:
                return 0;
                break;
               
            default:
                cout << "nie poprawny wybor \n";
            }
        }
        else
             return 0;
       
    } while( c != 5 || sukces == 0 );
   
    return 0;
}
problem jest wtedy gdy zamiast liczby wpisuje literę program po takiej czynności zamyka się a ja chcę żeby zapytał jeszcze raz o liczbę, zrobiłem pierwszą część zadania i w taki sam sposób chciałem zrobić to tutaj ale coś program nie chce mnie słuchać :(

okej mam to sorki za spam
C/C++
do
{
    cout << "Podaj liczbe pierwsza = ";
    cin >> a;
    sukces = cin.good();
    cin.clear();
    cin.sync();
} while( sukces == 0 )
 rozwiązanie
P-151670
carlosmay
» 2016-09-11 19:27:17
nie daje mi spać po nocach
Żeby nie wpędzać cię w uciążliwe schorzenia związane z bezsennością odpowiadam na pytanie
cin.sync(); i cin.clear()
 używamy we wszystkich miejscach, gdzie jest potrzebne.

Zabezpieczenie przed wpisywaniem liter
P-151671
bobby.hl
kalkulator
» 2016-09-14 23:14:42
Witam,

proszę o zerknięcie na kod i powiedzenie mi dlaczego po wpisaniu "0" jako którąś z liczb program nie wyłącza się ???
Gdzie jest błąd? Poza tym wszystko mi działa, ale czy mógłby wypowiedzieć się któryś z moderatorów czy tak miał docelowo dzialac ten kalkulator?

Z góry dzięki.

#include <iostream>
using namespace std;
int main()

{
    int a;
    int b;
    int wynik = 0;
    int dzialanie;
    bool ok;

    do
    {
    cout << "Wynik: " << wynik << endl;
    cout << "Podaj liczbe: ";
    cin >> a;
    ok = cin.good();
    cin.clear();
    cin.sync();

    if( ok == 0 )
    do
    {
        cout << "Podaj poprawna liczbe: ";
        cin >> a;
        ok = cin.good();
        cin.clear();
        cin.sync();
    }while( ok == 0 );

    cout << "Podaj druga liczbe: ";
    cin >> b;
    ok = cin.good();
    cin.clear();
    cin.sync();

    if( ok == 0 )
    do
    {
        cout << "Podaj poprawna liczbe: ";
        cin >> b;
        ok = cin.good();
        cin.clear();
        cin.sync();
    }while( ok == 0 );

    cout << "Wybierz dzialanie:" << endl;
    cout << "[1] Dodawanie" << endl;
    cout << "[2] Odejmowanie" << endl;
    cout << "[3] Mnożenie" << endl;
    cout << "[4] Dzielenie" << endl;
    cin >> dzialanie;
    ok = cin.good();
    cin.clear();
    cin.sync();
    if( ok == 0 || dzialanie < 1 || dzialanie > 4 )
    do
    {
        cout << "Bledne dzialanie, wybierz ponownie!" << endl;
        cout << "[1] Dodawanie" << endl;
        cout << "[2] Odejmowanie" << endl;
        cout << "[3] Mnozenie" << endl;
        cout << "[4] Dzielenie" << endl;
        cin >> dzialanie;
        ok = cin.good();
        cin.clear();
        cin.sync();
    } while( ok == 0 || dzialanie < 1 || dzialanie > 4 );

    switch( dzialanie )
    {
    case 1:
        wynik = a+b;
        break;
    case 2:
        wynik = a-b;
        break;
    case 3:
        wynik = a*b;
        break;
    case 4:
        wynik = a/b;
        break;
    }
        }while( a != 0 && b != 0 );

return 0;
}
P-151730
Micek
ocena pracy domowej
» 2016-11-01 20:47:48
Cześć, napisałem kalkulator i zastanawiam się czy mogę przejść dalej tzn. czy praca domowa zalicznona ?

#include <iostream>
using namespace std;
int main ()
{
    int wynik, liczba, cyfra;
    wynik = 0;
    cout << " Podaj liczbe " << endl;
    cin >> liczba;
    if(!(cin.good()))
      return 0;
    cin.clear();
    cin.sync();

    if(liczba!=0&&cin.good())
   {
        cout<< " obecny wynik to: " << wynik << endl;
        cout<< " Wybierz dzialanie "<< endl;
        cout<< " [1] dodawanie\n [2] odejmownie\n [3] mnozenie\n [4] dzielenie\n [5] rezygnuj" << endl;
        cin>> cyfra;
        cin.clear();
        cin.sync();
        if (cyfra!=0)
        switch (cyfra)
        {
          case 1:
          cout<< "obecny wynik:"<<liczba+liczba<<endl;
          break;
          case 2:
          cout<<"obecny wynik:"<<liczba-liczba<<endl;
          break;
          case 3:
          cout<<"obecny wynik:"<<liczba*liczba<<endl;
          break;
          case 4:
          cout<<"obecny wynik:"<<liczba/liczba<<endl;
          break;
          case 5:
          return 0;
          break;
          default:
         return 0;
        }else
            return 0;
   }
   return 0;


}

PS Jak ładnie wstawić widok z CodeBlocks tak jak koledzy wyżej ?
P-153211
carlosmay
» 2016-11-01 21:42:33
PS Jak ładnie wstawić widok z CodeBlocks tak jak koledzy wyżej ?
@Micek Załóż nowy temat i przeczytaj czerwoną ramkę pod pierwszym postem.

czy praca domowa zalicznona ?
Zawsze coś można ulepszyć. Jeśli jednak działa wg oczekiwań, to jest OK.
Poprawianie rozwiązań przyjdzie z doświadczeniem.
P-153221
Dither
zadanie 15 - wczytanie danych
» 2016-11-20 19:06:28
C/C++
#include <iostream>
using namespace std;
//kalkulator: 2 liczby i wybor +-*/0 wszystko w petli
int main()
{
    char wybor;
    float a, b;
   
    do
    {
        cout << "Podaj liczby a i b: ";
       
        do
        {
           
            cin.clear();
            cin.sync();
            cout << endl << "a = ";
            cin >> a;
            if( a = 0 ) //TO MIEJSCE!!
            {
                cout << "wyjscie " << endl;
                return 0;
            }
        } while( cin.fail() );
       
        do
        {
            cin.clear();
            cin.sync();
            cout << endl << "b = ";
            cin >> b;
            if( b == 0 ) //TO MIEJSCE!!
            {
                cout << "wyjscie " << endl;
                return 0;
            }
           
        } while( cin.fail() );
       
        cout << endl << "wybierz dzialanie [+ - * / 0] ";
        cin >> wybor;
        cout << endl << endl;
       
        switch( wybor )
        {
        case '0':
            cout << "wyjscie " << endl;
            break;
        case '+':
            cout << "suma= " << a + b << endl;
            break;
        case '-':
            cout << "roznica= " << a - b << endl;
            break;
        case '*':
            cout << "iloczyn= " << a * b << endl;
            break;
        case '/':
            {
                if( b != 0 )
                     cout << "iloraz= " << a / b << endl;
                else
                     cout << "dzielenie przez zero!" << endl;
               
                break;
            }
            default:
            cout << "nie wybrales dzialania [+ - * / 0]" << endl;
            break; }
       
    } while( a != 0 && b != 0 && wybor != '0' );
   
    return 0;
}

w tym kodzie chcę mieć taki efekt:
1. przy wpisaniu zmiennej a = "liczba rzeczywista" program przechodzi do realizacji dalszej części kodu
2. przy wpisaniu zmiennej a = 0 program przerywa działanie
3. przy wpisaniu zmiennej a = "błedna wartość np. litera" program powtarza zapytanie o zmienną a.
4. taki sam cykl jeśli chodzi o zmienną b.

próbuję to zrealizować warunkami if() : ale jak wpiszę w miejscu zaznaczonym komentarzem "if (a=0)" to program realizuje pętlę "while( cin.fail())" przy błędnych danych (np literach) ale nie przerywa programu dla wpisanego a=0.
przy if (a==0) program przerywa działanie dla a=0 i przerywa działanie dla a=błędne dane (np litery), więc albo-albo. jak sobie z tym poradzić, żeby spełnić pk-ty 1-4?
P-153980
karambaHZP
» 2016-11-20 19:14:26
C/C++
if( a = 0 ) //TO MIEJSCE!!
operator przypisania
=
.
operator porównania
==
.
P-153981
Dither
» 2016-11-21 17:46:09
już sobie dałem radę if (a==0) trzeba było wyrzucić poza pierwszą pętlę do.. while, oto poprawiony kod:
C/C++
#include <iostream>
using namespace std;
//kalkulator: 2 liczby i wybor +-*/0 wszystko w petli
int main()
{
    char wybor;
    float a, b;
   
    do
    {
        cout << "Podaj liczby a i b: ";
       
        do
        {
           
            cin.clear();
            cin.sync();
            cout << endl << "a = ";
            cin >> a;
           
        } while( cin.fail() );
       
        if( a == 0 )
        {
            cout << "wyjscie " << endl;
            return 0;
        }
       
        do
        {
            cin.clear();
            cin.sync();
            cout << endl << "b = ";
            cin >> b;
        } while( cin.fail() );
       
        if( b == 0 )
        {
            cout << "wyjscie " << endl;
            return 0;
        }
       
        cout << endl << "a= " << a << " b= " << b << endl;
        cout << endl << "wybierz dzialanie [+ - * / 0] ";
        cin >> wybor;
        cout << endl << endl;
       
        switch( wybor )
        {
        case '0':
            cout << "wyjscie " << endl;
            break;
        case '+':
            cout << "suma= " << a + b << endl;
            break;
        case '-':
            cout << "roznica= " << a - b << endl;
            break;
        case '*':
            cout << "iloczyn= " << a * b << endl;
            break;
        case '/':
            {
                if( b != 0 )
                     cout << "iloraz= " << a / b << endl;
                else
                     cout << "dzielenie przez zero!" << endl;
               
                break;
            }
            default:
            cout << "nie wybrales dzialania [+ - * / 0]" << endl;
            break; }
       
    } while( wybor != '0' );
   
    return 0;
}
P-153989
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona