•stifmeister
Strain
Karma: 0
Deconectat
Mesaje: 24
|
 |
« : Martie 11, 2005, 22:40:35 » |
|
Am nevoie de niste informatii referitoare la alocarea dinamica in C++. Lucrez in Borland C++ 3.1 si am rezolvat 2 probleme propuse pe Infoarena. Solutiile sunt pe baza de formule de calcul usor de implementat si care ofera rezultatul aproape instantaneu. Problema este ca am nevoie de tablouri de dimensiuni mari. Ex. int a[200][400];
O astfel de declarare produce eroare la compilare : "Array size to large".
Am incercat sa aloc dinamic in felul urmator: =================================== int *a[200];
for(i=0; i<200; i++) a = new int[400]; ===================================
Operatia decurge cu succes dar pentru numere mari apar diferite neajunsuri: Exemple: 1. valorile unor variabile se modifica nejustificat; 2. obtin erori de tipul : "Null pointer assignment"; 3. se inchide Borland C++ brusc;
Am incercat sa folosesc si "malloc": ======================================================== int *p;
if( (p = (int*) malloc(NMax)) == NULL ) printf("Not enough memory to allocate buffer\n"); ========================================================
Aceleasi rezultate le-am obtinut si cu aceasta implementare iar la alocarea tablourilor mesajul "Not enough memory to allocate buffer" aparea pe ecran de mai multe ori.
Cum sa procedez ca sa pot aloca tablouri mari in memorie???
(Am marit si heap-ul dar nu am observat nici o imbunatatire).
|
|
|
Memorat
|
|
|
|
•druid
Strain
Karma: 1
Deconectat
Mesaje: 27
|
 |
« Răspunde #1 : Martie 12, 2005, 00:34:06 » |
|
Operatorul new e doar un 'cover' pt malloc(), e acelasi lucru. Pe infoarena programele se compileaza pe linux (gcc/g++) si acolo poti sa declari si global si poti sa aloci destula memorie. Poti sa pui #define MAXN 200 de ex si cand lucrez pe borland micsorezi limita si incerci doar cazuri mai mici pt teste. Mai e o optiune Options->Compiler->Code generation->Memory model. Daca selectezi large sau huge ai mai multa memorie... dar oricum, tot putina in general. Borland sux, treci pe GNU 
|
|
|
Memorat
|
|
|
|
•fbkk
Client obisnuit

Karma: -13
Deconectat
Mesaje: 72
|
 |
« Răspunde #2 : Martie 12, 2005, 11:52:47 » |
|
druid are dreptate, treci pe GNU, Borland 3.1 e cam depasit. Din toate concursurile ,pe care le stiu ,toate evalueaza si pe GNU, sau numai pe GNU (mai putin la OJI  ). Daca lucrezi pe Windows ai putea sa treci pe la Situl Dev-Cpp, si pe la pagina lor de download,sau daca preferi un pachet mai mare : DJGPP
|
|
|
Memorat
|
No one should have to code the same thing twice !
|
|
|
•bogdan2412
|
 |
« Răspunde #3 : Martie 12, 2005, 12:19:01 » |
|
druid are dreptate, treci pe GNU, Borland 3.1 e cam depasit. Din toate concursurile ,pe care le stiu ,toate evalueaza si pe GNU, sau numai pe GNU (mai putin la OJI  ). Daca lucrezi pe Windows ai putea sa treci pe la Situl Dev-Cpp, si pe la pagina lor de download,sau daca preferi un pachet mai mare : DJGPPOff subject: Ba schimbati semnatura, e ONI 2005, nu 2004... 
|
|
|
Memorat
|
|
|
|
•fbkk
Client obisnuit

Karma: -13
Deconectat
Mesaje: 72
|
 |
« Răspunde #4 : Martie 12, 2005, 12:59:57 » |
|
Off subject: Ba schimbati semnatura, e ONI 2005, nu 2004...  Offtopic: Mersi, de cand fac info am uitat ce an e ... 
|
|
|
Memorat
|
No one should have to code the same thing twice !
|
|
|
•stifmeister
Strain
Karma: 0
Deconectat
Mesaje: 24
|
 |
« Răspunde #5 : Martie 13, 2005, 22:39:13 » |
|
Problema mea este la ONI.
Eu am DJGPP. L-am si folosit pentru cele 2 probleme pe care le-am mentionat. Nici nu am mai
alocat dinamic pentru ca in GNU am putut declara un tablou de 200X500. Dar la ONI eu voi
lucra in Windows si nu cred ca au ei DJGPP instalat pe calculatoarele unde o sa stau eu. Si
chiar daca evaluarea se face in GNU, imi vine cam greu sa dau o sursa care pe BC++ 3.1 nu
se compileaza, sperand ca va merge in GNU. Si, cum fac sa initializez un tablou cu 0 in GNU? Daca folosesc "memset" imi da eroare.
Mai stiu de la ONI de anii trecuti ca "stdlib.h" nu merge sub linux. Dar am compilat o
sursa in GNU si mi-a cerut sa includ stdlib ca sa pot folosi functia abs. Unde pot gasi o
lista cu ce header-e sa folosesc in gnu?
|
|
|
Memorat
|
|
|
|
•domino
|
 |
« Răspunde #6 : Martie 13, 2005, 22:56:52 » |
|
Problema mea este la ONI.
Eu am DJGPP. L-am si folosit pentru cele 2 probleme pe care le-am mentionat. Nici nu am mai
alocat dinamic pentru ca in GNU am putut declara un tablou de 200X500. Dar la ONI eu voi
lucra in Windows si nu cred ca au ei DJGPP instalat pe calculatoarele unde o sa stau eu. Si
chiar daca evaluarea se face in GNU, imi vine cam greu sa dau o sursa care pe BC++ 3.1 nu
se compileaza, sperand ca va merge in GNU. Si, cum fac sa initializez un tablou cu 0 in GNU? Daca folosesc "memset" imi da eroare.
Mai stiu de la ONI de anii trecuti ca "stdlib.h" nu merge sub linux. Dar am compilat o
sursa in GNU si mi-a cerut sa includ stdlib ca sa pot folosi functia abs. Unde pot gasi o
lista cu ce header-e sa folosesc in gnu? O sa ai DJGPP la ONI (ce iti trebuie de fapt sunt RHIDE + GCC si o sa le ai). Pentru memset foloseste "string.h" ... "mem.h" nu eixsta. abs() e si in math.h dar poti sa o scrii singur intr-o linie: #define abs(x) ((x) < 0 ? (-(x)) : (x)) Eu asa fac de obicei. Uita-te in RHIDE in help-ul la o functie la care vrei s-o folosesti, iti va zice in header se afla.
|
|
|
Memorat
|
|
|
|
•stifmeister
Strain
Karma: 0
Deconectat
Mesaje: 24
|
 |
« Răspunde #7 : Martie 16, 2005, 22:01:30 » |
|
Unde gasesc o lista cu tipurile de date din gcc? Am nevoie de o structura de date pe 64 de biti.
|
|
|
Memorat
|
|
|
|
•svalentin
|
 |
« Răspunde #8 : Martie 16, 2005, 22:26:49 » |
|
gasesti pe undeva prin helpurile de la gcc! pe 64 de biti, numere intregi, stiu ca este long long! iar pt nr reale ai double!
|
|
|
Memorat
|
|
|
|
•domino
|
 |
« Răspunde #9 : Martie 16, 2005, 22:27:13 » |
|
Unde gasesc o lista cu tipurile de date din gcc? Am nevoie de o structura de date pe 64 de biti. http://www.google.comSi pentru 64 de biti foloseste long long
|
|
|
Memorat
|
|
|
|
•teplesnescdenutevezi
Strain
Karma: 0
Deconectat
Mesaje: 18
|
 |
« Răspunde #10 : Martie 17, 2005, 00:56:35 » |
|
bai...care-mi explicati si mie de la ce vine CRT ? va rog ... ce functii include ? ni s-a spus la oji ca n-avem voie sa folosim functiile din crt...dar eu nici nu stiu care sunt alea ...
|
|
|
Memorat
|
|
|
|
•svalentin
|
 |
« Răspunde #11 : Martie 17, 2005, 11:45:42 » |
|
Este vorba despre pascal. Unul din uniturile din pascal se cheama crt.
|
|
|
Memorat
|
|
|
|
•teplesnescdenutevezi
Strain
Karma: 0
Deconectat
Mesaje: 18
|
 |
« Răspunde #12 : Martie 17, 2005, 16:59:44 » |
|
damn....de nu l-am cautat in c++ de m-au luat dracii.
|
|
|
Memorat
|
|
|
|
•svalentin
|
 |
« Răspunde #13 : Martie 17, 2005, 17:36:59 » |
|
In C, are ca echivalent conio.h. (adica sa nu il incluzi pe asta la concursuri)
|
|
|
Memorat
|
|
|
|
•teplesnescdenutevezi
Strain
Karma: 0
Deconectat
Mesaje: 18
|
 |
« Răspunde #14 : Martie 17, 2005, 18:09:51 » |
|
imi poate trimite si mie cereva o implementare in c++ de arbori AVL ? pls... v-as fi foarte recunoscator. mail: [email protected]
|
|
|
Memorat
|
|
|
|
•bogdan2412
|
 |
« Răspunde #15 : Martie 17, 2005, 20:07:15 » |
|
Si eu as vrea..... mail: [redacted]@gmail.com
|
|
« Ultima modificare: Februarie 02, 2013, 01:18:08 de către Bogdan-Cristian Tataroiu »
|
Memorat
|
|
|
|
•greco
|
 |
« Răspunde #16 : Martie 17, 2005, 20:18:13 » |
|
|
|
|
Memorat
|
Jump in the cockpit and start up the engines Remove all the wheelblocks there's no time to waste Gathering speed as we head down the runway Gotta get airborne before it's too late.
|
|
|
•teplesnescdenutevezi
Strain
Karma: 0
Deconectat
Mesaje: 18
|
 |
« Răspunde #17 : Martie 17, 2005, 22:12:18 » |
|
hmmm....multumesc.
|
|
|
Memorat
|
|
|
|
|