Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
zdravím, neodpustím si to ani dnes... :)
Vytvořil jsem algoritmus pro zjištění počtu slov v textu, která obsahují více znaků než hodnota zadaná z klávesnice.
Mám tady problém a to s cyklem opakování... pokud zadám *i:=1 to n* program to nejspíš nepobere asi jede donekonečna až se zaplní obsah datového typu nebo co, no nerozumím tomu. Chtěl bych aby se hodnota nemusela při změně počtu znaků v datovém souboru přepisovat... nějaké nápady, zkoušel jsem to s fcí eof ale neumím to správně zapsat. Šlo by to i jinak? děkuju za příp. tipy.
program Project9;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
f:text;
k,i,n,ps,pz:integer;
zn:string;
begin
writeln('Program pro zjisteni poctu slov s vyce znaky nez pocet zadany z klavesnice');
writeln('--------------------------------------------------------------------------');
pz:=0;
ps:=0;
assign(f,'vstup.txt');
reset(f);
read(f,zn);
writeln('ZADEJ HODNOTU');
readln(k);
writeln;writeln;
for i:=1 to 72 do
if (zn[i]<>' ') and (zn[i]<>'.') then
pz:=pz+1
else begin
if pz<=k then
pz:=0
else
ps:=ps+1;
pz:=0
end;
writeln('Pocet slov:');
writeln(ps);
writeln;writeln;
readln;
end.
Offline
Spíš než načíst celý soubor do paměti bych volil čtení po znacích nebo po řádcích. Textové soubory jsou většinou ukončené speciálním znakem EOF. Pokud už to chceš dělat tímto způsobem, tak se podívej, jestli neexistuje nějaká funkce, která vrací počet znaků v řetězci (v C třeba strlen()), případně si takovou funkci sám napiš.
Offline
↑ květoslav: je to tak, jak pise kolega ↑ septolet: - soubor je treba cist nejlepe po radcich a vyuzit k tomu EOF (end of file) funkci a koukni treba sem: http://pascal.chytrak.cz/cviceni5.html
var soubor: file; radek: string; assignfile(soubor, 'cesta k souboru'); reset(soubor); while not eof(soubor) do begin readln(soubor, radek); ... end;
Offline
Díky za rady nakonec jsem to teda načítal pojednotlivých znacích...
program Projydfect1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
f:text;
k,ps,pz:integer;
zn:char;
begin
writeln('Program pro zjisteni poctu slov s vice znaky nez zadana hodnota');
writeln('---------------------------------------------------------------');
pz:=0;
ps:=0;
assign(f,'vstup.txt');
reset(f);
writeln('Zadej hodnotu:');
readln(k);
writeln;writeln;
while not eof(f) do
begin
read(f,zn);
if (zn<>' ') and (zn<>'.') then
pz:=pz+1
else
begin
if pz<=k then
pz:=0
else
ps:=ps+1;
pz:=0
end;
end;
writeln('Pocet slov:');
writeln(ps);
writeln;writeln;
readln;
end.
Offline
Stránky: 1