Sunteți pe pagina 1din 11

//Seminar 1+2+3+4

struct

muncitori + fisiere text+

#include<stdio.h> #include<string.h> #include<malloc.h> struct muncitor1 { int cod; unsigned short int varsta; float salariu; int * piese; int zile; char* nume; }; struct muncitor2 { int cod; unsigned short int varsta; float salariu; int piese[100]; int zile; char nume[50]; }; //definire functie pentru intializare muncitor2 muncitor2 InitializareMuncitor2() { //definire muncitor2 local muncitor2 m; printf("\n Cod:"); scanf("%d", &m.cod); printf("\n Varsta:"); scanf("%d",&m.varsta); printf("\n Salariu:"); scanf("%f",&m.salariu); printf("\n Nume:"); scanf("%s", &m.nume); printf("\n Numar zile lucru:"); scanf("%d",&m.zile); for(int i=0;i<m.zile;i++) { printf("\n Piese realizate in ziua %d",i+1); scanf("%d",&m.piese[i]); } return m; } //functie pentru initializare muncitor1 muncitor1 InitializareMuncitor1() { muncitor1 m; printf("\n Cod:"); scanf("%d", &m.cod);

printf("\n Varsta:"); scanf("%d",&m.varsta); printf("\n Salariu:"); scanf("%f",&m.salariu); printf("\n Nume:"); //NU SE POATE fara alocare spatiu //scanf("%s",m.nume); char buffer[50]; scanf("%s",buffer); int nrCaractere = strlen(buffer); // NU Numara si \0 //alocare spatiu pentru nume m.nume = (char *)malloc(sizeof(char)*(nrCaractere+1)); strcpy(m.nume,buffer); //citire numar zile lucru printf("\n Numar zile lucru:"); scanf("%d",&m.zile); //alocare de spatiu pentru vectorul de piese m.piese = (int*)malloc(m.zile * sizeof(int)); for(int i=0;i<m.zile;i++) { printf("\n Piese realizate in ziua %d:",i+1); scanf("%d",&m.piese[i]); } return m; } //metode pentru afisare void AfisareMuncitor(muncitor1 m1) { printf("\n Muncitorul %s cu varsta %d are codul %d si salariul %5.2f", m1.nume, m1.varsta, m1.cod, m1.salariu); printf("\n Piese realizate:"); for(int i=0;i<m1.zile;i++) printf(" %d",m1.piese[i]); } void AfisareMuncitor(muncitor2 m2) { printf("\n Muncitorul %s cu varsta %d are codul %d si salariul %5.2f", m2.nume, m2.varsta, m2.cod, m2.salariu); printf("\n Piese realizate:"); for(int i=0;i<m2.zile;i++) printf(" %d",m2.piese[i]); }

