•valkyria
Strain
Karma: 7
Deconectat
Mesaje: 31
|
|
« : 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
|
|
« 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
|
|
« Ultima modificare: Februarie 28, 2007, 22:29:52 de către Tabara Mihai »
|
Memorat
|
|
|
|
•valkyria
Strain
Karma: 7
Deconectat
Mesaje: 31
|
|
« 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
|
|
|
Memorat
|
|
|
|
•Tabara
|
|
« 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. Pai atunci sper sa te lamureasca un utilizator de Pascal de pr forum
|
|
|
Memorat
|
|
|
|
•svalentin
|
|
« 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 (parca era ceva gen 1MB) in borland pascal parca faceam un smen sa aflu timpul de executie - ceva gen: 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
|
|
« Ultima modificare: Februarie 28, 2007, 22:57:22 de către Valentin Stanciu »
|
Memorat
|
|
|
|
|
•devilkind
|
|
« 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
|
|
« Răspunde #7 : Februarie 28, 2007, 23:01:24 » |
|
(parca era ceva gen 1MB)
Si ca veni vorba...cam putin 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
|
|
|
Memorat
|
|
|
|
•astronomy
|
|
« Răspunde #8 : Februarie 28, 2007, 23:20:04 » |
|
Alocarea dinamica in borlandc e un fel de marca sau banul
|
|
|
Memorat
|
|
|
|
•valkyria
Strain
Karma: 7
Deconectat
Mesaje: 31
|
|
« 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 (parca era ceva gen 1MB) in borland pascal parca faceam un smen sa aflu timpul de executie - ceva gen: 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 mersi, asa ceva cautam 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; 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
|
|
« Răspunde #10 : Februarie 28, 2007, 23:38:11 » |
|
Alocarea dinamica in borlandc e un fel de marca sau banul Bine zis!
|
|
|
Memorat
|
|
|
|
•wefgef
|
|
« 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
Mesaje: 31
|
|
« 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... 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? )
|
|
|
Memorat
|
|
|
|
•CezarMocan
|
|
« 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)...
|
|
« Ultima modificare: Martie 01, 2007, 09:56:19 de către Cezar Mocan »
|
Memorat
|
|
|
|
•svalentin
|
|
« 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: {$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: eval.exe a.exe
|
|
« Ultima modificare: Martie 01, 2007, 13:36:21 de către Valentin Stanciu »
|
Memorat
|
|
|
|
•sima_cotizo
|
|
« 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 (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) ... 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...
|
|
|
Memorat
|
|
|
|
|
•Tabara
|
|
« Răspunde #17 : Martie 01, 2007, 21:37:07 » |
|
|
|
|
Memorat
|
|
|
|
•svalentin
|
|
« 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
Mesaje: 31
|
|
« 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: {$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: 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
|
|
|
Memorat
|
|
|
|
•svalentin
|
|
« 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
Mesaje: 31
|
|
« Răspunde #21 : Martie 03, 2007, 00:26:16 » |
|
Ups... eram sigura ca stersesem readln-u de acolo... 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...
|
|
|
Memorat
|
|
|
|
•sima_cotizo
|
|
« Răspunde #22 : Martie 04, 2007, 08:13:35 » |
|
Nu am bpc pe-acolo, e o versiune mai ciudata a programului...
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" ... [daca nu ai bpc probabil ai turbo pascal, mi se pare ca ala compileaza cu tpc... dar pot gresi]
|
|
|
Memorat
|
|
|
|
•TYTUS
Strain
Karma: 5
Deconectat
Mesaje: 24
|
|
« Răspunde #23 : Martie 06, 2007, 00:24:14 » |
|
Alocarea dinamica in borlandc e un fel de marca sau banul Poti fi mai explicit. Vad ca multi se plang de alocarea dinamica din C. Ai avut vreodata probleme cu alocarea dinamica ?
|
|
|
Memorat
|
|
|
|
•astronomy
|
|
« 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
|
|
|
|
|