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

Pętla while, znak logiczny "i" oraz "lub"

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
1,015 wizyt
pytanie zadane 26 marca 2016 w C i C++ przez frycek Nowicjusz (120 p.)
Jest to moj pierwszy program. Nie dziala on tak jak tego oczekuje. Chcialbym zeby bylo tak: jeśli imie jest poprawne i PIN jest nie poprawny(i na odwrot) to zeby nastepila kolejna proba logowania(u mnie nastepuje zakonczenie programu). Nie wiem dlaczego u mnie dziala to prawidlowo jedynie gdy PIN i imie sa nieprawidlowe. Ciekawe jest to dlaczego gdy zamiast "&&" dam "||" program dziala tak jak tego oczekuje. Czy moglby mi ktos wyjasnic gdzie robie błąd?

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

using namespace std;

string imie;
int PIN;

int main()
{
    cout<<"podaj imie:";
    cin>>imie;
    cout<<"podaj PIN:";
    cin>>PIN;

        while((PIN!=1234)&&(imie!="tom"))
        {
            cout<<"zle imie lub haslo"<<endl;
            cout<<"podaj imie:";
            cin>>imie;
            cout<<"podaj PIN:";
            cin>>PIN;
        }

        cout<<"jestes zalogowany";

    return 0;
}

​

5 odpowiedzi

+1 głos
odpowiedź 26 marca 2016 przez JKluseczka Obywatel (1,430 p.)

 No bo tak to masz "jeżeli PIN i imię jest nieprawidłowe to...", a jak dasz || to masz "jeżeli PIN lub imię jest nieprawidłowe to...". Można też dać "while(!((PIN==1234)&&(imie=="tom")))".

+1 głos
odpowiedź 27 marca 2016 przez PLPOLAND Nowicjusz (240 p.)

W podanym programie pętla wykonuje się tylko w tedy gdy pin różny jest od 1234 imię jest różne od tom, a pętla while wykonuje się do momentu aż warunek jest prawdziwy. Więc albo zamienisz && na || albo != na ==.

0 głosów
odpowiedź 26 marca 2016 przez niezalogowany
zamiast logicznego i (&&) zrób logiczne lub (||) znasz tabele prawd dla tych bramek logicznych??
komentarz 26 marca 2016 przez frycek Nowicjusz (120 p.)
edycja 26 marca 2016 przez frycek
a to nie jest tak ze jesli imie jest prawidlowe i login jest nie prawidlowy to daje nie spelnienie warunku i nastepuje powtorzenie? ja to tak przynajmniej rozumie
komentarz 26 marca 2016 przez frycek Nowicjusz (120 p.)
aa juz wiem, zamiat != powinienem dac==
komentarz 26 marca 2016 przez niezalogowany
rozpiszę Ci tabelę prawd

tabela prawd dla &&

prawda,prawda = prawda
prawda,fałsz=fałsz
fałsz,prawda=fałsz
fałsz,fałsz=fałsz

tabela prawd dla ||

prawda,prawda=prawda
prawda,fałsz=prawda
fałsz,prawda=prawda
fałsz,fałsz=fałsz

a teraz rozpiszę Ci twój warunek

(PIN!=1234)&&(imie!="tom")

załóżmy że pin jest ok ale imię nie

pin!=1234 da Ci fałsz (pomyśl sam czemu)
imie!="tom" da Ci prawdę

fałsz&&prawda=fałsz czyli 0 czyli pętla się nie wykona
komentarz 26 marca 2016 przez frycek Nowicjusz (120 p.)

a dlaczego "pin!=1234" da mi fałsz?

komentarz 26 marca 2016 przez niezalogowany
dla przypadku że jest pin jest równy 1234 sprawdzamy czy jest różny od tej wartości... kurde mój błąd przepraszam bardzo
komentarz 26 marca 2016 przez frycek Nowicjusz (120 p.)
dzieki wielkie, chyba w koncu zrozumialem dzialanie petli while
0 głosów
odpowiedź 26 marca 2016 przez Boshi VIP (100,240 p.)

bo znak  ||  oraz && to dwa różne wyrażenia logiczne?
 Teraz masz jeżeli PIN nie jest równy 1234  oraz imie nie jest równe tom wykonuj pętlę, więc żeby pętla się wykonywała w nieskończoność musisz podawać imię inne od tom i pin inny od 1234

0 głosów
odpowiedź 27 marca 2016 przez Shiba Obywatel (1,420 p.)

&& - i ( Co oznacza, że oba argumenty muszą być spełnione aby logowanie się udało )

Czyli [ while ( ( PIN !="1234") && (imie!="tom") )

|| - lub ( Co oznacza, że tylko jeden warunek musi być spełniony by się zalogować )

Czyli [ while ( ( PIN!="1234") || (imie!="tom") )

Moja koncepcja tego programu:

 

#include <iostream>
#include<cstdlib>
#include <string> // Czasem bez tego sie nie obejdziesz uzywajac stringow
#include <windows.h>

using namespace std;

string imie;
string PIN; // W string bo jesli haslo bedzie zaczynac sie od 0 to komputer je automatycznie utnie


int main()
{
    cout << "Witaj w naszym banku by sie zalogowac:" << endl;
    while( (PIN!="1234") && (imie!="tom") ) // PIN w "" poniewaz jest w stringu
    {
        cout << "Podaj imie: ";
        cin >> imie;
        cout << "Podaj PIN: ";
        cin >> PIN;

        if( (PIN!="1234") && (imie!="tom") )
        {
            cout << "Zle imie lub Haslo, sprobuj jeszcze raz..." <<  endl;
        }
        else
        {
            cout << "\nLogowanie sie powiodlo" << endl;
            cout << "\nWitaj TOM" << endl;
        }
        system("pause");
        system("cls");
    }
return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 735 wizyt
pytanie zadane 25 marca 2020 w C i C++ przez Ola_00 Nowicjusz (210 p.)
0 głosów
4 odpowiedzi 1,052 wizyt
+1 głos
2 odpowiedzi 619 wizyt
pytanie zadane 22 maja 2023 w C i C++ przez Igor4567 Nowicjusz (170 p.)

93,439 zapytań

142,431 odpowiedzi

322,677 komentarzy

62,802 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

...