Pagini: [1] 2   În jos
  Imprimă  
Ajutor Subiect: limita de memorie la OJI?  (Citit de 10062 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
valkyria
Strain
*

Karma: 7
Deconectat Deconectat

Mesaje: 31



Vezi Profilul
« : Februarie 28, 2007, 21:59:02 »

Aveti cumva idee ce limita de memorie e la olimpiada de info pe municipiu?
La nationala la regulament e specificat clar, dar la OJI? Nu zice nimic de asta in regulament.
Sa interpretez ca trebuie sa ma limitez la cat are borland pascal prin default?
Si daca tot e vorba de OJI, avand in vedere ca majoritatea celor de pe aici sunt olimpici, aveti vreun sfat sau vreo sugestie? (sunt clasa a 12a)  Spre ex, cum pot sa aflu timpul de rulare? (ar fi mult mai tare daca ne-ar lasa cu un linux, unde pot sa-i dau time ./numeprogram si gata...)
Memorat
Tabara
Nu mai tace
*****

Karma: 20
Deconectat Deconectat

Mesaje: 216



Vezi Profilul
« Răspunde #1 : Februarie 28, 2007, 22:16:48 »

Aveti cumva idee ce limita de memorie e la olimpiada de info pe municipiu?
La nationala la regulament e specificat clar, dar la OJI? Nu zice nimic de asta in regulament.
Sa interpretez ca trebuie sa ma limitez la cat are borland pascal prin default?
Si daca tot e vorba de OJI, avand in vedere ca majoritatea celor de pe aici sunt olimpici, aveti vreun sfat sau vreo sugestie? (sunt clasa a 12a)  Spre ex, cum pot sa aflu timpul de rulare? (ar fi mult mai tare daca ne-ar lasa cu un linux, unde pot sa-i dau time ./numeprogram si gata...)

/* Cred ca exista functia de timp din headerul "time.h". */
Stai sa imi caut niste fisiere ca nici eu nu am mai folosit demult fazele astea Think  sad  Aha

 Thumb up
« Ultima modificare: Februarie 28, 2007, 22:29:52 de către Tabara Mihai » Memorat
valkyria
Strain
*

Karma: 7
Deconectat Deconectat

Mesaje: 31



Vezi Profilul
« Răspunde #2 : Februarie 28, 2007, 22:39:37 »

ah, am uitat sa precizez... folosesc pascal ca limbaj... din pacate, nu are time.h...
mersi oricum Smile
Memorat
Tabara
Nu mai tace
*****

Karma: 20
Deconectat Deconectat

Mesaje: 216



Vezi Profilul
« Răspunde #3 : Februarie 28, 2007, 22:47:14 »

Acuma numai am observat .....ai zis in postul tau initial
Sa interpretez ca trebuie sa ma limitez la cat are borland pascal prin default?

Am citit eu gresit.Sorry. Aha Pai atunci sper sa te lamureasca un utilizator de Pascal de pr forum  Thumb up

 peacefingers
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #4 : Februarie 28, 2007, 22:47:27 »

Limita de memorie statica este cat te tine compilatorul, cea dinamica este cat te tine calculatorul.. nu prea e stabilit
Limita statica - cand vezi ca iti da eroare ca folosesti prea multa memorie, atunci ai depasit limita Smile (parca era ceva gen 1MB)

in borland pascal parca faceam un smen sa aflu timpul de executie - ceva gen:
Cod:
var time:longint absolute 0:$46c;
    t1, t2:longint;
begin
    t1 := time;

    (programul tau)

    (...la sfarsitul programului...)
    t2 := time;
    writeln((t2-t1)/18.2:0:3);
end.
ideea e ca 46c este adresa unde se tine ceasul procesorului si cu absolute poti accesa direct o adresa de memorie; sper ca ai inteles Smile
« Ultima modificare: Februarie 28, 2007, 22:57:22 de către Valentin Stanciu » Memorat
Tabara
Nu mai tace
*****

Karma: 20
Deconectat Deconectat

Mesaje: 216



Vezi Profilul
« Răspunde #5 : Februarie 28, 2007, 22:48:40 »

(parca era ceva gen 1MB)

Si ca veni vorba...cam putin  sad Fool
 Whistle
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #6 : Februarie 28, 2007, 22:50:19 »

timpul de rulare il poti aproxima in functie de complexitate. cam 1 milion de operatii intra cam in 0,1  , 20 de milioane cam intr-o secunda si iti poti face simplu o idee cam cat timp va rula programu tau, si dak ai gasit o complexitate optima.
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #7 : Februarie 28, 2007, 23:01:24 »

(parca era ceva gen 1MB)

Si ca veni vorba...cam putin  sad Fool
 Whistle
in rest poti aloca dinamic cat vrei..
timpul de rulare il poti aproxima in functie de complexitate. cam 1 milion de operatii intra cam in 0,1  , 20 de milioane cam intr-o secunda si iti poti face simplu o idee cam cat timp va rula programu tau, si dak ai gasit o complexitate optima.
compilezi pe windows cu borland -> 1 milion de operatii intr-o secunda Smile
Memorat
astronomy
Nu mai tace
*****

Karma: 204
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #8 : Februarie 28, 2007, 23:20:04 »

Alocarea dinamica in borlandc e un fel de marca sau banul  Shocked
Memorat
valkyria
Strain
*

Karma: 7
Deconectat Deconectat

Mesaje: 31



Vezi Profilul
« Răspunde #9 : Februarie 28, 2007, 23:25:45 »

Limita de memorie statica este cat te tine compilatorul, cea dinamica este cat te tine calculatorul.. nu prea e stabilit
Limita statica - cand vezi ca iti da eroare ca folosesti prea multa memorie, atunci ai depasit limita Smile (parca era ceva gen 1MB)

in borland pascal parca faceam un smen sa aflu timpul de executie - ceva gen:
Cod:
var time:longint absolute 0:$46c;
    t1, t2:longint;
begin
    t1 := time;

    (programul tau)

    (...la sfarsitul programului...)
    t2 := time;
    writeln((t2-t1)/18.2:0:3);
end.
ideea e ca 46c este adresa unde se tine ceasul procesorului si cu absolute poti accesa direct o adresa de memorie; sper ca ai inteles Smile
mersi, asa ceva cautam Smile
acum mai ramane si sa il pun in practica, si apare o mica problema
compilandu-l cu fpc imi da 2 erori la linia var time:longint absolute 0:$46c;
Cod:
Error: absolute can only be associated with a var or const
Error: Syntax error, ";" expected but ":" found
cum functioneaza treaba cu absolute mai exact?

timpul de rulare il poti aproxima in functie de complexitate. cam 1 milion de operatii intra cam in 0,1  , 20 de milioane cam intr-o secunda si iti poti face simplu o idee cam cat timp va rula programu tau, si dak ai gasit o complexitate optima.
Da, e si asta o solutie, mersi pt idee, numai ca am 2 mici probleme:
1 - inca mai am de invatat cum se calculeaza complexitatea. Pana acum, m-am bazat mai mult pe intuitie, si nu am stat niciodata sa calculez... (se explica de ce n-am trecut niciodata de municipiu), dar o sa invat intr-un timp apropiat
2 - nu e foarte exact... depinde de compilator, procesor, etc


in rest poti aloca dinamic cat vrei..
tin minte ca parca era o limita si pt asta...
Memorat
Tabara
Nu mai tace
*****

Karma: 20
Deconectat Deconectat

Mesaje: 216



Vezi Profilul
« Răspunde #10 : Februarie 28, 2007, 23:38:11 »

Alocarea dinamica in borlandc e un fel de marca sau banul  Shocked

Bine zis!  Brick wall
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #11 : Martie 01, 2007, 00:24:47 »

Programul scris de svalentin compileaza in borland pascal 7.0 (compilatorul folosit la OJI). Il poti folosi cu incredere.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
valkyria
Strain
*

Karma: 7
Deconectat Deconectat

Mesaje: 31



Vezi Profilul
« Răspunde #12 : Martie 01, 2007, 00:59:17 »

Programul scris de svalentin compileaza in borland pascal 7.0 (compilatorul folosit la OJI). Il poti folosi cu incredere.
Aaa... asa se intampla cand am prea multe sisteme de operare si mi-e lene sa dau reboot... Very Happy
Da, merge in borland pascal. Mersi.

Acum ramane doar sa-mi dau seama exact ce si cum.
Deci sa vad daca am inteles. In urma rularii programului cu un delay la mijloc, am asa:
- cu delay(1000), deci 1 secunda, imi afiseaza 0
- cu delay(10000), deci 10 secunde, imi afiseaza 0,055, iar t2-t1=1
- cu delay(50000) deci 50 secunde, numaistiucat afisa, t2-t1=6...
- la un merge sort pe un vector cu n=10000 imi afiseaza tot 0
Deci, in concluzie... tot ce am inteles e ca la olimpiada ar trebui sa imi afiseze 0, si ca nr de secunde e aproximativ egal cu (t2-t1)*10...  Sunt pe-aproape? Smile)
Memorat
CezarMocan
Nu mai tace
*****