void main() { //muncitor1 m1; //m1 = InitializareMuncitor1(); //muncitor2 m2; //m2 = InitializareMuncitor2(); //AfisareMuncitor(m1); //AfisareMuncitor(m2); //lista muncitor

muncitor1 * ListaMuncitori = NULL; int NrMuncitori = 0; //initializare muncitori printf("\n Numar muncitori:"); scanf("%d", &NrMuncitori); ListaMuncitori = (muncitor1 *)malloc(NrMuncitori * sizeof(muncitor1)); for(int i=0;i<NrMuncitori;i++) ListaMuncitori[i] = InitializareMuncitor1(); //afisare muncitori for(int i=0;i<NrMuncitori;i++) AfisareMuncitor(ListaMuncitori[i]); //calcul total piese int total = 0; for(int i = 0;i<NrMuncitori;i++) for(int j = 0;j<ListaMuncitori[i].zile;j++) total = total + ListaMuncitori[i].piese[j]; printf("\n Numarul total de piese este %d",total); //salvez nr de muncitori FILE *fisier; fwrite(&NrMuncitori,1,sizeof(int),fisier); //salvez muncitorii=gresita //if(fisier = fopen("date.dat","wb")) //{ //salvez muncitorii // for(int i=0;i<NrMuncitori;i++) // fwrite(&ListaMuncitori[i],sizeof(muncitor1),1,fisier); // fflush(fisier); // fclose(fisier); //} if(fisier=fopen("date.dat","wb")) { fwrite(&NrMuncitori,1,sizeof(int),fisier); for(int i=0;i<NrMuncitori;i++) { //scriem muncitorul pe bucati fwrite(&ListaMuncitori[i].cod,1,sizeof(int),fisier); fwrite(&ListaMuncitori[i].varsta,1,sizeof(unsigned short int),fisier); fwrite(&ListaMuncitori[i].salariu,1,sizeof(float),fisier); fwrite(&ListaMuncitori[i].zile,1,sizeof(int),fisier); for(int j=0;j<ListaMuncitori[i].zile;j++) fwrite(&ListaMuncitori[i].piese[j],1,sizeof(int),fisier); //fwirte(ListaMuncitori[i].piese,ListaMuncitori[i].zile,sizeof(int),fisier);-ech cu for de sus char buffer[100]; strcpy(buffer,ListaMuncitori[i].nume); fwrite(buffer,100,sizeof(char),fisier);

} fflush(fisier); fclose(fisier); } //citire date din fisier muncitor1 *ListaMuncitori2=NULL; int NrMuncitori2=0; if(fisier=fopen("date.dat","rb")) { //citesc nr de muncitori fread(&NrMuncitori2,1,sizeof(int),fisier); //alocare spatiu ListaMuncitori2=(muncitor1*)malloc(NrMuncitori2*sizeof(muncitor1)); for(int i=0;i<NrMuncitori2;i++) { //fread(&ListaMuncitori2[i],1,sizeof(muncitor1),fisier);---GRESITA fread(&ListaMuncitori2[i].cod,1,sizeof(int),fisier); fread(&ListaMuncitori2[i].varsta,1,sizeof(unsigned short int),fisier); fread(&ListaMuncitori2[i].salariu,1,sizeof(float),fisier); fread(&ListaMuncitori2[i].zile,1,sizeof(int),fisier); ListaMuncitori2[i].piese=(int*)malloc(ListaMuncitori2[i].zile*sizeof(int)); //citesc tot vectorul de piese fread(ListaMuncitori2[i].piese,ListaMuncitori2[i].zile,sizeof(int),fisier); char buffer[100]; fread(buffer,100,sizeof(char),fisier); ListaMuncitori2[i].nume=(char*)malloc(strlen(buffer)+1); strcpy(ListaMuncitori2[i].nume,buffer); } fclose(fisier); } printf("\n lista din fisier:"); for(int i=0;i<NrMuncitori2;i++) AfisareMuncitor(ListaMuncitori2[i]); }

//Seminar 5-Abonat+matrice rara

//gestiune durata convorbiri telefonice pentru m abonati printr-o matrice zig-zag #include <stdio.h> #include <malloc.h> struct ManagerConvorbiri { int NrAbonati; //numarul de abonati = nr linii int** Apeluri; //matricea zig-zag ce contine durata apelurilor int* NrApeluri; //numarul de apeluri pentru un abonat }; //functie pentru initializare manager convorbiri ManagerConvorbiri initManager() { ManagerConvorbiri mc; printf("\n Numar abonati: "); scanf("%d",&mc.NrAbonati); //alocare vector de vectori apeluri (matrice) mc.Apeluri = (int**)malloc(mc.NrAbonati * sizeof(int*)); for(int i = 0; i < mc.NrAbonati; i++) mc.Apeluri[i] = NULL; //alocare vector de nr convorbiri mc.NrApeluri = (int*)malloc(mc.NrAbonati * sizeof(int)); for(int i = 0; i < mc.NrAbonati; i++) mc.NrApeluri[i] = 0; return mc; } //functie pentru adaugare durata convorbire pentru un abonat void InregistrareApel(int codAbonat, int nrMinute, ManagerConvorbiri mc) { if(codAbonat < mc.NrAbonati) { //adaug un nou element la linia codAbonat int* linieNoua = (int *)malloc((mc.NrApeluri[codAbonat]+1)*sizeof(int)); if(mc.Apeluri[codAbonat] != NULL) { //copiez vechile valori = for(int i=0; i < mc.NrApeluri[codAbonat]; i++) linieNoua[i] = mc.Apeluri[codAbonat][i]; } linieNoua[mc.NrApeluri[codAbonat]] = nrMinute; mc.NrApeluri[codAbonat]++;

if(mc.Apeluri[codAbonat] != NULL) //eliberare memorie pentru a evita memory leak free(mc.Apeluri[codAbonat]); mc.Apeluri[codAbonat] = linieNoua; } } //functie pentru calcul total minute toti abonatii int TotalMinute(ManagerConvorbiri mc) { int total = 0; for(int i = 0; i<mc.NrAbonati; i++) for(int j = 0; j<mc.NrApeluri[i]; j++) total+=mc.Apeluri[i][j]; return total; }

