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.
Pascal Uloha
Re: Pascal Uloha
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.
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
- Príspevky: 8223
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Pascal Uloha
Pokial si dobre pametam ( pascal som videl pre milion rokmi ) tak sa v nom da vytvorit pole indexovane aj podla znakov.
Nieco ako
Nieco ako
Kód: Vybrať všetko
var histogram: array['a'..'z'] of integer;
Re: Pascal Uloha
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.