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
Zdravím,
řeším úlohu danou v názvu tématu a mám problém s napsáním tohoto programu, konkrétně některých jeho částí.
1) Řeším jak napsat proceduru, která testuje zda daný znak v textovém souboru je písmeno.
2) Nevím jak napsat tělo programu, které by mělo obsahovat nějakou proměnnou, která by se vždy zvýšila o 1, pokud by při čtení souboru došlo k přečtení onoho dvacátého slova
Co tedy vlastně mám? Až na deklaraci proměnných, základ těla programu přiřazující textový soubor a funkci která pracuje s tím souborem a jejím úkolem je "vyplivnout" slovo, resp. ukládat znaky do proměnné typu string, dokud nedojde k mezeře. Bohužel jsem teprv programátor začátečník a ještě se úplně neorientuji v jazyku, takže bych Vás chtěl poprosit alespoň o částečné napsání programu, resp. částí 1) a 2).
Díky moc..
Offline
Čtěte vstupní textový soubor text.in a určete, kolikrát se v něm vyskytuje jeho dvacáté slovo.
Slovem zde rozumíme libovolnou souvislou posloupnost písmen, pokud znak, který jí v souboru bezprostředně předchází, ani znak, který ji v souboru bezprostředně následuje, nejsou písmena. Za písmena zde považujeme pouze znaky anglické abecedy. Při porovnávání dvou slov nebereme do úvahy rozdíl mezi malým a velkým písmenem. Předpokládejte, že žádné slovo ve vstupním souboru nebude delší než 30 písmen.
Výsledek bude tedy celé číslo, které zapište na standardní výstup. Jestliže vstupní soubor obsahuje méně než 20 slov, správný výsledek je 0.
Požadavek: Vstupní soubor čtěte pouze jednou.
Příklad vstupního souboru:
A computer file is a block of arbitrary information, or resource for storing information, which is available to a computer program and is usually based on some kind of durable storage. A file is durable in the sense that it remains available for programs to use after the current program has finished. Computer files can be considered as the modern counterpart of paper documents which traditionally are kept in offices' and libraries' files, and this is the source of the term.
Dvacáté slovo v uvedeném souboru je slovo "computer", které se v celém textu vyskytuje třikrát. Správný výstup je tudíž číslo 3.
Jiný příklad vstupního souboru:
<p> Čtěte vstupní textový soubor <code>text.in</code> a určete, kolikrát se v něm případně vyskytuje jeho dvacáté slovo.
</p>
<p> Slovem zde rozumíme libovolnou souvislou posloupnost písmen, pokud znak, který jí v souboru bezprostředně předchází, ani znak, který ji v souboru bezprostředně následuje, nejsou písmena. Za písmena zde považujeme pouze znaky anglické abecedy. Při porovnávání dvou slov nebereme do úvahy rozdíl mezi malým a velkým písmenem. Předpokládejte, že žádné slovo ve vstupním souboru nebude delší než 30 písmen.
</p>
<p> Výsledek bude tedy celé číslo, které zapište na standardní výstup. Jestliže vstupní soubor obsahuje méně než 20 slov, správný výsledek je 0.
</p>
Správný výstup pro uvedený text je číslo 15.
A zdrojak:
program dvacate;
var
soubor:text;
var i:integer;
var znak:char;
var slovo:boolean;
var pismenVeSlove:integer;
var slovoCislo:integer;
var dvacetSlov:array[1..20] of string[30];
var tmpStr:string;
var N:integer;
var dvacet:boolean;
Function isChar(znak:char):boolean;
begin
If (((znak>=chr(65)) and (znak<=chr(90))) or ((znak>=chr(97)) and (znak<=chr(122)))) Then
isChar:=true
else
isChar:=false;
end;
Function lowercase(pismeno:char):char;
begin
If ((ord(pismeno)>=97) and (ord(pismeno)<=122)) Then
begin
lowercase:=chr(ord(pismeno)-32);
end
else
lowercase:=pismeno;
end;
begin
Assign(soubor,'text.in');
Reset(soubor);
slovoCislo:=1;
pismenVeSlove:=0;
slovo:=false;
tmpStr:='';
N:=0;
dvacet:=false;
while not eof(soubor) do
begin
read(soubor,znak);
If isChar(znak) Then
begin
tmpStr:=tmpStr+lowercase(znak);
slovo:=true;
inc(pismenVeSlove);
end
else
begin
If slovo=true Then
begin
slovo:=false;
If dvacet=false Then
begin
dvacetSlov[slovoCislo]:=tmpStr;
end;
If dvacet=true Then
begin
If tmpStr=dvacetSlov[20] Then
begin
inc(N);
end;
end;
If slovoCislo=20 Then
begin
dvacet:=true;
For i:=1 TO 20 DO
begin
If dvacetSlov[i]=dvacetSlov[20] Then
begin
inc(N);
end;
end;
end;
pismenVeSlove:=0;
inc(slovoCislo);
tmpStr:='';
end;
end;
end;
write(N);
end.Offline