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

Problem z wybraniem najmniejszego elementu tablicy

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
71 wizyt
pytanie zadane 22 maja 2018 w C i C++ przez Piotr Lis Obywatel (1,330 p.)

Witam,

Zacząłem pisać program, mający za zadanie pokazać kolejno: najmniejszy, średni i najwiekszy element tablicy. Rozpocząłem od najmniejszego, i napisałem działającą w innym przypaku (sortowanie przez wstawianie) funkcje, która jednak odmawia posłuszeństwa.

#pragma region Find the lowest value

	int findMinimum(int tab[], int size, int index)
	{
		int actual_index = index; //zmienna actual_index to wartość iteratora z funkcji minimum(), potem posłuży jako wartość najmniejsza

		for (int i = index + 1; i < size; i++) 
		{
			if (tab[i] < tab[actual_index]) //porównywanie wartości, iteratora właściwego(pierwszy elemant to 0), a tego powiększonego o 1
			{
				actual_index = i; 
				//tutaj iterator z funkcji minimum(), otrzymuje nową wartość - indeks elementu i(tego powiekszonego o 1), który okazał się być mniejszy
			}
		}
		return actual_index; //zwracanie funkcji minimum() indeksu najmniejszego elementu w tablicy
	}

	void minimum(int tab[], int size)
	{	
		int index; 

		for (int i = 0; i < size; i++)
		{
			index = findMinimum(tab, size, i);
			//nadanie zmiennej index indeksu najmniejszego elementu tablicy
		}
		print(tab, index); //ta funkcja to po prostu cout << tab[index] << endl;
	}

#pragma endregion

Oto fragment kodu, a problem polega na tym, że pętla w funkcji findMinimum() nadpisuje wartość actual_index na i, pomimo, że if nie jest spełniony. Wyknonuje się ona do końca, nadpisując zmienną, co się kończy tym, że w konsoli ukazuje się ostatni element tablicy...

 

Nie mam zielonego pojęcia o co chdzi, ale pewnie popełniłem jakiś ordynarny błąd, którego nie zauważam.

Dziękuję, więc z góry za odpowiedzi!

1 odpowiedź

+1 głos
odpowiedź 22 maja 2018 przez k222 Nałogowiec (30,170 p.)
wybrane 22 maja 2018 przez Piotr Lis
 
Najlepsza

Funkcja działa poprawnie jak ją tak zapiszesz:

void minimum(int tab[], int size)
    {   
        int index; 

        index = findMinimum(tab, size, 0);

        cout << tab[index] << endl;
    }

W twoim przypadku masz jeszcze pętlę for przed wywołaniem funkcji findMinimum, co sprawia że w ostatnim przejściu pętli ona szuka najmniejszej wartości pomiędzy indeksem size-1 oraz size-1 a tam jest tylko jeden element którym jest tab[size-1] i jego właśnie wypisuje, usuń fora będzie ok

komentarz 22 maja 2018 przez Piotr Lis Obywatel (1,330 p.)
Dziękuję serdecznie, nie mam teraz dostępu do komputera, ale jak będę to zobaczę i oznaczę ją jako najlepszą. Dziękuję bardzo!

Podobne pytania

0 głosów
1 odpowiedź 814 wizyt
0 głosów
2 odpowiedzi 357 wizyt
pytanie zadane 13 stycznia 2018 w C i C++ przez Aguli Nowicjusz (190 p.)
0 głosów
5 odpowiedzi 314 wizyt
pytanie zadane 20 października 2015 w C i C++ przez vegan13 Nowicjusz (160 p.)

90,401 zapytań

139,013 odpowiedzi

311,503 komentarzy

60,082 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...