void main() { ManagerConvorbiri mc = initManager(); //minim 2 abonati InregistrareApel(0, 10, mc); InregistrareApel(0, 20, mc); InregistrareApel(1, 20, mc); printf("\n Total minute: %d", TotalMinute(mc)); }

//Sem 6,7-liste simplu inlantuite #include <stdio.h> #include <string.h> #include <malloc.h> struct carte { int cod; char *titlu; char autor[50]; }; struct nod { carte book; nod *next; }; nod* { InserareSfarsit(nod* capat, nod* nod_nou) //verificare caz particular - lista nu exista if(capat == NULL) { return nod_nou; } else { //lista exista nod* aux = capat; while(aux->next!=NULL) aux = aux->next; aux->next = nod_nou; return capat; } } nod* InserareInceput(nod* capat, nod* nod_nou) { nod_nou->next = capat; return nod_nou; } //creare nod nou nod* CreareNod(carte c) { nod* nod_nou = (nod*)malloc(1*sizeof(nod)); nod_nou->next = NULL; nod_nou->book = c; return nod_nou; } //creare carte de la consola carte CitesteCarte() { carte c;

printf("\n Cod carte:"); scanf("%d",&c.cod); //pt citire cu spatiu printf("\n Autor:"); fflush(stdin); gets(c.autor); //citire sir de caractere char buffer[100]; printf("\n Titlu:"); fflush(stdin); gets(buffer); c.titlu =(char*)malloc(strlen(buffer)+1); strcpy(c.titlu, buffer); return c; } void AfisareCarte(carte c) { printf("\n %d - \" %s \" de %s",c.cod,c.titlu, c.autor); } void AfisareLista(nod* capat) { nod* aux = capat; while(aux!=NULL) { AfisareCarte(aux->book); aux = aux->next; } } //metoda creare index dupa titlu nod** CreareIndexTitlu(nod* capat,int *n) { //determinam nr de elem din lista int nr=0; nod* aux=capat; while(aux) { nr++; aux=aux->next; } //alocare spatiu-acum vectorul exista nod** index=(nod**)malloc(nr*sizeof(nod*)); //copiem adresele nodurilor in index---care sunt stocate in vector dupa aux=capat; for(int i=0;i<nr;i++) { index[i]=aux; aux=aux->next; } //sortare vector dupa titlu carte---interschimbare for(int i=0;i<nr-1;i++) for(int j=i+1;j<nr;j++)

if(strcmp(index[i]->book.titlu,index[j]->book.titlu)==1) { nod* temp=index[i]; index[i]=index[j]; index[j]=temp; } *n=nr; return index; } //afisare dupa index void AfisareIndextitlu(nod** index,int n) { if(index!=NULL) for(int i=0;i<n;i++) AfisareCarte(index[i]->book); } void main() { //inserare 3 carti nod * lista = NULL; for(int i=0;i<3;i++) lista = InserareInceput(lista,CreareNod(CitesteCarte())); AfisareLista(lista); //definire index dupa titlu nod **index_titlu=NULL; int n=0; //creare index index_titlu=CreareIndexTitlu(lista,&n); //afisare du[pa index printf("\n\n\n sortare dupa titlu"); AfisareIndextitlu(index_titlu,n); }

Sem 8 //arbori binari de cautare #include <stdio.h> #include <malloc.h> #include <string.h> struct student { char *cnp; int cod; char nume[100]; }; struct abc { student info; abc* st; abc* dr; }; student CitesteStudent() { student stud; printf("\n Cnp: "); char buffer[14]; scanf("%s",buffer); stud.cnp=(char*)malloc(strlen(buffer)+1); strcpy(stud.cnp,buffer); printf("\n Cod:"); scanf("%d",&stud.cod); printf("\n Nume:"); scanf("%s",stud.nume); return stud; } abc* CreareNod(student stud) { abc* nod=(abc*)malloc(sizeof(abc)); nod->dr=NULL; nod->st=NULL; nod->info=stud; return nod; }

abc* InserareArbore(abc* rad,student stud) { //verificare nod curent if(rad==NULL) {

//am gasit o pozitie pt nodul nou abc* nou=CreareNod(stud); rad=nou; return rad; } else { //caut pozitie pt nodul nou if(rad->info.cod>stud.cod) { //continui cautarea pe stanga\ //apel recursiv pe stanga rad->st=InserareArbore(rad->st,stud); } else if(rad->info.cod<stud.cod) { //continui cautarea pe dreapta rad->dr=InserareArbore(rad->dr,stud); } return rad; } } //afisare SRD void SRD(abc* rad) { if(rad != NULL) { SRD(rad->st); printf("\n %d",rad->info.cod); SRD(rad->dr); } } //determinare numar studenti int Numar(abc* rad) { if(rad!=NULL) return 1+Numar(rad->st)+Numar(rad->dr); else return 0; } void main() { }