• 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
873 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,206 wizyt
pytanie zadane 27 września 2016 w JavaScript przez jakublack Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,083 wizyt
pytanie zadane 20 stycznia 2016 w C i C++ przez Noak Mądrala (5,900 p.)
+1 głos
1 odpowiedź 244 wizyt
pytanie zadane 4 maja 2020 w HTML i CSS przez niezalogowany

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...