Kłopot z instrukcją if else

0

Witam,

mam za zadanie napisac program, który wyszukuje podaną liczbę x w tablicy i jeśli taka liczba w niej jest, to pokazuje się "1" a jesli jej nie ma to pokazuje się "0". Mam więc taki oto kod:

#include <iostream>
#include <conio.h>

using namespace std;

const zakres = 10;
int x; //szukana
int tab[zakres];

int main()
{
//-------------------------- przykladowe wartosci tablicy --------------------------
tab[0] = 4;
tab[1] = 6;
tab[2] = 2;
tab[3] = 99;
tab[4] = 51;
tab[5] = 66;
tab[6] = 90;
tab[7] = 1;
tab[8] = 0;
tab[9] = 0;
//----------------------------------------------------------------------------------
        cout << "Podaj liczbe jaka chcesz znalezc: ";           cin >> x;

        for (int i=0; i<zakres; i++)
        {
           if (x == tab[i]) //jesli wprowadzona liczba jest rowna wartosci aktualnej tablicy...
           {
             cout << "1";
             break;
           }
           else
           {
             cout << "0";
             break;
           }
        }

getch();
return 0;
}

Problem w tym, że nie wiem czy dobrze umieściłem break'a w instrukcjach warunkowych. Za każdym uruchomieniem programu pojawia się 0 i nie wiem dlaczego.

1

Tobie wyświetli się nie jeden raz 0 lub 1, a tyle razy jak wielka jest tablica. Musisz ustawić jakąś zmienną na true, jeżeli znajdzie i poza pętlą sprawdzić.

1

Przemyśl jeszcze raz tą pętle bo bez breakow działa dobrze czyli modyfikacja kodu:

#include <iostream>
#include <conio.h>
 
using namespace std;
 
int const zakres = 10;
int x; //szukana
int tab[zakres];
 
int main()
{
//-------------------------- przykladowe wartosci tablicy --------------------------
tab[0] = 4;
tab[1] = 6;
tab[2] = 2;
tab[3] = 99;
tab[4] = 51;
tab[5] = 66;
tab[6] = 90;
tab[7] = 1;
tab[8] = 0;
tab[9] = 0;
//----------------------------------------------------------------------------------
        cout << "Podaj liczbe jaka chcesz znalezc: ";           cin >> x;
 
        for (int i=0; i<zakres; i++)
        {
           if (x == tab[i]) //jesli wprowadzona liczba jest rowna wartosci aktualnej tablicy...
           {
             cout << "1";
             
           }
           else
           {
             cout << "0";
           
            
           }
        }
 
getch();
return 0;
} 

No i wynik: przy liczbie 66 wyswietla 0000010000 czyli tam gdzie jeden tam jest tablica numer [5]. Program dziala dobrze bo leci po wszystkich tablicach tylko petla powinna wypisywac np znalazlem liczbe i w tej tabeli lub nie znalazlem. Tak jak ty to robisz to zawsze bedzie problem ponieważ przy breaku zatrzyma sie na 1 tablicy która nie spełni warunku rozumiesz?

0

Dokładnie działa to tak tablica[0] jest 66? Nie ma to wywala 0 i tak az znajdzie 66 stą w wyniku bez breaków masz:

0000010000

0

Tak, wiem. Chodzi mi teraz o breaka - dlaczego nie wychodzi z pętli? Zaraz postaram się zrobić ze zmienną true i false jak doradził xeo545x39

0

Break wychodzi z pętli i dlatego ci wyświetla złe wartości bo jest to w nie właściwy sposób. Zrób sobie z true i false i ma śmigać.

1
xeo545x39 napisał(a):

Musisz ustawić jakąś zmienną na true, jeżeli znajdzie i poza pętlą sprawdzić.
Może rozwinę.

Jeszcze przed wejściem do pętli utwórz zmienną typu bool, nazwijmy ją znaleziono, która nam będzie mówić o tym, czy liczba została znaleziona czy też nie. Wstępnie zainicjuj ją wartością false, domyślnie przyjmiemy, że liczby nie ma w zbiorze. Wewnątrz pętli, jeśli znajdziesz szukaną liczbę to przypisz zmiennej znaleziono wartość true i przerwij pętlę (break).

No i teraz co się stanie? Jeśli szukana liczba znajduje się w tablicy to w końcu pętla na nią trafi i zmienna znaleziono przyjmie wartość true. Jeśli liczby nie w w tablicy to pętla dojdzie do końca, a wartość zmiennej znaleziono się nie zmieni, czyli wyniesie false bo tak ją zainicjowaliśmy.

Teraz mając wynik wyszukiwania możesz wypisać 0 lub 1 w zależności od wartości zmiennej znaleziono:

cout << (znaleziono ? 1 : 0);
0

Dzięki chłopaki, sprawę z tym zadaniem załatwiłem kodem:

#include <iostream>
#include <conio.h>

using namespace std;

const zakres = 10;
int x; //szukana
int tab[zakres];
bool znalazlem = false;

int main()
{
//-------------------------- przykladowe wartosci tablicy --------------------------
tab[0] = 4;
tab[1] = 6;
tab[2] = 2;
tab[3] = 99;
tab[4] = 51;
tab[5] = 66;
tab[6] = 90;
tab[7] = 1;
tab[8] = 0;
tab[9] = 0;
//----------------------------------------------------------------------------------
        cout << "Podaj liczbe jaka chcesz znalezc: ";           cin >> x;

        for (int i=0; i<zakres; i++)
        {
           if (x == tab[i]) //jesli wprowadzona liczba jest rowna wartosci aktualnej tablicy...
           {
               znalazlem = true;
               break;
           }
           else
           {
               znalazlem = false;

           }
        }

        if (znalazlem == true) cout << "1";
        if (znalazlem == false) cout << "0";



getch();
return 0;
}

Natomiast to co Ty piszesz, adf88 przyda mi się do następnego zadania ("10. Znajdź pierwsze wystąpienie liczby x w tablicy i wyświetl jej POZYCJĘ") ;)

0

Mi kompilator pokazuje błąd. Dlaczego u ciebie const nie ma typu?

Nie powinno być :

int const zakres = 10; 
0

A u mnie śmiga. Z typem stałej też mi działa. Masz bardziej "wrażliwy" kompilator ;)

0

A u mnie śmiga. Z typem stałej też mi działa. Masz bardziej "wrażliwy" kompilator ;)

0

Taki zapis (bez nazwy typu) został wyrzucony ze standardu zarówno C, jak i C++. Kompilator nie musi go przyjmować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1