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

rozdzial 15. Petla do...while. Kalkulator.

Ostatnio zmodyfikowano 2017-02-14 09:09
Autor Wiadomość
cepluspluszeroix
Temat założony przez niniejszego użytkownika
rozdzial 15. Petla do...while. Kalkulator.
» 2017-02-10 01:58:48
Dobry wieczór.
Poległem na tym zadaniu :(

(nie umiem profesjonalnie zacytowac kodu)

C/C++
#include<iostream>
using namespace std;
int main()
{
    int wynik, y, z;
    wynik = 0;
   
    cout << "WITAM W MOIM KALKULATORZE!";
    cout << endl;
    cout << endl;
   
    do
    {
        cout << "aktualny wynik to: " << endl << wynik << endl;
       
        cout << endl;
        cout << endl;
       
        cout << "podaj druga liczbe" << endl;
        cin.clear();
        cin.sync();
        cin >> y;
       
        cout << "wybierz dzialanie:" << endl << "1. Dodawanie" << endl << "2. Odejmowanie" << endl;
        cout << "3. Mnozenie" << endl << "4. Dzielenie" << endl << "5. Rezygnuj" << endl;
        cin.clear();
        cin.sync();
        cin >> z;
       
        switch( z )
        {
        case 1:
            cout << wynik + y;
            wynik = wynik + y;
            cout << endl;
            cout << endl;
            break;
        case 2:
            cout << wynik - y;
            wynik = wynik - y;
            cout << endl;
            cout << endl;
            break;
        case 3:
            cout << wynik * y;
            wynik = wynik * y;
            cout << endl;
            cout << endl;
            break;
        case 4:
            cout << wynik / y;
            wynik = wynik / y;
            cout << endl;
            cout << endl;
        }
    }
    while( y != 0 || z != 5 );
   
    return 0;
}

Nie wiem co zle napisalem.
Prosze o pomoc.

Jeszcze male pytanie:
1. Czy cin.clear(); i cin.sync(); nalezy wpisywac po czy przed cin>>x;
Moglby mi ktos wytlumaczyc jaka jest roznica?

Pozdrawiam
P-157567
mateczek
» 2017-02-10 06:20:09
[cpp]wklejaj kod w znaczniki[/cpp]

while( y != 0 && z != 5 );
P-157568
mateczek
» 2017-02-10 12:03:50
1. Czy cin.clear(); i cin.sync(); nalezy wpisywac po czy przed cin>>x;

jak ci jest potrzebne wyczyszczenie strumienia.

Możesz np tylko wtedy gdy wczytanie danych się niepowiedzie. Ale sytuacje są różne
C/C++
#include<iostream>
using namespace std;

int wczytajLiczbe() {
    int y;
    while( !cin >> y ) {
        //gdy wczytanie się nie powiedzie
        cout << "czyscic strumien można np wtedy gdy jest w bledzie" << endl;
        cin.clear();
        cin.sync();
        cout << "podaj druga liczbe jeszcze raz bo cos skopales" << endl;
    }
    return y;
}

int main()
{
    int y;
    y = wczytajLiczbe();
    cout << "wczytana liczba " << y << endl;
}
P-157570
cepluspluszeroix
Temat założony przez niniejszego użytkownika
» 2017-02-10 12:56:30
O matko, rozumiem...
dla:
while( y != 0 && z != 5 );

jesli jeden falsz, to falsz

a dla:
while( y != 0 || z != 5 );

wszystkie musza sie byc falszem, bo inaczej prawda

Dziekuje :)
Blednie utozsamilem slowo "spelnia sie" z "prawda".
Myslalem na odwrot, ze gdy ||, to nawet przy jednym falszu warunek i tak sie spelnia. No i owszem spelnia sie, ale w tym sensie, ze zwraca prawde, a petla przeciez konczy sie gdy warunek zwraca falsz :)
P-157571
Biskup
Mój kod (uwagi, zastrzeżenia)
» 2017-02-13 15:32:52
C/C++
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    float a, b;
    int c;
    bool porazka;
    float wynik;
   
    do {
        cout << "Podaj liczbe 1:\t";
        cin >> wynik;
        cout << "Czy cos nie tak? " << cin.fail() << endl;
        porazka = cin.fail();
        cin.clear(), cin.sync(); }
   
    while( porazka != 0 );
   
    cout << "Podana liczba 1 to : " << wynik << endl;
   
    do {
        do {
            cout << "Podaj liczbe 2:\t";
            cin >> b;
            cout << "Czy cos nie tak? " << cin.fail() << endl;
            porazka = cin.fail();
            cin.clear(), cin.sync(); }
       
        while( porazka != 0 );
       
        cout << "Podana liczba 2 to : " << b << endl;
        if( b == 0 )
        { cout << "Blad, podane 0.";
            return 0; }
        else
       
        do {
            cout << "Dodawanie [1] Odejmowanie [2] Mnozenie [3] Dzielenie [4] Rezygnuje [5]?\n";
            cin >> c;
            cin.clear(), cin.sync();
            cout << endl; }
       
        while( c <= 0 || c >= 6 );
       
        switch( c ) {
        case 1:
            wynik += b;
            cout << "Dodawanie=" << wynik << endl;
            break;
        case 2:
            wynik -= b;
            cout << "Odejmowanie=" << wynik << endl;
            break;
        case 3:
            wynik *= b;
            cout << "Mnozenie=" << wynik << endl;
            break;
        case 4:
            wynik /= b;
            cout << "Dzielenie=" << wynik << endl;
            break;
        case 5:
            cout << "Rezygnuje" << endl;
            break;
        } } while( b != 0 );
   
    return 0;
}
Witam. Podepnę się pod post kolegi, nie będę robił za dużego śmietnika na forum. Wyżej jest taki tam mój tworek potworek. Testowałem go kilka razy i wydaje mi się, że spełnia wszystkie kryteria zadanka. Niemniej będę wdzięczny za wszelkie słowa krytyki i uwagi. Na pewno coś przeoczyłem, ominąłem, czegoś nie zauważyłem. A jeśli wszystko działa to chętnie przyjmę jakieś uwagi na przyszłość. Czego się wystrzegać przy pisaniu, na co zwracać uwagę. Pozdrawiam.
PS Chciałem też ten kalkulator rozszerzyć o opcję wyboru sposobu dzielenia (a/b czy b/a) jednak o ile udawało mi się to zrobić IFem to kiedy próbowałem zabezpieczyć to tak jak resztę zmiennych to za kijek nie mogłem dojść do kodu bez errorów. Będę wdzięczny za jakieś naprowadzenie, może źle się za to zabieram. Nie chcę gotowego kodu, w końcu po coś się uczę. Nie mam też swojego, ponieważ przypadkowo nadpisałem go tym obecnym kodem.
P-157658
latajacaryba
» 2017-02-13 18:29:45
@up
Nie chcę prawić morałów, ale nie podpinaj się tak pod czyjeś tematy :/
Bo później okazuje się, że problem autora jest spychany na drugi plan. Uwierz mi, nie ma problemu jeśli założysz nowy temat.
Co do kodu to nie wgłębiałem sie (trochę brak czasu) ale co mi się rzuca w oczy to za dużo pętli(niepotrzebnych), np:

C/C++
do {
    cout << "Dodawanie [1] Odejmowanie [2] Mnozenie [3] Dzielenie [4] Rezygnuje [5]?\n";
    cin >> c;
    cin.clear(), cin.sync();
    cout << endl; }

Usuń pętle pętle i wstaw case'a default. Takie coś oznacza jak gdyby "w przeciwnym wypadku"
C/C++
cout << "wybierz z menu: 1. sniadanie        2. obiad         3. kolacja"
cin >> jesc;
switch( jesc )
{
case 1:
    //...
case 2:
    //...
case 3:
    //...
default:
    cout << "zly wybor! wpisano liczbe inna niz 1, 2 lub 3"
}
P-157671
Biskup
» 2017-02-14 09:09:38
OK, przepraszam, zrobię własny temat. Ignorujcie proszę mój post tutaj i skupcie się na autorze. Tego nie było. Dzięki ryba za komentarz.
P-157690
« 1 »
  Strona 1 z 1