Created
February 16, 2015 14:47
-
-
Save iamandrewluca/807357eed49a815648f1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<conio2.h> | |
#include<stdlib.h> | |
#include<dos.h> | |
typedef struct val { | |
unsigned v:2; | |
}val; | |
void ver_m_i(); | |
val *m_a=NULL; //matricea adiacenta | |
val *m_i=NULL; //matricea de incidenta | |
val *temp=NULL; | |
int nr_v_t=0,nr_a_t=0; | |
int permit=0; | |
int *l_a=NULL; | |
int err_m_i[50]; //salveaza numarul liniilor din m_i cu eroare | |
int nr_err_m_i=0; //numarul total de erori din m_i | |
int nr_v=0; //numarul virfurilor | |
int nr_a=0; //numarul arcurilor | |
int nr_b=0; //numarul de bucle | |
int mi_da=0,ma_da=0,la_da=0; | |
char* meniu1[]={ | |
"CITIRE ", //11 caractere | |
"AFISARE ", | |
"SALVARE ", | |
"IMPRIMARE ", | |
"IESIRE " | |
}; | |
char* meniu2[]={ | |
"- de la tastatura", //17 caractere | |
"- din fishier " | |
}; | |
char* meniu3[]={ | |
"Matricea adiacenta ", //21 caractere | |
"Matricea de incidenta", | |
"Lista de adiacenta ", | |
"Toate variantele " | |
}; | |
void col(int i,int j) { | |
textbackground(i); | |
textcolor(j); | |
} | |
void plusl(int n) { | |
for(;n!=0;n--) | |
insline(); | |
} | |
void ins_meniu2(int x,int y) { | |
col(15,0); | |
gotoxy(x,y); | |
cprintf("%s",meniu2[0]); | |
col(0,15); | |
y+=2; | |
gotoxy(x,y); | |
cprintf("%s",meniu2[1]); | |
} | |
void ins_meniu3(int x,int y) { | |
col(15,0); | |
gotoxy(x,y); | |
cprintf("%s",meniu3[0]); | |
col(0,15); | |
y+=2; | |
for(int i=1;i<3;i++,y+=2) { | |
gotoxy(x,y); | |
cprintf("%s",meniu3[i]); | |
} | |
} | |
void ver_m_i() { | |
nr_b=0; | |
nr_err_m_i=0; | |
int n_n=0, //numarul de unitatsi pozitive pe linie | |
n_p=0, //numarul de unitatsi negative pe linie | |
n_b=0; //numarul de bucle pe linie | |
for(int i=0;i<nr_a;i++) { | |
n_n=n_p=n_b=0; | |
for(int j=0;j<nr_v;j++) | |
if(m_i[i*nr_v+j].v==1) | |
n_p++; | |
else if(m_i[i*nr_v+j].v==3) | |
n_n++; | |
else if(m_i[i*nr_v+j].v==2) | |
n_b++; | |
if(n_n==1 && n_p==1 && n_b==0) | |
; | |
else if(n_b==1 && n_n==0 && n_p==0) | |
nr_b++; //sumez bucla gasita la numarul total de bucle | |
else { | |
err_m_i[nr_err_m_i]=i; | |
nr_err_m_i++; | |
} | |
} | |
} | |
int meniua() { | |
_setcursortype(_NOCURSOR); | |
int sel1=0; | |
a: int pozy=2; | |
col(0,2); //verde pe negru | |
clrscr (); | |
gotoxy(7,pozy); | |
cprintf("MENIUL START"); | |
col(0,15); | |
for(int i=0;i<5;i++) { | |
pozy+=2; | |
gotoxy(7,pozy); | |
cprintf("%s",meniu1[i]); | |
} | |
col(15,0); | |
gotoxy(7,sel1*2+4); | |
cprintf("%s",meniu1[sel1]); | |
while(1) { | |
switch(getch()) { | |
case 72 : col(0,15); | |
gotoxy(7,sel1*2+4); | |
cprintf("%s",meniu1[sel1]); | |
col(15,0); | |
if(sel1-1<0) | |
sel1=4; | |
else sel1--; | |
gotoxy(7,sel1*2+4); | |
cprintf("%s",meniu1[sel1]); | |
break; | |
case 80 : col(0,15); | |
gotoxy(7,sel1*2+4); | |
cprintf("%s",meniu1[sel1]); | |
col(15,0); | |
if(sel1+1>4) | |
sel1=0; | |
else sel1++; | |
gotoxy(7,sel1*2+4); | |
cprintf("%s",meniu1[sel1]); | |
break; | |
case 13 : | |
case 77 : if (sel1==4) | |
return 0; | |
else if(sel1==2) | |
return 8;//salveaza in fishier | |
else { | |
col(0,15); | |
gotoxy(7,sel1*2+4); | |
cprintf("%s",meniu1[sel1]); | |
pozy=sel1*2+6; | |
gotoxy(7,pozy); | |
int sel2=0; | |
switch (sel1) { | |
case 0 : plusl(4); | |
b:ins_meniu2(14,6); | |
while(1) { | |
switch(getch()) { | |
case 72 : gotoxy(14,sel2*2+pozy); | |
col(0,15); | |
cprintf("%s",meniu2[sel2]); | |
if(sel2==0) sel2++; | |
else sel2--; | |
gotoxy(14,sel2*2+pozy); | |
col(15,0); | |
cprintf("%s",meniu2[sel2]); | |
break; | |
case 80 : gotoxy(14,sel2*2+pozy); | |
col(0,15); | |
cprintf("%s",meniu2[sel2]); | |
if(sel2==1) sel2--; | |
else sel2++; | |
gotoxy(14,sel2*2+pozy); | |
col(15,0); | |
cprintf("%s",meniu2[sel2]); | |
break; | |
case 75 : goto a; | |
case 13 : | |
case 77 : if(sel2==1) //functia de citire din fishier | |
return 4; | |
col(0,15); | |
gotoxy(14,sel2*2+pozy); | |
cprintf("%s",meniu2[sel2]); | |
pozy+=2; | |
gotoxy(14,sel2*2+pozy); | |
plusl(6); | |
ins_meniu3(21,pozy); | |
int sel3=0; | |
while(1) { | |
switch(getch()) { | |
case 72 : col(0,15); | |
gotoxy(21,sel3*2+pozy); | |
cprintf("%s",meniu3[sel3]); | |
if(sel3==0) sel3=2; | |
else sel3--; | |
col(15,0); | |
gotoxy(21,sel3*2+pozy); | |
cprintf("%s",meniu3[sel3]); | |
break; | |
case 80 : col(0,15); | |
gotoxy(21,sel3*2+pozy); | |
cprintf("%s",meniu3[sel3]); | |
if(sel3==2) sel3=0; | |
else sel3++; | |
col(15,0); | |
gotoxy(21,sel3*2+pozy); | |
cprintf("%s",meniu3[sel3]); | |
break; | |
case 75 : gotoxy(7,7); | |
col(0,15); | |
pozy=sel1*2+6; | |
for(int i=0;i<6;i++) | |
delline(); | |
goto b; | |
case 13 : | |
case 77 : | |
switch(sel3) { | |
case 0 : return 1; | |
case 1 : return 2; | |
case 2 : return 3; | |
} | |
} | |
} | |
} | |
} | |
case 1 : col(0,15); | |
plusl(6); | |
ins_meniu3(14,pozy); | |
int sel3=0; | |
while(1) { | |
switch(getch()) { | |
case 72 : col(0,15); | |
gotoxy(14,sel3*2+pozy); | |
cprintf("%s",meniu3[sel3]); | |
if(sel3==0) sel3=2; | |
else sel3--; | |
col(15,0); | |
gotoxy(14,sel3*2+pozy); | |
cprintf("%s",meniu3[sel3]); | |
break; | |
case 80 : col(0,15); | |
gotoxy(14,sel3*2+pozy); | |
cprintf("%s",meniu3[sel3]); | |
if(sel3==2) sel3=0; | |
else sel3++; | |
col(15,0); | |
gotoxy(14,sel3*2+pozy); | |
cprintf("%s",meniu3[sel3]); | |
break; | |
case 75 : goto a; | |
case 13 : | |
case 77 : switch(sel3) { | |
case 0 : return 5; | |
case 1 : return 6; | |
case 2 : return 7; | |
} | |
} | |
} | |
case 3 : col(0,15); | |
plusl(8); | |
ins_meniu3(14,pozy); | |
col(0,15); | |
gotoxy(14,pozy+6); | |
cprintf("%s",meniu3[3]); | |
int sel4=0; | |
while(1) { | |
switch(getch()) { | |
case 72 : col(0,15); | |
gotoxy(14,sel4*2+pozy); | |
cprintf("%s",meniu3[sel4]); | |
if(sel4==0) sel4=3; | |
else sel4--; | |
col(15,0); | |
gotoxy(14,sel4*2+pozy); | |
cprintf("%s",meniu3[sel4]); | |
break; | |
case 80 : col(0,15); | |
gotoxy(14,sel4*2+pozy); | |
cprintf("%s",meniu3[sel4]); | |
if(sel4==3) sel4=0; | |
else sel4++; | |
col(15,0); | |
gotoxy(14,sel4*2+pozy); | |
cprintf("%s",meniu3[sel4]); | |
break; | |
case 75 : goto a; | |
case 13 : | |
case 77 : switch(sel4) { | |
case 0 : return 9; | |
case 1 : return 10; | |
case 2 : return 11; | |
case 3 : return 12; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
int rama_m_a(void) { | |
if(!ma_da) { | |
col(0,15); | |
clrscr(); | |
col(0,4); | |
gotoxy(12,10); | |
cprintf("Nu sunt inregistrate date noi!"); | |
col(0,15); | |
getch(); | |
return 0; | |
} | |
col(0,15); | |
clrscr (); | |
gotoxy(4,2); | |
cprintf("---- Matricea adiacenta ----"); | |
col(0,2); | |
gotoxy(2,4); | |
cprintf("A %c",186); | |
int i,j; | |
for(i=0;i<nr_v;i++) | |
cprintf("%2d %c",i+1,179); | |
gotoxy(2,5); | |
cprintf("%c%c%c",205,205,206); | |
for(i=0;i<nr_v;i++) | |
cprintf("%c%c%c%c",205,205,205,207); | |
gotoxy(2,7); | |
int pozy=6,pozx; | |
for(i=0;i<nr_v;i++) { | |
gotoxy(2,pozy); | |
cprintf("%2d%c",i+1,186); | |
gotoxy(2,pozy+1); | |
cprintf("%c%c%c",196,196,182); | |
pozy+=2; | |
} | |
pozy=6; | |
col(0,15); | |
for(i=0;i<nr_v;i++) { | |
pozx=6; | |
for(j=0;j<nr_v;j++) { | |
gotoxy(pozx,pozy); | |
cprintf("%d",m_a[i*nr_v+j].v); | |
pozx+=4; | |
} | |
pozy+=2; | |
} | |
return 1; | |
} | |
int citeste_m_a(void) { | |
int l=0,c=0,x=6,y=6; | |
col(0,4); | |
gotoxy(30,1); | |
cprintf("S - Salvare"); | |
gotoxy(30,2); | |
cprintf("ESC - Sterge toate datele"); | |
col(0,15); | |
gotoxy(x-1,y); | |
col(15,0); | |
cprintf(" %d ",m_a[l*nr_v+c].v); | |
char ch; | |
while(1) { | |
ch=getch(); | |
if(ch=='1' || ch=='0') { | |
m_a[l*nr_v+c].v=ch-48; | |
gotoxy(x-1,y); | |
cprintf(" %c ",ch); | |
} else switch (ch) { | |
case 72 : col(0,15); | |
gotoxy(x-1,y); | |
cprintf(" %d ",m_a[l*nr_v+c].v); | |
l=(l==0) ? nr_v-1 : l-1; | |
y=(l==nr_v-1) ? l*2+6 : y-2; | |
gotoxy(x-1,y); | |
col(15,0); | |
cprintf(" %d ",m_a[l*nr_v+c].v); | |
break; | |
case 80 : col(0,15); | |
gotoxy(x-1,y); | |
cprintf(" %d ",m_a[l*nr_v+c].v); | |
l=(l==nr_v-1) ? 0 : l+1; | |
y=(l==0) ? 6 : y+2; | |
gotoxy(x-1,y); | |
col(15,0); | |
cprintf(" %d ",m_a[l*nr_v+c].v); | |
break; | |
case 13 : | |
case 77 : col(0,15); | |
gotoxy(x-1,y); | |
cprintf(" %d ",m_a[l*nr_v+c].v); | |
if(c==nr_v-1) { | |
c=0; | |
x=6; | |
l=(l==nr_v-1) ? 0 : l+1; | |
y=(l==0) ? 6 : y+2; | |
} else { | |
c++; | |
x+=4; | |
} | |
gotoxy(x-1,y); | |
col(15,0); | |
cprintf(" %d ",m_a[l*nr_v+c].v); | |
break; | |
case 75 : col(0,15); | |
gotoxy(x-1,y); | |
cprintf(" %d ",m_a[l*nr_v+c].v); | |
if(c==0) { | |
c=nr_v-1; | |
x=c*4+6; | |
l=(l==0) ? nr_v-1 : l-1; | |
y=(l==nr_v-1) ? l*2+6 : y-2; | |
} else { | |
c--; | |
x-=4; | |
} | |
gotoxy(x-1,y); | |
col(15,0); | |
cprintf(" %d ",m_a[l*nr_v+c].v); | |
break; | |
case 'S' : | |
case 's' : return 1; | |
case 27 : col(0,15); | |
clrscr(); | |
gotoxy(12,10); | |
cprintf("Sunteti siguri ? (D/N)"); | |
aicisterge: | |
switch(getch()) { | |
case 'd' : | |
case 'D' : | |
case 13 : nr_v=0; | |
m_a=NULL; | |
mi_da=0; | |
ma_da=0; | |
la_da=0; | |
return 0; | |
case 'n' : | |
case 'N' : ma_da=1; | |
return 1; | |
default : goto aicisterge; | |
} | |
} | |
} | |
} | |
int rama_m_i(void) { | |
if(!mi_da) { | |
col(0,15); | |
clrscr(); | |
col(0,4); | |
gotoxy(12,10); | |
cprintf("Nu sunt inregistrate date noi!"); | |
col(0,15); | |
getch(); | |
return 0; | |
} | |
col(0,15); | |
clrscr (); | |
gotoxy(4,2); | |
cprintf("---- Matricea de incidenta ----"); | |
col(0,2); | |
gotoxy(1,4); | |
cprintf("B %c",186); | |
int i,j; | |
for(i=0;i<nr_v;i++) | |
cprintf("%2d %c",i+1,179); | |
gotoxy(1,5); | |
cprintf("%c%c%c%c",205,205,205,206); | |
for(i=0;i<nr_v;i++) | |
cprintf("%c%c%c%c",205,205,205,207); | |
gotoxy(1,7); | |
int pozy=6,pozx; | |
for(i=0;i<nr_a;i++) { | |
gotoxy(1,pozy); | |
cprintf("U%-2d%c",i+1,186); | |
gotoxy(1,pozy+1); | |
cprintf("%c%c%c%c",196,196,196,182); | |
pozy+=2; | |
} | |
col(0,15); | |
pozy=6; | |
for(i=0;i<nr_a;i++) { | |
pozx=6; | |
for(j=0;j<nr_v;j++) { | |
gotoxy(pozx,pozy); | |
if(m_i[i*nr_v+j].v==3) { | |
gotoxy(pozx-1,pozy); | |
cprintf("-1 "); | |
} else | |
cprintf("%d",m_i[i*nr_v+j].v); | |
pozx+=4; | |
} | |
pozy+=2; | |
} | |
return 1; | |
} | |
int m_i_m_a(void) { | |
int s,d; | |
m_a=(val*)calloc(nr_v*nr_v,sizeof(val)); | |
if(!m_a) | |
return 0; | |
nr_err_m_i=0; | |
for(int i=0;i<nr_a;i++) { | |
for(int j=0;j<nr_v;j++) | |
if(m_i[i*nr_v+j].v==1) | |
d=j; | |
else if(m_i[i*nr_v+j].v==3) | |
s=j; | |
else if(m_i[i*nr_v+j].v==2) | |
s=d=j; | |
if(m_a[s*nr_v+d].v==1) { | |
err_m_i[nr_err_m_i]=i+1; | |
nr_err_m_i++; | |
} | |
m_a[s*nr_v+d].v=1; | |
} | |
return 1; | |
} | |
int citeste_m_i(void) { | |
int l,c,x,y; | |
inceput: | |
l=c=0; | |
x=y=6; | |
col(0,4); | |
gotoxy(30,1); | |
cprintf("S - Salvare"); | |
gotoxy(30,2); | |
cprintf("ESC - Sterge toate datele"); | |
col(0,15); | |
gotoxy(x-1,y); | |
col(15,0); | |
if(m_i[l*nr_v+c].v==3) | |
cprintf("-1 "); | |
else | |
cprintf(" %d ",m_i[l*nr_v+c].v); | |
char ch1,ch2; | |
while(1) { | |
ch1=getch(); | |
if(ch1=='-') { | |
gotoxy(x-1,y); | |
cprintf("- "); | |
ch2=getch(); | |
} else | |
ch2=ch1; | |
if(ch2=='1' || ch2=='0' || ch2=='2') { | |
if(ch1=='-' && ch2=='1') | |
m_i[l*nr_v+c].v=3; | |
else | |
m_i[l*nr_v+c].v=ch1-48; | |
gotoxy(x-1,y); | |
{ | |
if(m_i[l*nr_v+c].v==3) | |
cprintf("-1 "); | |
else | |
cprintf("%2d ",m_i[l*nr_v+c].v); | |
} | |
} else switch (ch1) { | |
case 72 : col(0,15); | |
gotoxy(x-1,y); | |
if(m_i[l*nr_v+c].v==3) | |
cprintf("-1 "); | |
else | |
cprintf(" %d ",m_i[l*nr_v+c].v); | |
l=(l==0) ? nr_a-1 : l-1; | |
y=(l==nr_a-1) ? l*2+6 : y-2; | |
gotoxy(x-1,y); | |
col(15,0); | |
if(m_i[l*nr_v+c].v==3) | |
cprintf("-1 "); | |
else | |
cprintf(" %d ",m_i[l*nr_v+c].v); | |
break; | |
case 80 : col(0,15); | |
gotoxy(x-1,y); | |
if(m_i[l*nr_v+c].v==3) | |
cprintf("-1 "); | |
else | |
cprintf(" %d ",m_i[l*nr_v+c].v); | |
l=(l==nr_a-1) ? 0 : l+1; | |
y=(l==0) ? 6 : y+2; | |
gotoxy(x-1,y); | |
col(15,0); | |
if(m_i[l*nr_v+c].v==3) | |
cprintf("-1 "); | |
else | |
cprintf(" %d ",m_i[l*nr_v+c].v); | |
break; | |
case 13 : | |
case 77 : col(0,15); | |
gotoxy(x-1,y); | |
if(m_i[l*nr_v+c].v==3) | |
cprintf("-1 "); | |
else | |
cprintf(" %d ",m_i[l*nr_v+c].v); | |
if(c==nr_v-1) { | |
c=0; | |
x=6; | |
l=(l==nr_a-1) ? 0 : l+1; | |
y=(l==0) ? 6 : y+2; | |
} else { | |
c++; | |
x+=4; | |
} | |
gotoxy(x-1,y); | |
col(15,0); | |
if(m_i[l*nr_v+c].v==3) | |
cprintf("-1 "); | |
else | |
cprintf(" %d ",m_i[l*nr_v+c].v); | |
break; | |
case 75 : col(0,15); | |
gotoxy(x-1,y); | |
if(m_i[l*nr_v+c].v==3) | |
cprintf("-1 "); | |
else | |
cprintf(" %d ",m_i[l*nr_v+c].v); | |
if(c==0) { | |
c=nr_v-1; | |
x=c*4+6; | |
l=(l==0) ? nr_a-1 : l-1; | |
y=(l==nr_a-1) ? l*2+6 : y-2; | |
} else { | |
c--; | |
x-=4; | |
} | |
gotoxy(x-1,y); | |
col(15,0); | |
if(m_i[l*nr_v+c].v==3) | |
cprintf("-1 "); | |
else | |
cprintf(" %d ",m_i[l*nr_v+c].v); | |
break; | |
case 'S' : | |
case 's' : ver_m_i(); | |
if(nr_err_m_i) { | |
col(0,4); | |
gotoxy(12,20); | |
cprintf("Au fost depistate %d erori,",nr_err_m_i); | |
gotoxy(12,22); | |
cprintf("in liniile : "); | |
for(int k=0;k<nr_err_m_i;k++) | |
cprintf("%d, ",err_m_i[k]+1); | |
getch (); | |
col(0,15); | |
rama_m_i(); | |
goto inceput; | |
} | |
if(m_i_m_a()) { | |
if(nr_err_m_i) { | |
col(0,4); | |
gotoxy(12,20); | |
cprintf("Au fost depistate %d identitati,: ",nr_err_m_i); | |
gotoxy(12,22); | |
cprintf("la arcurile : "); | |
for(int k=0;k<nr_err_m_i;k++) | |
cprintf("%d, ",err_m_i[k]); | |
getch(); | |
col(0,15); | |
rama_m_i(); | |
goto inceput; | |
} | |
ma_da=1; | |
} else | |
ma_da=0; | |
return 1; | |
case 27 : col(0,15); | |
clrscr(); | |
gotoxy(12,10); | |
cprintf("Sunteti siguri ? (D/N)"); | |
aicisterge: | |
switch(getch()) { | |
case 'd' : | |
case 'D' : | |
case 13 : nr_v=nr_a=0; | |
m_i=NULL; | |
mi_da=0; | |
ma_da=0; | |
la_da=0; | |
return 0; | |
case 'n' : | |
case 'N' : mi_da=1; | |
return 1; | |
default : goto aicisterge; | |
} | |
} | |
} | |
} | |
int rama_l_a(void) { | |
if(!la_da) { | |
col(0,15); | |
clrscr(); | |
col(0,4); | |
gotoxy(12,10); | |
cprintf("Nu sunt inregistrate date noi!"); | |
col(0,15); | |
return 0; | |
} | |
col(0,15); | |
clrscr (); | |
gotoxy(4,2); | |
cprintf("---- Lista de adiacenta ----"); | |
gotoxy(2,4); | |
col(0,2); | |
cprintf("V %c",186); | |
int i,j; | |
gotoxy(2,5); | |
cprintf("%c%c%c",205,205,206); | |
for(i=0;i<nr_v+1;i++) | |
cprintf("%c%c%c%c",205,205,205,205); | |
gotoxy(2,7); | |
int pozy=6,pozx; | |
for(i=0;i<nr_v;i++) { | |
gotoxy(2,pozy); | |
cprintf("%2d%c",i+1,186); | |
gotoxy(2,pozy+1); | |
cprintf("%c%c%c",196,196,182); | |
pozy+=2; | |
} | |
col(0,15); | |
pozy=6; | |
for(i=0;i<nr_v;i++) { | |
pozx=6; | |
for(j=0;j<nr_v;j++) { | |
gotoxy(pozx-1,pozy); | |
cprintf("%-3d",l_a[i*nr_v+j]); | |
if(l_a[i*nr_v+j]==0) | |
j=nr_v; | |
else | |
pozx+=4; | |
} | |
pozy+=2; | |
} | |
return 1; | |
} | |
int citeste_l_a(void) { | |
int l=0,c=0,x=6,y=6; | |
col(0,4); | |
gotoxy(30,1); | |
cprintf("S - Salvare"); | |
gotoxy(30,2); | |
cprintf("ESC - Sterge toate datele"); | |
col(0,15); | |
gotoxy(x-1,y); | |
col(15,0); | |
cprintf("%-3d ",l_a[l*nr_v+c]); | |
char ch; | |
while(1) { | |
ch=getch(); | |
if(ch==8) { | |
gotoxy(x-1,y); | |
cprintf(" "); | |
gotoxy(x-1,y); | |
scanf("%d",&l_a[l*nr_v+c]); | |
if(l_a[l*nr_v+c]>nr_v) | |
l_a[l*nr_v+c]=0; | |
col(0,15); | |
gotoxy(x-1,y); | |
cprintf("%-3d ",l_a[l*nr_v+c]); | |
if(c==nr_v-1) { | |
c=0; | |
x=6; | |
l=(l==nr_v-1) ? 0 : l+1; | |
y=(l==0) ? 6 : y+2; | |
} else { | |
c++; | |
x+=4; | |
} | |
gotoxy(x-1,y); | |
col(15,0); | |
cprintf("%-3d ",l_a[l*nr_v+c]); | |
} else switch (ch) { | |
case 72 : col(0,15); | |
gotoxy(x-1,y); | |
cprintf("%-3d ",l_a[l*nr_v+c]); | |
l=(l==0) ? nr_v-1 : l-1; | |
y=(l==nr_v-1) ? l*2+6 : y-2; | |
gotoxy(x-1,y); | |
col(15,0); | |
cprintf("%-3d ",l_a[l*nr_v+c]); | |
break; | |
case 80 : col(0,15); | |
gotoxy(x-1,y); | |
cprintf("%-3d ",l_a[l*nr_v+c]); | |
l=(l==nr_v-1) ? 0 : l+1; | |
y=(l==0) ? 6 : y+2; | |
gotoxy(x-1,y); | |
col(15,0); | |
cprintf("%-3d ",l_a[l*nr_v+c]); | |
break; | |
case 13 : | |
case 77 : col(0,15); | |
gotoxy(x-1,y); | |
cprintf("%-3d ",l_a[l*nr_v+c]); | |
if(c==nr_v-1) { | |
c=0; | |
x=6; | |
l=(l==nr_v-1) ? 0 : l+1; | |
y=(l==0) ? 6 : y+2; | |
} else { | |
c++; | |
x+=4; | |
} | |
gotoxy(x-1,y); | |
col(15,0); | |
cprintf("%-3d ",l_a[l*nr_v+c]); | |
break; | |
case 75 : col(0,15); | |
gotoxy(x-1,y); | |
cprintf("%-3d ",l_a[l*nr_v+c]); | |
if(c==0) { | |
c=nr_v-1; | |
x=c*4+6; | |
l=(l==0) ? nr_v-1 : l-1; | |
y=(l==nr_v-1) ? l*2+6 : y-2; | |
} else { | |
c--; | |
x-=4; | |
} | |
gotoxy(x-1,y); | |
col(15,0); | |
cprintf("%-3d ",l_a[l*nr_v+c]); | |
break; | |
case 'S' : | |
case 's' : return 1; | |
case 27 : return 0; | |
} | |
} | |
} | |
char optiuni_mi(void) { | |
col(15,0); | |
gotoxy(20,8); | |
for(int i=0;i<25;i++) | |
cprintf("="); | |
gotoxy(20,9); | |
cprintf(" "); | |
gotoxy(20,10); | |
cprintf(" 1. Modificare date "); //26 caractere | |
gotoxy(20,11); | |
cprintf(" "); | |
gotoxy(20,12); | |
cprintf(" 2. Sterge arc "); | |
gotoxy(20,13); | |
cprintf(" "); | |
gotoxy(20,14); | |
cprintf(" 3. Adauga arc "); | |
gotoxy(20,15); | |
cprintf(" "); | |
gotoxy(20,16); | |
cprintf(" 4. Sterge virf "); | |
gotoxy(20,17); | |
cprintf(" "); | |
gotoxy(20,18); | |
cprintf(" 5. Adauga virf "); | |
gotoxy(20,19); | |
cprintf(" "); | |
gotoxy(20,20); | |
cprintf(" 6. Paraseste opriuni "); | |
gotoxy(20,21); | |
cprintf(" "); | |
gotoxy(20,22); | |
for(i=0;i<25;i++) | |
cprintf("="); | |
col(0,15); | |
char rez; | |
aicioptiuni: | |
rez=getch(); | |
switch(rez) { | |
case '1' : | |
case '2' : | |
case '3' : | |
case '4' : | |
case '5' : | |
case '6' : | |
return rez; | |
default : goto aicioptiuni; | |
} | |
} | |
char optiuni_ma(void) { | |
col(15,0); | |
gotoxy(20,8); | |
for(int i=0;i<25;i++) | |
cprintf("="); | |
gotoxy(20,9); | |
cprintf(" "); | |
gotoxy(20,10); | |
cprintf(" 1. Modificare date "); //26 caractere | |
gotoxy(20,11); | |
cprintf(" "); | |
gotoxy(20,12); | |
cprintf(" 2. Sterge virf "); | |
gotoxy(20,13); | |
cprintf(" "); | |
gotoxy(20,14); | |
cprintf(" 3. Adauga virf "); | |
gotoxy(20,15); | |
cprintf(" "); | |
gotoxy(20,16); | |
cprintf(" 4. Paraseste optiuni "); | |
gotoxy(20,17); | |
cprintf(" "); | |
gotoxy(20,18); | |
for(i=0;i<25;i++) | |
cprintf("="); | |
col(0,15); | |
char rez; | |
aicioptiuni: | |
rez=getch(); | |
switch(rez) { | |
case '1' : | |
case '2' : | |
case '3' : | |
case '4' : return rez; | |
default : goto aicioptiuni; | |
} | |
} | |
int m_a_l_a(void) { | |
l_a=(int*)calloc(nr_v*nr_v,sizeof(int)); | |
if(!l_a) | |
return 0; | |
int c; | |
for(int i=0;i<nr_v;i++) { | |
c=0; | |
for(int j=0;j<nr_v;j++) { | |
if(m_a[i*nr_v+j].v==1) { | |
l_a[i*nr_v+c]=j+1; | |
c++; | |
} | |
} | |
} | |
return 1; | |
} | |
int l_a_m_i(void) { | |
nr_a=0; | |
for(int i=0;i<nr_v*nr_v;i++) | |
if(l_a[i]>0) | |
nr_a++; | |
m_i=(val*)calloc(nr_v*nr_a,sizeof(val)); | |
if(!m_i) | |
return 0; | |
nr_a=0; | |
for(i=0;i<nr_v;i++) | |
for(int j=0,c;j<nr_v;j++) | |
if(l_a[i*nr_v+j]>0) { | |
if(l_a[i*nr_v+j]==i+1) | |
m_i[nr_a*nr_v+i].v=2; | |
else { | |
m_i[nr_a*nr_v+i].v=3; | |
c=l_a[i*nr_v+j]; | |
m_i[nr_a*nr_v+c-1].v=1; | |
} | |
nr_a++; | |
} | |
return 1; | |
} | |
int main () { | |
textmode(C4350); | |
int tip,start=1; | |
FILE* fisier=NULL; | |
char nume_f[25]; | |
afara: | |
while(start) { | |
tip=meniua(); | |
col(0,15); | |
clrscr (); | |
switch(tip) { | |
case 0 : start=0; | |
break; | |
case 1 : col(0,15); | |
do{ | |
clrscr(); | |
gotoxy(12,6); | |
cprintf("Introdu numarul de virfuri (max 23) >> "); | |
scanf("%d",&nr_v); | |
} while(nr_v>=23); | |
m_a=(val*)calloc(nr_v*nr_v,sizeof(val)); | |
gotoxy(12,8); | |
if(!m_a) { | |
col(0,4); | |
cprintf("Nu dispun de suficienta memorie"); | |
ma_da=0; | |
la_da=0; | |
mi_da=0; | |
getch (); | |
goto afara; | |
} else { | |
col(0,1); | |
cprintf("Memorie suficienta"); | |
col(0,15); | |
delay(1000); | |
ma_da=1; | |
mi_da=0; | |
la_da=0; | |
} | |
rama_m_a(); | |
if(!citeste_m_a()) { | |
ma_da=0; | |
la_da=0; | |
mi_da=0; | |
goto afara; | |
} | |
else { | |
col(0,1); | |
clrscr(); | |
gotoxy(12,10); | |
cprintf("Salvare reusita"); | |
getch (); | |
} | |
if(m_a_l_a()) | |
la_da=1; | |
else { | |
la_da=0; | |
break; | |
} | |
if(l_a_m_i()) | |
mi_da=1; | |
else | |
mi_da=0; | |
break; | |
case 2 : col(0,15); | |
do{ | |
clrscr(); | |
gotoxy(12,6); | |
cprintf("Introdu numarul de virfuri (max 23) >> "); | |
scanf("%d",&nr_v); | |
} while(nr_v>=23); | |
do { | |
clrscr(); | |
gotoxy(12,6); | |
cprintf("Introdu numarul de arcuri (max %d) >> ",nr_v*nr_v); | |
scanf("%d",&nr_a); | |
} while(nr_a>=nr_v*nr_v); | |
m_i=(val*)calloc(nr_v*nr_a,sizeof(val)); | |
gotoxy(12,10); | |
if(!m_i) { | |
col(0,4); | |
cprintf("Nu dispun de suficienta memorie"); | |
mi_da=0; | |
ma_da=0; | |
la_da=0; | |
getch (); | |
break; | |
} else { | |
col(0,1); | |
cprintf("Memorie suficienta"); | |
mi_da=1; | |
ma_da=0; | |
la_da=0; | |
delay(1000); | |
} | |
aici2: | |
rama_m_i(); | |
if(citeste_m_i()) { | |
col(0,1); | |
clrscr(); | |
gotoxy(12,12); | |
cprintf("Salvare reusita"); | |
} else { | |
col(0,1); | |
clrscr(); | |
gotoxy(12,12); | |
cprintf("Datele au fost lichidate cu succes."); | |
} | |
getch(); | |
if(m_a_l_a()) | |
la_da=1; | |
else | |
la_da=0; | |
col(0,15); | |
break; | |
case 3 : col(0,15); | |
do{ | |
clrscr(); | |
gotoxy(12,6); | |
cprintf("Introdu numarul de virfuri (max 23) >> "); | |
scanf("%d",&nr_v); | |
} while(nr_v>=23); | |
l_a=(int*)calloc(nr_v*nr_v,sizeof(int)); | |
gotoxy(12,8); | |
if(!l_a) { | |
col(0,4); | |
cprintf("Nu dispun de suficienta memorie"); | |
la_da=0; | |
ma_da=0; | |
mi_da=0; | |
getch (); | |
col(0,15); | |
break; | |
} else { | |
col(0,1); | |
cprintf("Memorie suficienta"); | |
la_da=1; | |
ma_da=0; | |
mi_da=0; | |
col(0,15); | |
delay(1000); | |
} | |
rama_l_a(); | |
if(!citeste_l_a()) | |
la_da=0; | |
else { | |
col(0,1); | |
clrscr(); | |
gotoxy(12,10); | |
cprintf("Salvare reusita"); | |
getch (); | |
} | |
if(l_a_m_i()) | |
mi_da=1; | |
else { | |
mi_da=0; | |
break; | |
} | |
if(m_i_m_a()) | |
ma_da=1; | |
else | |
ma_da=0; | |
col(0,15); | |
break; | |
case 4 : col(0,15); | |
clrscr (); | |
gotoxy(12,6); | |
cprintf("Numele fisierului (extensia inclusiv) >> "); | |
scanf("%s",&nume_f); | |
fisier=fopen(nume_f,"rb"); | |
gotoxy(12,8); | |
if(!fisier) { | |
col(0,4); | |
cprintf("Eroare la deschiderea fisierului '%s'",nume_f); | |
getch (); | |
col(0,15); | |
break; | |
} | |
if (fread(&nr_a,sizeof(nr_a),1,fisier)==1 &&\ | |
fread(&nr_v,sizeof(nr_v),1,fisier)==1 && \ | |
fread(m_i,sizeof(val),nr_v*nr_a,fisier)==nr_a*nr_v) { | |
col(0,1); | |
cprintf("Datele au fost citite cu succes din '%s'",nume_f); | |
mi_da=1; | |
} else { | |
col(0,4); | |
cprintf("Eroare la citirea datelor !!! "); | |
getch(); | |
col(0,15); | |
fclose(fisier); | |
break; | |
} | |
if(m_i_m_a()) | |
ma_da=1; | |
else { | |
ma_da=0; | |
break; | |
} | |
if(m_a_l_a()) | |
la_da=1; | |
else | |
la_da=0; | |
fclose(fisier); | |
break; | |
case 5 : aici5: | |
if(!rama_m_a()) | |
break; | |
col(0,4); | |
gotoxy(30,1); | |
cprintf("O - Optiuni"); | |
gotoxy(30,2); | |
cprintf("ESC - Iesire"); | |
col(0,15); | |
aici5b: | |
switch(getch ()){ | |
case 'o' : | |
case 'O' : | |
switch(optiuni_ma()) { | |
case '1' : rama_m_a(); | |
if(citeste_m_a()) { | |
col(0,1); | |
clrscr(); | |
gotoxy(12,12); | |
cprintf("Salvare reusita"); | |
} else { | |
col(0,1); | |
clrscr(); | |
gotoxy(12,12); | |
cprintf("Datele au fost lichidate cu succes."); | |
getch(); | |
goto afara; | |
} | |
getch(); | |
goto aici5; | |
case '2' : int nr; | |
rama_m_a(); | |
gotoxy(12,10); | |
cprintf("Numarul virfului pentru stergere >> "); | |
scanf("%d",&nr); | |
val *m=(val*)calloc((nr_v-1)*(nr_v-1),sizeof(val)); | |
if(!m) | |
goto aici5; | |
for(int i=nr-1;i<nr_v-1;i++) | |
for(int j=0;j<nr_v;j++) | |
m_a[i*nr_v+j]=m_a[(i+1)*nr_v+j]; | |
for(i=0;i<nr_v-1;i++) | |
for(j=0;j<nr-1;j++) | |
m[i*(nr_v-1)+j]=m_a[i*nr_v+j]; | |
for(i=0;i<nr_v-1;i++) | |
for(j=nr-1;j<nr_v-1;j++) | |
m[i*(nr_v-1)+j]=m_a[i*nr_v+j+1]; | |
nr_v--; | |
free(m_a); | |
m_a=m; | |
m=NULL; | |
goto aici5; | |
case '3' : val *t=(val*)calloc((nr_v+1)*(nr_v+1),sizeof(val)); | |
if(!t){ | |
col(0,4); | |
gotoxy(12,10); | |
cprintf("Nu dispun de suficienta memorie!"); | |
getch (); | |
} else { | |
for(int i=0;i<nr_v;i++) | |
for(int j=0;j<nr_v;j++) | |
t[i*(nr_v+1)+j]=m_a[i*nr_v+j]; | |
m_a=t; | |
t=NULL; | |
nr_v++; | |
} | |
goto aici5; | |
case '4' : goto aici5; | |
} | |
case 27 : //ver_m_a(); | |
//if(nr_err_m_i) { | |
// col(0,4); | |
// gotoxy(12,10); | |
// cprintf("Au fost depistate %d erori, ",nr_err_m_i); | |
// cprintf("in liniile : "); | |
// for(int k=0;k<nr_err_m_i;k++) | |
// cprintf("%d, ",err_m_i[k]+1); | |
// getch (); | |
// goto aici6; | |
//} | |
if(m_a_l_a()) | |
la_da=1; | |
else | |
la_da=0; | |
if(l_a_m_i()) | |
mi_da=1; | |
else | |
mi_da=0; | |
goto afara; | |
default : goto aici5b; | |
} | |
case 6 : aici6: | |
if(!rama_m_i()) | |
break; | |
col(0,4); | |
gotoxy(30,1); | |
cprintf("O - Optiuni"); | |
gotoxy(30,2); | |
cprintf("ESC - Iesire"); | |
col(0,15); | |
aici6b: | |
switch(getch ()){ | |
case 'o' : | |
case 'O' : | |
switch(optiuni_mi()) { | |
case '1' : rama_m_i(); | |
if(citeste_m_i()) { | |
col(0,1); | |
clrscr(); | |
gotoxy(12,12); | |
cprintf("Salvare reusita"); | |
} else { | |
col(0,1); | |
clrscr(); | |
gotoxy(12,12); | |
cprintf("Datele au fost lichidate cu succes."); | |
getch(); | |
goto afara; | |
} | |
getch(); | |
goto aici6; | |
case '2' : int nr; | |
rama_m_i(); | |
gotoxy(12,10); | |
cprintf("Numarul arcului pentru stergere >> "); | |
scanf("%d",&nr); | |
for(int i=nr-1;i<nr_a-1;i++) | |
for(int j=0;j<nr_v;j++) | |
m_i[i*nr_v+j]=m_i[(i+1)*nr_v+j]; | |
nr_a--; | |
goto aici6; | |
case '3' : val *t=(val*)calloc(nr_v*(nr_a+1),sizeof(val)); | |
if(!t){ | |
col(0,4); | |
gotoxy(12,10); | |
cprintf("Nu dispun de suficienta memorie!"); | |
getch (); | |
} else { | |
for(int i=0;i<nr_a;i++) | |
for(int j=0;j<nr_v;j++) | |
t[i*nr_v+j]=m_i[i*nr_v+j]; | |
m_i=t; | |
t=NULL; | |
nr_a++; | |
} | |
goto aici6; | |
case '4' : rama_m_i(); | |
col(0,2); | |
gotoxy(12,10); | |
cprintf("Numarul virfului pentru stergere >> "); | |
scanf("%d",&nr); | |
nr_err_m_i=0; | |
for(i=0;i<nr_a;i++) | |
if(m_i[i*nr_v+nr-1].v!=0) { | |
err_m_i[nr_err_m_i]=i; | |
nr_err_m_i++; | |
} | |
t=(val*)calloc((nr_a-nr_err_m_i)*(nr_v-1),sizeof(val)); | |
if(!t) | |
goto aici6; | |
for(int k=nr_err_m_i-1;k>=0;k--) | |
for(i=err_m_i[k];i<nr_a-1;i++) | |
for(j=0;j<nr_v;j++) | |
m_i[i*nr_v+j]=m_i[(i+1)*nr_v+j]; | |
nr_a-=nr_err_m_i; | |
for(i=0;i<nr_a;i++) | |
for(j=0;j<nr-1;j++) | |
t[i*(nr_v-1)+j]=m_i[i*nr_v+j]; | |
for(i=0;i<nr_a;i++) | |
for(j=nr-1;j<nr_v-1;j++) | |
t[i*(nr_v-1)+j]=m_i[i*nr_v+j+1]; | |
free(m_i); | |
m_i=t; | |
t=NULL; | |
nr_v--; | |
nr_err_m_i=0; | |
goto aici6; | |
case '5' : t=(val*)calloc(nr_a*(nr_v+1),sizeof(val)); | |
if(!t){ | |
col(0,4); | |
gotoxy(12,10); | |
cprintf("Nu dispun de suficienta memorie!"); | |
getch (); | |
} else { | |
for(int i=0;i<nr_a;i++) | |
for(int j=0;j<nr_v;j++) | |
t[i*(nr_v+1)+j]=m_i[i*nr_v+j]; | |
m_i=t; | |
t=NULL; | |
nr_v++; | |
} | |
goto aici6; | |
case '6' : goto aici6; | |
} | |
case 27 : ver_m_i(); | |
if(nr_err_m_i) { | |
col(0,4); | |
gotoxy(12,10); | |
cprintf("Au fost depistate %d erori, ",nr_err_m_i); | |
cprintf("in liniile : "); | |
for(int k=0;k<nr_err_m_i;k++) | |
cprintf("%d, ",err_m_i[k]+1); | |
getch (); | |
goto aici6; | |
} | |
if(m_i_m_a()) | |
ma_da=1; | |
else | |
ma_da=0; | |
if(m_a_l_a()) | |
la_da=1; | |
else | |
la_da=0; | |
goto afara; | |
default : goto aici6b; | |
} | |
case 7 : rama_l_a(); | |
getch (); | |
break; | |
case 8 : col(0,15); | |
clrscr (); | |
gotoxy(12,6); | |
cprintf("Atentie! Fisierul existent va fi suprascris."); | |
gotoxy(12,8); | |
cprintf("Numele fisierului (extensia inclusiv) >> "); | |
scanf("%s",nume_f); | |
fisier=fopen(nume_f,"wb"); | |
gotoxy(12,10); | |
if(!fisier) { | |
col(0,4); | |
cprintf("Eroare la crearea fisierului '%s'",nume_f); | |
getch (); | |
break; | |
} | |
fwrite(&nr_a,sizeof(nr_a),1,fisier); | |
fwrite(&nr_v,sizeof(nr_v),1,fisier); | |
fwrite(m_i,sizeof(val),nr_v*nr_a,fisier); | |
col(0,1); | |
cprintf("Datele au fost salvate cu succes in '%s'",nume_f); | |
getch(); | |
fclose(fisier); | |
break; | |
case 9 : col(0,4); | |
clrscr(); | |
gotoxy(12,10); | |
if(!ma_da) { | |
cprintf("Nu sunt salvate date"); | |
getch (); | |
} | |
col(0,15); | |
char nume[]="graf1.txt"; | |
FILE *f=fopen(nume,"w"); | |
if(!f) { | |
cprintf("Nu am reushit crearea fishierului!"); | |
getch (); | |
goto afara; | |
} | |
fprintf(f,"\n\n\t\t==================== Matricea adiacenta ====================\n\n"); | |
fprintf(f," A |"); | |
for(int i=0,j;i<nr_v;i++) | |
fprintf(f,"%2d |",i+1); | |
fprintf(f,"\n-----"); | |
for(i=0;i<nr_v;i++) | |
fprintf(f,"----"); | |
for(i=0;i<nr_v;i++) { | |
fprintf(f,"\n%3d |",i+1); | |
for(j=0;j<nr_v;j++) | |
fprintf(f," %d ",m_a[i*nr_v+j].v); | |
} | |
col(0,15); | |
fclose(f); | |
cprintf("Tiparire reusita!!!"); | |
getch(); | |
goto afara; | |
case 10 : | |
break; | |
case 11 : | |
break; | |
case 12 : | |
break; | |
} | |
} | |
free(m_a); m_a=NULL; | |
free(m_i); m_i=NULL; | |
free(l_a); l_a=NULL; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment