Prosty program wyszukujący wartości min max

0

Program ma wyszukiwać wartości min i max

#include<stdio.h>

int tab[5]={2,4,5,6,10}, i, *max, *min;
int main(){
	
	for(i=0;i<5;i++){
		*max=tab[i];
		if(tab[i]>tab[i++])
		*max=tab[i];
		else *max=tab[i++];
		}


	for(i=0;i<5;i++){
		*min=tab[i];
		if(tab[i]<tab[i++])
		*min=tab[i];
		else *min=tab[i++];
		}

printf("Najmniejsza liczba w tablicy to: %d\nNajwieksza liczba w tablicy to: %d\n", min, max);

return 0;
}

Po uruchomieniu przestaje działać, proszę o pomoc w znalezieniu przyczyny.

0

Chyba przyczyn. Jest więcej niż jedna. Pytanie na początek. Dlaczego używasz wskaźników?

0

Właśnie umiem napisać to poprawnie bez wskaźników, ale teraz dostaliśmy polecenie napisać to w wersji wskaźnikowej.

0

Przede wszystkim pomieszałeś użycie wskaźników. Użycie gwiazdki (`*wsk``) oznacza pobranie lub ustawienie wartości, a nie samego wskaźnika. Więc jeżeli chcesz ustawić wskaźnik, to powinieneś mieć tak:

max=&tab[i];

ale przy wypisaniu na ekran raczej potrzebujesz wartość, a nie adres wskaźnika. Wtedy zapisujesz tak:

printf("Najmniejsza liczba w tablicy to: %d\nNajwieksza liczba w tablicy to: %d\n", *min, *max);

Skoro umiesz napisać wersję bez wskaźników, to jak to poprawisz, to powinieneś dalej sobie poradzić.

0

Nie rozumiesz wskaźników, tu masz malutki przykład użycia.

int i = 5; // Przykładowa zmienna
int* max; // Wskaźnik na jakiś int
max = &i; // Przypisujemy adres zmiennej i do wskaźnika
// Jeżeli odczytamy wartość z max dostaniemy adres zmiennej i, dla przykładu 0x001ffbec.
// Ale jeżeli użyjemy *max to dostaniemy 5 gdyż zwróci to wartość pod tym adresem.

Tutaj masz jeszcze więcej o nich.

Poza tym, po co Ci 2 pętle jak można to rozwiązać w jednej? Ja bym to zrobił tak:

int main() 
{
	int tab[5] = { 2, 4, 5, 6, 10 }; // Poczytaj o tym, dlaczego nie powinno się używać zmiennych globalnych.
	int* max = &tab[0]; // Przypisujemy do max adres pierwszego elementu z tablicy tab
	int* min = &tab[0]; // i tak samo dla min
	for (int i = 1; i < 5; i++) // Pierwszy element już mamy, więc zaczynami od i = 1
	{
		if (tab[i] > *max) 
		{
			max = &tab[i];
		}
		else if (tab[i] < *min)
		{
			min = &tab[i];
		}
	}
	printf("Najmniejsza liczba w tablicy to: %d\nNajwieksza liczba w tablicy to: %d\n", *min, *max);
	return 0;
}
0

OK, dziękuję za pomoc, popracuję jeszcze nad tym.

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