Ukládání slov do pole – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ukládání slov do pole – Pascal – Fórum – Programujte.comUkládání slov do pole – Pascal – Fórum – Programujte.com

 

Lill0
Duch
15. 3. 2011   #1
-
0
-

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 :(

Nahlásit jako SPAM
IP: 89.103.245.–
KIIV
~ Moderátor
+43
God of flame
15. 3. 2011   #2
-
0
-

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

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Lill0
Duch
16. 3. 2011   #3
-
0
-

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.

Nahlásit jako SPAM
IP: 89.103.244.–
JoDiK
~ Anonymní uživatel
987 příspěvků
16. 3. 2011   #4
-
0
-

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...

Nahlásit jako SPAM
IP: 88.103.233.–
KIIV
~ Moderátor
+43
God of flame
17. 3. 2011   #5
-
0
-

To JoDiK : me to psat nemusis:) ja to dokazu splacat za 15minut

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
JoDiK
~ Anonymní uživatel
987 příspěvků
17. 3. 2011   #6
-
0
-

To KIIV :
Sorry, nějak se tady v tom rozhraní neorientuju...

Nahlásit jako SPAM
IP: 88.103.236.–
Lill0
Duch
23. 3. 2011   #7
-
0
-

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.

Nahlásit jako SPAM
IP: 89.103.244.–
nervak0
Věrný člen
23. 3. 2011   #8
-
0
-

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

Nahlásit jako SPAM
IP: 213.211.51.–
JoDiK
~ Anonymní uživatel
987 příspěvků
23. 3. 2011   #9
-
0
-

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?

Nahlásit jako SPAM
IP: 88.103.233.–
JoDiK
~ Anonymní uživatel
987 příspěvků
23. 3. 2011   #10
-
0
-

oops, místo dvojitých uvozovek samozřejmě jednoduché (ten visualbasic mě mate)

Nahlásit jako SPAM
IP: 88.103.233.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Podobná vlákna

Ukladaní slov — založil Benjamin

Ukládání slov s diakritikou do mysql — založil Ondřej Ryška

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý