Documente Academic
Documente Profesional
Documente Cultură
SDD Explicatii 1
SDD Explicatii 1
//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; cod, cantitate, pret
float cantitate;
float pret;
};
void main()
{
int i, n;
printf("Numar produse=");
scanf("%d", &n);
//alocare
produs *p = (produs*)malloc(n*sizeof(produs));
traversare(p, n);
//dezalocare
free(p);
se foloseste pt determinarea
lungimii zonei de memorie
_getch();
}
data de
Produs
grup
date elementare
Campurile
articolului
Cantitate*pret pt fiecare
produs
Exercitii:
#include<stdio.h>
#include<malloc.h> //necesara pt alocare dinamica, folosind malloc si free
#include<conio.h>
#include<stdlib.h>
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()
{
//un articol cu campurile: cod, denumire, cantitate si pret, iar programul calculeaza valoarea
fiecarui produs si valoarea totala a produselor.
# include <stdio.h>
# include <malloc.h>
# include <conio.h> biblioteca pt siruri de
# include <string.h>
caractere
struct produs
{
int cod; definim structura, la definire
char *denumire; nu i se
float cantitate;
float pret;
};
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()
{ avem nevoie de un tablou
int i,n; unidimensional care
char buffer[20];
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
scanf("%f",&p[i].cantitate);
are un caracter /0
printf("p[%d]=",i+1);
scanf("%f",&p[i].pret); care arata sfarsitul
} rata
lungimea
traversare(p,n);
sirului
//dezalocare
for (i=0;i<n;i++)
free(p[i].denumire);
free(p);
_getch();
}
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
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()
{
# 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 main()
{
int i, n;
char buffer[20];
produs *p = NULL;;
FILE *f;
f = fopen("fisier.txt", "r");
if (f)
{
fscanf(f, "%d", &n);
//alocare
p = (produs*)malloc(n*sizeof(produs));
for (i = 0; i<n; i++)
{
fscanf(f, "%d", &p[i].cod);
fscanf(f, "%s", buffer);
//alocare
p[i].denumire = (char*)malloc((strlen(buffer) + 1)*sizeof(char));
strcpy(p[i].denumire, buffer);
fscanf(f, "%f", &p[i].cantitate);
fscanf(f, "%f", &p[i].pret);
}
}
else printf("\n Fisierul nu exista!");
fclose(f);
traversare(p, n);
//dezalocare
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 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)
# include <stdio.h>
# include <malloc.h>
# include <conio.h>
void main()
{
int i, j, n;
printf("Numar produse=");
scanf("%d", &n);
//alocare
float **mag = (float**)malloc(n*sizeof(float*));
for (i = 0; i<n; i++)
mag[i] = (float*)malloc(3 * sizeof(float));
traversarematrice(mag, n);
//dezalocare
for (i = 0; i<n; i++)
free(mag[i]);
free(mag);
_getch();
}
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 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));
//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 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>
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>
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");
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));
traversare(c, q, p, n);
//dezalocare
free(c);
free(q);
free(p);
_getch();
}
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
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
# include <stdio.h>
# include <malloc.h>
# include <conio.h>
# include <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");
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));
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 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();
}