Pascal Uloha

Programovacie jazyky, rady, poradňa...
frenkei
Novice
Novice
Príspevky: 1
Registrovaný: 23 okt 2012, 19:45

Pascal Uloha

Príspevok od používateľa frenkei »

Zdravím,
potreboval by som poradiť s ulohou:

Napíšte program, ktorý od používateľa načíta vetu ukončenú bodkou.
Spočíta počet jednotlivých písmen vo vete a vypíše početnosť písmen.
Písmená, ktoré sa vo vete nenachádzajú nevypisuje.

Problém mam len s vypisaním početnosti jednotlivých písmen,
neviem si s tym rady.
Za pomoc dakujem.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Pascal Uloha

Príspevok od používateľa BX »

Máš niekoľko možností:
1.) Vytvoriť si pole čísel o 26 prvkoch, kde každý index bude predstavovať jedno písameno (na mapovanie môžeš využiť funkcie uppercase a ord a to, že písmeno A má v ASCII hodnotu 65)
Toto pole inicializuješ na nulové hodnoty, prejdeš celú vetu, pri každom výskyte zvýšiš odpovedajúci prvok pola a máš krásne pole početností.

2.) Môžeš 26x prejsť pole a pre každé jedno písmeno si uložiť/vypísať počet výskytov (ale toto radšej nerob. 26 krát prejsť pole, keď ti stačí len raz? Fuj)

3.) Vymyslieť nejaký lepší spôsob, alebo to urobiť spôsobom číslo 1.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Pascal Uloha

Príspevok od používateľa harrison314 »

Pokial si dobre pametam ( pascal som videl pre milion rokmi ) tak sa v nom da vytvorit pole indexovane aj podla znakov.
Nieco ako

Kód: Vybrať všetko

var histogram: array['a'..'z'] of integer;
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: Pascal Uloha

Príspevok od používateľa Gregi »

Velke a male pismena nerozlisuje.

Kód: Vybrať všetko

program F_ZNAKY;
uses Crt;
var
  znaky: array['a'..'z'] of Byte;
  i: Integer;
  veta: string;

BEGIN
  ClrScr;
  Write('Zadaj vetu: ');
  ReadLn(veta);
  for i := 1 to Length(veta) - 1 do {-1 kvoli odstraneniu bodky za vetou}
    case veta[i] of
      'a'..'z': inc(znaky[veta[i]]);
      'A'..'Z': inc(znaky[chr(ord(veta[i])+32)]);
    end;
{ vypis pola prvkov }
  for i := ord('a') to ord('z') do
    if znaky[chr(i)] <> 0 then begin
      Write(chr(i)+'-');
      WriteLn(znaky[chr(i)]);
    end;

END.
Napísať odpoveď