Mássalhangzó, magánhangzó és betű számláló Pascalban?
Sziasztok!
Egy olyan programot kellene írnom Pascalban, ami kér egy szöveget és kiírja hogy mennyi mássalhangzó és magánhangzó található a szövegben, aztán megkérdezi hogy milyen betű számaira vagyunk kíváncsiak és azt is kiírja.
Nos, mégis hogy nézni ki ez a program? A mássalhangzókhoz és magánhangzókhoz tömböt kellene használnom?
A speciális karaktereket mint például a '?' vagy a ',' stb.. char típusú változóként kell használni?
Ugyan így szeretném megcsinálni azt, hogy kiírja a speciális karaktereket mint a mással és magánhangzókat is.
Igen, azokat is ugyanúgy kelll ahogy a kódban látod.
Ahogy előző írja, UTF8 vagy hasonló esetén az ékezetes karakterekkel gond lehet.
Nem biztos hogy jól valósítottam meg a feladatot (mármint ahogy a tanár elvárja olyan szempontból), mit mondtak, hogy mivel valósítsd meg a feladatot, tömbbel vagy adtak valamilyen instrukciót?
Semmit nem mondott konkrétan, de tömbökre gondolok. Nos megpróbáltam a speciális karaktereket is megoldani, de valami hiba van benne. Így néz ki jelenleg:
program maganhangzo_massalhangzo_betuszamlalo;
var
maganhangzo, massalhangzo, kulonlegeskarakter, szoveg, x, y : string;
maganhangzos:array[1..14] of byte;
massalhangzos:array[1..21] of byte;
specialiskarakter:array[1..19] of longint;
i,j,k,l : byte;
betu : char;
betus : byte;
begin
betus := 0;
for j := 1 to 14 do
maganhangzos[j]:=0;
for k := 1 to 21 do
massalhangzos[k]:=0;
for l := 1 to 19 do
specialiskarakter[l]:=0;
maganhangzo:='áéöőüűúóíaeiou';
massalhangzo:='bcdfghjklmnpqrstvwxyz';
kulonlegeskarakter:=',;?.:-_@#/\+"!%=()*';
write('Irjon be egy szoveget! ');
ReadLn(szoveg);
Write('Kerem a megszamolando betut : ');
ReadLn(betu);
for i := 1 to length(szoveg) do
begin
for l:=1 to 19 do
if (lowercase(szoveg[i])=kulonlegeskarakter[l]) then inc(specialiskarakter[l]);
for j:=1 to 14 do
if (LowerCase(szoveg[i])=maganhangzo[j]) then inc(maganhangzos[j]);
for k:=1 to 21 do
if (LowerCase(szoveg[i])=massalhangzo[k]) then inc(massalhangzos[k]);
if (LowerCase(szoveg[i])=LowerCase(betu)) then inc(betus);
end;
WriteLn;
WriteLn('A szovegben a(z) ',betu,' betu ',betus,' alkalommal fordult elo.');
writeln;
writeln('Szeretne latni a massalhangzok es maganhangzok szamat is?');
readln(x);
if x = 'igen' then
WriteLn('Maganhangzok: ');
for j:=1 to 14 do
if maganhangzos[j]>0 then writeln(maganhangzo[j],' betu: ',maganhangzos[j],' alkalommal fordult elo.');
writeln('Massalhangzok:');
for k:=1 to 21 do
if massalhangzos[k]>0 then writeln(massalhangzo[k],' betu: ',massalhangzos[k],' alkalommal fordult elo.');
writeln;
writeln('Szeretne latni a kulunleges karakterek szamat is?');
readln(y);
if y = 'igen' then
writeln('kulonlegeskarakterek: ');
for l:=1 to 19 do
if specialiskarakter[l]>0 then writeln(kulonlegeskarakter[l],' karakter: ',specialiskarakter[l]' alkalommal fordult elo.');
writeln;
readln;
end.
Nos.. Kihagytam egy vesszőt a(z) if specialiskarakter[l]>0 then writeln(kulonlegeskarakter[l],' karakter: ',specialiskarakter[l],' alkalommal fordult elo.');
sorban. Lehet hogy rondán vezettem le az egészet, de úgy néz ki hogy működik. Köszönöm a segítséget!
Kicsit pontosítanék.. Jelenleg kiírja a magán és mássalhangzókat, speciális karaktereket és a keresett betű számait.
Nos, azt szeretném, ha megkérdezné például azt, hogy 'Szeretné látni a különleges karaktereket?' Erre igennel és nemmel lehet válaszolni, ha igen, kiírja, ha nem akkor továbbhalad. Ezt hogyan oldhatnám meg? Jelenleg így néz ki:
program maganhangzo_massalhangzo_betuszamlalo;
uses crt;
var
maganhangzo, massalhangzo, kulonlegeskarakter, szoveg : string;
maganhangzos:array[1..14] of byte;
massalhangzos:array[1..21] of byte;
specialiskarakter:array[1..19] of byte;
i,j,k,l : byte;
betu : char;
betus : byte;
begin
betus := 0;
for j := 1 to 14 do
maganhangzos[j]:=0;
for k := 1 to 21 do
massalhangzos[k]:=0;
for l := 1 to 19 do
specialiskarakter[l]:=0;
maganhangzo:='áéöőüűúóíaeiou';
massalhangzo:='bcdfghjklmnpqrstvwxyz';
kulonlegeskarakter:=',;?.:-_@#/\+"!%=()*';
write('Irjon be egy szoveget! ');
readln(szoveg);
Write('Kerem a megszamolando betut : ');
readln(betu);
for i := 1 to length(szoveg) do
begin
for l:=1 to 19 do
if (lowercase(szoveg[i])=kulonlegeskarakter[l]) then inc(specialiskarakter[l]);
for j:=1 to 14 do
if (lowercase(szoveg[i])=maganhangzo[j]) then inc(maganhangzos[j]);
for k:=1 to 21 do
if (lowercase(szoveg[i])=massalhangzo[k]) then inc(massalhangzos[k]);
if (lowercase(szoveg[i])=lowercase(betu)) then inc(betus);
end;
WriteLn;
WriteLn('A szovegben a(z) ',betu,' betu ',betus,' alkalommal fordult elo.');
writeln;
WriteLn('Maganhangzok: ');
for j:=1 to 14 do
if maganhangzos[j]>0 then writeln(maganhangzo[j],' betu: ',maganhangzos[j],' alkalommal fordult elo.');
writeln('Massalhangzok:');
for k:=1 to 21 do
if massalhangzos[k]>0 then writeln(massalhangzo[k],' betu: ',massalhangzos[k],' alkalommal fordult elo.');
writeln('Kulonleges karakterek: ');
for l:=1 to 19 do
if specialiskarakter[l]>0 then writeln(kulonlegeskarakter[l],' karakter: ',specialiskarakter[l],' alkalommal fordult elo.');
readln;
end
Így gondoltad?
K9özvetlenül a billentyűzetről olvas be és egy betű elég a választáshoz, így egyszerűsítettem.
program maganhangzo_massalhangzo_betuszamlalo;
Uses CRT;
var
maganhangzo, massalhangzo, kulonlegeskarakter, szoveg : string;
maganhangzos:array[1..14] of byte;
massalhangzos:array[1..21] of byte;
specialiskarakter:array[1..19] of longint;
i,j,k,l : byte;
betu : char;
betus : byte;
ch : char;
begin
betus := 0;
for j := 1 to 14 do
maganhangzos[j]:=0;
for k := 1 to 21 do
massalhangzos[k]:=0;
for l := 1 to 19 do
specialiskarakter[l]:=0;
maganhangzo:='áéöőüűúóíaeiou';
massalhangzo:='bcdfghjklmnpqrstvwxyz';
kulonlegeskarakter:=',;?.:-_@#/\+"!%=()*';
write('Irjon be egy szoveget! ');
ReadLn(szoveg);
Write('Kerem a megszamolando betut : ');
ReadLn(betu);
for i := 1 to length(szoveg) do
begin
for l:=1 to 19 do
if (lowercase(szoveg[i])=kulonlegeskarakter[l]) then inc(specialiskarakter[l]);
for j:=1 to 14 do
if (LowerCase(szoveg[i])=maganhangzo[j]) then inc(maganhangzos[j]);
for k:=1 to 21 do
if (LowerCase(szoveg[i])=massalhangzo[k]) then inc(massalhangzos[k]);
if (LowerCase(szoveg[i])=LowerCase(betu)) then inc(betus);
end;
WriteLn;
WriteLn('A szovegben a(z) ',betu,' betu ',betus,' alkalommal fordult elo.');
writeln;
writeln('Szeretne latni a massalhangzok es maganhangzok szamat is?');
repeat
write(' I/N');
ch := (UpCase(ReadKey));
until (ch <> 'I') or (ch <> 'N');
if ch = 'I' then
begin
WriteLn('Maganhangzok: ');
for j:=1 to 14 do
if maganhangzos[j]>0 then writeln(maganhangzo[j],' betu: ',maganhangzos[j],' alkalommal fordult elo.');
writeln('Massalhangzok:');
for k:=1 to 21 do
if massalhangzos[k]>0 then writeln(massalhangzo[k],' betu: ',massalhangzos[k],' alkalommal fordult elo.');
end;
writeln;
writeln('Szeretne latni a kulunleges karakterek szamat is?');
repeat
write(' I/N');
ch := (UpCase(ReadKey));
until (ch <> 'I') or (ch <> 'N');
if ch = 'I' then
begin
writeln('kulonlegeskarakterek: ');
for l:=1 to 19 do
if specialiskarakter[l]>0 then writeln(kulonlegeskarakter[l],' karakter: ',specialiskarakter[l],' alkalommal fordult elo.');
end;
writeln;
readln;
end.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!