Karma: 252
Deconectat Deconectat

Mesaje: 567



Vezi Profilul
« Răspunde #13 : Martie 01, 2007, 09:52:42 »

Daca vrei sa-ti mearga in FPC poti cu gettime(a,b,c,d), unde a=ore, b=minute, c=secunde, d=milisecunde.
Pui unu la inceputu programului si unu la sfarsit si te uiti cat e diferenta dintre cele 2.
P.S.:Cred ca merge si in Borland (da' nu-s sigur... n-am lucrat de mult in Borland)...  Think
Monkey
« Ultima modificare: Martie 01, 2007, 09:56:19 de către Cezar Mocan » Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #14 : Martie 01, 2007, 13:28:15 »

Cu fpc nu prea poti accesa ce adresa de memorie vrei tu, cum te taie capul; teoretic nici sistemul de operare nu ar trebui sa te lase. Poate poti face ceva asemanator si in fpc (ma refer la accesa o adresa de memorie oarecare), dar eu nu cunosc.
delay(1000) nu inseamna neaparat o secunda! inseamna 1000 de operatii (nu stiu exact ce operatii face delay ca sa iti zic cat dureaza una); dar ideea e ca delay(1000) nu tine mereu un timp X, depinde de cat de rapid este procesorul pe care rulezi programul.

Nu stiu de ce nu iti merge tie cum trebuie.. programul dat de mine trebuia sa iti afiseze numarul de secunde de executie cu 3 zecimale.. uite de exemplu un program care masoare timpul de executie al altui program:
Cod:
{$M $4000,0,0 }   {no heap, sa lase loc pentru programul executat}
uses dos;
var stestnr:string;
    t:longint absolute 0:$046c;
    t1,t2:longint;

begin
 stestnr:=paramstr(2);

 t1:=t;
 exec(paramstr(1),'');
 t2:=t;
 writeln('Programul a rulat in ',(t2-t1)/18.2:0:3,' secunde');
end.
daca merge sortul tau se cheama a.exe si programul scris mai sus eval.exe; vezi timpul de executie apeland:
Citat
eval.exe a.exe
« Ultima modificare: Martie 01, 2007, 13:36:21 de către Valentin Stanciu » Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #15 : Martie 01, 2007, 21:15:47 »

Limita de memorie statica este cat te tine compilatorul, cea dinamica este cat te tine calculatorul.. nu prea e stabilit
Limita statica - cand vezi ca iti da eroare ca folosesti prea multa memorie, atunci ai depasit limita Smile (parca era ceva gen 1MB)

Parca era de 64KB, stiti voi anecdota cu Bill Gates ... (ca 64KB ar trebui sa fie de ajuns pt toti, zisa in anii '80) Tongue...

In Windows exista aplicatia ptime (o poti cauta la google) ... si daca ai net inainte de proba (cum ai norocul de obicei) o poti descarca... e utila si nu te ajuta la programare, nu e un material ceva deci nu vad de ce ar fi ilegala...  Whistle
Memorat
CezarMocan
Nu mai tace
*****

Karma: 252
Deconectat Deconectat

Mesaje: 567



Vezi Profilul
« Răspunde #16 : Martie 01, 2007, 21:29:38 »

Totusi, mie gettime mi se pare cel mai practic. Nu trebuie sa descarci nimic de pe net sau sa tii minte adrese de memorie. Chestia e ca nu stiu ce dezavantaje are... Poate imi spune si mie cineva care sunt dezavantajele acestei proceduri.   Confused
Monkey
Memorat
Tabara
Nu mai tace
*****

Karma: 20
Deconectat Deconectat

Mesaje: 216



Vezi Profilul
« Răspunde #17 : Martie 01, 2007, 21:37:07 »

Totusi, mie gettime mi se pare cel mai practic. Nu trebuie sa descarci nimic de pe net sau sa tii minte adrese de memorie. Chestia e ca nu stiu ce dezavantaje are... Poate imi spune si mie cineva care sunt dezavantajele acestei proceduri.   Confused
Monkey
Ca trebuie sa faci o scadere probabil.  Very Happy

 Ok  peacefingers
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #18 : Martie 01, 2007, 22:49:52 »

Este mai rapid sa accesezi direct memoria decat sa apelezi o funcite.. si cred ca e si mai precis.
Stiu ca pe vremea cand implementam backuri omorate dupa 0.9 secunde, era vital sa folosesc asta si nu gettime tocmai din faptul ca verificam des timpul si sa am un overhead cat mai mic.
Memorat
valkyria
Strain
*

Karma: 7
Deconectat Deconectat

Mesaje: 31



Vezi Profilul
« Răspunde #19 : Martie 02, 2007, 22:58:33 »

Hmm, vad ca gettime nu e o functie recunoscuta de borland pascal. Ori e de printr-un unit ceva, ori nu e.... ar fi fost buna, sa compar rezultatul cu cealalta metoda...

Cu fpc nu prea poti accesa ce adresa de memorie vrei tu, cum te taie capul; teoretic nici sistemul de operare nu ar trebui sa te lase. Poate poti face ceva asemanator si in fpc (ma refer la accesa o adresa de memorie oarecare), dar eu nu cunosc.
delay(1000) nu inseamna neaparat o secunda! inseamna 1000 de operatii (nu stiu exact ce operatii face delay ca sa iti zic cat dureaza una); dar ideea e ca delay(1000) nu tine mereu un timp X, depinde de cat de rapid este procesorul pe care rulezi programul.

Nu stiu de ce nu iti merge tie cum trebuie.. programul dat de mine trebuia sa iti afiseze numarul de secunde de executie cu 3 zecimale.. uite de exemplu un program care masoare timpul de executie al altui program:
Cod:
{$M $4000,0,0 }   {no heap, sa lase loc pentru programul executat}
uses dos;
var stestnr:string;
    t:longint absolute 0:$046c;
    t1,t2:longint;

begin
 stestnr:=paramstr(2);

 t1:=t;
 exec(paramstr(1),'');
 t2:=t;
 writeln('Programul a rulat in ',(t2-t1)/18.2:0:3,' secunde');
end.
daca merge sortul tau se cheama a.exe si programul scris mai sus eval.exe; vezi timpul de executie apeland:
Citat
eval.exe a.exe
Asa, am facut si asta... oarecum... Pe scurt, valorile par mai apropiate de realitate, dar... nu sunt prea buna la estimari...
Deci deoarece habar n-am cum sa creez un executabil cu borland pascal, am facut asa:
- am luat sortul simplu (ii zicem sort.pas) si l-am compilat cu fpc (rezultand sort.exe)
- am deschis... eval.pas cu borland pascal, am presupus ca daca bag "sort.exe" la Parameters (era printr-un meniu), ar trebui sa mearga... si l-am rulat.
Rezultatul: eval-ul ruleaza sort.exe, si asteapta sa ii dau enter, si abia dupa afiseaza timpul...
Si daca ii dau spre ex enter dupa (estimativ) 10s, imi afiseaza ceva cu o valuare aproximativ pe-acolo... Deci... merge cat de cat...
Mai reiau testele una din zilele urmatoare, sa stiu sigur ce si cum Smile
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #20 : Martie 02, 2007, 23:50:25 »

Deci deoarece habar n-am cum sa creez un executabil cu borland pascal, am facut asa:
din directorul in care este fisierul .pas apelezi "bpc eval.pas" si iti creeaza eval.exe.

Programului aluia care sorteaza numere spune-i sa nu mai astepte enter!
« Ultima modificare: Martie 06, 2007, 11:27:00 de către Valentin Stanciu » Memorat
valkyria
Strain
*

Karma: 7
Deconectat Deconectat

Mesaje: 31



Vezi Profilul
« Răspunde #21 : Martie 03, 2007, 00:26:16 »

Ups...  eram sigura ca stersesem readln-u de acolo...  Embarassed
Pare sa mearga destul de bine acum...
Nu am bpc pe-acolo, e o versiune mai ciudata a programului...
Ok, mersi mult, si scuze ca sunt neatenta... promit sa nu mai incerc sa invat chestii noi cand mi se inchid ochii de somn...  Embarassed
Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #22 : Martie 04, 2007, 08:13:35 »

Nu am bpc pe-acolo, e o versiune mai ciudata a programului...
Raised eyebrow si pascalul ala cu ce compileaza? ...
daca nu ai borland pascal, cauta si tu in directorul bin/ , unde se afla si executabilul pe care il rulezi, un program [de dos, deci cauta-l din cmd] care afiseaza ceva cu "compiler" Wink ... [daca nu ai bpc probabil ai turbo pascal, mi se pare ca ala compileaza cu tpc... Smile dar pot gresi]
Memorat
TYTUS
Strain


Karma: 5
Deconectat Deconectat

Mesaje: 24



Vezi Profilul
« Răspunde #23 : Martie 06, 2007, 00:24:14 »

Alocarea dinamica in borlandc e un fel de marca sau banul  Shocked
Poti fi mai explicit. Vad ca multi se plang de alocarea dinamica din C. Ai avut vreodata probleme cu alocarea dinamica ?
Memorat
astronomy
Nu mai tace
*****

Karma: 204
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #24 : Martie 06, 2007, 00:37:32 »

De exemplu, odata incercam sa aloc dinamic liste de adiacenta pentru un graf folosind realloc. Am generat un fisier de test cu mai multe muchii, si cand am rulat programul se bloca inexplicabil. Am facut debug pas cu pas si am constat ca la un moment dat, cand incerca sa aloce o muchie aparea ecranul negru si nu se intampla nimic, ceva de genul bucla infinita.
Memorat
Pagini: [1] 2   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines