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.