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 20. 09. 2015 09:28

Flaky
Příspěvky: 259
Pozice: student
Reputace:   
 

Pascal - Určení největšího dlouhého čísla v souboru

Dobrý den,

mám problém s následující úlohou v Pascalu:

V textovém souboru CISLA.TXT jsou uložena přirozená čísla. Každé z těchto čísel může mít až 100 dekadických cifer a je zapsáno na samostatném řádku souboru. Zápis žádného čísla nezačíná vedoucími nulami. Čísla v souboru nejsou nijak uspořádána a hodnoty se v souboru mohou libovolně opakovat.

Napište program, který určí největší číslo obsažené v souboru a počet jeho výskytů. Oba výsledky program vypíše na standardní výstup, každý na samostatný řádek.

Příklad vstupního souboru CISLA.TXT:

5555555555555555555555555555
7777777777777777777777777777
55
7777777777777777777777777777
123123123


Odpovídající správný výstup:

7777777777777777777777777777
2


Mé řešení pro mnou zadané hodnoty funguje správně, avšak když program zadám ke kontrole, hlásí mi "Runtime error 201: Range check error". Napadlo mě, že by to mohlo být tím, že soubor CISLA.txt může obsahovat více, než 1000 řádků. Pokud by to mohlo být tím, tak bych se rád zeptal, jak v deklaraci zařídit, abychom měli pole maximální délky, které by odpovídalo různým počtům řádků v souboru.

mé řešení:
program Cisla;
uses CRT;
const MAX = 1000;
VAR line,b: array [1..MAX] of string;
myfile:text;
i,m,pocet,vyskyt,maxlen,T,maxindx:INTEGER;
begin
  //init
  assign(myfile,'CISLA.TXT');                 //prirazeni jmena souboru
  pocet:=0;
  reset(myfile);                              //otevre soubor pro cteni
  //nacte jednotlive radky do pole stringu
  while not eof(myfile) do
  begin
    inc(pocet);                               //pocita radky s cisly v souboru
    readln(myfile,line[pocet]);
    writeln(line[pocet]);
  end;

  //hledame delku nejdelsiho stringu
  maxlen:=0;
  for i:=1 to pocet do
  begin
    //writeln(length(line[i]));
    if(length(line[i])>maxlen) then
      maxlen:=length(line[i]);
  end;
  //zkopirujeme si jen stringy s nejvetsi delkou do pole stringu b[].
  //pocet stringu bude m.
  m:=0;
  for i:=1 to pocet do
    if(length(line[i])=maxlen) then
    begin
      inc(m);
      b[m]:=line[i];
    end;
  //dale prohledavame jen pole b
  //vyhledam index "nejvetsiho" stringu
  maxindx:=0;
  for i:=1 to m do
    if(b[i]>b[maxindx]) then
      maxindx:=i;
  //vypise nejvetsi cislo
  writeln();
  writeln(b[maxindx]);
  //spocitam, kolikrat se vyskytuje
  vyskyt:=0;
  for i:=1 to m do
    if(b[i]=b[maxindx]) then
      inc(vyskyt);
  //vypis vyskytu
  writeln(vyskyt);
  delay(2000);

end.


The only way to learn mathematics is to do mathematics.

                     - Paul Halmos -

Offline

 

#2 21. 09. 2015 08:28 — Editoval Formol (21. 09. 2015 09:06)

Formol
Místo: Praha
Příspěvky: 782
Pozice: krotitel mikroskopů (UHIEM 1. LF UK)
Reputace:   42 
 

Re: Pascal - Určení největšího dlouhého čísla v souboru

↑ Flaky:
Hezký den,
ano, zakopaný pes je v tom, že si upravuješ zadání. V zadání není řečeno, že soubor nebude delší než 1000 řádků, takže musíš předpokládat libovolně dlouhý soubor.

Dále si uvědom, že máš hledat největší číslo, takže je zbytečné načítat co paměti celý soubor a procházet si pole čísel v paměti. Zbytečná duplikace dat. Prostě si na začátku definuj řetězec Max:="0". No a s tím postupně porovnávej jednotlivé načtené řádky. Pokud bude načtené číslo větší, přepíšeš hodnotu Max a vynuluješ čítač, pokud bude stejné, inkrementuješ čítač, a pokud bude menší, půjdeš dál. Až dojdeš na konec souboru, měl bys mít výsledek.

Edit: Přehlédl jsem rozsah čísla, takže jinak...


Доктор сказал «в морг» — значит в морг!

Offline

 

#3 21. 09. 2015 09:29 — Editoval Honzc (21. 09. 2015 10:40) Příspěvek uživatele Honzc byl skryt uživatelem Honzc.

#4 21. 09. 2015 10:42 — Editoval Formol (21. 09. 2015 10:43) Příspěvek uživatele Formol byl skryt uživatelem Formol. Důvod: Vyřešena nejasnost, tak ať se kolega Flaky snaží :-)

#5 21. 09. 2015 11:03 — Editoval Honzc (21. 09. 2015 11:05)

Honzc
Příspěvky: 4647
Reputace:   248 
 

Re: Pascal - Určení největšího dlouhého čísla v souboru

↑ Formol:
Ano-můžeš.
Ono to opravdu u stejně dlouhých čísel funguje.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson