algorytm.org

Implementacja w Delphi/Pascal

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Wyznaczanie dominanty – mody - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 5
SłabyŚwietny
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.
Dodaj komentarz