Documente Academic
Documente Profesional
Documente Cultură
Pentru a aloca spaiu n mod dinamic (n momentul rulrii programului) putem folosi una din funciile de mai jos, n funcie de necesiti
#include <stdio.h> char *citire_text(void); void main(void) { char *g_text; puts(""); i ( g_text!citire_text() ) "" daca s#a reusit citirea print ("$ntextul citit%$n&s"' g_text); ree(g_text); "" eliberea(a (ona de memorie; ve(i mai )os unctia ree * char *citire_text(void) { char *text!+,--; "" se creea(. un pointer care se initiali(ea(a cu +,-- (pointer vid)' pentru ca realloc sa se comporte ca si malloc la prima apelare char c; int n!/; 0hile ( (c!getchar()) 1! 234) { i ((text!(char*)realloc( text' (n56)*si(eo (char) ))!!+,--) return +,--; "" a aparut o eroare text7n8!c; 55n; * "" n56 ! n+1 elem(deoarece n porneste de la /) + 1 pentru9$/9 text7n8!9$/9; "" termintorul de sir return text; "" returnea(a adresa sirului de caractere citit *
!roblem rezolvat
#include <stdlib.h> #include <stdio.h> /* problema care citeste si afiseaza o matrice alocata dinamic; matricea este alocata astfel incat sa poata fi accesata ca o matrice alocata static*/
int **alocare_matr(int **matr' int *an' int *am); int citire_matr(int **matr' int n' int m); void a isare_matr(int **matr' int n' int m); void main(void) { int **matr' m' n; matr!alocare_matr(matr' :n' :m); i (matr1!+,--) ""s#a putut aloca memorie citire_matr(matr' n' m); else { print ("eroare la alocare"); return; "" se termina programul * a isare_matr(matr' n' m); * int **alocare_matr(int **matr' int *an' int *am) { int i' ); print ("$nmatricea are + linii si ; coloane$n"); print ("+!"); scan ("&d"'an ); print (";!"); scan ("&d"'am ); "" se aloca memorie pentru pointerii unde se stochea(a inceputul adresa liniilor i ( (matr!(int **)calloc(*an'si(eo (int *) ) )!!+,-- ) return +,--; "" daca nu se aloca mem' unctia returnea(a +,-"" se aloca memorie pentru matricea e ectiva i ( ( matr7/8!(int *)calloc((*an)*(*am)'si(eo (int)))!!+,-- ) "" operatorul cast return +,--; "" daca nu se aloca mem' unctia returnea(a +,-or( i!<; i<*an; i55 ) matr7i8!matr7/85i*(*am); celr n linii din matrice return matr; * int citire_matr(int **matr' int n' int m) { int i' )' =!/; or( i!/; i<n; i55 ) or ()!/; )<m; )55) { print ("a7&d87&d8!"' i' )); =!=5scan ("&d"' (*(matr5i)5)) ); comportament identic "" =!=5scan ("&d"' matr7i87)8 ); * ""punem in tabl matr adresele
""sau'
return =;
void a isare_matr(int **matr' int n' int m) { int i' ); or( i!/; i<n; i55 ) { or ()!/; )<m; )55) print ("&d "' *(*(matr5i)5)) ); print ("$n"); * *
Pro"leme
1. (5p)Cititi un text alcatuit din cuvinte care au maxim 30 de caractere. Alocati memorie pentru text pe masura ce cititi cuvintele (Ca si problema din exemplu, dar citesc una cate una cuvinte, nu caractere). Nu uitati sa eliberati memoria cand nu mai este necesara. Structura programului va urmari pe cea a programului din exemplu. .(!p)Cititi si a"isati o matrice de Nx#. #atricea se va aloca dinamic. Se vor scrie "unctii separate de citire si scriere. $imensiunea matricii se va citi in "unctia de citire, impreuna cu citirea matricii. (pana aici % p)Se va scrie de asemenea si o "unctie care calculea&a determinatul matricii. (si inca p) 3. (10 p) Cititi un text de la tastatura si memorati'l dinamic. Apoi parcurgeti textul si puneti cuvintele intr'o structura dictionar. Aceasta structura va "i de "apt un tablou de pointer, cate un pointer pentru "iecare litera a al"abetului. (ointerul corescun&ator lui a va pointa catre o &ona de mem in care sunt memorate, separate prin spatii, toate cuvintelele din text care incep cu litera a.
"mportant## /ei care fac cu 0a"riela 1o"u *or *eni la la"orator cu un re%umat care s includ cel putin partile colorate n ro$u Pentru lucrare (cei care ac cu $abriela %obu)& Lucrarea se *a da pe .artie, cu calculatorul pornit, $i se *a putea folosi .elp2ul 3or fi 2 tipuri de su"iecte, su"iecte de nota 4 $i su"iecte de nota 1, 5e alege nainte de a se *edea su"iectele !iecare *a *eni cu grupa lui6 /ei care *or recupera la"oratorul cu alta grupa sau in saptamana urmatoare *or a*ea nota sca%uta cu 1p !entu subiecte de nota '& 3or fi posi"ile $i mici ntre"ri de genul+ ce face funcia malloc7 /are e diferena dintre malloc $i calloc7 /e este o *aria"il de tip pointer7 Pro"leme de genul+ Alocai dinamic un ta"lou de intregi 5crieti o funcie care intersc.im" 2 *aria"ile date ca parametru /itii un $ir de caractere de la tastatur ($irul se *a aloca dinamic) Implementati functia strdup
8n mare cam orice pro"lem re%ol*at la la"orator (L11 si L12), pro"a"il u$or modificat, sau dintre pro"lemele propuse, dar nu cele mai complicate !entru subiecte de nota (0 Pro"leme care implic alocarea de ta"louri de $iruri adic *om a*ea o *aria"il de tipul c.ar 99 :n e'emplu de pro"lema este pro"lema ; de mai sus
a*eti aici pre%entata alocarea dinamic puin diferit, poate e mai u$or de neles .ttp+<<=== cs utt ro<>ga"ia<?P<1,Liste1<1,Liste1 .tm