Nadesłany przez Michał Witaszek, 19 lipca 2011 14:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Dominanta.dpr:
//Program do wyznacznia najczęściej występującej wartości w tablicy (dominaty)
//Michał Witaszek
//dla algorytm.org
program Dominanta;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
T: Array of integer; // Tablica będzie przechowywała zadany zbiór liczb
Lista: Array of integer; // Lista liczb występujących w zbiorze
Wystepowanie: Array of integer; // Zapamięta ile razy liczby pojawiają się w zbiorze
n: integer;
i,j: integer; // Będą służyły jako indeksy tablic
znaleziono: boolean; // Podczas przeszukiwania tablic będzie określała czy liczba już zajduje się na liście
const
separator = '---------------------------';
begin
// Pobranie od użytkownika ilości elementów tablicy
Write('Ilosc elementow tablicy: ');
ReadLn(n);
// Ustawienie długości tablicy T[]
setLength(T, n);
// Inicjalizacja pozostałych tablic
setLength(lista, 1);
setLength(wystepowanie, 1);
// z długością 1, ponieważ nie można ustawić długości tablicy na 0
WriteLn(separator);
// Odczytywanie n elementów tablicy
for i:=0 to Length(T)-1 do
begin
Write('Wartosc nr ', i+1, ': ');
ReadLn(T[i]);
end;
// Przeszukiwanie zadanej tablicy T[]
for i:=0 to Length(T)-1 do
begin
j:=0;
znaleziono:= false;
// Przeszukuje listę liczb aż znajdzie w niej aktualnie odczytaną wartość z tablicy T[]
// lub osiągnie koniec listy
repeat
if Lista[j]= T[i] then //Jeśli liczba znajduje się na liście...
begin
Wystepowanie[j]:= Wystepowanie[j]+1; // Zwiększ ilość wystąpień liczby o 1
znaleziono:= true; // Zapamiętaj że odnaleziono liczbę.
end;
j:=j+1;
until (znaleziono) or (j>=Length(lista));
if not znaleziono then //Jeśli liczba nie znajduje się jeszcze na liście...
begin
if i>0 then // Jeśli nie pracujemy na pierwszym elemencie tablicy...
begin
setLength(lista, length(lista)+1); //Zwiększ długość listy o 1
setLength(wystepowanie, length(wystepowanie)+1); //Zwiększ długość tablicy wystąpień o 1
end;
lista[length(lista)-1]:=T[i]; //Wstaw liczbę na ostanią pozycje w liście
wystepowanie[length(wystepowanie)-1]:=1; //Ustaw ilość wystąpień liczby na 1
end;
end;
WriteLn(separator);
//Dla przejżystości program wypisze ilośći wystąpień wszystkich liczb.
for i:=0 to length(lista)-1 do WriteLn(lista[i], ' x ', wystepowanie[i]);
WriteLn(separator);
//Szukanie najczęściej występującej liczby
i:=0; j:=0;
for i:=1 to length(wystepowanie)-1 do //Przeszukanie tablicy występowania liczb
begin
//Jeśli liczba wystąpień jest większa od poprzednio znalezionej...
if wystepowanie[i]>wystepowanie[j] then j:=i; // zapamiętaj indeks liczby.
end;
//Wypisz wynik
WriteLn('Dominanta jest liczba ', lista[j]);
WriteLn('Pojawia sie ', wystepowanie[j], ' razy.');
//Czekaj na ENTER
ReadLn;
end.

