• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] Kilka pytań dot. programu,

Object Storage Arubacloud
0 głosów
182 wizyt
pytanie zadane 2 lipca 2017 w C i C++ przez electrxx Nowicjusz (120 p.)

Witam! Dopiero zaczynam programować w C++ podążając tym kursem w internecie. Chciałem sobie napisać sam taki programik "bankomat", żeby zobaczyć, czego się do tej pory nauczyłem. Poniżej podany kod działa, jednak dopiero po kilkudziesięciu minutach główkowania, a jednak dalej czegoś nie rozumiem.

#include <iostream>
#include <windows.h>
#include <cstdlib>

using namespace std;

int PIN;
int stan = 20000;
int x;
int y;
string imie;
string decyzja;


int main()
{


    cout << "Witamy w naszym banku!" << endl;
    Sleep(1500);
    cout << "Podaj imie:" << endl;
    cin >> imie;
    cout << "Podaj PIN:" << endl;
    cin >> PIN;

    if(PIN==4512) {
        cout << "Podano prawidlowy PIN!"<<endl;
        Sleep(2000);
        system("cls");
        cout << "Witaj "<< imie<< "!"<<endl;
        Sleep(1700);
        cout << "Czy chcesz wyplacic jakas kwote?"<< endl<< "Wpisz: TAK/NIE"<< endl;
        cin >> decyzja;
              y = stan - x;
    if((decyzja=="TAK")||(decyzja=="tak")||(decyzja=="Tak")) {
        system("cls");
        cout << "Stan twojego konta wynosi: " << y<<" zl."<< endl;
        Sleep(2000);
        cout << "Jaka sume pieniedzy chcesz wyplacic?:"<< endl;
        cin >> x;
               y = stan - x;
            if((stan<x)||(x<=0)){
        system("cls");
        cout << "Nie mozna wyplacic takiej kwoty!"<<endl;
        Sleep(2000);
        cout << "Na serio? Chciales oszukac bankomat? Zalosne."<<endl;
        Sleep(2000);
        cout << "Nastepuje terminacja programu."<<endl;
        Sleep(3000);

            } else if (stan>=x) {
        cout << "Zaczekaj.. Trwa drukowanie banknotow..."<<endl;
        Sleep(2500);
        system("cls");
        cout << "Sukces! Pomyslnie wyplacono "<< x <<" zl."<<endl;
        Sleep(3000);
        cout << "Stan twojego konta wynosi teraz: " << y<< " zl."<<endl;
        Sleep(3000);
        system("cls");
        cout << "Mamy nadzieje, ze jestes zadowolony z uslug naszego banku! "<<endl;
        Sleep(2500);
        system("cls");
        cout << "Gotowka zostala wyplacona. Za 5 sekund nastapi terminacja programu. "<<endl;
        Sleep(2500);
             for(int a=5; a>=0; a--) {
        Sleep(1000);
        system("cls");
        cout << a<<endl;
             }
        system("cls");
        cout << "Dziekujemy za skorzystanie z uslug naszego banku!"<<endl;
        Sleep(1500);
        cout << "Mozesz juz usunac karte ze slotu."<<endl;
        Sleep(3500);
        cout << "Zapraszamy ponownie!"<<endl;
        Sleep(2500);
        return 0;


            }

    }else if((decyzja=="NIE")||(decyzja=="nie")||(decyzja=="Nie")) {
        system("cls");
        cout << "Konto nie zostalo obciazone."<<endl;
        Sleep(3000);
        cout << "Stan twojego konta wynosi: " << y<<" zl."<< endl;
        Sleep(3000);
        cout << "Anulowales wyplate. Za 5 sekund nastapi terminacja programu.";
        Sleep (3000);
        for(int i=5; i>=0; i--) {
        Sleep(1000);
        system("cls");
        cout << i<<endl;
        }
        system("cls");
        cout << "Dziekujemy za skorzystanie z uslug naszego banku!"<<endl;
        Sleep(1500);
        cout << "Mozesz juz usunac karte ze slotu."<<endl;
        Sleep(3500);
        cout << "Zapraszamy ponownie!"<<endl;
        Sleep(2500);
        return 0;

    } else {
        system("cls");
        cout << "Nie rozpoznano komendy! Zaraz nastapi terminacja programu."<<endl;
        Sleep(2700);
    }

    }else{
        system("cls");
        cout << "Pin jest nieprawidlowy! Nastapi teraz terminacja programu."<< endl;
        Sleep(1500);
        cout << "Zapraszamy ponownie!"<< endl;
    }

    return 0;
}

