Výpis vět s počtem slov větším než je průměr slov ve větě – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výpis vět s počtem slov větším než je průměr slov ve větě – Pascal – Fórum – Programujte.comVýpis vět s počtem slov větším než je průměr slov ve větě – Pascal – Fórum – Programujte.com

 

alex
~ Anonymní uživatel
65 příspěvků
27. 12. 2009   #1
-
0
-

Dobrý den, potřebuji poradit s tímto zadáním:

{Zadani: Vytvorte program, ktery ze vstupniho souboru cte text slozeny z vet ukoncenych teckou.
Slova ve vete jsou oddelena jednou nebo vice mezerami.
Program vytiskne zadany text, vypocte prumerny pocet slov ve vete a vytiskne vsechny vety,
ktere maji vetsi pocet slov nez je prumerny pocet.}

Všechno až na zobrazení vět s počtem slov větším než průměr, budu tedy rád za každou radu a nakopnutí.

program zadani8;

uses crt;

Procedure Zobrazeni;
var
soub:text;
vypis:string;
begin
{zobrazeni textoveho souboru}
writeln('Nacteny soubor obsahuje tento text: ');
writeln(' ');
assign (soub,'C:\text.txt');
reset(soub);
while not EOF(soub) do
begin
readln(soub,vypis);
writeln(vypis);
end;
close(soub);
writeln(' ');
end;

Procedure PrumPocSlov;
const
konecVety=['.'];
konecSlova=[' '];
var
soubor:text;
pocetVet, pocetSlov:integer;
znak:char;
pps:real;

begin

assign (soubor,'C:\text.txt');
reset (soubor);

pocetVet:=0;
pocetSlov:=0;
znak:=' ';

while not EOF(soubor) do
begin
if EOLN(soubor) then
begin

readln(soubor);
znak:=' ';
end
else if not EOF(soubor) then
begin
if not (znak in (konecSlova+konecVety)) then
begin
while not (znak in (konecSlova+konecVety)) and not (EOF(soubor)) and not (EOLN(soubor)) do read(soubor,znak);
Inc (pocetSlov);
end;
if znak in konecVety then
Inc(pocetVet);
while (znak in (konecSlova+konecVety)) and not (EOF(soubor)) and not (EOLN(soubor)) do read (soubor,znak);
end;
end;
close(soubor);
{vypis statistiky souboru}
pps:=(pocetSlov/pocetVet);
writeln('Pocet vet: ',pocetVet);
writeln('Pocet slov: ',pocetSlov);
writeln('Prumerny pocet slov ve vete: ', pps:0:1);
end;

Procedure ZobrazeniVet;
begin
writeln('Vety, ktere maji vetsi pocet slov nez je prumerny pocet: ');



end;

{hlavni program}
begin
clrscr;
Zobrazeni;
PrumPocSlov;
ZobrazeniVet;
readln;
end.

Nahlásit jako SPAM
IP: 188.134.220.–
liborb
~ Redaktor
+18
Guru
28. 12. 2009   #2
-
0
-

Jednak potřebuješ znáty ten průměr i v ZobrazeniVet, takze asi nejlepší je, aby to byla navratová hodnota z PrumPocSlov (udělat z ní funkci http://programujte.com/?akce=clanek&cl=2005120202-turbo-pascal-8-lekce) a předat tuto hodnotu do ZobrazeniVet. A v tom ZobrazeniVet můžeš použít stejný kód, kde počítáš slova v jednotlivých větách (pokud je správně :smile1: ) a když bude počet slov ve větě větší než průměr, tak jí vypíšeš.

Nahlásit jako SPAM
IP: 85.207.166.–
alex
~ Anonymní uživatel
65 příspěvků
28. 12. 2009   #3
-
0
-

ať se snažím sebe víc, vždycky skončím na první větě a dál nevím jak to udělat abych pokračoval na druhé a dalších větách v souboru. Mohli by jste mi poradit?




Procedure VypisVet;

var
soubor:text;
pocets, pocet,:integer;
znak:char;
vetsiveta:string;

assign(soubor,'c:/text.txt');
reset(soubor);

while not eof(soubor) do
begin
read (soubor, znak);
write(znak);

if znak = '.' then
begin vetsiveta:=vetsiveta+'.';
break

end
else
vetsiveta:=vetsiveta+znak;

if ((znak>='0') and (znak<='9')) or ((znak>='A') and (znak<='z')) then
pocet:=pocet+1
else
begin
if pocet>0 then
pocets:=pocets+1;
pocet:=0;

end;


end;
close(soubor);

if pocet>0 then pocets:=pocets+1;
writeln;

writeln(vetsiveta,' ',pocets);

Nahlásit jako SPAM
IP: 188.134.220.–
liborb
~ Redaktor
+18
Guru
29. 12. 2009   #4
-
0
-

Skončí to na první větě, protože si to tak naprogramoval:



if znak = '.' then

begin vetsiveta:=vetsiveta+'.';

break



Tím break vyskočíš z while cyklu (při první tečce). Máš to už v podstatě hotové, jenom místo break tam dej porovnání, jestli je počet slov v aktuální větě větší než průměr (musíš si tu hodnotu předat do VypisVet jako parametr, jak jsem již psal). Pokud bude větší, tak větu vypiš, pokud ne, tak nic nedělej. Následně "vynuluj" ukládanou větu a počítadlo slov. A to by snad mělo být všechno.

Nahlásit jako SPAM
IP: 85.207.166.–
alex
~ Anonymní uživatel
65 příspěvků
29. 12. 2009   #5
-
0
-

Díky moc za rady. Právě jsem úspěšně doprogramoval a funguje to. Ještě jednou díky.

Nahlásit jako SPAM
IP: 188.134.220.–
mrx
~ Anonymní uživatel
1 příspěvek
24. 3. 2010   #6
-
0
-

To alex :

Ahoj, jak si to nakonec cele vyresil? resim dost podobny problem, muzes uverejnit cely zdroj? a.. neni zbytecne stale nacitat stejny soubor v kazde procedure?

Nahlásit jako SPAM
IP: 89.29.2.–
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, 4 hosté

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ý