Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2025 mgr Jerzy Wałaszek |
ProblemW n-elementowym zbiorze Z należy znaleźć element o maksymalnej (minimalnej) wartości. |
Zadanie znajdowania elementu maksymalnego lub minimalnego jest typowym zadaniem wyszukiwania, które rozwiązujemy przy pomocy algorytmu wyszukiwania liniowego. Za tymczasowy maksymalny (minimalny) element przyjmujemy pierwszy element zbioru. Następnie element tymczasowy porównujemy z kolejnymi elementami. Jeśli któryś z porównywanych elementów jest większy (mniejszy) od elementu tymczasowego, to za nowy tymczasowy element maksymalny (minimalny) przyjmujemy porównywany element zbioru. Gdy cały zbiór zostanie przeglądnięty, w elemencie tymczasowym otrzymamy element maksymalny (minimalny) w zbiorze.
Poniżej podajemy algorytm wyszukiwania max. Wyszukiwanie min wykonuje się identycznie, zmianie ulega tylko warunek porównujący element tymczasowy z elementem zbioru w kroku K03.
K01: maxZ ← Z[0] ; za tymczasowy element maksymalny ; bierzemy pierwszy element K02: Dla i = 1, 2, …, n-1: ; przeglądamy następne elementy zbioru wykonuj K03 K03: Jeśli Z[i] > maxZ, ; jeśli natrafimy na większy od maxZ, to maxZ ← Z[i] ; to zapamiętujemy go w maxZ K04: Zakończ z wynikiem maxZ
Uwaga: Zanim uruchomisz program, przeczytaj wstęp do tego artykułu, w którym wyjaśniamy funkcje tych programów oraz sposób korzystania z nich. |
Program generuje 15 liczb pseudolosowych z zakresu od 0 do 9999. Wygenerowane liczby zapisuje
|
Pascal// Wyszukiwanie max i min // Data: 28.04.2008 // (C)2020 mgr Jerzy Wałaszek //--------------------------- program prg; const N = 15; var Z : array [0..N-1] of integer; i, maxZ, minZ: integer; begin randomize; for i := 0 to N-1 do Z[i] := random(10000); maxZ := Z[0]; minZ := Z[0]; for i := 1 to N-1 do begin if Z[i] > maxZ then maxZ := Z[i]; if Z[i] < minZ then minZ := Z[i]; end; for i := 0 to N-1 do writeln(Z[i]:5); writeln; writeln(minZ:5, maxZ:5); writeln; end. |
// Wyszukiwanie max i min // Data: 28.04.2008 // (C)2020 mgr Jerzy Wałaszek //--------------------------- #include <iostream> #include <iomanip> #include <cstdlib> #include <ctime> using namespace std; const int N = 15; int main() { int Z[N], i, maxZ, minZ; srand (time(NULL)); for(i = 0; i < N; i++) Z[i] = rand() % 10000; maxZ = minZ+Z[0]; for(i = 1; i < N; i++) { if(Z[i] > maxZ) maxZ = Z[i]; if(Z[i] < minZ) minZ = Z[i]; } for(i = 0; i < N; i++) cout << setw (5) << Z[i] << endl; cout << endl << setw(5) << minZ << setw(5) << maxZ << endl << endl; return 0; } |
Basic' Wyszukiwanie max i min ' Data: 28.04.2008 ' (C)2020 mgr Jerzy Wałaszek '--------------------------- Const N = 15 Dim As Integer Z(N-1), i, maxZ, minZ Randomize For i = 0 To N-1 Z(i) = Cint(Rnd*9999) Next maxZ = Z(0): minZ = Z(0) For i = 1 To N-1 If Z(i) > maxZ Then maxZ = Z(i) If Z(i) < minZ Then minZ = Z(i) Next For i = 0 To N-1 Print Using "#####";Z(i) Next Print Print Using "##### ####";minZ;maxZ Print End |
Python
(dodatek)# Wyszukiwanie max i min # Data: 28.04.2008 # (C)2020 mgr Jerzy Wałaszek #--------------------------- import random N = 15 # Stała z = [random.randrange(10000) for i in range(N)] maxz = z[0] minz = z[0] for i in range(1, N): if z[i] > maxz: maxz = z[i] if z[i] < minz: minz = z[i] for i in range(N): print("%5d" % z[i]) print() print("%5d %5d" % (minz, maxz)) print() |
Wynik: |
89 282 5838 8656 6423 5088 4859 2017 8291 8524 127 621 3826 4914 1733 89 8656 |
Czasami zależy nam nie na wartości elementu maksymalnego (minimalnego), lecz na jego pozycji w zbiorze. W tym przypadku musimy, oprócz wartości samego elementu maksymalnego (minimalnego), zapamiętywać jego pozycję, którą na końcu zwracamy jako wynik pracy algorytmu.
K01: maxZ ← Z[0] ; za tymczasowy element maksymalny ; bierzemy pierwszy element K02: maxp ← 0 ; zapamiętujemy jego pozycję K03: Dla i = 1, 2, …, n-1: ; przeglądamy następne elementy zbioru wykonuj K04…K06 K04: Jeśli Z[i] ≤ maxZ, ; sprawdzamy, czy trafiliśmy to następny obieg pętli K03 ; na element większy od maxZ K05: maxZ ← Z[i] ; jeśli tak, to zapamiętujemy ; wartość elementu w maxZ K06: maxp ← i ; oraz jego pozycję w maxp K07: Zakończ z wynikiem maxp ; zwracamy zapamiętaną pozycję
Uwaga: Zanim uruchomisz program, przeczytaj wstęp do tego artykułu, w którym wyjaśniamy funkcje tych programów oraz sposób korzystania z nich. |
Program generuje 15 liczb pseudolosowych z zakresu od 0 do 9999. Wygenerowane liczby zapisuje w tablicy Z. Następnie wyszukuje liczbę najmniejszą i największą. Jako wynik jest jest wypisywana zawartość całej tablicy w 15 kolejnych wierszach, a w wierszu 17 podana zostaje pozycja elementu najmniejszego i największego. |
Pascal// Wyszukiwanie pozycji max i min // Data: 29.04.2008 // (C)2020 mgr Jerzy Wałaszek //--------------------------- program prg; const N = 15; var Z : array [0..N-1] of integer; i, maxZ, maxp, minZ, minp : integer; begin randomize; for i := 0 to N-1 do Z[i] := random(10000); maxZ := Z[0]; minZ := maxZ; maxp := 0; minp := 0; for i := 0 to N-1 do begin if Z[i] < minZ then begin minZ := Z[i]; minp := i; end; if Z[i] > maxZ then begin maxZ := Z[i]; maxp := i; end; end; for i := 0 to N-1 do writeln(i:2, ' : ', Z[i]:4); writeln; writeln(minp, ':', maxp); writeln; end. |
// Wyszukiwanie pozycji max i min // Data: 29.04.2008 // (C)2020 mgr Jerzy Wałaszek //--------------------------- #include <iostream> #include <iomanip> #include <cstdlib> #include <ctime> using namespace std; const int N = 15; int main() { int Z[N], i, maxZ, maxp, minZ, minp; srand(time(NULL)); for(i = 0; i < N; i++) Z[i] = rand() % 10000; maxZ = minZ = Z[0]; maxp = minp = 0; for(i = 0; i < N; i++) { if(Z[i] < minZ) { minZ = Z[i]; minp = i; } if(Z[i] > maxZ) { maxZ = Z[i]; maxp = i; } } for(i = 0; i < N; i++) cout << setw(2) << i << " : " << setw(4) << Z[i] << endl; cout << endl << minp << ":" << maxp << endl << endl; return 0; } |
Basic' Wyszukiwanie pozycji max i min ' Data: 29.04.2008 ' (C)2020 mgr Jerzy Wałaszek '--------------------------- Const N = 15 Dim As Integer Z(N-1), i, maxZ, maxp Dim As Integer minZ, minp Randomize For i = 0 To N-1 Z(i) = Cint(Rnd*9999) Next maxZ = Z(0) minZ = maxZ maxp = 0: minp = 0 For i = 0 To N-1 If Z(i) < minZ Then minZ = Z(i): minp = i End If If Z(i) > maxZ Then maxZ = Z(i): maxp = i End If Next For i = 0 To N-1 Print Using "## : ####";i;Z(i) Next Print Print minp;":";maxp Print End |
Python
(dodatek)# Wyszukiwanie pozycji max i min # Data: 29.04.2008 # (C)2020 mgr Jerzy Wałaszek #--------------------------- import random N = 15 # Ilość liczb z = [random.randrange(10000) for i in range(N)] maxz = z[0] minz = maxz maxp = 0 minp = 0 for i in range(N): if z[i] < minz: minz, minp = z[i], i if z[i] > maxz: maxz, maxp = z[i], i for i in range(N): print("%2d : %4d" % (i, z[i])) print() print(minp, ":", maxp) print() |
Wynik: |
0 : 7223 1 : 2137 2 : 7026 3 : 5658 4 : 5012 5 : 6046 6 : 5609 7 : 6493 8 : 916 9 : 9623 10 : 2385 11 : 122 12 : 4679 13 : 7316 14 : 2069 11:9 |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2025 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.