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

Poprawa programu, który jest zapetlony

Ostatnio zmodyfikowano 2015-11-28 19:39
Autor Wiadomość
razenas
Temat założony przez niniejszego użytkownika
Poprawa programu, który jest zapetlony
» 2015-11-28 17:52:42
Witam napisałem sobie program testowy, który miał byc dla mnie podstawa do zrobienia innego.
Ogolnie oba programy miały dzialac tak, że:
 podaje sie mu dwie liczby, potem wybiera pomiedzy mozliwymi dzialaniami, a na koncu mamy mozliwosci: Kontynuowania obliczen z naszym wynikiem  /  podania nowych liczb lub zakonczenia pracy programu


W przypadku pierwszej opcji z ostatnich, czyli kontunuwania dodalem sobie zmienna znikanie, jesli wybiore opcje kontynuowania to znikanie=1, a jesli znikanie jest rowne 1, to z automatu nie pojawia sie wpisywanie pierwszej liczby(x) i przypisuje dla niej wartosc wyniku, co widac w programie
ale to nie jest wazne dla tego tematu

W podobny sposob elminuje opcje "Kontunuj liczenie" jesli ktos nie wybierze ani odejmowania ani dodwania np zamiast 1 lub 2 kliknie 9.

A tak ogolnie chodzi o to, ze jestem poczatkujacy, moze ktos zna inny ciekawszy sposob na prezentacje czegos takiego ? :)
Program dziala i mimo wszystko jestem z niego zadowolony :D
[EDIT] Jedyne co bym zmienil to troche bardziej uporzadkowal kod zeby byl czytelniejszy nawet w tej wersji
C/C++
#include <iostream> //niekoniecznie wszystkich uzylem w tym przykladzie
#include <cmath>
#include <cstdlib>
#include <iomanip>
#include <cstdio>
#include <conio.h>

using namespace std;
int b = 1; //pozwala prawidlowo pytac "Co dalej" czyli nie wyswietla wszystkich opcji chociaz wszystkie działaja
double x, y, wynik, znikanie = - 1; //znikanie potrzebne do kontynuowania liczenia na poprzednim wyniku, usuwa dodawanie pierwszej liczby
char co; //wybierasz "CO" chcesz robic,czyli dodawac lub odejmowac

int main()
{
    for( int wybor;; )
    {
        if( znikanie != 1 )
        {
            cout << "podaj pierwsza liczbe(x):" << endl;
            cout << "x = ";
            cin >> x;
        }
        if( znikanie == 1 )
             cout << "x = " << x << endl;
       
        cout << "podaj druga liczbe(y):" << endl;
        cout << "y = ";
        znikanie = 0;
        cin >> y;
       
        cout << "Kliknij 1, jesli chcesz dodawac, lub 2 jesli chcesz odejmowac" << endl;
        co = getch();
        switch( co )
        {
        case '1':
            {
                wynik = x + y;
                cout << "Suma = " << wynik;
                b = 0;
            } break;
        case '2':
            {
                wynik = x - y;
                cout << "Roznica = " << wynik;
                b = 0;
            } break;
            default:
            {
                cout << "Kliknales zla liczbe";
                b = 1; //TUTAJ PROBLEM
            }
        }
        cout << "\n\nCo dalej?" << endl;
        if( b == 0 )
        {
            cout << "1 - Licze dalej" << endl;
        }
        cout << "2 - Nowe liczby/Zaczynam od nowa" << endl;
        cout << "3 - Koniec" << endl;
        wybor = getch();
        if( b == 0 )
        {
            switch( wybor )
            {
            case '1': // tutaj znikanie
                {
                   
                   
                    /*warunek do "liczenia dalej", usuwa dodawanie pierwszej liczby i przypisuje dla
                    niej wartosc wyniku, ktory wypisuje aby bylo widac czy program dziala dobrze ale mozna to zlikwidowac */
                    system( "cls" );
                    znikanie = 1;
                    x = wynik;
                   
                } break; //case 1
            case '2':
                {
                    system( "cls" );
                    znikanie = 0;
                } break; //case 2
            case '3':
                {
                    exit( 0 );
                    default: exit( 0 );
                } //case3
            } //koniec switch
        }
        else if( b == 1 )
        {
            switch( wybor )
            {
            case '2':
                {
                    system( "cls" );
                    znikanie = 0;
                } break; //case 2
            case '3':
                {
                    exit( 0 );
                }
                default: exit( 0 ); //case3
            } //koniec switch
        }
    } //koniec petli for(obejmuje prawie wszystko)
    system( "pause" );
    return 0;
} //koniec programu


P-141003
Bornegio
» 2015-11-28 18:21:25
1. Zmienne globalne są celowo? Bo jeśli nie to staraj się unikać tego rozwiązania i zadeklaruj je wewnątrz funkcji.
2. Jako głównej pętli nie lepiej byłoby użyć do while? Nie bardzo rozumiem w jakim celu tak zaczarowałeś z tą pętlą krokową.
3. Strasznie zaczarowałeś w tym programie. Nie ma sensu utrudniać sobie życia i prostota jest najlepsza. Samo działanie programu można ograniczyć do ~20 linijek kodu.

Zadeklaruj zmienną x jako 0. Potem pobieraj liczbę x tylko jeśli jest równa 0. Wynik działania nadpisuj w liczbie x. Jeśli chcesz kontynuować, to nie pobiera X, bo jest różne od 0 i z automatu masz tam sumę. Potem pobiera normalnie y i wykonuje działanie. Jak chcesz wykonać od nowa działanie to zmieniasz X z powrotem na 0 i normalnie pobiera tę liczbę pobiera. Bez wielu niepotrzebnych zmiennych i operacji w których się można pogubić.
P-141007
carlosmay
» 2015-11-28 19:20:24
C/C++
for( int wybor;; ) // ==> for (;;) , a 'wybor' ma  smieciowa wartosc i petla for go nie uzywa

C/C++
int b = 1; //pozwala prawidlowo pytac "Co dalej" czyli nie wyswietla wszystkich opcji chociaz wszystkie działaja
double x, y, wynik, znikanie = - 1; //znikanie potrzebne do kontynuowania liczenia na poprzednim wyniku, usuwa dodawanie pierwszej liczby
char co; //wybierasz "CO" chcesz robic,czyli dodawac lub odejmowac 
 No i te zmienne globalne. Po co???

P-141016
razenas
Temat założony przez niniejszego użytkownika
» 2015-11-28 19:39:12
Dzieki za rady :)
zmienny sa globalne, bo na poczatku napisalem sam program liczacy, a dopiero potem dodalem petle i "wybor", a jako ze to tylko test i chodzi glownie o samo dzialanie to nawet nie patrzalem na to co "juz dziala" i nic nie poprawilem, a "b" i "znikanie" pozniej dopisalem z przyzwyczajenia tam gdzie reszte zmiennych :D
P-141019
« 1 »
  Strona 1 z 1