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 14. 12. 2010 22:52 — Editoval paces (14. 12. 2010 22:55)

paces
Zelenáč
Příspěvky: 14
Reputace:   
 

počet čísel v txt bez použití array (pole) [Pascal]

Zdravim, potreboval bych pomoci s nasledujicim:

V textovém souboru jsou uložena celá čísla (hodnoty typu integer), oddělená mezerami. Počet všech čísel v souboru není předem znám a může být velmi velký (nelze tedy uložit si všechna čísla do pole!). Soubor není nijak uspořádán, hodnoty čísel se v něm mohou jakkoliv opakovat. Napište program, který určí počet různých hodnot obsažených v tomto souboru.

Veškeré řešení mě napadají s použitím pole, kromě jednoho, které nedokážu dostatečně rozvést a možná to je i blbost a to použití tzv. slévání setříděných souborů, ale to bych musel nějak dostat vše z jednoho do dvou a to je asi  zbytečná kombinace viz. skrytý část...

Díky moc za rady, tipy či váš kód z dřívějška ;-)


Offline

 

#2 16. 12. 2010 19:31

Lumikodlak
Místo: Praha
Příspěvky: 212
Pozice: Programator nebo tak neco :-)
Reputace:   19 
 

Re: počet čísel v txt bez použití array (pole) [Pascal]

Pravdepodobne resis to same co toto, nevim, jak je v presne v zadani mysleno, ze neni mozno vsechna ulozit do pole.

Offline

 

#3 09. 01. 2011 13:50

Majki
Příspěvky: 120
Reputace:   
 

Re: počet čísel v txt bez použití array (pole) [Pascal]

↑ Lumikodlak:
nevejdou se do pole to znamena ze zadanych cisel bude vice nez se muze vlest do pole
myslim ze ve free pascalu se da udelat i pole:array[1..1000000] of ...
ale v borland pascalu je to rozhodne mene nevim presne kolik

Offline

 

#4 09. 01. 2011 15:42

VojtechSejkora
Příspěvky: 176
Reputace:   
 

Re: počet čísel v txt bez použití array (pole) [Pascal]

↑ Majki:
n já myslím že 1 milion čísel je dost málo:d takže asi takto se nedají uložit do pole

↑ paces:
napadlo mě jedno řešení, ale je dosti neefektivní (časově), ale jednoduché:)

vzal by sis 1 číslo a procházel tím souborem...dokud by jsi nebyl na konci a číslo po číslu by sis bral do "ruky" a pokud by bylo stejné tak by jsi ho z toho souboru vymazal atd.
do nějaké rpoměnné by sis ukládal kolikrát jsi musel dojít na konec souboru a to by byl počet těch různých čísel

časovka je cca O(N*M) kde M je počet různých čísel...tedy je to nejhůře O(N^2)

Offline

 

#5 09. 01. 2011 16:05

Mr.Pinker
Příspěvky: 542
Reputace:   12 
 

Re: počet čísel v txt bez použití array (pole) [Pascal]

já sem to řešil takto a pole sem ale použil

Code:

¨program ostpost;
type    dvojpole=array[1..MaxINT,1..2]of boolean;
        tex=text;
var     nacteni:tex ;
        pole:dvojpole;
        a,c,d,e,i:integer;
begin
assign(nacteni,'vstup.txt');
reset(nacteni)           ;
for i:=1 to maxint do
BEGIN
pole[i,1]:=false;
pole[i,2]:=FALSE ;
end;
read(nacteni,a);
begin
repeat
begin
if a =0 then
pole[1,1]:=true
else
if a=abs(a) then
pole[a+1,1]:=true
else
pole[abs(a),2]:=true;
end ;
read(nacteni,a)          ;

until Eof(nacteni);

c:=0                       ;
d:=0                       ;
for i:=1 to MaxInt do
begin
d:=d+ord(pole[i,1]);
c:=c+ord(pole[i,2]);
e:=c+d;
end;
end;
write(e);
end.

Offline

 

#6 09. 01. 2011 17:27 — Editoval Mr.Pinker (09. 01. 2011 17:29)

Mr.Pinker
Příspěvky: 542
Reputace:   12 
 

Re: počet čísel v txt bez použití array (pole) [Pascal]

jo ty už si to viděl ale bacha já do pole neukládám číslo ale jestli už tam to číslo bylo ten program pracuje trochu jinak zkus si ho projet uvidíš že splní to co chceš odevzdával sem ho do codexu a jede
abych to poupravil tebe zajímají spíš hodnoty čísel než přímo čísla a hodnoty budou v rozsahu integeru takže si do pole uložíš že ta hodnota existuje a pak sečteš jen počet hodnot které se tam vyskytly

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson