Skip to content

Instantly share code, notes, and snippets.

@iamandrewluca
Created February 16, 2015 14:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iamandrewluca/807357eed49a815648f1 to your computer and use it in GitHub Desktop.
Save iamandrewluca/807357eed49a815648f1 to your computer and use it in GitHub Desktop.
#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