|
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 |
©2026 mgr Jerzy Wałaszek
|
ProblemW n-elementowym zbiorze Z należy wyszukać wartość występującą najczęściej. Zadanie o podobnej treści pojawiło się w zestawie pytań maturalnych z informatyki w 2006 roku. |
Problem wyszukiwania najczęstszej wartości (ang. searching for the most frequent value), czyli tzw. dominanty zbioru, możemy rozwiązać na kilka różnych sposobów. Pierwszym, najprostszym podejściem jest metoda bezpośrednia – naiwna:
Przeglądamy kolejne elementy zbioru i zliczamy liczbę wystąpień ich wartości w zbiorze. Można to robić tak – zapamiętujemy i-ty element i ustawiamy licznik wystąpień na 0. Następnie przeglądamy cały zbiór i, jeśli trafimy na element o takiej samej wartości, to licznik zwiększamy o 1. Po wykonaniu tej operacji porównujemy zawartość licznika z tymczasową maksymalną liczbą wystąpień (na początku algorytmu jest ona ustawiana na 0). Jeśli stan licznika jest większy, to zapamiętujemy go w tymczasowej maksymalnej liczbie wystąpień oraz zapamiętujemy wyszukiwaną wartość elementu. Gdy przeglądniemy w ten sposób i zliczymy wystąpienia wartości wszystkich elementów w zbiorze Z, to otrzymamy element powtarzający się najczęściej oraz ilość tych powtórzeń.
Klasa złożoności obliczeniowej tak zdefiniowanego algorytmu jest równa
Algorytm wygląda następująco:
K01: maxL ← 0 ; zerujemy maksymalną liczbę wystąpień K02: Dla i = 0, 1, …, n-1: ; przeglądamy kolejne elementy tablicy Z wykonuj kroki K03…K09 K03: W ← Z[i] ; zapamiętujemy poszukiwaną wartość elementu K04: L ← 0 ; zerujemy jej licznik wystąpień K05: Dla j = 0, 1, …, n-1: ; zliczamy wystąpienia W wykonuj krok K06 K06: Jeśli Z[j] = W, to L ← L+1 K07: Jeśli L ≤ maxL, ; sprawdzamy, czy W jest tymczasowo najczęstsze to następny obieg pętli K2 K08: maxL ← L ; jeśli tak, zapamiętujemy liczbę wystąpień K09: maxW ← W ; oraz wartość W K10: Pisz maxW, maxL ; wypisujemy wyniki K11: Zakończ
|
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 umieszcza w tablicy Z 400 liczb pseudolosowych z zakresu od 0 do 99, wyznacza wartość występującą najczęściej, wyświetla zawartość tej tablicy zaznaczając wartości najczęstsze i wypisuje tę wartość oraz liczbę jej wystąpień. |
Pascal// Najczęstsza wartość
// Data: 4.05.2008
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
program prg;
const N = 400;
var
Z : array [0..N-1] of integer;
i, j, L, W, maxL, maxW : integer;
begin
// Generujemy zawartość Z[]
randomize;
for i := 0 to N-1 do
Z[i] := random(100);
// Wyszukujemy najczęstszą wartość
maxL := 0;
for i := 0 to N-1 do
begin
W := Z[i]; L := 0;
for j := 0 to N-1 do
if Z[j] = W then
inc(L);
if L > maxL then
begin
maxL := L; maxW := W;
end;
end;
// Wypisujemy tablicę
for i := 0 to N-1 do
if Z[i] = maxW then
write(' >', Z[i]:2)
else
write(Z[i]:4);
// Wypisujemy najczęstszy element
// oraz liczbę jego wystąpień
writeln;
writeln(maxW, ' : ', maxL);
writeln;
end. |
// Najczęstsza wartość
// Data: 4.05.2008
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
const int N = 400;
int Z[N], i, j, L, W, maxL, maxW;
// Generujemy zawartość Z[]
srand (time(NULL));
for(i = 0; i < N; i++)
Z[i] = rand() % 100;
// Wyszukujemy najczęstszą wartość
maxL = 0;
for(i = 0; i < N; i++)
{
W = Z[i]; L = 0;
for(j = 0; j < N; j++)
if(Z[j] == W) L++;
if(L > maxL)
{
maxL = L; maxW = W;
}
}
// Wypisujemy tablicę
for(i = 0; i < N; i++)
if(Z[i] == maxW)
cout << " >" << setw(2) << Z[i];
else
cout << setw(4) << Z[i];
// Wypisujemy najczęstszy element
// oraz liczbę jego wystąpień
cout << endl << maxW << ": " << maxL
<< endl << endl;
return 0;
} |
Basic' Najczęstsza wartość
' Data: 4.05.2008
' (C)2020 mgr Jerzy Wałaszek
'---------------------------
Const N = 400
Dim As Integer Z(N-1)
Dim As Integer i, j, L, W, maxL, maxW
' Generujemy zawartość Z()
Randomize
For i = 0 To N-1
Z(i) = Cint(Rnd*99)
Next
' Wyszukujemy najczęstszą wartość
maxL = 0
For i = 0 To N-1
W = Z(i): L = 0
For j = 0 To N-1
If Z(j) = W Then L += 1
Next
If L > maxL Then
maxL = L: maxW = W
End If
Next
' Wypisujemy tablicę
For i = 0 To N-1
If Z(i) = maxW Then
Print Using " >##";Z(i);
Else
Print Using "####";Z(i);
End If
Next
' Wypisujemy najczęstszy element
' oraz liczbę jego wystąpień
Print
Print maxW;": ";maxL
Print
End |
Python
(dodatek)# Najczęstsza wartość
# Data: 26.02.2024
# (C)2024 mgr Jerzy Wałaszek
#---------------------------
import random
N = 400
z = []
# Generujemy zawartość Z()
for i in range(N):
z.append(random.randrange(100))
# Wyszukujemy najczęstszą wartość
maxv, maxc = 0, 0
for i in range(N):
v, c = z[i], 0
for j in range(N):
if z[j] == v:
c += 1
if c > maxc:
maxc, maxv = c, v
# Wypisujemy tablicę
for i in range(N):
if z[i] == maxv:
print(" >%2d" % z[i], end="")
else:
print("%4d" % z[i], end="")
# Wypisujemy najczęstszy element
# oraz liczbę jego wystąpień
print()
print(maxv, ":", maxc)
print()
|
| Wynik: |
21 84 16 62 83 81 6 92 96 >85 18 72 70 96 8 37 23 91 74 99 87 14 33 20 58 25 42 55 41 3 91 23 38 98 42 91 51 35 31 39 65 17 46 5 89 >85 39 5 60 >85 30 36 60 80 73 9 6 90 55 51 5 84 25 75 16 71 39 >85 70 6 6 72 30 93 55 93 67 6 35 35 48 18 65 25 50 11 17 90 15 30 84 82 64 5 50 74 47 11 10 92 79 0 6 1 75 79 65 11 33 22 86 24 61 96 12 46 29 82 23 62 35 36 39 26 59 46 97 57 29 58 69 86 27 28 17 81 55 38 26 45 76 39 16 71 78 29 49 42 6 38 24 25 45 52 89 49 52 36 92 79 49 26 57 86 11 17 67 93 96 29 96 16 79 36 70 19 11 20 60 46 43 >85 25 90 11 96 1 92 80 20 60 1 13 30 72 80 >85 47 87 67 29 90 20 98 47 6 95 60 19 77 90 22 13 52 23 50 54 45 29 50 4 21 60 56 75 59 94 5 88 >85 15 49 5 77 64 62 71 82 32 42 59 35 8 45 44 52 71 7 12 79 58 29 9 7 90 >85 87 68 65 38 32 0 55 12 56 76 97 58 24 91 97 62 49 34 49 96 6 18 44 15 50 3 32 13 67 16 38 69 89 66 73 84 82 57 68 65 89 19 49 33 34 94 13 27 19 5 49 59 82 21 25 38 49 94 >85 45 48 63 53 2 1 70 37 13 89 51 44 20 24 46 74 89 2 11 87 28 83 30 23 81 64 27 15 81 95 93 71 29 47 45 17 64 90 77 1 73 61 26 79 47 91 82 17 88 26 22 57 63 12 14 43 74 31 40 50 28 36 61 77 77 15 19 41 71 23 24 3 33 32 65 30 97 >85 38 62 87 82 65 53 24 85 : 10 |
Podany powyżej algorytm jest bardzo prymitywny i wykonuje wiele niepotrzebnych działań. Postarajmy się je wyeliminować.
K01: maxL ← 0 ; licznik wystąpień najczęstszej wartości K02: maxW ← Z[0]-1 ; najczęstsza wartość-musi być różna od Z[0]! K03: i ← 0 ; rozpoczynamy zliczanie wartości elementów K04: Dopóki i < n-maxL, ; zliczamy do n-maxL wykonuj kroki K05…K13 K05: W ← Z[i] ; zapamiętujemy wartość bieżącego elementu K06: Jeśli W = maxW, ; jeśli jest równa maxW, to idź do kroku K13 ; to pomijamy element Z[i] K07: L ← 1 ; Z[i] raz zliczony K08: Dla j = i+1, i+2, …, n-1: ; zliczanie rozpoczynamy wykonuj krok K09 ; od następnych elementów K09: Jeśli Z[j] = W, to L ← L+1 K10: Jeśli L ≤ maxL, ; zliczyliśmy więcej niż maxL? to idź do kroku K13 K11: maxL ← L ; jeśli tak, zapamiętujemy L w maxL K12: maxW ← W ; oraz W w maxW K13: i ← i+1 ; przechodzimy do kolejnego elementu Z[i] K14: Pisz maxW, maxL ; wyprowadzamy wyniki K15: Zakończ
|
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 umieszcza w tablicy Z 400 liczb pseudolosowych z zakresu od 0 do 99, wyznacza wartość występującą najczęściej, wyświetla zawartość tej tablicy zaznaczając wartości najczęstsze i wypisuje tę wartość oraz liczbę jej wystąpień. |
Pascal// Najczęstsza wartość
// Data: 4.05.2008
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
program prg;
const N = 400;
var
Z : array [0..N-1] of integer;
i, j, L, W, maxL, maxW : integer;
begin
// Generujemy zawartość Z[]
randomize;
for i := 0 to N-1 do
Z[i] := random(100);
// Wyszukujemy najczęstszą wartość
maxL := 0; maxW := Z[0]-1;
i := 0;
while i < N-maxL do
begin
W := Z[i];
if maxW <> W then
begin
L := 1;
for j := i+1 to N-1 do
if Z[j] = W then inc(L);
if L > maxL then
begin
maxL := L; maxW := W;
end;
end;
inc(i);
end;
// Wypisujemy tablicę Z[]
for i := 0 to N-1 do
if Z[i] = maxW then
write(' >', Z[i]:2)
else
write(Z[i]:4);
// Wypisujemy najczęstszy element
// oraz liczbę jego wystąpień
writeln;
writeln(maxW, ' : ', maxL);
writeln;
end. |
// Najczęstsza wartość
// Data: 4.05.2008
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
const int N = 400;
int Z[N], i, j, L, W, maxL, maxW;
// Generujemy zawartość Z[]
srand(time(NULL));
for(i = 0; i < N; i++)
Z[i] = rand() % 100;
// Wyszukujemy najczęstszą wartość
maxL = 0; maxW = Z[0]-1;
for(i = 0; i < N-maxL; i++)
{
W = Z[i];
if(maxW != W)
{
L = 1;
for(j = i+1; j < N; j++)
if(Z[j] == W) L++;
if(L > maxL)
{
maxL = L; maxW = W;
}
}
}
// Wypisujemy tablicę
for(i = 0; i < N; i++)
if(Z[i] == maxW)
cout << " >" << setw(2) << Z[i];
else
cout << setw(4) << Z[i];
// Wypisujemy najczęstszy element
// oraz liczbę jego wystąpień
cout << endl
<< maxW << ": " << maxL
<< endl << endl;
return 0;
} |
Basic' Najczęstsza wartość
' Data: 4.05.2008
' (C)2020 mgr Jerzy Wałaszek
'---------------------------
Const N = 400
Dim As Integer Z(N-1)
Dim As Integer i, j, L, W, maxL, maxW
' Generujemy zawartość Z()
Randomize
For i = 0 To N-1
Z(i) = Cint(Rnd*99)
Next
' Wyszukujemy najczęstszą wartość
maxL = 0: maxW = Z(0)-1
i = 0
While i < N-maxL
W = Z(i)
If maxW <> W Then
L = 1
For j = i+1 To N-1
If Z(j) = W Then L += 1
Next
If L > maxL Then
maxL = L: maxW = W
End If
End If
i += 1
Wend
' Wypisujemy tablicę
For i = 0 To N-1
If Z(i) = maxW Then
Print Using " >##";Z(i);
Else
Print Using "####";Z(i);
End If
Next
' Wypisujemy najczęstszy element
' oraz liczbę jego wystąpień
Print
Print maxW;": ";maxL
Print
End |
Python
(dodatek)# Najczęstsza wartość
# Data: 25.02.2024
# (C)2024 mgr Jerzy Wałaszek
#---------------------------
import random
N = 400 # Liczba elementów
# Generujemy zawartość Z[]
z = [random.randrange(100) for i in range(N)]
# Wyszukujemy najczęstszą wartość
maxc = 0
maxv = z[0]-1
i = 0
while i < N-maxc:
v = z[i];
if maxv != v:
c = 1;
for j in range(i+1, N):
if z[j] == v:
c += 1
if c > maxc:
maxc, maxv = c, v
i += 1
# Wypisujemy tablicę
for i in range(N):
if z[i] == maxv:
print(" >%2d" % z[i], end="")
else:
print("%4d" % z[i], end="")
print()
print()
# Wypisujemy najczęstszy element
# oraz liczbę jego wystąpień
print(maxv, ":", maxc)
|
Jeśli elementy zbioru tworzą spójny przedział wartości i przedział ten nie jest specjalnie duży, to do wyszukania wartości najczęstszej można zastosować następującą metodę.
Tworzymy tablicę L, której elementy będą pełniły rolę liczników wystąpień wartości elementów z tablicy Z. Zakres indeksów w L możemy znaleźć wyszukując w tablicy Z wartość minimalną i maksymalną (można też z góry przydzielić odpowiednią liczbę liczników, gdy znamy zakres wartości elementów w przeszukiwanej tablicy Z). Zerujemy wszystkie liczniki w L i przeglądamy tablicę Z zwiększając o 1 liczniki w L, które odpowiadają wartościom przeglądanych elementów. W efekcie po zakończeniu przeglądania tablicy Z w L będziemy mieli informację o liczbie wystąpień każdej z wartości. Wyznaczamy w L element maksymalny. Wynikiem jest indeks, który określa wartość występującą najczęściej w Z oraz zawartość elementu L o tym indeksie, która określa, ile razy dana wartość wystąpiła w Z.
Tak określony algorytm wyszukiwania najczęstszego elementu posiada liniową
klasę złożoności obliczeniowej
K01: Utwórz L o rozmiarze maxZ-minZ+1 ; przygotowujemy liczniki wartości K02: Wyzeruj L ; liczniki ustawiamy na 0 K03: Dla i = 0, 1, …, n-1: ; zliczamy wystąpienia wartości elementów wykonuj krok K04 K04: Zwiększ o 1 L[Z[i]-minZ ; w odpowiednich licznikach K05: maxL ← L[0] ; szukamy max w L K06: maxp ← 0 K07: Dla i = 1, 2, …, maxZ-minZ: wykonuj kroki K08…K10 K08: Jeśli L[i] ≤ maxL, to następny obieg pętli K07 K09: maxL ← L[i] ; zapamiętujemy wartość maksymalną K10: maxp ← i ; oraz jej pozycję K11: Pisz maxp+minZ, maxL ; wyprowadzamy najczęstszy element ; oraz liczbę jego wystąpień K12: Zakończ
|
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 umieszcza w tablicy Z 80 liczb pseudolosowych z zakresu od -9 do 9, wyświetla zawartość tej tablicy i wyznacza w niej wartość występującą najczęściej. Program wypisuje tę wartość oraz liczbę jej wystąpień w tablicy Z. |
Pascal// Najczęstsza wartość
// Data: 1.05.2008
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
program prg;
const N = 80;
type Tint = array of integer;
var
Z : array [0..N-1] of integer;
L : Tint;
i, nL, maxZ, minZ, maxL, maxp : integer;
begin
randomize;
// Przygotowujemy tablicę Z[]
for i := 0 to N-1 do
Z[i] := -9+random(19);
// Wyświetlamy tablicę Z[]
for i := 0 to N-1 do
write(Z[i]:4);
// Wyszukujemy w Z[] min i max
if Z[0] > Z[1] then
begin
minZ := Z[1]; maxZ := Z[0];
end
else
begin
minZ := Z[0]; maxZ := Z[1];
end;
i := 2;
while i < N do
begin
if Z[i] > Z[i+1] then
begin
if Z[i] > maxZ then
maxZ := Z[i];
if Z[i+1] < minZ then
minZ := Z[i+1];
end
else
begin
if Z[i] < minZ then
minZ := Z[i];
if Z[i+1] > maxZ then
maxZ := Z[i+1];
end;
inc(i, 2);
end;
// Przygotowujemy liczniki
nL := maxZ-minZ+1;
SetLength(L, nL);
for i := 0 to nL-1 do
L[i] := 0;
// Zliczamy wystąpienia wartości z Z[]
for i := 0 to N-1 do
inc(L[Z[i]-minZ]);
// Szukamy najczęstszej wartości w L[]
maxL := L[0]; maxp := 0;
for i := 0 to nL-1 do
if L[i] > maxL then
begin
maxL := L[i]; maxp := i;
end;
// Wyświetlamy wyniki
writeln;
writeln(maxp+minZ, ' : ', maxL);
writeln;
end. |
// Najczęstsza wartość
// Data: 1.05.2008
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
const int N = 80;
int main()
{
int Z[N], *L, i, nL, maxZ, minZ, maxL, maxp;
srand(time(NULL));
// Przygotowujemy tablicę Z[]
for(i = 0; i < N; i++)
Z[i] = -9+(rand() % 19);
// Wyświetlamy tablicę Z[]
for(i = 0; i < N; i++)
cout << setw(4) << Z[i];
// Wyszukujemy w Z[] min i max
if(Z[0] > Z[1])
{
minZ = Z[1]; maxZ = Z[0];
}
else
{
minZ = Z[0]; maxZ = Z[1];
}
for(i = 2; i < N; i += 2)
{
if(Z[i] > Z[i+1])
{
if(Z[i] > maxZ) maxZ = Z[i];
if(Z[i+1] < minZ) minZ = Z[i+1];
}
else
{
if(Z[i] < minZ) minZ = Z[i];
if(Z[i+1] > maxZ) maxZ = Z[i+1];
}
}
// Przygotowujemy liczniki
nL = maxZ-minZ+1;
L = new int[nL];
for(i = 0; i < nL; i++) L[i] = 0;
// Zliczamy wystąpienia wartości z Z[]
for(i = 0; i < N; i++)
L[Z[i]-minZ]++;
// Szukamy najczęstszej wartości w L[]
maxL = L[0]; maxp = 0;
for(i = 0; i < nL; i++)
if(L[i] > maxL)
{
maxL = L[i]; maxp = i;
}
// Wyświetlamy wyniki
cout << endl
<< (maxp+minZ) << " : " << maxL
<< endl << endl;
delete [] L;
return 0;
} |
Basic' Najczęstsza wartość
' Data: 1.05.2008
' (C)2020 mgr Jerzy Wałaszek
'---------------------------
Const N = 80
Dim As Integer Z(N-1), i, nL, maxZ, minZ, maxL, maxp
Randomize
' Przygotowujemy tablicę Z()
For i = 0 To N-1
Z(i) = -9+Cint(Rnd*18)
Next
' Wyświetlamy tablicę Z()
For i = 0 To N-1
Print Using "####";Z(i);
Next
' Wyszukujemy w Z() min i max
If Z(0) > Z(1) Then
minZ = Z(1): maxZ = Z(0)
Else
minZ = Z(0): maxZ = Z(1)
End If
i = 2
While i < N
If Z(i) > Z(i+1) Then
If Z(i) > maxZ Then maxZ = Z(i)
If Z(i+1) < minZ Then minZ = Z(i+1)
Else
If Z(i) < minZ Then minZ = Z(i)
If Z(i+1) > maxZ Then maxZ = Z(i+1)
End If
i += 2
Wend
' Przygotowujemy liczniki
nL = maxZ-minZ+1
Dim As Integer L(nL-1)
For i = 0 To nL-1: L(i) = 0: Next
' Zliczamy wystąpienia wartości z Z()
For i = 0 To N-1
L(Z(i)-minZ) += 1
Next
' Szukamy najczęstszej wartości w L()
maxL = L(0): maxp = 0
For i = 0 To nL-1
If L(i) > maxL Then
maxL = L(i): maxp = i
End If
Next
' Wyświetlamy wyniki
Print
Print maxp+minZ;" : ";maxL
Print
End |
Python
(dodatek)# Najczęstsza wartość
# Data: 25.02.2024
# (C)2024 mgr Jerzy Wałaszek
#---------------------------
import random
N = 80 # Ilość liczb
z = [] # Tablica
# Przygotowujemy i wyświetlamy tablicę Z[]
for i in range(N):
z.append(random.randrange(-9, 10))
print("%4d" % z[i], end="")
# Wyszukujemy w Z[] min i max
if z[0] > z[1]:
minz, maxz = z[1], z[0]
else:
minz, maxz = z[0], z[1]
for i in range(2, N, 2):
if z[i] > z[i+1]:
if z[i] > maxz:
maxz = z[i]
if z[i+1] < minz:
minz = z[i+1]
else:
if z[i] < minz:
minz = z[i]
if z[i+1] > maxz:
maxz = z[i+1]
# Przygotowujemy liczniki
nc = maxz-minz+1
c = [0]*nc
# Zliczamy wystąpienia wartości z Z[]
for i in range(N):
c[z[i]- minz] += 1
# Szukamy najczęstszej wartości w c[]
maxc, maxp = c[0], 0
for i in range(nc):
if c[i] > maxc:
maxc, maxp = c[i], i
# Wyświetlamy wyniki
print()
print(maxp+minz, ":", maxc)
print()
|
| Wynik: |
-7 -9 -1 0 4 2 7 -1 -4 9 2 1 8 -3 -6 2 0 3 2 0 1 -7 -7 -9 -6 7 -4 -2 -2 8 2 0 -4 -3 0 4 -4 2 4 8 -3 6 -9 -4 2 -3 2 -4 -6 7 -2 7 -4 -5 -1 -4 -5 -2 6 -7 7 2 9 4 -4 8 -3 6 -7 3 2 -8 3 -4 -3 7 7 -7 9 3 -4 : 10 |
Zbiór Z możemy posortować rosnąco. Wtedy elementy o równych wartościach znajdą się obok siebie. Teraz wystarczy przeglądnąć zbiór Z od początku do końca, zliczać powtarzające się wartości i zapamiętać tę wartość, która powtarza się najczęściej. Klasa złożoności obliczeniowej algorytmu w tej wersji zależy od zastosowanego algorytmu sortującego zbiór Z. Samo przeglądnięcie zbioru i wyłonienie najczęstszej wartości ma liniową klasę złożoności obliczeniowej O(n).
Zaletą tego algorytmu jest to, iż elementy tablicy Z nie muszą być koniecznie liczbami całkowitymi. Mogą to być obiekty dowolnego typu.
K01: maxL ← 0 ; inicjujemy liczbę wystąpień na 0 K02: L ← 1 ; w L zliczamy pierwszy element K03: Dla i = 1, 2, …, n: ; przeglądamy kolejne elementy wykonuj kroki K04…K09 ; aż do wartownika K04: Jeśli Z[i] = Z[i-1], ; dla równych elementów to idź do kroku K09 ; zwiększamy L o 1 K05: Jeśli L ≤ maxL, ; elementy nie są równe, to idź do kroku K08 ; sprawdzamy licznik L K06: maxL ← L ; jeśli L > maxL, to zapamiętujemy L K07: maxW ← Z[i-1] ; oraz wartość elementu K08: L ← 0 ; dla nowego elementu licznik L wystartuje od 1 K09: L ← L+1 ; zliczamy elementy równe K10: Pisz maxW, maxL ; wypisujemy wyniki K11: Zakończ
|
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 umieszcza w tablicy Z 200 liczb pseudolosowych z zakresu od 0 do 9, sortuje tablicę algorytmem sortowania przez wybór, wyświetla ją oraz wyznacza najczęstszą wartość. Program wyświetla tę wartość oraz liczbę jej wystąpień. |
Pascal// Najczęstsza wartość
// Data: 1.05.2008
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
program prg;
const N = 200;
var
Z : array [0..N] of integer;
maxL, maxW, minZ, minp, L, i, j, x : integer;
begin
randomize;
// Inicjujemy tablicę Z[]
for i := 0 to N-1 do
Z[i] := random(10);
// Sortujemy tablicę Z[]
for i := 0 to N-2 do
begin
minZ := Z[i];
minp := i;
for j := i+1 to N-1 do
if Z[j] < minZ then
begin
minZ := Z[j];
minp := j;
end;
x := Z[i];
Z[i] := Z[minp];
Z[minp] := x;
end;
// Wyświetlamy tablicę Z[]
for i := 0 to N-1 do
write(Z[i]:2);
writeln;
// Dodajemy wartownika
Z[N] := Z[N-1]-1;
// Szukamy najczęstszej wartości
maxL := 0; L := 1;
for i := 1 to N do
begin
if Z[i] <> Z[i-1] then
begin
if L > maxL then
begin
maxL := L;
maxW := Z[i-1];
end;
L := 0;
end;
inc(L);
end;
// Wyświetlamy wyniki
writeln(maxW, ' : ', maxL);
writeln;
end. |
// Najczęstsza wartość
// Data: 1.05.2008
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
const int N = 200;
int main()
{
int Z[N+1], maxL, maxW, minZ, minp, L, i, j;
srand(time(NULL));
// Inicjujemy tablicę Z[]
for(i = 0; i < N; i++)
Z[i] = rand() % 10;
// Sortujemy tablicę Z[]
for(i = 0; i < N-1; i++)
{
minZ = Z[i]; minp = i;
for(j = i+1; j < N; j++)
if(Z[j] < minZ)
{
minZ = Z[j]; minp = j;
}
swap(Z[i], Z[minp]);
}
// Wyświetlamy tablicę Z[]
for(i = 0; i < N; i++)
cout << setw(2) << Z[i];
cout << endl;
// Dodajemy wartownika
Z[N] = Z[N-1]-1;
// Szukamy najczęstszej wartości
maxL = 0; L = 1;
for(i = 1; i <= N; i++)
{
if(Z[i] != Z[i-1])
{
if(L > maxL)
{
maxL = L; maxW = Z[i-1];
}
L = 0;
}
L++;
}
// Wyświetlamy wyniki
cout << maxW << " : " << maxL
<< endl << endl;
return 0;
} |
Basic' Najczęstsza wartość
' Data: 1.05.2008
' (C)2020 mgr Jerzy Wałaszek
'---------------------------
Const N = 200
Dim As Integer Z(N), maxL, maxW, minZ, minp, L, i, j
Randomize
' Inicjujemy tablicę Z[]
For i = 0 To N-1
Z(i) = Cint(Rnd*9)
Next
' Sortujemy tablicę Z[]
For i = 0 To N-2
minZ = Z(i): minp = i
For j = i+1 To N-1
If Z(j) < minZ Then
minZ = Z(j): minp = j
End If
Next
Swap Z(i), Z(minp)
Next
' Wyświetlamy tablicę Z[]
For i = 0 To N-1
Print Using "##";Z(i);
Next
Print
' Dodajemy wartownika
Z(N) = Z(N-1)-1
' Szukamy najczęstszej wartości
maxL = 0: L = 1
For i = 1 To N
If Z(i) <> Z(i-1) Then
If L > maxL Then
maxL = L: maxW = Z(i-1)
End If
L = 0
End If
L += 1
Next
' Wyświetlamy wyniki
Print maxW;" : ";maxL
Print
End |
Python
(dodatek)# Najczęstsza wartość
# Data: 26.02.2024
# (C)2024 mgr Jerzy Wałaszek
#---------------------------
import random
N = 200
# Inicjujemy tablicę Z[]
z = [random.randrange(10) for i in range(N)]
# Sortujemy tablicę Z[]
for i in range(N-1):
minz, minp = z[i], i
for j in range(i+1, N):
if z[j] < minz:
minz, minp = z[j], j
z[i], z[minp] = z[minp], z[i]
# Wyświetlamy tablicę Z[]
for i in range(N):
print("%2d" % z[i], end="")
print()
# Dodajemy wartownika
z.append(z[N-1]-1)
# Szukamy najczęstszej wartości
maxc, c = 0, 1
for i in range(1, N+1):
if z[i] != z[i-1]:
if c > maxc:
maxc, maxv = c, z[i-1]
c = 0
c += 1
# Wyświetlamy wyniki
print(maxv, ":", maxc)
print()
|
| Wynik: |
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 8 : 28 |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 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.