Třídění textového souboru v Pascalu – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Třídění textového souboru v Pascalu – Pascal – Fórum – Programujte.comTřídění textového souboru v Pascalu – Pascal – Fórum – Programujte.com

 

Markéta
~ Anonymní uživatel
18 příspěvků
30. 11. 2018   #1
-
0
-

Zdravím, chtěl bych se zeptat, jak zjistím počet různých čísel v textovém souboru, jehož velikost je příliš velká na to, aby se všechna čísla dala uložit do pole, nebo spojového seznamu, a který obsahu je čísla v rozsahu typu integer?

Nahlásit jako SPAM
IP: 178.17.11.–
jerry
~ Anonymní uživatel
512 příspěvků
30. 11. 2018   #2
-
0
-

#1 Markéta
pokud uvažuješ soubor o velikosti třeba 10000 TB tak asi těžko ... :)))

jak je ten soubor velkej ??? 1GB ? nebo tak nějak ? jde o to, že v starým pascalu je limit 64KB pro statický proměnný a necelej 1MB pro dynamický

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:7c9a:7cd9:106d:90be...–
Markéta
~ Anonymní uživatel
18 příspěvků
30. 11. 2018   #3
-
0
-

#2 jerry

rozhodně není 10000 TB ))) 

velikost souboru není známa, ale může být tak velký, že se nevejde do pole, avšak měl by mít rozumnou velikost (jakože úloha je proveditelná)

Nahlásit jako SPAM
IP: 178.17.11.–
gna
~ Anonymní uživatel
1891 příspěvků
30. 11. 2018   #4
-
0
-

To samozřejmě nespočítáš bez toho, že by sis ty výskyty nějak pamatoval(a). Když se to nevejde do paměti, tak třeba do souboru. Pokud prostě není možnost si to pamatovat, tak se to dá jen odhadovat, ale kdybyste řešili takové algoritmy, tak nepřijdeš s tímhle dotazem.

Tady možná půjde o to, že ti na každé číslo stačí jeden bit.

Nahlásit jako SPAM
IP: 213.211.51.–
JerryM0
Věrný člen
1. 12. 2018   #5
-
0
-

#1 Markéta
....no existuje možnost, že nebudeš používat paměť RAM pro ukládání mezivýsledků ale všechno budeš zapisovat do souboru na disku - použiješ disk místo paměti, ale počítej s tim, že magnetickej disk má seek cca 12ms. Navíc mám takovej pocit, že starej pascal měl limit pro velikost souborů 128MB a později 2GB. Nezapomeň si vynásobit (2GB^2)x12ms a to je nejhorší časový odhad JEN pro čtení. V reálu budeš někde níže .... Takže asi budeš muset použít nějakou rychlou M.2 s přístupem 3000MB zápis/2500MB čtení. Tvuj dotaz je ale stejně divnej ...  

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:f9ea:343d:da2d:5303...–
MilanL+1
Grafoman
1. 12. 2018   #6
-
0
-

#5 JerryM

to bych asi řešil jinak rozdělením rozsahu, zdrojový soubor projít na rozsah to ukládat do pole v paměti, poté uložit a stejným způsobem projít soubor na další rozsahy. případně možná jako řídkou mapu hodnota-counter

Nahlásit jako SPAM
IP: 185.112.167.–
Mircosoft+1
Věrný člen
2. 1. 2019   #7
-
0
-

#1 Markéta
Vzhledem k tomu, že se má zjistit počet RŮZNÝCH čísel v souboru, tak není potřeba ukládat do paměti celý ten soubor, ale jenom informaci o tom, které číslo už jsi viděla a které ještě ne. Tj. asi pole booleanů s indexem o rozsahu typu integer. V prvním cyklu projdeš soubor a zapamatuješ si nalezená čísla, ve druhém projdeš to pole a spočítáš, kolik prvků má hodnotu true.

Jestli používáš nějaký realmodový pascal (Turbo apod.), tak je integer 16bitový, pole array[integer] of boolean zabere přesně 64 KB a jako statická globální proměnná by mělo normálně fungovat. Jestli děláš v 32bitovém prostředí (Freepascal apod.), integer je 32bitový a pole zabere 4 GB - to je hodně, ale s virtuální pamětí OS snad ještě proveditelné. Jestli ne, dá se objem dat zredukovat na osminu tím, že jednotlivé booleany budeš ukládat jako bity (trochu víc režie, ale pořád jednoduché a rychlé) a půl giga už je v pohodě.

Nahlásit jako SPAM
IP: 94.113.255.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
2. 1. 2019   #8
-
0
-

#7 Mircosoft
V zadání není uveden datový typ čísla (int, float...) a tak rozsah čísla a počet jeho desetinných míst není nijak omezen. Takže použití pole typu boolean o konečném počtu prvků je nevhodné.

Nezbude, než použít postup uvedený výše: každé číslo při jeho prvním výskytu někam uložit - v nejhorším případě do souboru - a vytvářet tak seznam unikátních čísel. Každé číslo porovnávat s tímto seznamem. Zefektivnění pro velký počet unikátních čísel lze dosáhnout tím, že seznam čísel, která se již vyskytla, rozdělí na intervaly a porovnávání bude provádět jen na dílčím intervalu.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
gna
~ Anonymní uživatel
1891 příspěvků
3. 1. 2019   #9
-
0
-

