Wyszukiwanie elementu z tablicy - problem z programem.

0

Hej !
Mam tutaj banalny program, wyszukiwanie wybranego elementu z danej tablicy.
Mam problem z ostatnią pętlą for w której jest pętla if. Chciałabym
żeby mi przeszukiwało tablicę i jeżeli znajdzie ten element szukany to
ma mi wyświetlić na którym miejscu tablicy się znajduje, a jak go nie
ma to ma się wyświetlić zdanie że nie znaleziono.

Póki co jak znajdzie element to ładnie mi się wszystko wyświetla. Natomiast kombinowałam już na kilka sposobów żeby wyświetlało mi komunikat "nie znaleziono twojej liczby' w sytuacji gdy liczby nie ma w tablicy, ale za każdym razem program mi się sypie. jak wrzucę elsa do tej pętli if to mi wyświetla komunikat o nieznalezionej liczbie kilka razy, pomóżcie, bo nie mam już siły.

PROGRAM:

#include<iostream>
#include<stdlib.h>

using namespace std;
int main()
{
	int wielkosc_tab; 
	double el_tablicy, szukany_el;
    double *tablica = NULL; 

    cout << "\nWITAJ W PROGRAMIE DO WYSZUKIWANIA WYBRANEGO ELEMENTU!\n";
    cout << "                 (bez uzycia wartownika)\n\n";
   
    cout << "Ile elementow ma sie znajdowac w Twojej tablicy: ";
	cin >> wielkosc_tab;
	cout << "\n";
    tablica = new double[wielkosc_tab]; 
    	
    cout << "Podaj kolejne elementy tablicy:\n" ;
    for (int i = 0; i < wielkosc_tab; i++) 
	{
		cout << "Element tablicy nr " << i+1 << ": ";
		//cin >> el_tablicy; 
		cin >> tablica[i];
	}
	cout << "\n";
    
    cout << "Podaj wartosc elementu ktory chcesz wyszukac: ";
	cin >> szukany_el; 
	cout << "\n";
		 
    for (int i = 0; i < wielkosc_tab; i++) 
    { 
      if (tablica[i]== szukany_el)  
      cout << "Twoja liczba jest w tablicy! Znajduje sie ona na pozycji numer " << i+1<< endl<<endl; 
    }
	
    cout << "\n";
    system("pause"); 
	return 0; 
}
0
 
   bool znaleziono = false;

  [...]

   for (int i = 0; i < wielkosc_tab; i++) 
  { 
      if (tablica[i]== szukany_el) 
      {
            cout << "Twoja liczba jest w tablicy! Znajduje sie ona na pozycji numer " << i+1<< endl<<endl; 
            znaleziono = true;
       }
  }
  if (!znaleziono)
      cout << "Nie znaleziono Twojej liczby\n";

Pozdrawiam

0

Dzięki wielkie.
A nie da się zrobić tego inaczej, bez zmiennej 'znaleziono' ? Chciałabym żeby ten program był jak najprostszy.

Dodam jeszcze że przekleiłam Twoją pętlę i deklarację nowej zmiennej do programu i niestety nie działa. Zawsze zwraca mi wynik że nie znalazło liczby, nawet jak znajduje się ona w zbiorze.

0
#include<iostream>
#include<stdlib.h>
 
using namespace std;
int main()
{
        int wielkosc_tab; 
        double el_tablicy, szukany_el;
    double *tablica = NULL; 
    int znalezionych = 0;
 
[ ... ]
 
    for (int i = 0; i < wielkosc_tab; i++) 
    { 
      if (tablica[i]== szukany_el)  
      {
         cout << "Twoja liczba jest w tablicy! Znajduje sie ona na pozycji numer " << i+1<< endl<<endl; 
         znalezionych++;
      }
    }
    
    if(znalezionych == 0)
    {
                    cout << "Twoja liczba nie znajduje sie w tablicy";
                    
    }
    else
    {
        cout << "Twoja liczba wystepowala: " << znalezionych << " razy w tablicy";
    }
 
    cout << "\n";
    system("pause"); 
        return 0; 
}

Bardzo podobnie - ale zlicza ile razy znalazł tą liczbę w tablicy - w przypadku nie znalezienia też jest stosowny komunikat. Bardzo podobnie jak wyżej niestety łatwiejszego sposobu nie ma raczej.

