ARTICOLE //articol care are campurile cod, cantitate si pret si calculeaza valoarea fiecarui produs si valoarea totala obtinuta
# include # include # include
Pasul 1. Definim articolul cu campurile sale:
struct produs { int cod; float cantitate; float pret; }; void traversare(produs *p, int n) { int i;
cod, cantitate, pret
Pointer care retine adresa
articolului produs printf("\nCod Cantitate Pret"); printf("\n"); for (i = 0; i
operator de accesare a valorii pas 3: parcurgem
printf("\nValoare"); printf("\n"); for (i = 0; i
structura
} void main() { int i, n; // i = pozitie, n = dimensiune printf("Numar produse="); scanf("%d", &n); //alocare produs *p = (produs*)malloc(n*sizeof(produs)); for (i = 0; i
Pasul 2. Trebuie sa introducem valori de la tastatura pt articolul nostru.
traversare(p, n); //dezalocare free(p);
se foloseste pt determinarea lungimii zonei de memorie
_getch(); }
Pas 1
DEFINIRE STRUCTURA
data de grup
Produs
Cod (int)
Pret (float)
Cantitate(float)
date elementare
INTRODUCERE DATE DE LA TASTATURA (void main() )
1. Cate produse&contor? Dimensiune , numarul de produse
Presupunem ca avem 3 produse => n = 3 Produs 1
Produs 2
Produs 3
i=1
i=2
i=3
Pozitia produsului in cazul structurii de tip produs Ce scriem?
2. Ce trebuie sa apara pe ecran dupa rulare? Numar produse =
printf (“Numar produse=”);
Pas 2
3. Trebuie sa memoram valoarea introdusa de la tastatura ca valoare a variabilei n. scanf(“%d”,&n); Ce tip de variabila memoram? (%d se foloseste pt nr intregi
Cauta la ce adresa se afla variabila si ii asigneaza valoarea introdusa de la tastatura
4. Introducem valori de la tastatura pentru cele 3 produse.
Ce trebuie sa apara pe ecran? c[1]= val1 q[1]=val2 p[1]=val3 c[2]=val4 q[2]=val5 cod = c p[2]=val6 cantitate = q c[3]=val7 pret = p q[3]=val8 p[3]=val9
Ce scriem? //p va fi o adresa care va memora produsele produs *prod; //alocam memorie pentru o structura de tip produs prod= (produs*)malloc(n*sizeof(produs)); //parcurgem structura de tip produs folosind for si contorul i for (i = 0; i < n; i++) { printf("c[%d]=", i+1); scanf("%d", &prod[i].cod); printf("q[%d]=", i+1); scanf("%f", &prod[i].cantitate); printf("p[%d]=", i+1); scanf("%f", &prod[i].pret); }
(se aloca memorie pentru 3 produse) prod ( adresa) 1. 0x00ec3788 Prod [0] 2.
0x00ec3788
prod ( adresa) 0x0018f8fc 0x00ec3788
prod[1]
Cod
Cantitate
Pret
adr
adr
adr
prod[2]
0x00a53794
0x00a537a0
Cod
Cantitate
Pret
adr
adr
adr
Cod
Cantitate
Pret
adr
adr
adr
5. Parcurgem structura pentru a o afisa pe ecran si calculam valoarea fiecarui produs si valoarea totala. Prod
Prod[1]
Prod[0]
Adresa transmisa functiei traversare va contine toate produsele
Prod [2]
Ce trebuie sa apara pe ecran? Cod
Cantitate
Pret
c[1]
q[1]
p[1]
c[2]
q[2]
p[2]
c[3]
q[3]
p[3]
Valoare: q[1]*p[1] q[2]*p[2] q[3]*p[3] Valoare totala = q[1]*p[1] + q[2]*p[2] + q[3]*p[3]
/ functie de parcurgere a structurii void traversare(produs *p, int n){ int i; //ce apare pe ecran printf("\nCod Cantitate Pret"); printf("\n"); //parcurgem structura for (int i = 0; i < n; i++) printf("\n%d %5.2f %5.2f", p[i].cod, p[i].cantitate, p[i].pret); //calculam valoarea pentru fiecare produs, avem nevoie de un vector pt a memora valoarea fiecarui produs float val = 0, valori[100]; for (i = 0; i < n; i++) { valori[i] = p[i].cantitate * p[i].pret; //calculam valoarea totala val = val + valori[i]; } //afisam pe ecran valorile pt fiecare produs si valoarea totala printf("\nValoare: "); printf("\n"); for (i = 0; i < n; i++) printf("%5.2f ", valori[i]); printf("\nValoarea totala= %5.2f", val); }
Campurile articolului
Cantitate*pret pt fiecare produs
Aduna valorile pt fiecare produs
Tot codul rescris: #include #include #include //definim structura produs cu atributele sale struct produs{ int cod; float cantitate; float pret; };
// functie de parcurgere a structurii void traversare(produs *p, int n){ int i; //ce apare pe ecran printf("\nCod Cantitate Pret"); printf("\n"); //parcurgem structura for (int i = 0; i < n; i++) printf("\n%d %5.2f %5.2f", p[i].cod, p[i].cantitate, p[i].pret); //calculam valoarea pentru fiecare produs, avem nevoie de un vector pt a memora valoarea fiecarui produs
float val = 0, valori[100]; for (i = 0; i < n; i++) { valori[i] = p[i].cantitate * p[i].pret; //calculam valoarea totala val = val + valori[i]; } //afisam pe ecran valorile pt fiecare produs si valoarea totala printf("\nValoare: "); printf("\n"); for (i = 0; i < n; i++) printf("%5.2f ", valori[i]); printf("\nValoarea totala= %5.2f", val); } void main(){ //declaram numar de elemente (n) si contorul (i) int n, i; //introducem de la tastatura nr de produse printf("Numar produse="); //asignam numarul de produse introdus de la tastatura valorii variabilei n scanf("%d", &n); //p va fi o adresa care va memora produsele produs *prod; //alocam memorie pentru o structura de tip produs prod= (produs*)malloc(n*sizeof(produs)); //parcurgem structura de tip produs folosind for si contorul i for (i = 0; i < n; i++) { printf("c[%d]=", i+1); scanf("%d", &prod[i].cod); printf("q[%d]=", i+1); scanf("%f", &prod[i].cantitate); printf("p[%d]=", i+1); scanf("%f", &prod[i].pret); } //apelam functia de traversare a structurii traversare(prod, n); //eliberam memoria alocata free(prod); _getch(); }
Exercitii: 1.Realizati un articol care sa contina campurile : Cod_student, Nota_romana,Nota_mate,Nota_fizica si un camp Medie_BAC care sa calculeze media fiecarui student. Sa se faca alocare dinamica pentru structura. Pas 1: Definim structura care contine campurile Cod_student,, Nota_romana,Nota_mate si Nota_fizica. Pas 2: In void main() trebuie sa introducem valorile de la tastatura Pas 3: Parcurgem structura folosind un subprogram pe care il vom numi traversare si tot in subprogram vom calcula media. #include
#include //necesara pt alocare dinamica, folosind malloc si free #include #include //definim structura, nu inseamna ca am alocat spatiu de memorie pentru ea struct student { int Cod_student; float Nota_romana; float Nota_mate; float Nota_fizica; };
//traversam structura void traversare(student *s, int n) { int i; printf("\nCod_student Nota_romana Nota_mate Nota_fizica"); printf("\n"); for (i = 0; i
void main() { //definim contorul si dimensiunea structurii int i, n; student *s; //avem nevoie de un pointer care sa memoreze adresa structurii printf("Introduceti numarul de studenti="); scanf("%d", &n); printf("\n"); //trebuie sa introducem valorile pt fiecare camp al structurii, folosind alocare dinamica, noi doar am //definit structura, e timpul sa-i alocam memorie in Heap // sintaxa *=(tip_de_baza*>malloc
scanf("%f", &s[i].Nota_fizica); } traversare(s, n); //dezalocare free(s); _getch(); }
//un articol cu campurile: cod, denumire, cantitate si pret, iar programul calculeaza valoarea fiecarui produs si valoarea totala a produselor.
# # # #
include include include include
biblioteca pt siruri de caractere
struct produs { int cod; char *denumire; float cantitate; float pret; };
definim structura, la definire nu i se aloca memorie
denumire este numele pointerului
void traversare(produs *p, int n) { int i; printf("\nCod Denumire Cantitate Pret"); printf("\n");
care va memora adresa la care se afla denumirea produsului (este un sir de caractere)
for (i=0;i
void main() { int i,n; char buffer[20];
avem nevoie de un tablou unidimensional care sa retina o insiruire de caractere, punem intr-un vector fiecare litera (char retine doar un caracter)
printf("Numar produse="); scanf("%d",&n); //alocare produs *p = (produs*)malloc(n*sizeof(produs));
for (i=0;i
sirului
Ex: Introducem de la tastatura cuvantul ananas ca denumire a primului produs.
p[i].denumire
buffer (vector de caractere)
0x00b17e98
0x001cfa18
Caracter ASCII pt litera a a (97) n (110) a (97) n (110) a (97) s (115) /n
Aceeasi adresa pentru toate denumirile introduse de la tastatura
Dimensiune buffer (20)
De ce avem nevoie de buffer? (variabila ajutatoare) Gigel vrea sa trimita o scrisoare lui Ionel. Postasul este cel care ia scrisoarea de la Gigel si i-o aduce lui Ionel.
Gigel
Postas (buffer)
scrisoare (
Cutie postala (tastatura)
scrisoare
scrisoare
Ionel
2. Realizati un articol care sa contina campurile : Cod_student, Nume_student Nota_romana,Nota_mate,Nota_fizica si un camp Medie_BAC care sa calculeze media fiecarui student,iar daca media>6 sa se specifice ca studentul este promovat, in caz contrar, acesta nu a promovat. Sa se faca alocare dinamica pentru structura.
#include #include //necesara pt alocare dinamica, folosind malloc si free #include #include //necesara pt sirurile de caractere //definim structura, nu inseamna ca am alocat spatiu de memorie pentru ea struct student { int Cod_student; char *Nume_student; float Nota_romana; float Nota_mate; float Nota_fizica; };
//traversam articolul void traversare(student *s, int n) { int i; printf("\nCod_student Nume_student Nota_romana Nota_mate Nota_fizica"); printf("\n"); for (i = 0; i < n; i++)
printf("\n %d %s %5.2f %5.2f %5.2f", s[i].Cod_student, s[i].Nume_student, s[i].Nota_romana, s[i].Nota_mate, s[i].Nota_fizica); printf("\n"); //calculam media pt fiecare student float medii[100]; printf("\nMedia de BAC"); for (i = 0; i < n; i++) { medii[i] = (s[i].Nota_romana + s[i].Nota_mate + s[i].Nota_fizica) / 3; printf("%5.2f", medii[i]); } printf("\n"); //spunem cine a promovat/nu a promovat examenul for (i = 0; i < n; i++) { if (medii[i]>6) printf("\nStudentul %s a promovat examenul", s[i].Nume_student); else printf("\nStudentul %s nu a promovat examenul", s[i].Nume_student); } } void main() { //definim contorul si dimensiunea structurii int i, n; student *s; //avem nevoie de un vector in care sa memoram fiecare caracter al numelui fiecarui student char buffer[25]; //avem nevoie de un pointer care sa memoreze adresa structurii printf("Introduceti numarul de studenti="); scanf("%d", &n); // alocam memorie sintaxa *=(tip_de_baza*>malloc
_getch(); }
//se citeste din fisier un articol care are campurile: cod, denumire, pret si cantitate si se calculeaza valoarea pt fiecare produs //si valoarea totala a produselor.
# include # include # include # include #include
struct produs { int cod; char *denumire; float cantitate; float pret; }; void traversare(produs *p, int n) { int i; printf("\nCod Denumire Cantitate Pret"); printf("\n"); for (i = 0; i
fscanf(f, "%f", &p[i].cantitate); fscanf(f, "%f", &p[i].pret); } //inchidem fisierul fclose(f); } else printf("\nFisierul nu exista!"); traversare(p, n); for (i = 0; i < n; i++) free(p[i].denumire); free(p); _getch(); }
3. Scrieti un program care sa citeasca din fisier un articol care are campurile: Cod_student, Nume_student, Nota_romana, Nota_mate, Nota_fizica si dupa ce a preluat datele din fisier sa se calculeze media pt fiecare student. #include #include #include #include //definim articolul struct student { int Cod_student; char *Nume_student;
float Nota_romana; float Nota_mate; float Nota_fizica; }; void traversare(student *s, int n) { int i; printf("\nCod_student Nume_student Nota_romana Nota_mate Nota_fizica"); printf("\n"); for (i = 0; i < n; i++) printf("\n %d %s %5.2f %5.2f %5.2f", s[i].Cod_student, s[i].Nume_student, s[i].Nota_romana, s[i].Nota_mate, s[i].Nota_fizica); printf("\n"); //definim un vector in care sa memoram media fiecarui student float medii[100]; printf("\nMedia de BAC"); printf("\n"); for (i = 0; i < n; i++) { medii[i] = (s[i].Nota_romana + s[i].Nota_mate + s[i].Nota_fizica) / 3; printf("%5.2f", medii[i]); } } void main() { int i, n; student *s=NULL; FILE *f; char buffer[25]; f = fopen("Studenti.txt", "r"); if (f) { fscanf(f, "%d", &n); //alocam memorie pt articol s = (student*)malloc(n*sizeof(student)); for (i = 0; i < n; i++) { fscanf(f, "%d", &s[i].Cod_student); fscanf(f, "%s", buffer); //alocam memorie pt nume s[i].Nume_student = (char*)malloc((strlen(buffer) + 1)*sizeof(char)); //copiem din buffer strcpy(s[i].Nume_student, buffer); fscanf(f, "%f", &s[i].Nota_romana); fscanf(f, "%f", &s[i].Nota_mate); fscanf(f, "%f", &s[i].Nota_fizica); } } else printf("\nFisierul nu exista"); fclose(f); traversare(s, n); //dezalocare memorie for (i = 0; i < n; i++) free(s[i].Nume_student); free(s); _getch(); }
//articol care are campurile cod, cantitate si pret, iar valorile campurilor sunt retinute in elementele unei matrici cu n linii si 3 coloane.(dinamic) Cod
Cantitate
Pret
a[1][1]
a[1][2]
a[1][3]
a[2][1]
a[2][2]
a[2][3]
# include # include # include void traversarematrice(float **mag, int n) { int i, j; printf("\nCod Cantitate Pret"); printf("\n"); for (i = 0; i
//declaram variabilele necesare pt o matrice, contor linie: i, contor coloana: j, n=nr de produse int i, j, n; printf("Numar produse="); scanf("%d", &n); //alocare matrice float **mag = (float**)malloc(n*sizeof(float*)); //alocare linii matrice for (i = 0; i
matrice ** (2 adrese) 0x0018fda4
matrice[i] (linia) 0x005d80c8
*
matrice[i][j] (valoare) 0x005d8110
4. Scrieti un program care sa contina un articol sub forma unei matrice, ale carui campuri sa fie Cod_student, Nota_romana, Nota_mate si Nota_fizica, elementele articolului sa fie valorile campurilor, iar programul sa calculeze media de bac pt fiecare student. (dinamic) #include #include #include
void traversarematrice(float **stud, int n) { int i, j; printf("Cod_student Nota_romana Nota_mate Nota_fizica"); printf("\n"); for (i = 0; i < n; i++) { for (j = 0; j < 4; j++) printf("%5.2f", stud[i][j]); printf("\n"); } //calculam media pt fiecare student printf("\Media de BAC"); float medii[100],media=0; for (i = 0; i < n; i++) { media = 0; for (j = 1; j < 4; j++) media = media + stud[i][j];
medii[i] = media / 3; printf("%5.2f", medii[i]); } } void main() { int n, i, j; printf("Introduceti numarul de studenti="); scanf("%d", &n); //alocam memorie pt matricea stud float **stud = (float**)malloc(n*sizeof(float*)); //introducem valorile de la tastatura for (i = 0; i < n; i++) stud[i] = (float*)malloc(4*sizeof(float)); for (i = 0; i < n; i++) for (j = 0; j < 4; j++) { printf("stud[%d][%d]=", i + 1, j + 1); scanf("%f", &stud[i][j]); } traversarematrice(stud, n); for (i = 0; i < n; i++) free(stud[i]); free(stud); _getch(); }
//articol care are campurile cod, cantitate si pret, iar valorile campurilor sunt retinute in elementele unei matrici cu n linii si 3 coloane.(static) # include # include # include void traversarematrice(float mag[100][3], int n) { int i,j; printf("\nCod Cantitate Pret"); printf("\n"); for (i=0;i
5. Scrieti un program care sa contina un articol sub forma unei matrice, ale carui campuri sa fie Cod_student, Nota_romana, Nota_mate si Nota_fizica, elementele articolului sa fie valorile campurilor, iar programul sa calculeze media de bac pt fiecare student. (static)
#include #include #include
void traversarematrice(float stud[100][4], int n) { int i,j; printf("Cod_student Nota_romana Nota_mate Nota_fizica"); printf("\n"); for (i = 0; i < n; i++) { for (j = 0; j < 4; j++) printf("%5.2f", stud[i][j]); printf("\n"); } printf("\nMedia"); float medii[100],media; for (i = 0; i < n; i++) { media = 0; for (j = 1; j < 4; j++) media= media + stud[i][j]; medii[i] = media / 3; printf("%5.2f", medii[i]); }
} void main() {
float stud[100][4]; int n, i,j; printf("Introduceti numarul de studenti="); scanf("%d", &n); for (i = 0; i < n;i++) for (j = 0; j < 4; j++) { printf("stud[%d][%d]=", i+1, j+1); scanf("%f", &stud[i][j]); } traversarematrice(stud, n); _getch(); }
//program care pune valorile campurilor unui articol (Cod, Cantitate si Pret) in niste vectori, alocati dinamic. # include # include # include void traversare(int *c, float *q, float *p, int n) { int i; printf("\nCod "); for (i = 0; i < n; i++) { printf("%d", c[i]); printf(" "); } printf("\nCantitate"); for (i = 0; i
printf("\n"); printf("\nPret"); for (i = 0; i
6. Scrieti un program care sa contina un articol ale carui campuri sa fie Cod_student, Nota_romana, Nota_mate si Nota_fizica, elementele articolului sa fie memorate in niste vectori.(alocarea se face dinamic) , si calculeaza media de BAC a fiecarui student. #include #include #include
void traversarevectori(int *Cod_student, float *Nota_romana, float *Nota_mate, float *Nota_fizica,int n) { int i; printf("\nCod_student "); for (i = 0; i < n; i++) { printf("%d", Cod_student[i]); printf(" "); } printf("\n"); printf("\nNota_romana "); for (i = 0; i < n; i++) printf("%5.2f", Nota_romana[i]); printf("\n"); printf("\nNota_mate "); for (i = 0; i < n; i++) printf("%5.2f", Nota_mate[i]); printf("\n"); printf("\nNota_fizica "); for (i = 0; i < n; i++) printf("%5.2f", Nota_fizica[i]); //calculam media printf("\n"); printf("\nMedia de BAC "); float media, medii[100]; for (i = 0; i < n; i++)
{ media = 0; media = media + Nota_romana[i] + Nota_mate[i] + Nota_fizica[i]; medii[i] = media / 3; printf("%5.2f", medii[i]); } } void main() { int *Cod_student; float *Nota_romana; float *Nota_mate; float *Nota_fizica; int n, i; printf("Introduceti numarul de studenti="); scanf("%d", &n); Cod_student = (int*)malloc(n*sizeof(int)); for (i = 0; i < n; i++) { printf("Cod_student[%d]=", i+1); scanf("%d", &Cod_student[i]); } Nota_romana = (float*)malloc(n*sizeof(float)); for (i = 0; i < n; i++) { printf("Nota_romana[%d]=", i + 1); scanf("%f", &Nota_romana[i]); } Nota_mate = (float*)malloc(n*sizeof(float)); for (i = 0; i < n; i++) { printf("Nota_mate[%d]=", i + 1); scanf("%f", &Nota_mate[i]); } Nota_fizica = (float*)malloc(n*sizeof(float)); for (i = 0; i < n; i++) { printf("Nota_fizica[%d]=", i + 1); scanf("%f", &Nota_fizica[i]); } traversarevectori(Cod_student, Nota_romana, Nota_mate, Nota_fizica, n); free(Cod_student); free(Nota_romana); free(Nota_mate); free(Nota_fizica); _getch(); }
//program care pune valorile campurilor unui articol (Cod, Denumire, Cantitate si Pret) in niste vectori, alocati dinamic Fie n = 3 c
Cod
c[0]
d
Denumire
c[1]
c[2]
d[1]
d[2]
q[1]
q[2]
*
d[0]
q
Cantitate
(pointer) *
q[0]
*
p
p[0]
Pret
# # # #
include include include include
p[1]
p[2]
void traversare(float *c, char *d[20], float *q, float *p, int n) { int i; printf("\nCod "); for (i = 0; i < n; i++) { printf("%5.2f", c[i]); printf(" "); } printf("\n"); printf("\nDenumire "); for (i = 0; i
for (i = 0; i
7. Scrieti un program care sa contina un articol ale carui campuri sa fie Cod_student, Nume_student Nota_romana, Nota_mate si Nota_fizica, elementele articolului sa fie memorate in niste vectori.(alocarea se face dinamic) #include #include
#include #include
void traversarevectori(int *Cod_student, char *Nume_student[25], float *Nota_romana, float *Nota_mate, float *Nota_fizica, int n) { int i; printf("\nCod_student "); for (i = 0; i < n; i++) { printf("%d", Cod_student[i]); printf(" "); } printf("\n"); printf("\nNume_student "); for (i = 0; i < n; i++) printf("%s", Nume_student[i]); printf("\n"); printf("\nNota_romana "); for (i = 0; i < n; i++) printf("%5.2f", Nota_romana[i]); printf("\n"); printf("\nNota_mate "); for (i = 0; i < n; i++) printf("%5.2f", Nota_mate[i]); printf("\n"); printf("\nNota_fizica "); for (i = 0; i < n; i++) printf("%5.2f", Nota_fizica[i]); printf("\n"); float medii[100], medie; printf("\nMedia de BAC"); for (i = 0; i < n; i++) { medie = 0; medie = medie + Nota_romana[i] + Nota_mate[i] + Nota_fizica[i]; medii[i] = medie / 3; printf("%5.2f", medii[i]); } } void main() { int n, i; int *Cod_student; char *Nume_student[25]; char buffer[25]; float *Nota_romana; float *Nota_mate; float *Nota_fizica; printf("Introduceti numarul de studenti="); scanf("%d", &n); //alocam memorie pt fiecare vector care retine valori Cod_student = (int*)malloc(n*sizeof(int)); Nota_romana = (float*)malloc(n*sizeof(float)); Nota_mate = (float*)malloc(n*sizeof(float)); Nota_fizica = (float*)malloc(n*sizeof(float)); for (i = 0; i < n; i++) { printf("Cod_student[%d]=", i + 1);
scanf("%d", &Cod_student[i]); Nume_student[i] = (char*)malloc((strlen(buffer) + 1)*sizeof(char)); printf("Nume_student[%d]=", i + 1); scanf("%s", buffer); strcpy(Nume_student[i], buffer); printf("Nota_romana[%d]=", i + 1); scanf("%f", &Nota_romana[i]); printf("Nota_mate[%d]=", i + 1); scanf("%f", &Nota_mate[i]); printf("Nota_fizica[%d]=", i + 1); scanf("%f", &Nota_fizica[i]); } traversarevectori(Cod_student, Nume_student, Nota_romana, Nota_mate, Nota_fizica, n); for (i = 0; i < n; i++) free(Nume_student[i]); free(Cod_student); free(Nota_romana); free(Nota_mate); free(Nota_fizica); _getch(); }