Matematické Fórum

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

#1 06. 04. 2012 08:21

Melchior
Zablokovaný
Místo: USA
Příspěvky: 87
Pozice: Lindasaf
Reputace:   
Web
 

Pascal - četnost dvacátého slova

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

 

#2 01. 05. 2012 22:00

xxxxx19
Místo: Praha
Příspěvky: 110
Škola: MFF UK (2011-2018, FAP Mgr.)
Pozice: Aktuár
Reputace:   
 

Re: Pascal - četnost dvacátého slova

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

Code:

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

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson