Sortowanie tablicy indeksowanej znakowo

0

Witam. Moim zadaniem jest napisanie aplikacji w Pascalu, która pobierze tekst od użytkownika, a następnie wypisze po kolei litery w kolejności: od tych, których jest najwięcej, do tych, których jest najmniej.

Podstawy już napisałem oraz stworzyłem tablicę indeksowaną znakowo, w której mam wystąpienia poszczególnych liter. W tym momencie zaczynają się problemy, bo miałem pomysł, żeby posortować ją bąbelkowo lub inaczej i póżniej wypisać po kolei elementy, tylko nie wiem czy wtedy nie stracę informacji, jaka litera wystąpiła ileś razy. Z resztą instrukcja inc nie działa.

Proszę o pomoc w tym sposobie wypisania liter, albo o zapodanie jakiegoś innego... :)

 

var s : String;
    temp,x : Integer;
    wyst: array['a'..'z'] of Integer;
    c,k : Char;

begin
  Write('Podaj tekst = ');
  Readln(s);

  for c:='a' to 'z' do
    wyst[c]:=0;

  for x:=1 to (length(s)) do
    wyst[s[x]]:=wyst[s[x]]+1;

  for k:='a' to 'z' do
    if wyst[k]<wyst [inc(k)] then
      begin
        temp:=wyst[k];
        wyst[k]:=wyst[inc(k)];
        wyst[inc(k)]:=temp;
      end;

  Writeln;
  for k:='a' to 'z' do Write(wyst[k],' ');
end.

P.S. Kompiluję w Delphi Personal 7, ale program ma być w Pascalu.

0

Może powiesz, że przeszukałeś 4p ?
Był niedawno taki temat, gdzie było o zliczaniu wystąpień liter w tekście.

0

Widziałem ten temat, bo chyba chodzi Ci o mój poprzedni... Zliczone literki mam, tylko nie wiem wypisać i ominąć "zerowe" litery.

0
mememo napisał(a)

Z resztą instrukcja inc nie działa.

Bo to jest procedura, która ikrementuje argument ale nie zwraca wartości.
Zatem wyrażenie

wyst[inc(k)]

jest bez sensu.

Ponadto kompilator Delphi nie pozwala na modyfikowanie licznika pętli w tym przypadku zmiennej k.
Ale możesz zastosować funkcję

Succ

Natomiast poprawne byłoby zastąpienie wyrażenia

wyst[s[x]]:=wyst[s[x]]+1;

wyrażeniem Inc(wyst[s[x]]);

1 użytkowników online, w tym zalogowanych: 0, gości: 1