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

Trzykrotne sprawdzenie kodu PIN (if + pętle)

Object Storage Arubacloud
0 głosów
2,506 wizyt
pytanie zadane 20 lipca 2015 w C i C++ przez Decol Użytkownik (560 p.)
Obejrzałem 3 odcinki programowania Pana Mirosława Zelenta dotyczące C++. Rozumiem jak działają funkcje warunkowe (if) oraz pętle (for, while, do...while). Nie potrafię jednak ich połączyć i napisać programu sprawdzającego kod PIN w bankomacie (identycznego jak w odcinku drugim) z możliwością trzykrotnego sprawdzenia PINU, a w razie jego niezgodności "zablokowania karty". Proszę o pomoc.

4 odpowiedzi

+1 głos
odpowiedź 20 lipca 2015 przez Adrian1999 Nałogowiec (34,570 p.)

Hmmm tworzysz zmienną typu int która na początku jest równa 1, za każdym razem gdy hasło jest złe dodajesz do niej 1, w warunku do instrukcji wprowadzenia pinu jest to że ta zmienna ma być >= 1 ew. możesz zrobić 3 próby i dekrementować.

int x=1;
string password;
for(int i=1; i<=3; i++)
{
if(x<=3)
{
instrukcje ...
cin>>password;
if(password == "haslo")
{
instrukcje; tutaj zakończysz pętle czyli ją zerwiesz breakiem zapewne
}
else{
 cout<<"zle haslo";
x++;
}
}
else
cout<<"maksymalna ilosc prob osiagnieta";
}

P.S może być źle pisałem tak bez kompilatora, literówka czy coś. Ale ogólnie powinno działać

komentarz 19 stycznia 2016 przez VitGryfny Użytkownik (620 p.)
Wypróbowałem ten kod i niestety po 3 złej próbie nie prowadzi do "maksymalna ilosc prob osiagnieta" a zamiast tego wyswietla "zle haslo". Logika petli to nie jest prosta sprawa. Mam nadzieje, ze wkrotce to opanuje -_-
+1 głos
odpowiedź 20 lipca 2015 przez krecik1334 Maniak (58,390 p.)
Utworz zmienną typu bool, która będzie zawierać informację czy pin jest dobry i ustaw jej wartość na false. Stwórz pętlę która wykonuje się maksymalnie 3 razy (np. for bardzo łatwo można taką zrobić), za każdym razem wczytuj od użytkownika PIN i sprawdzaj czy zgadza się on z tym który masz w pamięci. Jeśli tak, ustaw zmienną bool na true i przerwij wykonywanie pętli. Po wykonaniu (maksymalnie 3 razy) wczytania od użytkownika PIN'u przechodzisz do dalszej części kodu i wiesz już czy user wpisał dobry czy zły PIN.
+1 głos
odpowiedź 20 lipca 2015 przez Mieszko I Stary wyjadacz (10,980 p.)

Ja to napisałem tak:

#include <iostream>

using namespace std;

int pin[3];
int wlasciwy_pin = 1234;
int bledow = 0;

void sprawdz(int wlasciwy, int a, int b, int c)
{
    if(a == b && b == c && a == c && a==wlasciwy)
    {
        cout<<"Popelniono "<<bledow<<" bledow!"<<endl;
    }
    else if(a==wlasciwy && b==wlasciwy && c!=wlasciwy)
    {
        bledow =1;
        cout<<"Popelniono "<<bledow<<" bledow!"<<endl;
    }
    else if(a==wlasciwy && c==wlasciwy && b!=wlasciwy)
    {
        bledow =1;
        cout<<"Popelniono "<<bledow<<" bledow!"<<endl;
    }
    else if(b==wlasciwy && c==wlasciwy && a!=wlasciwy)
    {
        bledow =1;
        cout<<"Popelniono "<<bledow<<" bledow!"<<endl;
    }
    else if(a!=wlasciwy && b==wlasciwy && c!=wlasciwy)
    {
        bledow = 2;
        cout<<"Popelniono "<<bledow<<" bledy!"<<endl;
    }
    else if(a!=wlasciwy && c==wlasciwy && b!=wlasciwy)
    {
        bledow = 2;
        cout<<"Popelniono "<<bledow<<" bledy!"<<endl;
    }
    else if(a==wlasciwy && b!=wlasciwy && c!=wlasciwy)
    {
        bledow = 2;
        cout<<"Popelniono "<<bledow<<" bledy!"<<endl;
    }
    else
    {
        bledow =3;
        cout<<"Popelniono "<<bledow<<" bledy! Karta zablokowana!"<<endl;
    }
}

int main()
{
    for(int i=0; i<=2; i++)
    {
        cout<<"Podaj pin: ";
        cin>>pin[i];
    }

    sprawdz(wlasciwy_pin, pin[0], pin[1], pin[2]);

    return 0;
}

Kod ten korzysta z tablicy (pin) i z własnej funkcji typu void. Jeśli oglądasz kursy pana Mirosława Zelenta to wkrótce będziesz się o tym uczył. W pętli for program pobiera od użytkownika trzy razy kod pin. Potem jest wywołanie funkcji, która sprawdza, ile razy kto się pomylił.

Pozdrawiam i życzę powodzenia w dalszej nauce C++. Jeśli znasz C++, to potem łatwo możesz przejść na inny język programowania.

0 głosów
odpowiedź 19 stycznia 2016 przez VitGryfny Użytkownik (620 p.)

Pobawiłem sie modyfikację kodu Adrian1999. Myślę, że się udało, i że to stosunkowa prosta i krótka wersja.

#include <iostream>

using namespace std;

int x=1; // Ta zmienna sprawdza ile razy popelniono blad
string PIN;

int main()
{
for(int i=1; i<=3; i++) // Na tym etapie okreslamy ile blednych sprawdzen chcemy dopuscic
{
        cout << "Wprowadz PIN:";
        cin >>PIN;

            if(PIN == "1111") // sprawdzamy czy pin jest zgodny z 1111
            {
            cout << "PIN prawidlowy."; // jesli jest ->
            break; // to przerywamy petle
            }
            else // jesli pin nie jest prawdilowy ->
            {
                x++; // inkrementujemy licznik sprawdzen
                if(x<=3) // sprawdzamy czy licznik sprawdzen jest mniejszy lub rowny 3
                {
                    cout << "PIN niepoprawny" << endl; // jesli nie jest to wyswietlamy informacje ze PIN jest niepoprawny i startujemy petle od nowa
                }
                else
                {
                    cout << "Blokada karty!" << endl; // ta inofrmacja wyswietli sie gdy x (licznik sprawdzen) osiagnie wartosc 4
                }
            }
}
    return 0;
}

 

Podobne pytania

0 głosów
4 odpowiedzi 3,126 wizyt
pytanie zadane 27 lutego 2019 w C i C++ przez de1vee Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 1,771 wizyt
0 głosów
2 odpowiedzi 352 wizyt
pytanie zadane 14 kwietnia 2018 w Java przez Adrian Paź Obywatel (1,270 p.)

92,540 zapytań

141,383 odpowiedzi

319,481 komentarzy

61,928 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!

...