#8 hlucheucho
Píše čísla v rozsahu typu integer.

Nahlásit jako SPAM
IP: 213.211.51.–
jerry
~ Anonymní uživatel
512 příspěvků
3. 1. 2019   #10
-
0
-

#1 Markéta
Starej turbo pascal v7 měl rozsah čísel typu Integer roven <-32768,+32767>. Takže ste si asi moc velkej soubor udělat nemohli. Pak byl eště LongInt <-2147483648,+2147483647>. Ano, byl tu s námi 16bit mode zvaný jako 16bit protected mode viz http://dos32a.narechk.net/index_en.html ale ten s námi setrval jen asi 2 roky a pak umřel :) ... a týkal se procesorů 80286 :) ty už sou taky mrtvý...

32bit integer je 32bit jenom v dnešní době ale tehdy byl 16bitovej ....

Nechápu proč někdo v roce 2018 eště používá pascal. navíc FreePascal má poslední stabilní verzi 1.0 všechno další nefunguje.... Je tu C#, Java a samozřejmě vymršenej UWP ... a stejně 90 procent softwaru se v dnešní době dělá pro web ... učit se pascal je sebevražda ...

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:65ae:4944:22cc:bb95...–
Sniper
~ Anonymní uživatel
215 příspěvků
3. 1. 2019   #11
-
0
-

"navíc FreePascal má poslední stabilní verzi 1.0"  no to je blábol. Pascal sice není in, ledacos mu chybí a má spoustu nedostatků, ale tvrdit, že je mrtvej, to je jinej level. Když o vývoji pascalu (Delphi, FPC, Oxygene) nic nevíš, nebo žiješ před pětadvaceti lety, tak se k tomu laskavě nevyjadřuj.

Co sem taháš protected mode taky nevim, to je 35+ let stará záležitost procesoru (a přeneseně tudíž kompileru), programovacího jazyka se to netýká.

Nahlásit jako SPAM
IP: 92.240.176.–
jerry
~ Anonymní uživatel
512 příspěvků
3. 1. 2019   #12
-
0
-

#11 Sniper
kdo z vás naposled dělav ve Free Pascalu ?

verze:

i8086 MS-DOS

a

Intel/i386 Dos (GO32v2 extender)

on opravdu funguje ? spousta věcí tam nefunguje, nefunguje grafika, fonty atd ...atd ..  poslední stabilní verze je 1.0

verze pro linux je na tom o poznání lépe :)

a DOS32X extender pořád běží na hromadě starejch NC-ček a telefonních ústředen.

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:65ae:4944:22cc:bb95...–
Sniper
~ Anonymní uživatel
215 příspěvků
3. 1. 2019   #13
-
0
-

Já dneska ráno. Mluvím o tomhle Free Pascalu: https://www.freepascal.org

Poslední stable release je 3.0.4 (pravda dnes již předloňský), trunk taky většinou jede dobře. Na FPC je postavený Lazarus, takže i GUI aplikace a použitelný editor/vývojové prostředí také nejsou problém.

Nemáš na mysli spíš Turbo Pascal nebo podobně?

Nezpochybňuju že starej HW je pořád kolem nás a je ho třeba, ale řešit to u školní úlohy mi přijde totálně mimo mísu.

Nahlásit jako SPAM
IP: 92.240.176.–
jerry
~ Anonymní uživatel
512 příspěvků
3. 1. 2019   #14
-
0
-

#13 Sniper
musel bych se kouknout která verze to byla .. dělal sem ve FreePascalu naposled v roce 2009/2010 a po zjištění že nejdou fotny sem to zabalil a šel do C++/CLI + pak C# ....

byla to verze i8086 MS-DOS

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:65ae:4944:22cc:bb95...–
Sniper
~ Anonymní uživatel
215 příspěvků
3. 1. 2019   #15
-
0
-

Njn, osm let zpět. Fonty - předpokládám že se bavíme o GUI aplikaci, to by znamenalo že je problém v použitý komponentě/knihovně (Lazarus nebo něco jinýho?), ne v FP samotným, protože ten, podobně jako třeba holý C, pro nic takovýho podporu nemá.

Je fakt že pár let zpět to bylo s LCL (Lazarus component library) dost tragický, ale teď je to podstatně lepší. Ale zase, to není otázka jazyka, ale knihoven.

Nahlásit jako SPAM
IP: 92.240.176.–
jerry
~ Anonymní uživatel
512 příspěvků
4. 1. 2019   #16
-
0
-

#15 Sniper
jo problém byl s grafickýma knihovnama .. jak je to to teď nevim a zpět do FP se mi ani nechce.

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:b037:fbff:97db:788f...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Třídění dat v souboru — založil griddlecake

Matice z textového souboru ? — založil Robin93

Procházení textového souboru — založil dragon124

Cteni z textoveho souboru — založil tomas

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý