Práce s textem – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Práce s textem – Pascal – Fórum – Programujte.comPráce s textem – Pascal – Fórum – Programujte.com

 

Janule
~ Anonymní uživatel
1 příspěvek
28. 2. 2009   #1
-
0
-

Ahoj, mám naprogramovat prrográmek:

Vstupem bude dlouhý text v přirozeném jazyce.

Výstupem bude slovník všech slov, která se v textu vyskytla (podle abecedy) a u každého slova bude četnost výskytů. Dále budou u každého slova uvedeny tři nejčastější slova, která se vyskytují těsně za ním + četnost výskytu těchto tří dvojic.


Už jsem udělala seznam všech slov seřazený podle abecedy i s počtem jejich výskytu, ale nemůžu hnout s těmi slovy za nimi...
Mohl byste mi někdo prosím poradit? Budu ráda za každu radu.

Děkuju moc

Nahlásit jako SPAM
IP: 81.90.161.–
o-lox0
Super člen
2. 3. 2009   #2
-
0
-

řešil bych:
na začátku rozparsuji na slovník slov se strukturou:
sslovo=record
ind:integer; - index pro druhe slovo
pocet:integer;
end;
sslovnik = record
retezec:String[25];
index:integer; -pozice
vyskyt:word;
end;
slovnik:array[1..2000]of sslovnik;
slovo2:array[1..1000,1..3]of sslovo; -pro druhe slovo v paru
pomocne:array[1..100]of sslovo;
pocetslov,pocetindexu:word; -tady si ulozim maxima
pomocnyindex:word; -vyuziti: aktualniindex + az budu projizdet seznam slov za

Proberu se dvema vnorenymi cykly skrze vsechna slova za sebou a indexuji si je
(v podcyklu provadim porovnani se vsemi slovy od "prvniho" az po posledni),
pokud narazim na stejne slovo dam mu stejny index+zvysim vyskyt.
Pokud ma slovo uz index>0 ve vnejsim cyklu ho preskocim.

Pro dalsi cast ukolu-
projedu znova cely slovnik (s promennou x) tentokrat podle indexu,
prvni slovo (index=1) az posledni zaindexovane.

Udelam to 2*cyklem while
pomocnyindex:=1;
while pomocnyindex<pocetindexu
x:=0;
while x<pocetslov begin
x:=x+1;
If slovnik[x].index=pomocnyindex then
begin
Do pomocne[] budu davat vsechna slova, ktera jsou nasledovne ve slovnik[x+1], a to presneji
jen jejich index => pomocne[1].ind:=slovnik[x+1].index;
pomocne[1].pocet:=1;
(( Hlidam napred samozrejme v dalsim podcyklu ze uz zaznamenane slovo existuje
If pomocne[i].ind=slovnik[x+1].index then inc(pomocne[i].pocet); ))

end;
Tri nejvyssi vyskyty ZDE cyklem prekopiruji do slovo2[pomocnyindex,1..3] (zaroven mam i jejich pocet/vyskyt)
napr. slovo2[pomocnyindex,1].ind:=pomocne[i].ind;
end;

Kdyz delam ve Freepascalu a mam jeste vice pameti pouziji misto pomocne[100] radeji pomocne^[pocetindexu] a usetrim tak 1 vnitrni cykl.
Pokud mam NAOPAK malo pameti udelam slovnik jen unikatnich slov a jejich pozici ve Vete
si dam do pole. Pak budu pri hledani slova ZA, prochazet vsechna slova (vcetne porovnavaneho)
a porovnavat pozici/index zase s " x+1 ".
sslovnik = record
retezec:String[25];
index:array[1..50]of integer; -Xkrat pozice ve Vete
vyskyt:word; -pocet
end;
(snad to nemam nejak derave)

Nahlásit jako SPAM
IP: 85.71.152.–
Melamber7770
Newbie
14. 7. 2009   #3
-
0
-

program ukol24;

uses crt;
const {konstanta pro generovani dotazu behem zadani}
{*tady máš onu(podobnou) položku jenom zadáš jejich počet a načteš do programu*}
polozka: array[1..4] of string= ('prijmeni','jmeno',
'telefonni cislo','cislo na mobil');
var
zadani,radek,soubor:string;
s:text; {textovy soubor}
i:integer;
odpoved:char;

procedure novy; {vytvori novy soubor}
begin
rewrite(s);
write(s,'Prijmeni':15); {a zapise do neho hlavicku}
write(s,'Jmeno':15);
write(s,'Telefon':15);
writeln(s,'Mobil':15);
for i:=1 to 60 do write(s,'-');
writeln(s);
close(s);
end;

procedure inicializace;
begin
clrscr;
write('Jmeno souboru: '); {vyber souboru}
readln(soubor);
assign(s,soubor);
{$I-}
reset(s); {testuje jestli soubor existuje}
{$I+}
if ioresult<>0 then novy {kdyz ne tak ho vytvori}
else close(s);
end;

procedure vypis; {vypise obsah souboru}
begin
clrscr;
reset(s);
while not eof(s) do begin
readln(s,radek);
writeln(radek);
end;
repeat until keypressed;
close(s);
end;

procedure vymaz; {vymaze aktualni soubor}
begin
clrscr;
erase(s);
writeln('Soubor ',soubor,' byl smazan!');
writeln('Chcete vybrat jiny soubor A/N');
if upcase(readkey)='A' then inicializace {otevre bud jiny soubor}
else halt; {nebo ukonci program}
end;

procedure pridat; {prida polozku do souboru}
begin
append(s);
repeat
clrscr;

for i:=1 to 4 do begin {generuje dotaz pomoci konstant}
write('Zadejte ',polozka[i],': ');
readln(zadani);
write(s,zadani:15);
end;

writeln(s);
writeln('----------------------');
writeln('Dalsi zaznam? (A/N)');
until upcase(readkey)<>'A';
close(s);
end;

begin { hlavni program - menu}
inicializace;
repeat
clrscr;
writeln('Soubor: ',soubor);
writeln('---------------------');
writeln('Vypsat obsah ...... V');
writeln('Pridat polozku .... P');
writeln('Smazat soubor ..... S');
writeln('Zmena souboru ..... Z');
writeln('---------------------');
writeln('Konec ........... Esc');
odpoved:=upcase(readkey);
case odpoved of
'V': vypis;
'P': pridat;
'Z': inicializace;
'S': vymaz;
end;
until odpoved=chr(27);
end.
takhle se to má dělat...

Nahlásit jako SPAM
IP: 213.19.108.–
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, 17 hostů

Podobná vlákna

Práce s textem — založil bohetik

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ý