infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Constantin Cristian din Martie 11, 2005, 22:40:35



Titlul: Alocare dinamica in C++
Scris de: Constantin Cristian din 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).


Titlul: Alocare dinamica in C++
Scris de: Voicu Octavian din 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 :)


Titlul: Alocare dinamica in C++
Scris de: florin din 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 (http://www.bloodshed.net/devcpp.html), si pe la pagina lor de download (http://www.bloodshed.net/dev/devcpp.html)
,sau daca preferi un pachet mai mare : DJGPP (http://www.delorie.com/djgpp/)


Titlul: Alocare dinamica in C++
Scris de: Bogdan-Cristian Tataroiu din Martie 12, 2005, 12:19:01
Citat din mesajul lui: fbkk
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 (http://www.bloodshed.net/devcpp.html), si pe la pagina lor de download (http://www.bloodshed.net/dev/devcpp.html)
,sau daca preferi un pachet mai mare : DJGPP (http://www.delorie.com/djgpp/)


Off subject: Ba schimbati semnatura, e ONI 2005, nu 2004... :P


Titlul: Alocare dinamica in C++
Scris de: florin din Martie 12, 2005, 12:59:57
Citat din mesajul lui: bogdan2412
Off subject: Ba schimbati semnatura, e ONI 2005, nu 2004... :P

Offtopic: Mersi, de cand fac info am uitat ce an e ... :P


Titlul: Alocare dinamica in C++
Scris de: Constantin Cristian din 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?


Titlul: Alocare dinamica in C++
Scris de: Mircea Pasoi din Martie 13, 2005, 22:56:52
Citat din mesajul lui: stifmeister
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:
Cod:
#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.


Titlul: Alocare dinamica in C++
Scris de: Constantin Cristian din 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.


Titlul: Alocare dinamica in C++
Scris de: Valentin Stanciu din 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!


Titlul: Alocare dinamica in C++
Scris de: Mircea Pasoi din Martie 16, 2005, 22:27:13
Citat din mesajul lui: stifmeister
Unde gasesc o lista cu tipurile de date din gcc? Am nevoie de o structura de date pe 64 de biti.


http://www.google.com
Si pentru 64 de biti foloseste long long


Titlul: Alocare dinamica in C++
Scris de: tudor george cristian din 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 ...


Titlul: Alocare dinamica in C++
Scris de: Valentin Stanciu din Martie 17, 2005, 11:45:42
Este vorba despre pascal. Unul din uniturile din pascal se cheama crt.


Titlul: Alocare dinamica in C++
Scris de: tudor george cristian din Martie 17, 2005, 16:59:44
damn....de nu l-am cautat in c++ de m-au luat dracii.


Titlul: Alocare dinamica in C++
Scris de: Valentin Stanciu din Martie 17, 2005, 17:36:59
In C, are ca echivalent conio.h. (adica sa nu il incluzi pe asta la concursuri)


Titlul: Alocare dinamica in C++
Scris de: tudor george cristian din 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]


Titlul: Alocare dinamica in C++
Scris de: Bogdan-Cristian Tataroiu din Martie 17, 2005, 20:07:15
Si eu as vrea.....
mail: [redacted]@gmail.com


Titlul: Alocare dinamica in C++
Scris de: Tiberiu-Lucian Florea din Martie 17, 2005, 20:18:13
http://info.devnet.ro/articole.php?page=art&art=22&artpage=5


Titlul: Alocare dinamica in C++
Scris de: tudor george cristian din Martie 17, 2005, 22:12:18
hmmm....multumesc.