Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrare de laborator Nr.1
A efectuat:St. gr.TI-144
Olaru Cristian
Chiinu 2015
Scopul Lucrrii:
a[l].inc=i+1;
a[l].sfr=tab_3[i][j];
l++;
} else
break;
}
}
}
//functia pentru afisarea arcelor
void afisare_1(arc *a,int u){
int i;
for(i=0;i<u;i++){
printf("Datele arcului %d\n",i+1);
printf(" X%d --> X%d\n\n",a[i].inc,a[i].sfr);
}
}
//functia pentru afisarea matricelor
void afisare_2(int **vect,int n, int m){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("\t%d",vect[i][j]);
printf("\n\n");
}
}
//functia pentru afisarea listei
void afisare_li(int **vect,int n,int m){
int i,j;
for(i=0;i<n;i++){
printf("%d |",vect[i][0]);
for(j=1;j<m;j++){
printf(" %d",vect[i][j]);
if(vect[i][j]==0)
break;
}
printf("\n\n");
}
}
//functia pentru matricea de incidenta
void matr_inc(arc *a,int **vect,int u,int x){
int i,j;
for(i=0;i<u;i++){
for(j=0;j<x;j++){
if(a[i].inc==a[i].sfr && a[i].inc==j+1)
vect[i][j]=2;
else
if(a[i].inc==j+1)
vect[i][j]=-1;
else
if(a[i].sfr==j+1)
vect[i][j]=1;
else
vect[i][j]=0;
}
}
}
//functia pentru matricea de adiacenta
void matr_ad(arc *a,int **vect,int u,int x){
int i,j,l,k=0;
for(i=0;i<x;i++){
for(j=0;j<x;j++){
for(l=0;l<u;l++){
if(a[l].inc==i+1 && a[l].sfr==j+1){
vect[i][j]=1;
k++;
}
}
if(!k)
vect[i][j]=0;
k=0;
}
}
}
//functia pentru lista de incidenta
void list_inc(arc *a,int **tab_3,int u,int x){
int i,j,l,k=1;
for(i=0;i<x;i++){
tab_3[i][0]=i+1;
k=1;
for(j=1;j<x+1;j++){
for(l=0;l<u;l++){
if(a[l].inc==i+1 && a[l].sfr==j){
tab_3[i][k]=j;
k++;
}
}
}
tab_3[i][k]=0;
}
}
//functia pentru modificare a datelor arcelor
void modif(arc *a,int ar){
printf("Datele arcului %d",ar);
printf(" X%d --> X%d\n\n",a[ar-1].inc,a[ar-1].sfr);
printf("Introdu inceputul: X");
scanf("%d",&a[ar-1].inc);
printf("Introdu sfirsitul: X");
scanf("%d",&a[ar-1].sfr);
}
//citirea din fisier a arcelor
void read_ar(arc *a,FILE *demo){
int i=0;
while(!feof(demo)){
fscanf(demo,"%d%d",&a[i].inc,&a[i].sfr);
i++;
}
printf("\a\nCitirea a avut loc cu succes!\n\n");
}
//citirea din fisier a matr. de incidenta/adiacenta
void read_matr(int **vect,FILE *demo,int n,int m){
int i=0,j=0;
while((!feof(demo)) && i<n){
while(j<m){
fscanf(demo,"%d",&vect[i][j]);
j++;
}
i++;
j=0;
}
printf("\a\nCitirea a avut loc cu succes!\n\n");
}
//citirea din fisier a listei de adiacenta
void read_li(int **vect,FILE *demo,int n){
int i=0,j=0;
while((!feof(demo)) && i<n){
while(vect[i][j-1]!=0){
fscanf(demo,"%d",&vect[i][j]);
j++;
}
i++;
j=0;
}
printf("\a\nCitirea a avut loc cu succes!\n\n");
}
//functia pentru salvare in fisier a arcelor
void save(arc *vect,char *fname,int u,int x){
int i;
FILE *demo=fopen(fname,"w");
fprintf(demo,"%d %d",u,x);
for(i=0;i<u;i++)
fprintf(demo,"\n%d %d",vect[i].inc,vect[i].sfr);
fclose(demo);
}
//functia pentru salvare a matricelor de incidenta
void save_1(int **tab_1,char *fname,int u,int x){
int i,j;
FILE *demo=fopen(fname,"w");
fprintf(demo,"%d %d",u,x);
for(i=0;i<u;i++){
fprintf(demo,"\n");
for(j=0;j<x;j++)
fprintf(demo,"%d ",tab_1[i][j]);
}
fclose(demo);
}
//functia pentru salvare a matricelor de adiacenta
scanf("%d",&com1);
system("cls");
switch(com1){
case 0:
exit(0);
break;
case 1:
p1 s1 p2 s2
system("cls");
a=(arc*)malloc(u*sizeof(arc));
intro1(a,u,x);
break;
case 2:
p1 s1 p2 s2
system("cls");
tab_1=aloc(u,x);
intro2(tab_1,u,x);
break;
case 3:
p1 s1 p2 s2
system("cls");
tab_2=aloc(x,x);
intro3(tab_2,x);
break;
case 4:
p1 s1 p2 s2
system("cls");
tab_3=aloc(x,x+2);
intro4(tab_3,x);
break;
case 5:
printf("Introdu numele fisierului (extensia este pusa automat .arc)\n");
scanf("%s",&filename);
strcat(filename,".arc");
demo=fopen(filename,"rt");
if(demo==NULL){
printf("\n\aEroare la deschiderea fisierului!\n");
printf("\n1) Posibil fisierului nu a fost gasit!");
printf("\n2) Posibil extensia fisierului nu este corecta!\n\n");
m=1;
} else {
fscanf(demo,"%d%d",&u,&x);
a=(arc*)malloc(u*sizeof(arc));
read_ar(a,demo);
afisare_1(a,u);
fclose(demo);
}
break;
case 6:
printf("Introdu numele fisierului (extensia este pusa automat .in)\n");
scanf("%s",&filename);
strcat(filename,".in");
demo=fopen(filename,"rt");
if(demo==NULL){
printf("\n\aEroare la deschiderea fisierului!\n");
printf("\n1) Posibil fisierului nu a fost gasit!");
printf("\n2) Posibil extensia fisierului nu este corecta!\n\n");
m=1;
} else {
fscanf(demo,"%d%d",&u,&x);
tab_1=aloc(u,x);
read_matr(tab_1,demo,u,x);
afisare_2(tab_1,u,x);
fclose(demo);
}
break;
case 7:
printf("Introdu numele fisierului (extensia este pusa automat .ad)\n");
scanf("%s",&filename);
strcat(filename,".ad");
demo=fopen(filename,"rt");
if(demo==NULL){
printf("\n\aEroare la deschiderea fisierului!\n");
printf("\n1) Posibil fisierului nu a fost gasit!");
printf("\n2) Posibil extensia fisierului nu este corecta!\n\n");
m=1;
} else {
fscanf(demo,"%d%d",&u,&x);
tab_2=aloc(x,x);
read_matr(tab_2,demo,x,x);
afisare_2(tab_2,x,x);
fclose(demo);
}
break;
case 8:
printf("Introdu numele fisierului (extensia este pusa automat .li)\n");
scanf("%s",&filename);
strcat(filename,".li");
demo=fopen(filename,"rt");
if(demo==NULL){
printf("\n\aEroare la deschiderea fisierului!\n");
printf("\n1) Posibil fisierului nu a fost gasit!");
printf("\n2) Posibil extensia fisierului nu este corecta!\n\n");
m=1;
} else {
fscanf(demo,"%d%d",&u,&x);
tab_3=aloc(x,x+2);
read_li(tab_3,demo,x);
afisare_li(tab_3,x,x);
fclose(demo);
}
break;
default:
printf("\aAti introdus o comanda gresita! { %d }\n",com1);
m=1;
break;
}
if(a==NULL){
a=(arc*)malloc(u*sizeof(arc));
if(tab_1!=NULL)
inc_arc(a,tab_1,u,x); //convertarea din matr. de incidenta in arce
else
if(tab_2!=NULL)
ad_arc(a,tab_2,x); //convertarea din matr. de adiacenta in arce
else
if(tab_3!=NULL)
li_arc(a,tab_3,x); //convertarea din lista de adiacenta in arce
}
system("pause");
}
/*
Meniul afisare/salvare/modificare
*/
system("cls");
printf("Meniu:\n\n");
printf("[ 1 ] Afisarea arcelor\n");
printf("[ 2 ] Modificarea arcelor\n\n");
printf("[ 3 ] Matricea de incidenta\n");
printf("[ 4 ] Matricea de adiacenta\n");
printf("[ 5 ] Lista de incidenta\n\n");
printf("[ 6 ] Salveaza in fisier\n\n");
printf("[ 0 ] Iesire\n");
printf("\nComanda << ");
scanf("%d",&com2);
system("cls");
switch(com2){
case 0:
if(a)
free(a);
if(tab_1)
tab_1=freemem(tab_1,u);
if(tab_2)
tab_2=freemem(tab_2,x);
if(tab_3)
tab_3=freemem(tab_3,x+2);
exit(0);
break;
case 1:
afisare_1(a,u);
break;
case 2:
lm:
system("cls");
afisare_1(a,u);
printf("\n\nIntrodu numarul arcului pentru modificare: ");
scanf("%d",&ar);
if(!(ar >= 1 && ar <= u)){
system("cls");
printf("\aArcul introdus nu exista! Incercati din nou.\n");
system("pause");
goto lm;
}
system("cls");
modif(a,ar);
break;
case 3:
printf("Matricea de incidenta:\n\n");
if(tab_1){
afisare_2(tab_1,u,x);
}
else{
tab_1=aloc(u,x);
matr_inc(a,tab_1,u,x);
afisare_2(tab_1,u,x);
}
break;
case 4:
printf("Matricea de adiacenta:\n\n");
if(tab_2){
afisare_2(tab_2,u,x);
}
else{
tab_2=aloc(x,x);
matr_ad(a,tab_2,u,x);
afisare_2(tab_2,x,x);
}
break;
case 5:
printf("Lista de incidenta:\n\n");
if(tab_3!=NULL){
afisare_li(tab_3,x,x+2);
} else {
tab_3=aloc(x,x+2);
list_inc(a,tab_3,u,x);
afisare_li(tab_3,x,x+2);
}
break;
case 6:
printf("Save menu:\n\n");
printf("[ 1 ] Salveaza Arcele\n");
printf("[ 2 ] Salveaza Matricea de incidenta\n");
printf("[ 3 ] Salveaza Matricea de adiacenta\n");
printf("[ 4 ] Salveaza Lista de adiacenta\n");
printf("\n Comanda << ");
scanf("%d",&com3);
system("cls");
switch(com3){
case 1:
printf("Salveaza Arcele:\n\n");
printf("Introduceti numele fisierului pentru salvare\n");
scanf("%s",&filename);
strcat(filename,".arc");
save(a,filename,u,x);
break;
case 2:
if(!tab_1){
printf("\aMai intii converteaza!\n");
} else {
printf("Salveaza Matricea de incidenta:\n\n");
printf("Introduceti numele fisierului pentru salvare\n");
scanf("%s",&filename);
strcat(filename,".in");
save_1(tab_1,filename,u,x);
}
break;
case 3:
if(!tab_2){
printf("\aMai intii converteaza!\n");
} else {
printf("Salveaza Matricea de adiacenta:\n\n");
printf("Introduceti numele fisierului pentru salvare\n");
scanf("%s",&filename);
strcat(filename,".ad");
save_2(tab_2,filename,u,x);
}
break;
case 4:
if(!tab_3){
printf("\aMai intii converteaza!\n");
} else {
printf("Salveaza Lista de adiacenta:\n\n");
printf("Introduceti numele fisierului pentru salvare\n");
scanf("%s",&filename);
strcat(filename,".li");
save_3(tab_3,filename,u,x);
}
break;
default:
printf("\aAti introdus o comanda gresita! { %d }\n",com2);
break;
}
break;
default:
printf("\aAti introdus o comanda gresita! { %d }\n",com2);
break;
}
system("pause");
}
return 0;
}