0
    for (int i = 0; i < wielkosc_tab; i++) 
    { 
        if (tablica[i] == szukany_el)
        {
		cout << "Twoja liczba jest w tablicy! Znajduje sie ona na pozycji numer " << i+1 << ".\n";
		break;
	}
        
        else if (tablica[i] != szukany_el && i == wielkosc_tab - 1)
			cout << "Podanej liczby nie ma w tablicy.\n";
    } 

Edit: w zasadzie tego warunku tablica[i] != szukany_el nie musi być. Po prostu jeżeli pętla dojdzie do końca tablicy będzie to oznaczało, że nic jej nie "przerwało" -- czyli nie został znaleziony pasujący (szukany) element i wyświetli się stosowny komunikat ;)

0
 
 for (int i = 0; i < wielkosc_tab; i++) 
    { 
        if (tablica[i] == szukany_el)
        {
                cout << "Twoja liczba jest w tablicy! Znajduje sie ona na pozycji numer " << i+1 << ".\n";
                break;
        }
 
        else if (i == wielkosc_tab - 1)
                        cout << "Podanej liczby nie ma w tablicy.\n";
    } 
0

Dzięki Panowie za pomoc, ale żadna z powyższych pętli mi nie działa... :( ani dejmien666, ani gienka ani qwloopa...

kompiluje i uruchamiam w dev-cpp, kompilacja jest ok, ale po uruchomieniu jak chcę wyszukać liczbę która znajduje się w tablicy - zawsze wyświetla mi się komunikat że nie znaleziono tej liczby.

0

W takim razie niestety nie jestem w stanie Ci pomóc. U mnie wszystko działa. Zalecałbym zmianę środowiska/kompilatora. Przy Twoim kodzie mój kompilator wyrzucał błąd nieużycia zadeklarowanej zmiennej (konkretnie double el_tablicy), więc deklarację tę usunąłem. Tak samo includowanie stdlib.h też niepotrzebne. Reszta bez zmian (no oczywiście poza moją wersją pętli) i u mnie wszystko śmiga.

0

polecam c::b

0

gienek, jaki masz kompilator? używam dev-cpp i myślałam że to jest jeden z lepszych kompilatorów.

0

To musi działać (wersja z tablicą):

const size_t npos = -1;
template <typename T>
size_t find_index(T elem, T tab[], size_t len) {
  for(size_t i = 0; i < len; ++i)
    if(elem == tab[i]) return i;
  return -1;
}

// ...

int tab[] = {10, 20, 30, 20, 5, 8}

size_t pos = find_index(30, tab, 6);
if(pos != npos)
  // znaleziono
else
  // nie znaleziono
0

Więc zainstalowałem Deva, żeby sprawdzić, czy serio to nie działa ... (ale lepiej zmień go na CodeBlocksa). U mnie poniższy kod działa - zmieniaj sobie wartość "szukana" i testuj - nawet w tym starociu devie dziala jak powinno ;)

#include <iostream>
using namespace std;

int main(){
    
    int tab[] = {1,2,3,4,5,6};
    int rozmiar = 6;
    int szukana = 666;
    bool czyZnaleziono = false;
    
    for(int i=0; i<rozmiar; i++)
        if(tab[i] == szukana){
           cout << "Szukana jest pod indeksem: " << i << endl;
           czyZnaleziono = true;
           break;
        }
        
    if(!czyZnaleziono)
      cout << "Liczby nie ma w tablicy" << endl;
    
    cin.get();
    return 0;
}
0
ula napisał(a)

gienek, jaki masz kompilator? używam dev-cpp i myślałam że to jest jeden z lepszych kompilatorów.

Tak jak Ci nav (w komentarzu do posta) napisał, Dev-Cpp to środowisko, a kompilator w nim to MinGW. Tyle, że podobno ta wersja kompilatora, która w nim siedzi jest przestarzała. Ja także używam MinGW, ale najnowszej wersji, a kod piszę w edytorze Geany (i z jego poziomu kompiluję w MinGW). Zmiana środowiska, np. na polecany tutaj Code::Blocks powinna załatwić sprawę.

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