Pole presahujici longint... – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pole presahujici longint... – Pascal – Fórum – Programujte.comPole presahujici longint... – Pascal – Fórum – Programujte.com

 

drobas0
Newbie
30. 10. 2008   #1
-
0
-

Zdravim,
potrebuju udelat pole nebo proste neco kam budu moct ukladat informace o 1 000 000 polozkach...

vysvetleni... mam priklad: sestavit program ktery precte na vstupu cislo (ktere muze byt max. 1 000 000) a rozlozit ho na soucet prvocisel...neni problem, ale kde ulozit tech 200 000 prvocisel to fakt nevim...nekdo nakej napad?

(pokud se nemylim pascal ma longint neco okolo 65000 takze neni moc sance no)

Nahlásit jako SPAM
IP: 195.113.69.–
KIIV
~ Moderátor
+43
God of flame
31. 10. 2008   #2
-
0
-

pascal nema longint 65000 ... si pletes s promennou typu word...
longint je na 4B tudiz si spocitej kolik je asi tak 2^31 (jeden bit je na znamenko)

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
drobas0
Newbie
31. 10. 2008   #3
-
0
-

dik za opravu, ale stejne mi to nepomuze, potrebuju neco k tematu :-D...pascal asi nema rad velky pole protoze array[1..1000,1..1000] of longint nebere...chtel sem to udelat tak ze pro kazdy cislo ulozim hodnotu true nebo false podle toho jestli je prvocislo nebo ne...potom proste jen najdu vhodnou kombinaci ktera secte dve prvocisla a vyjde mi cislo ktery chci...jedinej zadrhel je na tom velkym poli, nema nekdo napad jak to vochcat? :-D

Nahlásit jako SPAM
IP: 195.113.69.–
31. 10. 2008   #4
-
0
-

Zřejmě myslíš součin prvočísel, i když píšeš součet. V rozkladu na součet prvočísel nějak nevidím smysl.
Co třeba ty prvočísla uložit do textovýho souboru?
A jestli je za každou cenu potřebuješ mít v paměti, tak nějak přes pointry.

Nahlásit jako SPAM
IP: 78.128.167.–
31. 10. 2008   #5
-
0
-

nebo to array[1..10^6] of boolean, jak jsi říkal

Nahlásit jako SPAM
IP: 78.128.167.–
KIIV
~ Moderátor
+43
God of flame
31. 10. 2008   #6
-
0
-

no ani v C se neda definovat staticky pole nejaky brutalni velikosti...
ale delal sem tam temer 1GB pole intu pomoci dynamicke alokace...
mimochodem na eratosthenovo sito ... tj taky na prvocisla :D

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
crAzY^
~ Moderátor
+10
Grafoman
31. 10. 2008   #7
-
0
-
Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
drobas0
Newbie
31. 10. 2008   #8
-
0
-

nene normalne SOUCET prvocisel (Goldbachova veta - kazdy sudy cislo vetsi nez 2 se da napsat jako soucet dvou prvocisel - ne nutne ruznych)...

jinak vytvaret soubor to nemuzu...musi to byt v pameti...

a array[1..10^6] of boolean chodi chybu...odhadnul bych neco jako ordinal type expected

...nenepada me jiny reseni jak to udelat...pro cisla do 10000 bez problemu, pro tydle velky nevim jak to obejit...

Nahlásit jako SPAM
IP: 195.113.69.–
KIIV
~ Moderátor
+43
God of flame
31. 10. 2008   #9
-
0
-

To drobas : rika ti neco jiz zminena dynamicka alokace pameti?

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
drobas0
Newbie
31. 10. 2008   #10
-
0
-

KIIV...eratosthena znam...ale tam asi bude potreba taky trochu zvetsit pamet jak si psal...ale neslo by to i jinak, de mi o to ze to je uloha na cviceni a dostanu splneno jen pokud ji projedu pres kompilator podobny BP (dulezite je to podobny -- tzn. alokaci pameti mi to treba neveme)...takze pokud by bylo jiny reseni tak bych se tomuto rad vyhnul...

Nahlásit jako SPAM
IP: 195.113.69.–
KIIV
~ Moderátor
+43
God of flame
31. 10. 2008   #11
-
0
-

To drobas : BP umi alokaci pameti.. ale predne to chce vedet jakej je to kompilator aby se dalo resit co tam muze jit a co nemuze...
jestli je to treba free pascal tak sou tam drobne rozdily pokud vim

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
drobas0
Newbie
31. 10. 2008   #12
-
0
-

muzu to odevzdat ve 3 priponach (.pas, .pp, .fp)...tzn. Pascal prekladany GPC v rezimu kompatibility s Borland Pascalem nebo Pascal prekladany GPC ve vychozim rezimu nebo Free Pascal prekladany FPC...kazdopadne freepascal je celkem rekl bych flexibilni, proste to by snad povolil, ale de mi o to, ze ten prekladac ma nejaky svy meze---tzn. urcite nekonecny smycky utne po urcity dobe atp...a ja prave nevim jestli alokace pameti by mu taky nevadila...prece jenom kdyby to delal kazdej tak nevim treba s tim muzou bejt problemy...

