• 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

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

92,111 zapytań

140,769 odpowiedzi

317,755 komentarzy

61,432 pasjonatów

Advent of Code 2023

Top 15 użytkowników

  1. 801p. - Łukasz Eckert
  2. 793p. - Dawid128
  3. 779p. - CC PL
  4. 767p. - TheLukaszNs
  5. 754p. - Eryk Andrzejewski
  6. 749p. - nidomika
  7. 749p. - Michal Drewniak
  8. 746p. - Mikbac
  9. 726p. - Arkadiusz Waluk
  10. 724p. - rucin93
  11. 722p. - sefirek
  12. 715p. - adrian17
  13. 713p. - Henry Saele
  14. 688p. - the Bielsky
  15. 687p. - Adrian Wieprzkowicz
Szczegóły i pełne wyniki

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.

Uwaga - w dniach od 02.12 do 08.12 trwają Mikołajki (książki drukowane mają rabat -35%, ebooki do -45%). Zaś dodatkowy, specjalny kod zniżkowy: HELMIKOLAJ-10 dla naszych Widzów zapewni Wam oszczędność -10zł dla zamówień powyżej 70zł! Warto korzystać!

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...