tablice szuka danej liczby

0

Program szuka podanej przez nas liczby w tablicy liczb:
tab[0]=5
tab[1]=-3
tab[2]=25
tab[3]=15
tab[4]=-30
tab[5]=0
tab[6]=9
W odpowiedzi podaje numer elementu tablicy albo informację, że tablica nie zawiera takiej liczby.

Witam napisałem w połowie ten kod raz dobrze liczy a raz zle

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

using namespace std;
main ()
{
     int tab[]={5,-3,25,15,-30,0,9};
      int a ;  
    cout<<"podaj liczbe czy znajduje sie w tablicy "<<endl;
    cin>>a;
    
     for(int i=0 ; i<a  ; i++)
     {
          if (a == tab[i])
          {   
          cout<<"liczba znajduje sie w tablicy  "<<endl;
          } 
          
            if (tab[i] !=a)
            { 
             cout<<"liczba nie znajduje sie w tablicy  "<<endl;                       
}               
                          
               }
               system("pause");
             }

0

Zacznij od formatowania kodu. Jak sformatujesz to sam zobaczysz gdzie jest problem.

0

formatuje ale nic nie wychodzi gdzie jest błąd ?

0

Tak poza tym to popatrz na swoją pętlę for. Tablica ma równe 7 elementów, a twoja pętla się wykonuje tyle razy ile wpisze użytkownik...

0

masz racje ale jak to poprawic nie mi nie wychodzi

0
for(int i=0 ; i<a  ; i++)

popatrz i pomyśl co tutaj jest źle, ile razy powinna wykonać się pętla? U ciebie wykonuje się "a" razy. Ile masz liczb do sprawdzenia?

0

wciąz nie chodzi

#include <iostream>
#include <conio.h>
 
using namespace std;
main ()
{
     int tab[]={5,-3,25,15,-30,0,9};
      int a ;  
    cout<<"podaj liczbe czy znajduje sie w tablicy "<<endl;
    cin>>a;
 
     for(int i=0 ; i<7  ; i++)
     {
          if (a == tab[i])
          {   
          cout<<"liczba znajduje sie w tablicy  "<<endl;
          } 
 
            if (tab[i] !=a)
            { 
             cout<<"liczba nie znajduje sie w tablicy  "<<endl;                       
                             
                             }
               }
               system("pause");
             }
 
1
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> numery ({0,5,3,0});
     int szukana = 5;
      bool znl=false;
      int indx=0;
       for (int i = 0; i < numery.size(); i++) {
          if (numery[i] == szukana) 
           {
znl=true;
indx=i;
             }

}

 if (znl) {}
else {}
}

Pod indx jest index znalezionego numeru. Pisane z tel

0

Poprawiony kod z wyzej

#include <iostream>
#include <vector>
using namespace std;

int main() {
 vector <int> liczby ({3,5,1,-5,6});
 int szukanaLiczba = 6;
 int index             = 0;
 bool znaleziono    = false;

 for(int i = 0; i < liczby.size(); i ++) {
  if(liczby[i] == szukanaLiczba) {
   index = i;
   znaleziono = true;
   break;
  }
 }

 if(znaleziono) {
   cout << "Tak taka liczba jest pod: " << index << endl;
 }
 else { 
  cout << "Niestety liczby nie znalezionio" << endl;
 }

 return 0;
}

Wiem dawanie kodu gotowego, nie jest fajne. Ale kiedys jak zaczynalem tez duzo osob mi pomagalo ;-)

3

Jeśli ma być gotowiec, to niech będzie chociaż porządny:

#include <iostream>
#include <algorithm>

int main() {
    int numbers[] = {1, 2, 3, -4, 5, -6, 7, -8}; // moze tez byc std::vector<int> albo dowolny inny iterowalny kontener
    int toFind;
    std::cin >> toFind;
    auto iter = std::find(std::begin(numbers), std::end(numbers), toFind);
    if (iter == std::end(numbers))
        std::cout << "Nie znaleziono numeru\n";
    else
        std::cout << "Znaleziono na pozycji " << std::distance(std::begin(numbers), iter) << "\n";
}
0

Piszecie po swojemu i nie ogarniam waszych zapisów a ja przyglądam sie na ten kod i nie widzę błędu
chyba zle kończę pętle for nie wiem kurde

#include <iostream>
#include <conio.h>
 
using namespace std;
main ()
{
     int tab[]={5,-3,25,15,-30,0,9};
      int a ;  
    cout<<"podaj liczbe czy znajduje sie w tablicy "<<endl;
    cin>>a;
 
     for(int i=0 ; i<7  ; i++)
     {
          if (a == tab[i])
          {   
          cout<<"liczba znajduje sie w tablicy  "<<endl;
          } 
 
            if (tab[i] !=a)
            { 
             cout<<"liczba nie znajduje sie w tablicy  "<<endl;                       
 
                             }
               }
               system("pause");
             }
0
#include <iostream>
#include <conio.h>
 
using namespace std;

main()
{
  int tab[] = {5, -3, 25, 15, -30, 0, 9};
  int a;
  
  cout << "podaj liczbe czy znajduje sie w tablicy" << endl;
  cin >> a;
 
  for(int i = 0; i < 7; i++)
  {
    if(a == tab[i])
      cout << "liczba znajduje sie w tablicy" << endl; 
 
    if(tab[i] != a)
      cout << "liczba nie znajduje sie w tablicy" << endl;                       
  }
               
  system("pause");

}

Twój kod w wersji bardziej przyjaznej dla oka, czy teraz widzisz co jest nie tak?

