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

Przeszukiwanie tablicy - zadanie na zajęcia

Object Storage Arubacloud
0 głosów
897 wizyt
pytanie zadane 30 maja 2019 w C i C++ przez patryk241 Użytkownik (700 p.)
#include <iostream>

using namespace std;

int main()

{
	int i=0,rozmiar,tab[rozmiar],a,b;
	
	cout<<"podaj wielkosc tablicy"<<endl;
	cin>>rozmiar;
	
	cout<<"wprowadz liczby"<<endl;
	for(i=0;i<=rozmiar;i++)
	{
		cout<<i+1<<".";
		cin>>tab[i];
	}
cout<<"a) "<<endl;
cout<<"jakiej liczby szukasz? "<<endl;
cin>>a;


while();
{
	
	if(a==tab[i])
	{
	cout<<"indeks liczby to: "<<i<<endl;
}
else
{
	cout<<"liczba w tym indeksie nie istnieje"<<endl;
}

}

//////////////////////////////////////////////////////////////////////////////////////////////
cout<<"b)"<<endl;
cout<<"jakiej liczby szukasz? "<<endl;
	cin>>b;
		for(i=0;i<=rozmiar;i++)
	{
		if(b==tab[i])
		{
		cout<<endl<<"indeks liczby to: "<<i<<endl;
	}
	else
	{
		cout<<"nie ma takiej liczby w tym indeksie "<<i<<endl;
	}
	}


}

Głównie chodzi mi o podpunkt a, tutaj dodam treść zadania "Szukaj klucza – wynikiem jest pierwsza znaleziona wartość równa kluczowi i jej indeks". Mam kłopot z pomysłem na to, niby próbowałem zrobić coś z pętlą while i do while ale nie do końca mi to wychodziło (tak wiem że teraz w kodzie nie ma warunku, po prostu już nie mam pomysłu jak go ustawić). Jakby ktoś miał pomysł jak to zrobić byłbym bardzo wdzięczny. 

2 odpowiedzi

0 głosów
odpowiedź 30 maja 2019 przez mhdv Obywatel (1,580 p.)

W programie jest sporo błędów kosmetycznych, które przy większych projektach mogłyby sporo namieszać. Radzę popracować nad estetyką kodu.

Po pierwsze, deklarując wielkość tablicy powinieneś zmienić w pierwszej pętli for:

for(i=0;i<rozmiar;i++)

Po drugie, Twoja pętla szukająca pierwszego wyrazu o danej wartości w tablicy może wyglądać choćby tak:

for(int j = 0; j < rozmiar; ++j)
  {
      if(a==tab[j]){
          cout<<"indeks liczby to: "<<j<<endl;
          break;
      }
      else
          cout<<"liczba w tym indeksie nie istnieje"<<endl;
  }

Na koniec, co do estetyki kodu mam tu na myśli szczególnie używanie zmiennej "i" zadeklarowanej wcześniej jako iteratora różnych pętli. Dużo lepszą praktyką jest używanie iteratorów deklarowanych dopiero w pętli - tak jak zmienna "j" w powyższym przykładowym rozwiązaniu.

1
komentarz 30 maja 2019 przez DragonCoder Nałogowiec (36,500 p.)

ja bym uzyl tu jeszcze std::vector zamiast zwyklej tablicy

0 głosów
odpowiedź 31 maja 2019 przez Piotr Batko Stary wyjadacz (13,190 p.)

Ten kod nie działa tak, jak się spodziewałeś:

int rozmiar, tab[rozmiar];
cout<<"podaj wielkosc tablicy"<<endl;
cin>>rozmiar;

To nie powoduje, że tab ma rozmiar podany przez użytkownika. Próbując czytać rozmiar w momencie tworzenia tablicy doprowadzasz do undefined behaviour. Wiesz, chodzi o to, że nie wiadomo jaka wartość znajduje się w zmiennej rozmiar w momencie, gdy tworzysz tab.

Jeżeli to jest Twoje pierwsze spotkanie z tablicami, to proponuję Ci na razie porzucić pomysł stosowania tablicy o rozmiarze podanym przez użytkownika, ustawić sobie jakiś stały rozmiar i skupić się na wykonywaniu innych ćwiczeń. Jeżeli zależy Ci na tym rozmiarze, to poszukaj jeszcze jak to zrobić dobrze :)

"Szukaj klucza – wynikiem jest pierwsza znaleziona wartość równa kluczowi i jej indeks". Mam kłopot z pomysłem na to (...)

Popatrz. Masz tablicę, w której znajdują się liczby: 5, 8, 12, 0.

1. Ktoś Cię prosi, żebyś powiedział, czy w niej jest 12 i jak jest, to na której pozycji. Rozwiązanie:

Czy jest na 0-pozycji? Nie. To sprawdzam dalej...
Czy jest na 1-pozycji? Nie. To sprawdzam dalej...
Czy jest na 2-pozycji? Tak. To odpowiadam: znalazłem 12 na pozycji 2.

2. Weź pod uwagę, że jeszcze może być tak, że ktoś zapyta Cię o liczbę, której nie masz w tablicy, np. 42. Twój program mógłby się wtedy zachować tak:

Czy jest na 0-pozycji? Nie. To sprawdzam dalej...
Czy jest na 1-pozycji? Nie. To sprawdzam dalej...
Czy jest na 2-pozycji? Nie. To sprawdzam dalej...
Czy jest na 3-pozycji? Nie. I tu przestaję sprawdzać, bo sprawdziłem już rozmiar elementów (u mnie 4) i nie było tego o co ktoś prosił. No to odpowiadam: w tablicy nie znaleziono podanego klucza.

Podobne pytania

0 głosów
2 odpowiedzi 1,219 wizyt
pytanie zadane 27 września 2016 w JavaScript przez jakublack Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,109 wizyt
pytanie zadane 20 stycznia 2016 w C i C++ przez Noak Mądrala (5,900 p.)
+1 głos
1 odpowiedź 276 wizyt
pytanie zadane 4 maja 2020 w HTML i CSS przez niezalogowany

92,702 zapytań

141,616 odpowiedzi

320,180 komentarzy

62,062 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.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...