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

Najwieksza wartosc w tablicy nie działa

Object Storage Arubacloud
0 głosów
561 wizyt
pytanie zadane 7 września 2018 w C i C++ przez inc0gnito Początkujący (260 p.)

Witam, zacząłem robic ostatnio proste zadania z programowaniaz tablic i wyszukaniu najmniejszej i najwiekszej wartosci w niej. Jak działa mi znalezienie najmniejszej wartosci, tak nie wiem co robie zle w stosunku do tej najwiekszej:

#include <iostream>
#include <cstdlib>
using namespace std;
int main ()
{
int liczby[100], n;
int mini; int maxi;
mini=liczby[0];
maxi=liczby[0];
cin>>n;
for (int i=0; i<n; i++)
{
    cin>>liczby[i];
    if (liczby[i]>maxi)
        maxi=liczby[i];
    if (liczby[i]<mini)
        mini=liczby[i];

}
cout<<endl;
cout<<mini<<endl;
cout<<maxi<<endl;

    return 0;
}

Z góry dzieki za pomoc

5 odpowiedzi

+1 głos
odpowiedź 7 września 2018 przez niezalogowany

Pierwszy element tablicy jest niezainicjowany. Możesz rozwiązać ten problem na 2 sposoby:

  1. Najpierw wczytać dane, a dopiero później szukać największej wartości:
    cin >> n;
    for (int i = 0; i < n; i++)
    {
    	cin >> liczby[i];
    }
    
    int mini = liczby[0];
    int maxi = liczby[0];
    for (int i = 0; i < n; i++)
    {
    	if (liczby[i] > maxi)
    		maxi = liczby[i];
    	if (liczby[i] < mini)
    		mini = liczby[i];
    
    }
    
  2. Możesz zainicjować mini i maxi najmniejszą i najmniejszą wartością jaką może przyjąć int:
    #include <iostream>
    #include <limits> // koniecznie dla std::numeric_limits
    
    using namespace std;
    int main()
    {
    	int liczby[100], n;
    	int mini = numeric_limits<int>::max();
    	int maxi = numeric_limits<int>::min();
    	cin >> n;
    	for (int i = 0; i<n; i++)
    	{
    		cin >> liczby[i];
    		if (liczby[i]>maxi)
    			maxi = liczby[i];
    		if (liczby[i]<mini)
    			mini = liczby[i];
    
    	}
    	cout << endl;
    	cout << mini << endl;
    	cout << maxi << endl;
    
    	return 0;
    }
    
komentarz 7 września 2018 przez inc0gnito Początkujący (260 p.)
okej, dzieki wielkie :D
+1 głos
odpowiedź 7 września 2018 przez RafalS VIP (122,820 p.)
mini=liczby[0];
maxi=liczby[0];

Iniciujesz te wartości śmieciami, co oznacza, że w maxi może znaleźć się maksymalna wartosc inta jeszcze przed wczytaniem pierwszej liczby. 

Zainiciuj te zmienne pierwszą wczytaną liczbą, a jeśli bardzo nie chcesz to mini maksymalnym intem a maxi minimalnym intem.

+1 głos
odpowiedź 7 września 2018 przez sp00ky Obywatel (1,760 p.)

Trochę z innej beczki, proponuję zapoznać się z biblioteką <algorithm> tam masz funkcję:  min_element, max_element lub minmax_element.

0 głosów
odpowiedź 7 września 2018 przez sqbi Początkujący (470 p.)
przywrócone 7 września 2018 przez sqbi
Na początku maxi i mini są null, bo tablica nie ma jeszcze liczb, przez co obydwa if'y się nie sprawdzają, albo wywołują error. Musiałbyś linie 8 i 9 dać za 13.

EDIT:

Zamiast zer w indeksach daj zmienną i.

Pozdrawiam.
komentarz 7 września 2018 przez RafalS VIP (122,820 p.)

Na początku maxi i mini są null, bo tablica nie ma jeszcze liczb

Są losowymi wartościami np 5495831 a nie nullami. Int nie może być nullem.

przez co obydwa if'y się nie sprawdzają, albo wywołują error

 Wywołują się tylko porównują śmieci (losowe wartości)

Zamiast zer w indeksach daj zmienną i.

tą, która jest inicjowana kilka linijek niżej w pętli?

komentarz 7 września 2018 przez criss Mędrzec (172,590 p.)

Na początku maxi i mini są null

Co to jest null? Niezainicjalizowane zmienne lokalne przyjmują takie wartości jakie były w pamięci na której zostały zaalokowane. 

przez co obydwa if'y się nie sprawdzają, albo wywołują error

Jaki error?

Musiałbyś linie 8 i 9 dać za 13.

 Zamiast zer w indeksach daj zmienną i.

W taki sposób zawsze wynikiem będzie mini==liczby[n-1], maxi==liczby[n-1]

0 głosów
odpowiedź 7 września 2018 przez criss Mędrzec (172,590 p.)
edycja 8 września 2018 przez criss
Po pierwsze: w ogóle nie potrzebujesz tablicy.

Po drugie: bez sensu na początku do maxi oraz mini przypisujesz liczby[0] skoro wartości liczb podajesz w pętli. W tym przypadku najlepiej jakbyś na początku do mini oraz maxi przypisał odpowiednio największą oraz najmniejszą wartość reprezentowalną przez int. Tzn: INT_MAX oraz INT_MIN lub std::numeric_limits<int>::max() oraz std::numeric_limits<int>::min().

Podobne pytania

0 głosów
1 odpowiedź 775 wizyt
0 głosów
3 odpowiedzi 187 wizyt
pytanie zadane 18 października 2018 w C i C++ przez shadow1871 Początkujący (280 p.)
+1 głos
4 odpowiedzi 2,326 wizyt
pytanie zadane 24 stycznia 2018 w Java przez braciak Nowicjusz (130 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 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!

...