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

Praca domowa do lekcji 15

Ostatnio zmodyfikowano 2015-07-31 17:04
Autor Wiadomość
tusiera
Temat założony przez niniejszego użytkownika
Praca domowa do lekcji 15
» 2015-07-31 00:14:53
Proszę o sprawdzenie pracy domowej do lekcji 15.

C/C++
#include <iostream>
using namespace std;

int main()
{
    int liczba;
    bool wczytano;
    do
    {
       
       
        cout << "Podaj liczbe " << endl;
        cin >> liczba;
        cout << "Czy wpisano prawidlowa liczbe? " << cin.good() << endl;
        wczytano = cin.good();
        cin.clear();
        cin.sync();
       
        if( wczytano == true ) cout << "Twoja liczba to " << liczba << endl;
       
        else cout << "Blad, podaj liczbe " << endl;
       
    }
    while( wczytano != true );
   
   
    return 0;
}
P-135511
carlosmay
» 2015-07-31 07:52:51
Czyszczenie strumienia
C/C++
cin.clear();
cin.sync();
cin >> liczba;
daj przed wprowadzeniem liczby.
Dobry nawyk.
C/C++
if( wczytano == true ) // to samo krócej if(wczytano)

C/C++
while( wczytano != true ); // to samo krócej while(!wczytano);


Jeśli kod działa to praca zrobiona.
P-135515
tusiera
Temat założony przez niniejszego użytkownika
» 2015-07-31 11:43:50
Ok ;) Dziękuję za wskazówki.
P-135519
tusiera
Temat założony przez niniejszego użytkownika
Druga część pracy domowej - kalkulator.
» 2015-07-31 15:05:50
Program się kompiluje, jakieś wskazówki?

C/C++
#include <iostream>
using namespace std;

float a;
float b;
bool wczytano;
bool wczytano1;
bool wczytano2;



void wpisywanie()
{
    cout << "Podaj a " << endl;
    cin >> a;
    wczytano1 = cin.good();
    cin.clear();
    cin.sync();
   
    if( wczytano1 == true )
    {
       
       
        cout << "Podaj b " << endl;
        cin >> b;
        wczytano2 = cin.good();
        cin.clear();
        cin.sync();
       
        if( wczytano2 == true )
        {
            cout << "a+b = " << a + b << endl;
        }
        else cout << "Aby wykonac obliczenia wpisz liczbe" << endl;
       
    }
    else cout << "Aby wykonac obliczenia wpisz liczbe" << endl;
   
}


