Documente Academic
Documente Profesional
Documente Cultură
//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>
struct produs
{
int cod;
float cantitate;
float pret;
};
void traversare(produs *p, int n)
{
int i;
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);
}
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
1. Cate produse&contor?
Dimensiune , numarul de produse
Produs 2
Produs 3
i=1
i=2
i=3
Pas 2
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);
}
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
Prod[1]
Prod[0]
Prod [2]
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]
Campurile articolului
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>
//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>
struct produs
{
int cod;
char *denumire;
float cantitate;
float pret;
};
void main()
{
int i,n;
char buffer[20];
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
p[i].denumire
0x00b17e98
0x001cfa18
Dimensiune buffer
(20)
Gigel
Postas (buffer)
scrisoare
(
Cutie postala
(tastatura)
scrisoare
scrisoare
Ionel
#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++)
_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);
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()
{
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>
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 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>
{
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));
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>
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();
}