Nahlásit jako SPAM
IP: 195.113.69.–
crAzY^
~ Moderátor
+10
Grafoman
31. 10. 2008   #13
-
0
-

To drobas : řekl byhc že alokace pati by fpc vadit neměla

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
KIIV
~ Moderátor
+43
God of flame
31. 10. 2008   #14
-
0
-

jen se podivas jak se v fp alokuje a uvolnuje... nic tezkyho

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
drobas0
Newbie
31. 10. 2008   #15
-
0
-

To KIIV : oki dik...nak to poresim...prinejhorsim sahnu po nehezkym reseni pres mrte for cyklu

Nahlásit jako SPAM
IP: 195.113.69.–
Laaca0
Stálý člen
31. 10. 2008   #16
-
0
-

Na rozklad na prvočísla žádná velká pole nepotřebuješ. Bohatě by stačilo pole [1..100] of longint, možná i [1..10] of longint

Nahlásit jako SPAM
IP: 195.113.79.–
DOS-u-akbar
Laaca0
Stálý člen
31. 10. 2008   #17
-
0
-

Jinými slovy: použít na to Erastothenovo síto je volovina.

Nahlásit jako SPAM
IP: 195.113.79.–
DOS-u-akbar
Mircosoft+1
Věrný člen
31. 10. 2008   #18
-
0
-

>drobas:

Jestli chceš dokázat, že každé sudé číslo >2 se dá rozložit na součet dvou prvočísel, tak potřebuješ následující:
1) Zjistit, jestli je dané číslo větší než 2.
2) Zjistit, jestli je sudé.
3) For-cyklem projet od 1 do poloviny toho čísla. V každé iteraci si číslo rozložit na součet řídící proměnné cyklu a zbytek (číslo mínus ta proměnná) a zjistit, jestli jsou to obě prvočísla. Pokud ano, bingo, věta platí a cyklus může skončit.
4) Zjišťování, jestli jde o prvočíslo, se dá udělat buď dalším for-cyklem (testuj dělitelnost od 2 do poloviny toho čísla; jestli není dělitelné ničím, je to prvočíslo) nebo na to možná existuje nějaký patentní vzoreček, který ale neznám :-).

Ať na to koukám jak chci, nevidím, kde by se v tom dalo využít nějaké pole...


Jinak v real módu (TP, BP) je velikost polí a proměnných obecně, jak statických, tak dynamických, omezena na 64 KB. Jeden longint nebo pointer má 4 B, boolean 1 B. 1 KB = 1024 B, vyděl si to sám, vyjde ti maximální délka. Delší struktury jdou teoreticky udělat pomocí spojového seznamu, ale ty zabírají dost paměti (z těch základních 640 KB), takže prakticky se moc nehodí.
64 KB limit se dá překročit v protected módu (FP, Delphi, BP tuším taky, ale alokaci musíš řešit vlastními prostředky).

Nahlásit jako SPAM
IP: 85.132.158.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
31. 10. 2008   #19
-
0
-

Laaca napsal:
Pozor - není pravda, že každé číslo > 1 se dá rozložit na součin dvou prvočíslel (a v tomto případě počítáme mezi prvočísla i jedničku).
Platí, že každé číslo > 1 lze rozložit na součin alespoň dvou prvočísel: např. 3=3*1; 16 = 2*2*2*2*1 nebo 72=2*2*2*3*3*1 nebo 600=2*2*2*5*5*3*1

vyjádřeno jinak, 600=2^3*5^2*3^1

Prvočíselný rozklad by doopravdy šel řešit i poz použití jakéhokoliv pole, ale program by vypsal jenom "bezmocninový" tvar rozkladu. Jestliže chceš "mocninový" tvar, potřebuješ, podle mě, krátké pole, abys uchovával řád mocniny pro každé zúčastněné prvočíslo.


rikal, ze jde o soucet...

Nahlásit jako SPAM
IP: 78.128.167.–
Laaca0
Stálý člen
31. 10. 2008   #20
-
0
-

Jo, pardon, svůj předchozí přípěvek jsem smazal. Byl mimo mísu, přehlédl jsem, že se téma netýká součinu, ale součtu. Tím ale tuplem platí, že tam pole nemají co dělat.

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
drobas0
Newbie
31. 10. 2008   #21
-
0
-

To Mircosoft : diky za postup, ale tento postup sem povazoval prave za to nehezke mrte for cyklu obsahujici reseni...ale asi to bude jedine reseni pokud nechci alokaci pameti...ono proste kdyz davas for cyklus pro pul milionu opakovani tak to jednak neni moc efektivni a jednak nehezky...

Nahlásit jako SPAM
IP: 62.77.118.–
Laaca0
Stálý člen
1. 11. 2008   #22
-
0
-

For cyklus pro půl miliónu opakování je absolutně rutinní věc.
Ještě jsi toho asi naprogramoval málo :smile5:

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
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, 20 hostů

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ý