0

Siedzę juz godzinę i myślę co ty jest zle i naprawdę nie wiem czy ten zapis w ogóle jest poprawny

 for(int i=0 ; i<7  ; i++)
     {
          if (tab[i] == a)
          {   
          
          poz=i;
          cout<<a<<"   ";
}          
          cout<<"liczba znajduje sie w tablicy  """<<"jest na pozycji"<<poz<< endl;
          

            if (tab[i]!=a)
            { 
             cout<<"liczba nie znajduje sie w tablicy  "<<endl;                       
 
             }
1
 
for(int i=0 ; i<7  ; i++)
{
          if (tab[i] == a)
          {   
               poz=i;
               cout<<a<<"   ";
          }          
          cout<<"liczba znajduje sie w tablicy  """<<"jest na pozycji"<<poz<< endl;
          if (tab[i]!=a)
          { 
               cout<<"liczba nie znajduje sie w tablicy  "<<endl;                       
          }

Małe formatowanie kodu. W tym co pokazałeś jest błąd.
Opisze Ci jak to będzie działać: (w miliardach punktów)
Zaczynamy...

  1. Wchodzimy w ciało pętelki z liczbą i równą 0.
  2. W pierwszym warunku sprawdzamy czy pierwsza liczba w tablicy jest równa wartości a. Jeśli tak ustawiamy wartość poz na
    wartość i i wypisujemy na ekran wartość a.
  3. Wychodzimy z pętli i bezmyślnie wypisujemy, że nasza liczba na pewno znajduje się w tablicy na pozycji poz.
  4. Trafiamy na kolejną instrukcję warunkową. Tym razem sprawdzimy, czy pierwsza liczba w tablicy jest różna od podanej przez nas.
    Jeśli tak to wypisujemy, że naszej liczby niestety nie ma w tablicy... A co nas to obchodzi! Przed tą instrukcją wypisaliśmy już, że nasza liczba istnieje !
  5. Teraz najciekawsze. Wychodzimy z instrukcji warunkowej i trafiamy w wielki wir pozytywnych emocji. Nie martwimy się niczym, bowiem nasza
    pętla for() nie została zamknięta i na pewno nie wpłynie na ocenę Twojej pracy przez kompilator.

A na poważnie to formatuj kod tak, żeby był przejrzysty dla Ciebie jak i dla nas. Przeanalizuj kod krok po kroku. Pocieszę Cię; Jest tylko jedna możliwość, nie masz tam zdarzeń losowych.

Jeszczę pokażę Ci ciekawostkę. Czym różnią się te kody?

 
if(1==1)
{
     if(1==2)
     {
          if(1==3)
          {
                 return 0;
          }
     }
}

oraz

 
                    if(1==1)
            {
 if(1==2)
 {
             if(1==3)
                       {
             return 0;
     }
                   }
            }
0

Na razie sprawdzam czy liczba znajduje sie w tablicy i czemu sprawdza tylko pierwszą

#include <iostream>
#include <conio.h>
 
using namespace std;
 
main()
{
  int tab[] = {5, -3, 25, 15, -30, 0, 9};
  int a;
 
  cout << "podaj liczbe czy znajduje sie w tablicy" << endl;
  cin >> a;
 
  for(int i = 0; i < 7; i++)
  {
    if(a == tab[i])
         cout << "liczba znajduje sie w tablicy" << endl; 
    else
    if(a!=tab[i])
         cout<<"liczba nie znajduje sie w tablicy"<<endl;
     
}
  system("pause");
 return 0 ; 
}

Moze ktos to poprawic bo mnie juz roznosi przy tym kąpie

0
  for(int i = 0; i < 7; i++)
  {
    if(a == tab[i])
         cout << "liczba znajduje sie w tablicy" << endl;
}
 

wypisuje dobrze dopisze w innym wypadku else wszystko sie rozsypuję

  for(int i = 0; i < 7; i++)
  {
    if(a == tab[i])
         cout << "liczba znajduje sie w tablicy" << endl;  
          else
              cout<<"liczba nie znajduje sie w tablicy "<<endl;
}
0

W jakim sensie rozsypuje? Zapewne wypisuje 1 raz, że liczba znajduje się w tablicy i 6 razy, że liczba nie znajduje się w tablicy, lub 7 razy, że się nie znajduje. Mam rację?

0

Widzę że chyba żadne tłumaczenia nie pomogą. Proszę:

  
bool znalezione = false; 
for(int i = 0; i < 7; i++)
{
   if(a == tab[i])
   {
      cout << "liczba znajduje sie w tablicy" << endl;
      znalezione = true; //zapamiętaj że znalazłeś
      break; //przerwij pętlę, bo dalsze szukanie nie ma sensu
   }
}
if (!znalezione) //zmienna ma nadal domyślną wartość, czyli if z pętli się nie spełnił, czyli nie znaleziono elementu
{
   cout<<"liczba nie znajduje sie w tablicy "<<endl;
}

Mam nadzieję, że teraz zrozumiesz

1

lub tak:

int i;
for(i=0;i<7;++i) if(a==tab[i]) break;
if(i<7) cout<<"liczba znajduje sie w tablicy"<<endl;
else cout<<"liczba nie znajduje sie w tablicy"<<endl;

EDIT:
@gswidwa, więc takie coś też będzie nowością:

int i=0;
while((i<7)&&(a!=tab[i])) ++i;
if(i<7) cout<<"liczba znajduje sie w tablicy"<<endl;
else cout<<"liczba nie znajduje sie w tablicy"<<endl;

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