int main()
{
   
    int liczba;
    bool wczytano;
   
    do
    {
       
        cout << "" << endl;
        cout << "[1] Dodawanie " << endl;
        cout << "[2] Odejmowanie " << endl;
        cout << "[3] Mnozenie " << endl;
        cout << "[4] Dzielenie " << endl;
        cout << "[5] Rezygnuj " << endl;
       
       
        cout << "Wybierz numer zadania, ktore chcesz wykonac " << endl;
        cin >> liczba;
        cout << "Czy wpisano liczbe? " << cin.good() << endl;
        wczytano = cin.good();
        cin.clear();
        cin.sync();
       
        if( wczytano == true && liczba >= 1 && 5 > liczba )
       
        switch( liczba )
       
        {
           
        case 1:
            cout << "Wybrales dodawanie " << endl;
            wpisywanie();
            break;
           
        case 2:
            cout << "Wybrales odejmowanie " << endl;
            cout << "Podaj a " << endl;
            cin >> a;
            wczytano1 = cin.good();
            cin.clear();
            cin.sync();
           
            if( wczytano1 == true )
            {
               
               
                cout << "Podaj b " << endl;
                cin >> b;
                wczytano2 = cin.good();
                cin.clear();
                cin.sync();
               
                if( wczytano2 == true )
                {
                    cout << "a-b = " << a - b << endl;
                }
                else cout << "Aby wykonac obliczenia wpisz liczbe" << endl;
               
            }
            else cout << "Aby wykonac obliczenia wpisz liczbe" << endl;
           
            break;
           
           
        case 3:
            cout << "Wybrales mnozenie " << endl;
            cout << "Podaj a " << endl;
            cin >> a;
            wczytano1 = cin.good();
            cin.clear();
            cin.sync();
           
            if( wczytano1 == true )
            {
               
               
                cout << "Podaj b " << endl;
                cin >> b;
                wczytano2 = cin.good();
                cin.clear();
                cin.sync();
               
                if( wczytano2 == true )
                {
                    cout << "a*b = " << a * b << endl;
                }
                else cout << "Aby wykonac obliczenia wpisz liczbe" << endl;
               
            }
            else cout << "Aby wykonac obliczenia wpisz liczbe" << endl;
           
            break;
           
        case 4:
            cout << "Wybrales dzielenie " << endl;
            cout << "Podaj a " << endl;
            cin >> a;
            wczytano1 = cin.good();
            cin.clear();
            cin.sync();
           
           
            if( wczytano1 == true )
            {
               
               
                cout << "Podaj b " << endl;
                cin >> b;
                wczytano2 = cin.good();
                cin.clear();
                cin.sync();
               
                if( b == 0 ) { cout << "Nie mozna dzielic przez 0! Zacznij od nowa" << endl;
                } else
               
                if( wczytano2 == true )
                {
                    cout << "a/b = " << a / b << endl;
                }
                else cout << "Aby wykonac obliczenia wpisz liczbe" << endl;
               
            }
            else cout << "Aby wykonac obliczenia wpisz liczbe" << endl;
           
            break;
           
        }
       
       
        else if( liczba == 5 ) cout << "koniec programu" << endl;
        else cout << "Aby wykonac obliczenia wpisz liczbe od 1 do 4" << endl;
       
    }
    while( liczba != 5 );
   
   
    return 0;
}
P-135540
carlosmay
» 2015-07-31 15:47:46
Druga część pracy domowej to inny temat.
Jeden temat = jeden problem.

Możesz dużo skrócić ten program.
Masz dwie zmienne wczytano1 i wczytano2. Zapisujesz w nich wartość typu bool.
Jeśli poprawnie wczytano1 jest true.
Tym samym jak wyżej nie musisz porównywać tej zmiennej do true, bo ona sama w sobie jest true.
Jeśli wczytywanie jest niepoprawne to wartość jest false, czyli
C/C++
if( wczytano1 == true ) // if(wczytano1) daje ten sam efekt

Czyszczenie strumienia
C/C++
cin.clear();
cin.sync();
cin >> liczba;
daj przed wprowadzeniem liczby.
Nie musisz pisać dwóch if'ów:
C/C++
// wczytujesz piersza liczbe
wczytano1 = cin.good();
//wczytujesz druga liczbe
wczytano2 = cin.good();

if( wczytano1 && wczytano2 )
{
    //blok do wykonania
}
P-135544
JMII89
» 2015-07-31 16:14:38
Nie musisz robić :
C/C++
bool wczytano = false;
std::cout << "Podaj liczbe : ";
std::cin >> liczba;
wczytano = std::cin.good();

std::cin.clear();
std::cin.sync();

if( wczytano )
{
}

Krócej można zrobić to w pętli while i nie trzeba robić nie potrzebnego ifa i  zmiennej bool.
C/C++
do
{
    std::cout << "Podaj liczbe : ";
    std::cin.clear();
    std::cin.sync();
    std::cin >> liczba;
} while( !std::cin.good() );

P-135548
tusiera
Temat założony przez niniejszego użytkownika
» 2015-07-31 17:04:44
Ok, wykorzystam te informacje przy pisaniu kolejnych programów w kursie, dziękuję i życzę udanego weekendu ;)
P-135550
« 1 »
  Strona 1 z 1