Sunteți pe pagina 1din 32

ARTICOLE

//articol care are campurile cod, cantitate si pret si calculeaza valoarea fiecarui
produs si valoarea totala obtinuta

# include <stdio.h>
# include <malloc.h>
# include <conio.h>

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<n; i++)
printf("\n %d %5.2f %5.2f", p[i].cod, p[i].cantitate, p[i].pret);
printf("\n");
float val = 0, valori[100];
for (i = 0; i<n; i++) {
valori[i] = p[i].cantitate * p[i].pret;
val = val + valori[i];
}

operator de
accesare a valorii
pas 3:
parcurgem

printf("\nValoare");
printf("\n");
for (i = 0; i<n; i++)
printf("%5.2f ", valori[i]);
printf("\nValoare totala=%5.2f", val);

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<n; i++)
{
printf("c[%d]=", i + 1);
scanf("%d", &p[i].cod);
printf("q[%d]=", i + 1);
scanf("%f", &p[i].cantitate);
printf("p[%d]=", i + 1);
scanf("%f", &p[i].pret);
}

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<stdio.h>
#include<conio.h>
#include<malloc.h>
//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<stdio.h>

#include<malloc.h> //necesara pt alocare dinamica, folosind malloc si free


#include<conio.h>
#include<stdlib.h>
//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 <n; i++)
printf("\n %d %5.2f %5.2f %5.2f", s[i].Cod_student, s[i].Nota_romana,
s[i].Nota_mate, s[i].Nota_fizica);
printf("\n");
float Medie[100];
printf("\nMedia de bacalaureat");
printf("\n");
for (i = 0; i <n; i++)
{
Medie[i] = (s[i].Nota_romana + s[i].Nota_mate + s[i].Nota_fizica)/3;
printf("%5.2f", Medie[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>
*<nume_pointer>=(tip_de_baza*>malloc<dim*sizeof(tip_de_baza);
s = (student*)malloc(n*sizeof(student));
for (int i = 0; i < n; i++)
{
printf("cod[%d]=", i + 1);
scanf("%d", &s[i].Cod_student);
printf("Nota_romana[%d] = ", i + 1);
scanf("%f", &s[i].Nota_romana);
printf("Nota_mate[%d]=", i + 1);
scanf("%f", &s[i].Nota_mate);
printf("Nota_fizica[%d]=", i + 1);

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

<stdio.h>
<malloc.h>
<conio.h>
<string.h>

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<n;i++) printf("\n %d %s %5.2f


%5.2f",p[i].cod,p[i].denumire,p[i].cantitate,p[i].pret);
printf("\n");
float val=0,valori[100];
for (i=0;i<n;i++) {
valori[i]= p[i].cantitate * p[i].pret;
val+=valori[i];
}
printf("\nValoare");
printf("\n");
for (i=0;i<n;i++) printf("%5.2f ",valori[i]);
printf("\nValoare totala=%5.2f",val);
}

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<n;i++)
{
printf("c[%d]=",i+1);
scanf("%d",&p[i].cod);
printf("d[%d]=",i+1);
scanf("%s",buffer);
//alocare
p[i].denumire = (char*)malloc((strlen(buffer)+1)*sizeof(char));
strcpy(p[i].denumire,buffer);
printf("q[%d]=",i+1);
fiecare sir de car are un
scanf("%f",&p[i].cantitate);
caracter /0 care arata
printf("p[%d]=",i+1);
sfarsitul sirului
scanf("%f",&p[i].pret);
}
rata lungimea
traversare(p,n);
//dezalocare
for (i=0;i<n;i++)
free(p[i].denumire);
free(p);
_getch();
}

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<stdio.h>
#include<malloc.h> //necesara pt alocare dinamica, folosind malloc si free
#include<conio.h>
#include<string.h> //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>
*<nume_pointer>=(tip_de_baza*>malloc<dim*sizeof(tip_de_baza);
s = (student*)malloc(n*sizeof(student));
for (int i = 0; i < n; i++)
{
printf("cod[%d]=", i + 1);
scanf("%d", &s[i].Cod_student);
//alocam memorie pentru vectorul care contine numele studentilor
s[i].Nume_student = (char*)malloc((strlen(buffer) + 1)*sizeof(char));
printf("Nume[%d]=", i + 1);
scanf("%s", buffer);
//copiem din buffer numele studentului
strcpy(s[i].Nume_student, buffer);
printf("Nota_romana[%d] = ", i + 1);
scanf("%f", &s[i].Nota_romana);
printf("Nota_mate[%d]=", i + 1);
scanf("%f", &s[i].Nota_mate);
printf("Nota_fizica[%d]=", i + 1);
scanf("%f", &s[i].Nota_fizica);
}
traversare(s, n);
//dezalocare
for (i = 0; i < n; i++)
free(s[i].Nume_student);
free(s);

_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 <stdio.h>
# include <malloc.h>
# include <conio.h>
# include <string.h>
#include<stdlib.h>

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<n; i++)
printf("\n %d %s %5.2f %5.2f", p[i].cod, p[i].denumire, p[i].cantitate,
p[i].pret);
printf("\n");
float val = 0, valori[100];
for (i = 0; i<n; i++) {
valori[i] = p[i].cantitate * p[i].pret;
val += valori[i];
}
printf("\nValoare");
printf("\n");
for (i = 0; i<n; i++)
printf("%5.2f ", valori[i]);
printf("\nValoare totala=%5.2f", val);
}
void main()
{
//declaram variabilele de care avem nevoie pt a memora valorile citite din
fisier
//contor: i ; produs p ; nr de produse: n; buffer[20]: denumire
int i, n;
produs *p = NULL;
char buffer[20];
//declaram o variabila de tip fisier
FILE *f;
//deschidem fisierul si mentionam dreptul de acces care trebuie efectuat asupra
lui (read = r )
f = fopen("fisier.txt", "r");
//incepem sa citim din fisier pana ajunge la sfarsitul fisierului
if (f)
{
//pe prima linie a fisierului este n
fscanf(f, "%d", &n);
//alocam memorie pt n produse
p = (produs*)malloc(n*sizeof(produs));
for (i = 0; i < n; i++)
{
fscanf(f, "%d", &p[i].cod);
fscanf(f, "%s", buffer);
p[i].denumire = (char*)malloc((strlen(buffer) +
1)*sizeof(buffer));
strcpy(p[i].denumire, buffer);

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<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>
//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 <stdio.h>
# include <malloc.h>
# include <conio.h>
void traversarematrice(float **mag, int n)
{
int i, j;
printf("\nCod Cantitate Pret");
printf("\n");
for (i = 0; i<n; i++)
{
for (j = 0; j<3; j++)
printf("%5.2f", mag[i][j]);
printf("\n");
}
float val = 0, valori[100];
for (i = 0; i<n; i++) {
valori[i] = mag[i][1] * mag[i][2];
val += valori[i];
}
printf("\nValoare");
printf("\n");
for (i = 0; i<n; i++) printf("%5.2f ", valori[i]);
printf("\nValoare totala=%5.2f", val);
}
void main()
{

//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<n; i++)
mag[i] = (float*)malloc(3 * sizeof(float));
for (i = 0; i<n; i++)
for (j = 0; j<3; j++)
{
printf("mag[%d][%d]=", i + 1, j + 1);
scanf("%f", &mag[i][j]);
}
traversarematrice(mag, n);
//dezalocare
for (i = 0; i<n; i++)
free(mag[i]);
free(mag);
_getch();
}

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<stdio.h>
#include<conio.h>
#include<malloc.h>

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 <stdio.h>
# include <malloc.h>
# include <conio.h>
void traversarematrice(float mag[100][3], int n)
{
int i,j;
printf("\nCod Cantitate Pret");
printf("\n");
for (i=0;i<n;i++) {
for (j=0;j<3;j++)
printf("%5.2f",mag[i][j]);
printf("\n");
}
float val=0,valori[100];
for (i=0;i<n;i++) {
valori[i]=mag[i][1]*mag[i][2];
val+=valori[i];
}
printf("\nValoare");
printf("\n");
for (i=0;i<n;i++) printf("%5.2f ",valori[i]);
printf("\nValoare totala=%5.2f",val);
}
void main()
{
int i,j,n;
float mag[100][3];
printf("Numar produse=");
scanf("%d",&n);
for (i=0;i<n;i++)
for (j=0;j<3;j++) {
printf("mag[%d][%d]=",i+1,j+1);
scanf("%f",&mag[i][j]);
}
traversarematrice(mag,n);
getch();
}

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<stdio.h>
#include<conio.h>
#include<malloc.h>

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 <stdio.h>
# include <malloc.h>
# include <conio.h>
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<n; i++)
printf("%5.2f", q[i]);

printf("\n");
printf("\nPret");
for (i = 0; i<n; i++) printf("%5.2f", p[i]);
printf("\n");
float val = 0, valori[100];
for (i = 0; i<n; i++) {
valori[i] = q[i] * p[i];
val += valori[i];
}
printf("\nValoare");
printf("\n");
for (i = 0; i<n; i++) printf("%5.2f ", valori[i]);
printf("\nValoare totala=%5.2f", val);
}
void main()
{
int i, n;
printf("Numar produse=");
scanf("%d", &n);
//alocare
int *c = (int*)malloc(n*sizeof(int));
float *q = (float*)malloc(n*sizeof(float));
float *p = (float*)malloc(n*sizeof(float));
for (i = 0; i<n; i++)
{
printf("c[%d]=", i + 1);
scanf("%d", &c[i]);
printf("q[%d]=", i + 1);
scanf("%f", &q[i]);
printf("p[%d]=", i + 1);
scanf("%f", &p[i]);
}
traversare(c, q, p, n);
//dezalocare
free(c);
free(q);
free(p);
_getch();
}

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<stdio.h>
#include<conio.h>
#include<malloc.h>

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]

Denumire

c[1]

c[2]

d[1]

d[2]

q[1]

q[2]

d[0]

Cantitate

(pointer) *

q[0]

p[0]

Pret

#
#
#
#

include
include
include
include

p[1]

p[2]

<stdio.h>
<malloc.h>
<conio.h>
<string.h>

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<n; i++) printf("%s ", d[i]);
printf("\n");
printf("\nCantitate ");
for (i = 0; i<n; i++) printf("%5.2f", q[i]);
printf("\n");
printf("\nPret ");
for (i = 0; i<n; i++) printf("%5.2f", p[i]);
printf("\n");
float val = 0, valori[100];
for (i = 0; i<n; i++) {
valori[i] = q[i] * p[i];
val += valori[i];
}
printf("\nValoare");
printf("\n");
for (i = 0; i<n; i++) printf("%5.2f ", valori[i]);
printf("\nValoare totala=%5.2f", val);
}
void main()
{
int i, n;
char buffer[20];
printf("Numar produse=");
scanf("%d", &n);
//alocare
float *c = (float*)malloc(n*sizeof(float));
char *d[20];
float *q = (float*)malloc(n*sizeof(float));
float *p = (float*)malloc(n*sizeof(float));

for (i = 0; i<n; i++)


{
printf("c[%d]=", i + 1);
scanf("%f", &c[i]);
printf("d[%d]=", i + 1);
scanf("%s", buffer);
//alocare
d[i] = (char*)malloc((strlen(buffer) + 1)*sizeof(char));
strcpy(d[i], buffer);
printf("q[%d]=", i + 1);
scanf("%f", &q[i]);
printf("p[%d]=", i + 1);
scanf("%f", &p[i]);
}
traversare(c, d, q, p, n);
//dezalocare
for (i = 0; i<n; i++) free(d[i]);
free(c);
free(q);
free(p);
_getch();
}

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<stdio.h>
#include<conio.h>

#include<malloc.h>
#include<string.h>

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();
}

S-ar putea să vă placă și