This is an old revision of the document!
Laboratorium: klik
Zadanie można rozwiązać w następujący sposób:
Przejdź kolejno przez wszystkie elementy tablicy i dla każdego z nich sprawdź, czy jego wartość jest większa od dotychczas znalezionej wartości maksymalnej.
Jeśli tak, to przyjmij wartość tego elementu jako nową wartość maksymalną.
Jaką wartość przyjąć na samym początku jako maksymalną? Najprościej – dowolną taką, która występuje w tablicy! Nasz algorytm dokona ewentualnie niezbędnej korekty.
Problem pojawia się wtedy, gdy za największą dotychczasową znalezioną wartość przyjmiemy wartość większą od wartości największego elementu tablicy (np. gdybyśmy przyjęli początkowo max = 0
, a w tablicy mieli wartości {-1, -7, -2}
).
#include <stdio.h> #include <stdlib.h> int main() { int tab[10]; /* Użyj elastycznego określania rozmiaru tablicy. */ int n = sizeof(tab) / sizeof(tab[0]); int i; for(i = 0; i < n; i++) { tab[i] = rand() % 100; } for(i = 0; i < n; i++) { printf("%d ", tab[i]); } printf("\n"); return 0; }
Poniższe rysunki pomogą Ci zrozumieć ideę rozwiązania (pary kolorowych strzałek wskazują, które elementy zamieniamy ze sobą miejscem). Zwróć uwagę na ilość dokonywanych zamian w zależności od ilości elementów.
#include <stdio.h> #include <stdlib.h> int main() { int tab[] = {1, 2, 3, 4}; int i; /* W elastyczny (!) sposob wyznacz ilosc elementow tablicy. */ int ilosc_elementow = sizeof(tab) / sizeof(int); /* [1] Odwroc tablice. */ /* i - indeks elementu "od poczatku" */ for(i = 0; i < ilosc_elementow / 2; i++) { /* Pamietaj, ze indeksowanie elementow tablicy zaczyna sie od 0... ...czyli konczy sie na `n-1`! */ int indeks_elementu_od_konca = (ilosc_elementow - 1) - i; int t = tab[indeks_elementu_od_konca]; tab[indeks_elementu_od_konca] = tab[i]; tab[i] = t; } /* [2] Wypisz tablice - element po elemencie. */ for (i = 0; i < ilosc_elementow; i++) { printf("%d ", tab[i]); } return 0; }