Nie potrafie zrozumiec jednej rzeczy - C

0

Nie potrafie zrozumiec tego.

    // Szukanie najwiekszej i najmniejszej wartosci tablicy
    int min=tablica[0];

Czemu to nie oznacza "Przypisz zmiennej typu int o nazwie min pierwsza wartosc z tablicy tablica.
Jak to usune to nie nie wyswietla minimalnej wartosci w tablicy.

#include <stdio.h>
//tablice jednowymiarowe i for



// Dana jest tablica n liczb rzeczywistych.
// Wczytac rozmiar tablicy nie wiekszy niz 20
// oraz wczytac jej elementy
// Wyswietlic tablice
// Znalezc najwieksza i najmniejsza wartosc




int main() {

int wielkosc;
int i;

// Deklarowanie wielkosci tablicy.
printf("Podaj wielkosc tablicy: ");
scanf("%d",&wielkosc);

int tablica[wielkosc];

// Wpisywanie do tablicy liczb.
for(i=0;i<wielkosc;i++) {
    printf("Podaj liczbe dla tablica[%d]: ",i);
    scanf("%d",&tablica[i]);
}

// Wyswietlanie wartosci tablicy.
printf("\n");
for(i=0;i<wielkosc;i++) {
    printf("Tablica o nazwie tablica[%d]=%d\n",i,tablica[i]);
}

// Szukanie najwiekszej i najmniejszej wartosci tablicy
    int min=tablica[0];
    int max=tablica[0];

for(int i = 0; i<wielkosc; ++i){
   if(tablica[i]<min)min=tablica[i];
   if(tablica[i]>max)max=tablica[i];
}

printf("Minimalna wartosc w tablicy=%d\n",min);
printf("Maksymalna wartosc w tablicy=%d\n",max);


return 0;
}
1

Komentarz odnosi się do całego bloku poniżej, wraz z pętlą for, a nie tylko do inicjalizacji pierwszym elementem tablicy.

0
kq napisał(a):

Komentarz odnosi się do całego bloku poniżej, wraz z pętlą for, a nie tylko do inicjalizacji pierwszym elementem tablicy.

Skoro polecenie
int min=tablica[0] i int max=tablica[0]
nie przypisuje zmiennej min/max typu int wartosci tablica[0]
to co musiałbym napisac
zeby przypisać
wartosc tablica[0] do zmiennej min/max w tamtym miejscu ?
Tak z ciekawosci pytam, bo nie potrafie zrozumiec dzialania ;/

4

Ależ ono przypisuje. Po prostu ten komentarz nie dotyczy wyłącznie następnej linii, tylko całego bloku:

0

Ściśle rzecz ujmując to powinno wpisywać 0 w miejscu minimum, a nie że nie wypisuje w ogóle. To dlatego, że dalej jest

for(int i = 0; i<wielkosc; ++i){
   if(tablica[i]<min)min=tablica[i];

jeśli min jest zainicjalizowane 0 (właściwie, wartością niezdefiniowaną, ale w tym przypadku najprawdopodobniej będzie 0). to przecież żadna wartość dodatnia nie będzie mniejsza. Tak więc jeśli będzie ujemna liczba, powinno zadziałać i tak. :)

0

@elwis ale jak nie bedzie zadnej wartości mniejszej od zera, to wynik będzie błędny, jeśli przypiszesz 0 jako wartość minimalną, początkową. Jeśli już chciałbyś inicjować jakimiś wartościami, to minimum powinno być inicjowanie maksymalną wartością jaką można uzyskać (w tym wypadku największym integerem, a maksimum najmniejszą możliwą wartością.

Druga rzecz,, że dana w ciele funkcji nie musi być domyślnie inicjowana 0.

Trzecia rzecz, rzeczywiście można "zoptymalizować algorytm) zaczynając pętlę od 1.

1
elwis napisał(a):

Ściśle rzecz ujmując to powinno wpisywać 0 w miejscu minimum, a nie że nie wypisuje w ogóle.

Mylisz się Bracie elwis. Z jakiej paki minimum ma być zero jeśli tablica zawiera dajmy na to {300, 1000, 55}?

0

@kaczus, @MasterBLB : Toć piszę, że jest to niezdefiniowane zachowanie i tylko podaję jedną z możliwości. Akurat jeśli jest to main() to prawdopodobieństwo, że będzie tam zero jest większe. Jeśli jest to inna funkcja to prawie na pewno będą tam losowe rzeczy. U mnie na przykład na RPI, bez inicjalizacji działa dobrze nawet dla dodatnich liczb. No i strzeliłem byka powinno być "żadna wartość dodatnia nie będzie mniejsza", już poprawiłem.

1

O Swarogu, Trygławie, Perunie i Welesie, jakie znowu UB???
Toć jak się sprawdza tablicę pod względem jaka minimalna i maksymalna wartość w niej występuje to pierwsze co należy zrobić, to pod min i max podpiąć pierwszy, ewentualnie ostatni element tej tablicy, po czym w pętli sprawdzać kolejne/poprzednie indeksy, i jak pod którymś znajdzie się wartość mniejsza od aktualnego minimum albo większa od aktualnego maksimum to wpisać tą wartość odpowiednio do min/max.

3

@elwis: nie ma najmniejszego znaczenia czy to jest UB czy nie jest, czy będzie tam zero, czy dowolna inne liczba. Postawienie zera jest po prostu błędne. Wplątujesz się w przez nikogo nie chcianą dyskusję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1