Kłopot z instrukcją if else

2012-11-03 18:38
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.

edytowany 1x, ostatnio: Reiko, 2012-11-03 18:41

Pozostało 580 znaków

2012-11-03 18:50
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ć.


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał

Pozostało 580 znaków

2012-11-03 18:57
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 nei spełni warunku rozumiesz?


...
edytowany 1x, ostatnio: balu, 2012-11-03 18:58

Pozostało 580 znaków

2012-11-03 19:00
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


...

Pozostało 580 znaków

2012-11-03 19:02
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

Pozostało 580 znaków

2012-11-03 19:03
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ć.


...
edytowany 1x, ostatnio: balu, 2012-11-03 19:03

Pozostało 580 znaków

2012-11-03 19:10
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);
edytowany 3x, ostatnio: adf88, 2012-11-03 19:12
Wystarczy samo cout << znaleziono; - cnyk 2012-11-04 11:46

Pozostało 580 znaków

2012-11-03 19:14
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Ę") ;)

edytowany 1x, ostatnio: Reiko, 2012-11-03 19:27
ty nie rozumiesz treści tych zadań... - Sopelek 2012-11-03 19:22
Już poprawiłem - działa :) - Reiko 2012-11-03 19:28

Pozostało 580 znaków

2012-11-03 19:44
0

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

Nie powinno być :

int const zakres = 10; 

...
bo c jest takim dziwnym językiem, gdzie domyślnym typem jest właśnie int - Sopelek 2012-11-03 19:47

Pozostało 580 znaków

2012-11-03 19:47
0

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

Pozostało 580 znaków

2012-11-03 19:48
0

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

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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