Ahoj. Prosím o radu. Mým úkolem je vytvořit program, který čte text ze souboru, najde písmeno, které se zde vyskytuje nejčastěji a poté vypíše slova, ve kterých se toto písmeno vyskytuje. Písmeno se mi podařilo najít, ale stále mám problém s výpisem slov. Moje myšlenka je procházet text po znacích a pokud znak = mezera, tak uložit jako slovo do pole, ale stále mi program nefunguje :(
Fórum › Pascal
Ukládání slov do pole
To Lill : no kdyz nacitas ze souboru tak v prvnim behu najdi pismeno, reset souboru a znova nacitat uz po slovech.. na to by ti mela stacit jedna promenna string .. znaky pridavas, pokud narazis na spravnej nastavis si priznak pro vypsani, narazis na mezeru nebo enter tak podle priznaku vypises nebo nevypises a vymazes slovo...
a pokracujes dale
No mám tohle..ale dál se prostě nemůžu dostat..tady asi končí moje hranice :( prosím prosím o pomoc
program projekt;
uses crt;
var
soubor: text;
radek: string;
i,z: integer;
znak,max: char;
vyskyt: array['A'..'Z'] of integer;
procedure pismena(radek:string);
begin
if znak=' ' then
delete(radek,1,1);
for znak:='A' to 'Z' do vyskyt[znak]:=0;
for i:=1 to ord(radek[0]) do
if upcase(radek[i]) in ['A'..'Z'] then
inc(vyskyt[upcase(radek[i])]);
max:='A';
for znak:='B' to 'Z' do
if vyskyt[znak]>vyskyt[max] then
max:=znak;
write('nejvice se vyskytuje pismeno ');
for znak:='A' to 'Z' do
if vyskyt[znak]=vyskyt[max] then
write(znak:3);
writeln;
writeln('pismeno se vyskytuje ',vyskyt[max],'.')
end;
begin
clrscr;
assign(soubor, 'c:\tp\ukol.txt');
reset(soubor);
writeln('TEXT');
while not eof(soubor) do
begin
readln(soubor, radek);
writeln(radek);
end;
readln;
pismena(radek);
readln;
writeln(max);
readln;
close(soubor);
end.
To KIIV :
No především, ty celý soubor řádek po řádku přečteš a vypíšeš na obrazovku a pak poslední přečtený řádek pošleš na zpracování do procedury písmena, která z tohoto jednoho zpracovaného řádku zjistí nejčastěji se vyskytující znak a vypíše ho.
Takže se nejřív ujasni co ten program má udělat, pak zjisti jak se to dá naprogramovat a teprve potom to piš do programu.
Proceduru radek zkrať a nech v ní jenom zpracovávat statistiku znaků (nulování počtu znaků přesuň na začátek hlavního programu a ukonči ji přesně v místě, kde máš vynechaný řádek). Pak ji zavolej s každý řádkem, který ze souboru přečteš, neboli volání přesuň dovnitř cyklu čtení ze souboru.
Až to projde celý soubor, budeš mít v poli statistiku znaků.
Nejčastěji se vyskytující znak hledej buď v samostatné proceduře, nebo klidně v hlavním programu a pokud chceš procesoru trochu ušetřit práci, misto tohoto kódu:
for znak:='A' to 'Z' do
if vyskyt[znak]=vyskyt[max] then
write(znak:3);
raději rovnou vypiš proměnnou MAX - vždyť v ní přece máš ten znak co tak pracně hledáš...
No a potom, co soubor zavřeš, znovu ho otevři a přečti z něj všechny řádky, které předej do procedury třeba pis_slova(radek)
Ta procedura bude hledat slova v textu obsahující písmeno v proměnné max například takto:
vynuluj proměnnou slovo, nastav proměnnou je_tam na nepravda
procházej řádek znak po znaku od prvního po poslední
pokud aktuální znak není mezera, přičti ho do slova a jestli je to hledaný znak, nastav proměnou je_tam na pravda
jinak (pokud to je mezera) v případě že je_tam, vypiš slovo a vynuluj ho a nastav proměnnou je_tam na nepravda.
To by mohlo fungovat...
No snad jsem pochopila správně..s těma řádkama si snad ještě poradím, ale zkusila jsem udělat tu proceduru na vypsání slov a pořád tam mám něco špatně:( asi s pascalem nebudem nikdy kamarádi :(
program projekt;
uses crt;
var
soubor: text;
radek: string;
slovo: string;
jetam: boolean;
i,z: integer;
znak,max: char;
vyskyt: array['A'..'Z'] of integer;
procedure pismena(radek:string);
begin
max:='A';
for znak:='B' to 'Z' do
if vyskyt[znak]>vyskyt[max] then
max:=znak;
write('nejvice se vyskytuje pismeno ');
for znak:='A' to 'Z' do
if vyskyt[znak]=vyskyt[max] then
write(max);
writeln;
writeln('pismeno se vyskytuje ',vyskyt[max],'.')
end;
procedure pisslova(radek:string);
begin
slovo:='';
jetam:=false;
read(soubor,radek);
while not eof(soubor) do
begin
if znak <> ' ' then
begin
slovo:=slovo + znak;
if znak = max then
begin
jetam:=true;
end;
end;
if (znak=' ') and (jetam = true) then
begin
writeln(slovo);
slovo:='';
jetam:=false;
end;
end;
end;
begin
clrscr;
assign(soubor, 'c:\tp\ukol.txt');
reset(soubor);
writeln('TEXT');
while not eof(soubor) do
begin
readln(soubor, radek);
writeln(radek);
end;
if znak=' ' then
delete(radek,1,1);
for znak:='A' to 'Z' do vyskyt[znak]:=0;
for i:=1 to ord(radek[0]) do
if upcase(radek[i]) in ['A'..'Z'] then
inc(vyskyt[upcase(radek[i])]);
readln;
pismena(radek);
readln;
close(soubor);
reset(soubor);
pisslova(radek);
readln;
close(soubor);
end.
vynulujes pocet vyskytu
otevres soubor
ctes ho dokud nedojdes na konec
pocitas vyskyty pismen v nactenem textu
vyberes znak(y) s nejvetsim poctem vyskytu
vratis soubor na zacatek
zase ho ctes dokud nedojdes na konec
pro kazde nactene slovo zjistis jestli obsahuje ten znak
pokud ano, tak to slovo vypises
zavres soubor
To Lill :
Prosímtě, asi by sis měla to zakamaráďování Pascalem trošku rozkouskovat.
Máš v tom děsnej chaos (seš si jistá že víš, co ti jednotlivé části programu dělají?) a v tom "velkým programu" se asi hned tak nezorientuješ. Taky když se sem koukneš jednou za týden, to asi budeš vyrábět ještě dlouho...
Na chvíli zapomeň, že máš nějaký vstupní soubor a udělej si jednotlivé podprogramy:
v hlavnim programu si data připravíš napevno a predas je do procedury pisslova nejak takto:
begin
radek:="Toto je takovyto nejaky text";
max:="T";
pisslova(radek)
end.
A dokud se ti nevypisou tri slova
Toto
takovyto
text
tak nebudes pokracovat...
v té proceduře pisslova vyhoď čtení ze souboru a uvědom si, že radek je pole znaků (řetězec) a musíš ho projít písmenko po písmenku abys našla ta slova obsahující hledané písmeno.
Za týden ahoj?
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Ukladaní slov — založil Benjamin
Ukládání slov s diakritikou do mysql — založil Ondřej Ryška
Ukládaní slov ze souboru do proměnné ,knihovna fstream — založil Marek
Načtení slov do pole ze souboru — založil Kenvelo
Výpis nejdelších slov z pole — založil pazdy
Moderátoři diskuze