Podane na dole punkty to moje przypuszczenia i prosiłbym o waszą korektę, jeżeli są błędne.

1. Przez cały czas myślałem, że jeżeli napiszę: y = stan - x;  pod "int main()" to będzie to zmienną globalną, która działa na cały plik. Później przekonałem się, że działa bezpośrednio tylko pod danym ifem tylko do jego końca. 
2. Jeżeli zapisywane na samej górze zmienne z przedrostkiem "int" działają w całym pliku, to dlaczego po zdefiniowaniu int y = stan - x; działał on połowicznie i tylko pokazywał stan konta, ale nie odejmował wartości x po jej wprowadzeniu? (Gdy wpisywałem wartość x (cin >> x;), to zaraz po tym wyświetlało mi niezmieniony stan bankowy, czyli 20k, ale nie odejmowało wartości x - Próbowałem deklarować to nawet w nawiasie, jako int y = (stan - x), ale to też nic nie dało. Pomogło dopiero, jak widzicie: int y; i pod każdym ifem, który miał do czynienia ze "stanem" zadelkarowanie go jako y = stan - x; - Tak powinno być, czy ja zrobiłem coś źle?
3. I ostatnia rzecz, której nie rozumiem. Skoro zmienna y, to "stan - x," to dlaczego kiedy w miejsce "if((stan<x)||(x<=0)" albo else if "(stan>=x)" - kontynuując. Kiedy w miejsce zmiennej "stan", dam "y", to wszystko działa idealnie, tylko max. wartość, jaką mogę wypłacić to 10k, kiedy wartość "stan" jest równa 20k, a żeby wypłacić to x ma być od "stanu" mniejszy bądź równy. - Tak zdeklarowałem w ifie. Mogę wypłacać do 10k, czyli do połowy tej wartości, później już nie. Ogólnie, każda wartość zadeklarowana w "stanie" skraca się w tym przypadku wtedy o połowę. - To jakoś ze sobą koliduje, czy jak?

I to nie jest tak, że w ogóle się nad tym nie zastanawiałem. Zastanawiałem się.. Długo.


PS; Nie zwracajcie uwagi na wartość merytoryczną cout'ów.

Jeżeli są jakieś nieścisłości (a pewnie są), to piszcie. Bardzo zależy mi, żeby to zrozumieć.

Jeżeli temat łamie regulamin ze wględu na większą ilość "problemów", niż tylko jeden, to proszę go usunąć, ale niemniej jednak wolałem spróbować tutaj napisać.

1 odpowiedź

0 głosów
odpowiedź 2 lipca 2017 przez L33TT12 Gaduła (3,950 p.)

1. Chyba nie rozumiem pytania

2. Chyba też nie do końca rozumiem, ale jak odejmujesz od stanu wartość x, to niech ten x jakąś wartość posiada czyli odejmuj dopiero po std::cin >> x

3. A czemu chcesz tam dać w ogóle y? Załóżmy stan to 20k, chcesz wypłacić 12k, więc y = 20k - 12k = 8k, i jak tam zamiast stanu dasz y to będzie jeśli 8k jest mniejsze od wypłacanej kwoty czyli 12k.

I jak używasz już takiego porównania

if((decyzja=="TAK")||(decyzja=="tak")||(decyzja=="Tak"))

to nie porównuj z każdym możliwym sposobem, tylko zamiast tego zamień decyzje na małe litery i porównaj to z "tak"

Podobne pytania

0 głosów
1 odpowiedź 444 wizyt
0 głosów
1 odpowiedź 381 wizyt
pytanie zadane 16 maja 2019 w PHP przez `Krzychuu Stary wyjadacz (13,940 p.)
+1 głos
1 odpowiedź 516 wizyt

92,568 zapytań

141,420 odpowiedzi

319,624 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...