Beruflich Dokumente
Kultur Dokumente
PROIECT
Bucuresti, 2010
1
Cuprins
1. Introducere.................................................................................... 3
2. Definire problema……………………………………………….. 4
3. Datele de intrare…………………………………………………. 5
4. Formule de calcul si alegerea structurii de date eficiente……….. 6
5. Rezultate afisate sau stocate…………………………………….. 7
6. Algoritmi utilizati………………………………………………... 8
7. Concluzii…………………………………………………………. 9
BIBLIOGRAFIE
Anexa 1 texte sursa
2
1. Introducere
3
2. Definirea problemei
4
3. Datele de intrare
5
4. Formule de calcul si alegerea structurii de date eficiente
Structura de date cea mai eficenta pentru rezolvarea problemei este lista simplu
inlatuita, deoarece asigura flexibilitate fosirii memoriei fata de masivul
unidimensional. Dat fiind faptul ca pe masura avansarii in timp for exista coduri
numerice personale cat mai recente, memorarea in arbore binar fiind in
dezavantajos pentru subarborii drepti vor devenii din ce in ce mai numerosi.
Arborele binar faciliteaza cautarea in functie de cheia aleasa (codul numeric
persoanal), insa returnarea elementului/elementelor cautat dupa un nume, este
necesara parcurgerea in intregime a arborelui.
6
5. Rezultate afisate sau stocate
Fiecare optiune a problemei are ca rezultat afisarea unui mesaj de tip text aflat in
corpul void main() si in in interiorul functiilor (ex: cout<<"\nS-a citit din
fisier!\n"; cout<<"\n CNP incorect!\nCNP : "; cout<<"\nS-a salvat in
fisier!\n"<<endl; etc.). Cat si mesaje de tipul : constanta text alaturat cu valoare
variabila in functie de structura curenta : cout<<"\nMedia generala este :
"<<calcMedia(nrStudenti,v)<<endl;.
La nivelul scrierii de date in fisier, nu se scrie nimic altceva decat valorile
elementelor pentru a facilita recostituirea fara prelucrare de text.
7
6. Algoritmi utilizati
8
7. Concluzii
9
Bibliografie
10
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<iostream>
#include<conio.h>
using namespace std;
struct VectorMedia
{
char nume[20];
float media;
};
11
{
Arbore_Student* aux = NULL;
if (!rad) {return
creaza_nod(numeF,cnpF,nota1F,nota2F,nota3F,nota4F,mediaF, NULL, NULL);}
else
{
aux = rad;
while (1)
{
if ( compara_sir_de_caractere(cnpF,rad->cnp,13)==-1)
{
if (rad->left) {rad = rad->left;}
else
{
rad->left =
creaza_nod(numeF,cnpF,nota1F,nota2F,nota3F,nota4F,mediaF,NULL,NULL);
return aux;
}
}
else
{
if (compara_sir_de_caractere(cnpF,rad->cnp,13)==1)
{
if (rad->right) {rad = rad->right;}
else
{
rad->right =
creaza_nod(numeF,cnpF,nota1F,nota2F,nota3F,nota4F,mediaF,NULL,NULL);
return aux;
}
}
else
{
return aux;
}
}
}
}
}
12
int afis[13];
FILE *f;
f=fopen("date.in","r");
fscanf(f,"%s",numeS);
fscanf(f,"%s",cnpS);
fscanf(f,"%i",&n1);fscanf(f,"%i",&n2);
fscanf(f,"%i",&n3);fscanf(f,"%i",&n4);
mediaS=(n1+n2+n3+n4)/4;
(*cap)=(student*)malloc(sizeof(student));
strcpy((*cap)->nume,numeS);
strcpy((*cap)->cnp,cnpS);
(*cap)->nota1=n1;
(*cap)->nota2=n2;
(*cap)->nota3=n3;
(*cap)->nota4=n4;
(*cap)->media=mediaS;
(*cap)->urm=NULL;
p=(*cap);
while (!feof(f))
{
fscanf(f,"%s",numeS);fscanf(f,"%s",cnpS);
fscanf(f,"%i",&n1);
fscanf(f,"%i",&n2);
fscanf(f,"%i",&n3);
fscanf(f,"%i",&n4);
mediaS=(n1+n2+n3+n4)/4;
q=(student*)malloc(sizeof(student));
strcpy(q->nume,numeS);
strcpy(q->cnp,cnpS);
q->nota1=n1;
q->nota2=n2;
q->nota3=n3;
q->nota4=n4;
q->media=mediaS;
q->urm=NULL;
p->urm=q;
p=q;
}
fclose(f);
}
13
student *t;
t=cap;
while (t->urm) t=t->urm;
t->urm=nou;
return cap;
}
}
int verificaCNP(char cnp[])
{
int vector[14];// vector asociat caracterelor din char cnp/ prima
faza va fi sex/an/luna/zi , apoi fiecare caracter
int i;
int b=1;
vector[0]=(int)cnp[0]-48;//valorea ascii 48 este 0
if ((vector[0]<1)||(vector[0]>2)) {b=0;}//valori asociate sexului
vector[1]=( (int)cnp[1]-48)*10 + (int)cnp[2]-48; //anul nasterii
vector[2]=( (int)cnp[3]-48)*10 + (int)cnp[4]-48; //luna nasterii
vector[3]=( (int)cnp[5]-48)*10 + (int)cnp[6]-48; //ziua nasterii
if ((vector[2]<1) || (vector[2]>12)) {b=0;}//luna 1-12
if ((vector[3]<1) ||(vector[3]>31)) b=0;
if (((vector[2]==2)&&(vector[1]%4==0)) && (vector[3]>29)) {b=0;}
if (((vector[2]==2)&&(vector[1]%4!=0)) && (vector[3]>28)) {b=0;}
if ((vector[2]=4)&&(vector[3]>30)) {b=0;}
if ((vector[2]=6)&&(vector[3]>30)) {b=0;}
if ((vector[2]=9)&&(vector[3]>30)) {b=0;}
if ((vector[2]=11)&&(vector[3]>30)) {b=0;}
for(i=1;i<13;i++)
{
vector[i]=(int)cnp[i]-48;
if ((vector[i]<0)||(vector[i]>9)) {b=0;}
}
return b;
}
14
if (p->urm != NULL && compS(p->urm->nume,n)==1)
{
aux=p->urm;
p->urm=aux->urm; // adica p->urm=p-
>urm->urm;
free(aux);
}
p=p->urm;
}
return cap;}
}
student* stergeNeprom(student *cap)
{
student *aux, *p;
if (cap==NULL){printf("\nEroare: lista e vida\n");return NULL;}
else if ((((cap->nota1<5)&&(cap->nota2<5))&&(cap->nota3<5))&&(cap-
>nota4<5)){aux=cap;cap=cap->urm; free(aux);return cap;}
else
{ p=cap;
while(p->urm!=NULL)
{
if (p->urm != NULL && ((((p->nota1<5)&&(p-
>nota2<5))&&(p->nota3<5))&&(p->nota4<5)))
{
aux=p->urm;
p->urm=aux->urm; // adica p->urm=p-
>urm->urm;
free(aux);
}
p=p->urm;
}
return cap;}
}
void print(student *cap)
{
student* t;
t=cap;
while (t)
{
cout<<"NUME : "<<t->nume<<"\t CNP : "<<t->cnp<<"\t media :
"<<t->media<<endl;
t=t->urm;
}
}
void cautaAB(Arbore_Student* r,char *cnpC)
{
Arbore_Student *aux;
aux=r;
while(aux&&(compara_sir_de_caractere(aux->cnp,cnpC,13)!=0))
{if (compara_sir_de_caractere(cnpC,aux->cnp,13)==-1) aux=aux->left;
else if (compara_sir_de_caractere(cnpC,aux->cnp,13)==1) aux=aux-
>right;};
if (aux&&(compara_sir_de_caractere(aux->cnp,cnpC,13)==0))
cout<<"NUME : "<<aux->nume<<"\t CNP : "<<aux->cnp<<"\t
media : "<<aux->media<<endl;
else
cout<<"\nNodul cautat nu exista in arbore!\n";
}
int numaraStudenti(student *cap)
{
15
int k;
student *t;
t=cap;
k=0;
while (t){k++;t=t->urm;}
return k;
}
void incarcaVector(student *cap,VectorMedia *v)
{
student *t;
int k=0;
t=cap;
while (t)
{
v[k].media=t->media;
strcpy(v[k].nume,t->nume);
t=t->urm;
k++;
}
}
16
init_lista_stud(&a);
cout<<"\nS-a citit din fisier!\n";
getch();
meniu();
break;
case '2':
cout<<"\nIntroduceti datele: ";
char n[20];
cout<<"\nNume : ";cin>>n;
char cnpS[14];
cout<<"\nCNP :
";scanf("%s",cnpS);//1850522330522
while (verificaCNP(cnpS)!=1) {cout<<"\n CNP
incorect!\nCNP : ";scanf("%s",cnpS);}
int n1,n2,n3,n4;
cout<<"\nNota 1 :
";scanf("%i",&n1);cout<<"\nNota 2 : ";scanf("%i",&n2);
cout<<"\nNota 3 :
";scanf("%i",&n3);cout<<"\nNota 4 : ";scanf("%i",&n4);
float m;m=(n1+n2+n3+n4)/4;
a=adauga(a,n,cnpS,n1,n2,n3,n4);
cout<<"\n Student adaugat\n";
getch();
meniu();
break;
case '3':
scrieInFis(a);
cout<<"\nS-a salvat in fisier!\n"<<endl;
getch();
meniu();
break;
case '4':
cout<<"\nIntroduceti numele studentului propus
catre eliminare :";
cin>>n;
a=stergeDupaNume(a,n);
getch();
meniu();
break;
case '5':
print(a);
getch();
meniu();
break;
case '6':
a=stergeNeprom(a);
getch();
meniu();
break;
case '7':
arb_stud=NULL;
arb_stud=init_arbore_stud(a,arb_stud);
getch();
meniu();
break;
case '8':
cout<<"\nIntroduceti CNP persoanei cautate:";
cin>>n;
cautaAB(arb_stud,n);
getch();
meniu();
17
break;
case '9':
v=(VectorMedia*)malloc(numaraStudenti(a)*sizeof(VectorMedia));
incarcaVector(a,v);
nrStudenti=numaraStudenti(a);
cout<<"\nMedia generala este :
"<<calcMedia(nrStudenti,v)<<endl;
getch();
meniu();
break;
}
else cout<<"Optiunea nu este in meniu!Mai incearca"<<endl;
}
18