Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrare de laborator Nr.1
la structuri de date i algoritm
A efectuat:
A verificat:
Kulev M.
Chiinu 2015
funct.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "struc.h"
//alocarea si realocarea memoriei
student* reloc(student *a,int n){
a=(student*)realloc(a,n*sizeof(student));
if(!a){
printf("\a\nNu sa alocat memorie!\n");
system("pause");
exit(1);
}
return a;
}
//Versiunea 1 de citire Manual
void intro1(student *a,int n){
int i;
for(i=0;i<n;i++){
printf("\n****************************************\n\n");
printf("Introdu datele studentului %d\n",i+1);
printf("Numele: ");
scanf("%s",&a[i].num);
printf("Prenumele: ");
scanf("%s",&a[i].pre);
printf("Specialitatea: ");
scanf("%s",&a[i].spec);
printf("Anul de inmatriculare: ");
scanf("%d",&a[i].anu);
printf("Media de intrare: ");
scanf("%f",&a[i].med);
}
}
//Versiunea 2 de citire(Fisier)
student* intro2(char *fname,int *n){
int i=0,m=0;
student *a=NULL;
FILE *demo=fopen(fname,"r"); //deschiderea fisierului din aceeasi mapa, "r" read ,"t"
text
if(!demo){
printf("\aFisierul nu exista!\n");
system("pause");
exit(1);
}
while(!feof(demo)){
m++;
a=reloc(a,m);
2
fscanf(demo,"%s%s%s%d%f",&a[i].num,&a[i].pre,&a[i].spec,&a[i].anu,&a[i].med);
i++;
}
*n=m;
fclose(demo);
return a;
}
//Afisare simpla a datelor
void afisare (student *a,int n){
int i;
for(i=0;i<n;i++){
printf("****************************************\n\n");
printf("Datele studentului:
%d\n",i+1);
printf("Numele:
%s\n",a[i].num);
printf("Prenumele:
%s\n",a[i].pre);
printf("Specialitatea:
%s\n",a[i].spec);
printf("Anul de inmatriculare: %d\n",a[i].anu);
printf("Media de intrare:
%.2f\n\n",a[i].med);
}
}
//Afisare dupa anul introdus(cautare dupa an)
void afis_an(student *a, int n,int an){
int i,j=0;
printf("Studentii anului:
%d\n\n",an);
for(i=0;i<n;i++){
if(a[i].anu==an){
printf("****************************************\n\n");
printf("Nr. de ordine:
%d\n",i+1);
printf("Numele:
%s\n",a[i].num);
printf("Prenumele:
%s\n",a[i].pre);
printf("Specialitatea:
%s\n",a[i].spec);
printf("Anul de inmatriculare: %d\n",a[i].anu);
printf("Media de intrare:
%.2f\n\n",a[i].med);
j++;
}
}
if(!j){
system("cls");
printf("Nu s-au gasit studenti din anul %d\n\n",an);
}
}
//Functia pentru adaugarea studentilor
void add_std(student *a,int *n,int nr){
int i;
a=reloc(a,*n+nr);
for(i=*n;i<*n+nr;i++){
printf("\n****************************************\n\n");
printf("Introdu datele studentului %d\n",i+1);
printf("Numele: ");
3
scanf("%s",&a[i].num);
printf("Prenumele: ");
scanf("%s",&a[i].pre);
printf("Specialitatea: ");
scanf("%s",&a[i].spec);
printf("Anul de inmatriculare: ");
scanf("%d",&a[i].anu);
printf("Media de intrare: ");
scanf("%f",&a[i].med);
}
*n=*n+nr;
}
//functia pentru stergere
void del_std(student *a,int *n,int nd){
int i;
*n=*n-1;
if(*n>0){
for(i=nd;i<*n;i++){
a[i]=a[i+1];
}
}else
printf("\nNu mai sunt studenti!\a\n");
a=reloc(a,*n);
}
//functia de salvare
void save(student *a,int n,char *fname){
int i;
FILE *demo=fopen(fname,"wt");
for(i=0;i<n;i++){
fprintf(demo,"%s %s %s %d %.2f",a[i].num,a[i].pre,a[i].spec,a[i].anu,a[i].med);
if(i<n-1)
fprintf(demo,"\n");
}
fclose(demo);
}
//afisarea studentilor in ordine descrescatoare dupa medie
void ord_cr(student *a,int n){
int i,j;
student t;
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(a[i].med<a[j].med){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
afisare(a,n);
4
}
//modificarea datelor
void std_m(student *a,int nm){
nm=nm-1;
printf("\n****************************************\n\n");
printf("Nr. de ordine:
%d\n",nm+1);
printf("Numele:
%s\n",a[nm].num);
printf("Prenumele:
%s\n",a[nm].pre);
printf("Specialitatea:
%s\n",a[nm].spec);
printf("Anul de inmatriculare: %d\n",a[nm].anu);
printf("Media de intrare:
%.2f\n\n",a[nm].med);
printf("****************************************\n\n");
printf("Introdu datele studentului pentru modificare:\n");
printf("Numele: ");
scanf("%s",&a[nm].num);
printf("Prenumele: ");
scanf("%s",&a[nm].pre);
printf("Specialitatea: ");
scanf("%s",&a[nm].spec);
printf("Anul de inmatriculare: ");
scanf("%d",&a[nm].anu);
printf("Media de intrare: ");
scanf("%f",&a[nm].med);
}
main.cpp
#include "funct.cpp"
int main(){
student *a=NULL;
int n=0,an,nr,nd,nm;
int com,com1,m;
char fname[20],y;
while(1){
while(m){ m=0;
system("cls");
printf("Introduceti datele studentilor |\n-------------------------------\n");
printf("\n[ 1 ] Manual\n[ 2 ] Fisier\n\n[ 0 ] Exit\n\nComanda << ");
scanf("%d",&com);
system("cls");
switch(com){
case 0:
if(a)
free(a);
exit(0);
break;
case 1:
printf("Introdu numarul de studenti: ");
scanf("%d",&n);
5
a=reloc(a,n);
intro1(a,n);
break;
case 2:
printf("Introdu numele fisierului pentru citire:\n");
scanf("%s",&fname);
strcat(fname,".txt");
a=intro2(fname,&n);
break;
default:
printf("\aAti introdus o comanda gresita!\n");
system("pause");
m=1;
break;
}
save(a,n,"temp.demo");
}
system("cls");
printf("Lista comenzilor |\n-----------------");
printf("\n\n -------------------------\n | Comenzi pentru afisarea |\n
-------------------------\n");
printf("\n[ 1 ] Lista cu studenti");
printf("\n[ 2 ] Lista cu studenti din anul dorit");
printf("\n[ 3 ] Lista in ordine descrescatoare dupa medie");
printf("\n\n ---------------------------\n | Comenzi pentru modificare |\n
---------------------------\n");
printf("\n[ 4 ] Adauga studenti");
printf("\n[ 5 ] Sterge studentul");
printf("\n[ 6 ] Modifica datele studentul");
printf("\n\n ------------------------\n | Comenzi pentru salvare |\n ------------------------\n");
printf("\n[ 7 ] Salveaza schimbarile in fisier");
printf("\n[ 8 ] Starea initiala a datelor");
printf("\n\n -------------------------\n | Comenzi pentru navigare |\n
-------------------------\n");
printf("\n[ 9 ] Meniu precedent");
printf("\n[ 0 ] Exit");
printf("\n\nComanda << ");
scanf("%d",&com1);
system("cls");
switch(com1){
case 0:
free(a);
exit(0);
break;
case 1:
afisare(a,n);
break;
case 2:
printf("Introduceti anul dorit: ");
6
scanf("%d",&an);
if(an>=1964 && an<=2013){
system("cls");
afis_an(a,n,an);
} else {
system("cls");
printf("Anul introdus nu este corect!\a\n");
}
break;
case 3:
printf("Lista in ordine descrescatoare dupa medie: \n");
ord_cr(a,n);
a=intro2("temp.demo",&n);
break;
case 4:
jkl:printf("Introdu numarul de studenti pentru adaugare: ");
scanf("%d",&nr);
if(nr<0){
printf("\a\nNumarul introdus este un numar negativ { %d }\n",nr);
system("pause");
system("cls");
goto jkl;
} else {
add_std(a,&n,nr);
}
break;
case 5:
dt:
printf("Introdu numarul de ordine a studentului pentru stergere: ");
scanf("%d",&nd);
if(nd<1 || nd>n){
system("cls");
printf("\aAti introdus un numar de ordine care nu exista!\nIncercati din
nou.\n");
system("pause");
system("cls");
goto dt;
} else {
nd=nd-1;
printf("\n\n****************************************\n\n");
printf("Nr. de ordine:
%d\n",nd+1);
printf("Numele:
%s\n",a[nd].num);
printf("Prenumele:
%s\n",a[nd].pre);
printf("Specialitatea:
%s\n",a[nd].spec);
printf("Anul de inmatriculare: %d\n",a[nd].anu);
printf("Media de intrare:
%.2f\n\n",a[nd].med);
printf("****************************************\n\n");
printf("Doriti sa stergeti aceasta inregistrare? y/n\n");
scanf("%s",&y);
if(y=='y'){
7
del_std(a,&n,nd);
} else
if(y=='n'){
break;
} else{
printf("\n\aAti introdus o comanda gresita!\n");
system("pause");
system("cls");
goto dt;
}
}
break;
case 6:
printf("Introdu numarul de ordine a studentului: ");
scanf("%d",&nm);
if(nm<=n && nm>=1)
std_m(a,nm);
else
printf("\nNu exista student cu asa numar de ordine\a\n");
break;
case 7:
printf("Introdu numele fisierului pentru salvare: ");
scanf("%s",&fname);
strcat(fname,".txt");
save(a,n,fname);
printf("\nSalvare a avut loc cu succes!\a\n\n");
break;
case 8:
a=intro2("temp.demo",&n);
printf("Reinoirea datelor sa efectuat cu succes!\n");
break;
case 9:
m=1;
break;
default:
printf("\aAti introdus o comanda gresita!\n");
break;
}
system("pause");
}
return 0;
}
10
11
12
Bibliografie:
http://programmersclub.ru/01/
http://www.scribd.com/doc/41293824/Negrescu-Liviu-Limbajele-C-si-Cpentru-incepatori-vol-1
http://devcentral.iftech.com/learning/tutorials/c-cpp/c
13
14