Varianta 19
Raport
Chisinău 2018
Cuprin
2
s
3
1. Scopul și obiectivele lucrării:
1. De studiat şi însuşit materialul teoretic din lucrarea dată prin însușirea noțiunilor și lansarea
exerciţiilor la execuţie pentru analiza şi evidenţierea esenţialului prelucrării structurilor de date cu
pointeri în elaborarea modelelor soluţiei prin explicaţii, argumentări şi organigrame.
2. În partea practică, la prima lucrare, de organizat un program din trei exemple, propuse de profesor,
analizând specificul implementării pointerilor prin simulare numerică și rezultatele obținute.
3. În partea practică, la a doua lucrare, de organizat un program să se recapituleze materialul teoretic și
varianta din lucrarea de lab. 5 (PC), din semestrul I, şi să se analizeze algoritmii şi programele cu şi
fără pointeri (declarări şi parcurgeri cu pointeri). Pentru aprofundarea înţelegerii să se dezvolte
algoritmii şi programele cu pointeri pentru condiţiile problemelor şi să se elaboreze scenariile
succinte de soluţionare prin pointeri cu calculele de verificare şi explicaţii. Rularea programelor în
limbajul C cu afişarea tuturor variabilor de intrare, intermediare şi finale.
4. În raport să fie expuse toate programele şi calculele efectuate. Să se analizeze tehnica programării
eficiente cu pointeri în baza exerciţiilor şi variantelor problemelor efectuate pentru diverse situaţii cu
argumentări.
4
2. Sarcina
Fiecare temă conţine două probleme care vor fi rezolvare cu mijloacele limbajului
C (diferite modele de date şi obiecte). Temele se iau în conformitate compartimentele
propuse.
Lucrarea se consideră efecutată după ce studenţii demonstrează profesorului
funcţionarea corectă a programelor la calculator şi apoi prezintă darea de seamă cu
analiza rezultatelor. Darea de seamă include: foaia de titlu şi pentru fiecare lucrare să
se descrie algoritmul de rezolvare a problemei, listingul programului, dotat cu
comentariile de rigoare, Datele de intrare şi rezultatele să fie folosite în simularea
numerică şi să fie analizate în comparaţie cu rezultatele obţinute, concluzia şi
bibliografia studiată.
5
6
3. Schema bloc
7
Figura 2 Schema bloc pentru functia printmat:
8
Figura 3 Schema bloc pentru functia TSuperior:
9
10
Figura 3 Schema bloc pentru functia TInferior:
11
4. Realizarea
Programul dat are ca scop să citescă de la tastatura numarul de linii si coloane apoi trebue
de introdus la fel de la tastatura elementele matricei.Iar ca rezultat el afiseaza matricea ,triunghiul
superior ,triunghiul inferior din matrice si calculeaza suma elementelor ambelor triunghiuri. La
efectuarea acestui program eu am folosit 3 functii(fig.2,3,4 din Anexa B)in care am folosit mai
multe posibilitati oferite de pointeri.Unele din ele fiind specificarea dimensiunii prin dubla
pointare pentru a crea un tablou bidimensional.Prima functie “printmat “ afiseaza matricea,a
doua “TSuprtior”afiseaza triunghiul superior,iar a treia” TInferior” afiseaza triunghiul inferior si
calculeasa si afiseaza suma elementelor triunghiurilor.Iar in functia principal main eu doar am
alocat memorie si am apelat functiile ,iar mai apoi am eliberat memoria prin folosirea “free”:
free(*(a+i));
free(a);
Rezultatele executiei programului sunt in Anexa A, iar codul sursa se gaseste in Anexa B.
12
Concluzii
Lucrarea dată a avut ca scop să ne facă cunoscuți cu pointerii care dupa parerea mea sunt
foarte eficienti der unicul minus pe care ii au pointeri este ca in caz de eroare in cod efectuata de
proramator este greu de gasiu unde ea a fost efectuata cee ace si ii face greu de a fi invatati cati
pentru a putea lucre efectiv cu ei este necesar de ai cunoaste la perfectie.Deci in conluzie in
timpul efectuarii acestui laborator am folosit in practica unele cunostinte de la curs privitor la
poineri insa pentru a putea lucre cu ei efectiv eu mai am inca de lucrat cu datele metodice pentru
ai intelege mai bine.
13
Bibliografie
Anexa A
14
15
Anexa B
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int i,j;
for (j=0;j<col;j++)
printf("\n");
if (i < j) {
if(j==col-1)
printf("\n");
}else{
printf("\t");
16
int r=0;
if (i > j) {
printf("\t%d",*(*(a+i)+j));
if(j==r){
printf("\n");
r++;}
int main () {
printf("nr. linii=");
scanf("%d",&rind);
scanf("%d",&col);
if(col==rind) {
for (i=0;i<rind;i++){
for (j=0;j<col;j++){
scanf("%d", *(a+i)+j);
printf("\nMatricea este:\n");
printmat (a,rind,col);
TSuprtior(a,rind,col);
TInferior(a,rind,col);
17
printf("\nSuma=%d",sum);
else{
free(*(a+i));
free(a);
return 0;
Anexa C.
#include <stdio.h>
#include <stdlib.h>
/* Definim doua functii cu doi parametri de tip int si care returneaza void. */
printf("Eu sunt alta functie cu doi parametri de tip int: %d si %d.\n", c, d);
f(10,15);
return ++(*n) % m;
int main(void){
18
//Cercetarea pointerilor la functie
func(o_functie);
func(alta_functie);
int n = 10;
int m = 15;
inctmod(&n, m);
printf("n: %d\n",n);
char *c;
char h='H';
c=&h;
printf("Valoarea c: %c\n",*c);
printf("Adresa c: %p\n",c);
printf("\n");
printf("Valoarea h: %c\n",h);
printf("Adresa h: %p\n",&h);
int i,j;
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("%d ",b[i][j]);
printf("\n");
printf("b)Cercetarea cu pointeri:\n");
int *p,q[2],t=0,a=3;
p=w[0];
for(p=w[0];p<w[0]+2*3;p++){
printf("%d ",(**w)++);
t++;
19
if(t==a){
printf("\n");
a=a+3;
return 0;
Anexa D.
20