Documente Academic
Documente Profesional
Documente Cultură
RAPORT
despre lucrarea de laborator nr.2
la disciplina Matematica Discreta
CHISINAU 2018
CUPRINS:
Sarcina lucrarii.....................................pag.3
Mersul lucrarii......................................pag.3
Prezentarea rezultatelor........................pag.4
Concluzia..............................................pag.5
Anexa(A)..............................................pag.6
Anexa(B)..............................................pag.16
Sarcina lucrarii:
Mersul lucrarii:
Pentru inceput a fost creata functia “citire” care permite introducerea numarul
de arcuri si de varfuri . Sa creat o functie “aranjare” care sa aranjeze arcele
crescator ce permite o vizualizare a acestora mai buna in program !
Se creaza functia “mAdiacenta” care creaza matricea , functia “afisareMa”
permite afisarea matricei de adiacenta . Functia “mIncidenta” creaza matricea
de incidenta si afiseaza la ecran . Urmeaza functia “CreareaLi” care creaza lista
de adiacenta iar “afisareLi”permite afisarea listei pe ecran .
Se creaza o functie pentru afisarea arcelor existent / introduce de la tastatura
“afisare_v”
In continuare se creaza functiile destinate prelucrarii datelor introduce .
Functia “adaugare_v” adauga la numarul de varfuri existente , un varf ( n+1)
. Functia “stergere_v” permite selectarea unui varf din cele existente si
stergerea acestuia . La stergerea varfului “ n “ urmatoarele varfuri si arcurile
legate de aceste varfuri vor fi reindexate primind valoarea (n-1) .
Se creaza functia “ adaugare_a” care permite sa adaugam la arcele existente un
arc iar functia “stergere_a” permite selectarea unui arc si stergerea acestuia .
Arcele-a ce il succede vor fi reindexate (n-1) .Functia “editare_a” permite sa
selectam un arc existent si sa ii schimbam datele ( adica varful initial sic el
final ) .
Programul dat contine 2 meniuri : 1 . Meniul Principal , 2.Meniul de Redactare
, acestea structureaza informatia si face citirea programului mai eficienta .
Programul e realizat astfel incat sa nu permita introducerea unor date incorecte
, acesta te va oblige sa introduci datele din nou !
Prezentarea rezultatelor:
a[1]= 1,1
a[2]= 1,2
a[3]= 2,3
a[4]= 3,1
MENIUL PRINCIPAL :
void meniu(int ma[100][100], int varf , int nrarce , int arc[100][2],int mi[100][100],int
li[100][100])
{
int alegere;
if(varf==0)
return;
switch (alegere)
{
case 1:
system("cls");
mAdiacenta(ma,arc,varf,nrarce);
afisareMa(ma,varf);
meniu(ma,varf,nrarce,arc,mi,li);
break;
case 2:
system("cls");
mIncidenta(mi,varf,nrarce,arc);
meniu(ma,varf,nrarce,arc,mi,li);
break;
case 3:
system("cls");
printf("\n ---> Lista de incidenta <--- \n");
creareLi(li,varf,nrarce,arc);
afisareLi(li,varf,arc,nrarce);
meniu(ma,varf,nrarce,arc,mi,li);
break;
case 4:
system("cls");
printf("\n ---> Afisarea varfurilor <--- \n");
aranjare(arc,nrarce);
afisare_v(arc,&nrarce);
meniu(ma,varf,nrarce,arc,mi,li);
break;
case 5:
system("cls");
meniu2(ma,varf,nrarce ,arc,mi,li);
break;
case 6:
system("cls");
citire(arc,&varf,&nrarce);
meniu(ma,varf,nrarce,arc,mi,li);
case 7:
system("cls");
printf("\n * * * A-ti iesit din program ! * * * \n");
return;
default:
system("cls");
printf("\n\n * * * O optiune inexistenta * * *0 \n\n");
meniu(ma,varf,nrarce,arc,mi,li);
break;
}
}
CITIREA DATELOR :
void citire(int Arcuri[100][2], int *varf , int *nrarce)
{
int n=0, m=0, vi, vf,nra=0,k;
printf("---> Introduceti numarul de varfuri:\t");
scanf("%d",varf);
if(*varf==0) {return;}
else
printf("---> Introduceti arcele:\n");
while(1)
{
printf("Arcul[%d]=",m+1);
scanf("%d %d",&vi,&vf);
if ((vi == 0) || (vf == 0))
break;
while (1)
{
for(k=1;k<=m;k++)
{
while(vi==Arcuri[k][0] && vf==Arcuri[k][1])
{
printf("---> Arcul deja exista ! Introduceti alt arc <--- \n");
printf("Arcul[%d]=",m+1);
scanf("%d %d",&vi,&vf);
}
if ((vi == 0) || (vf == 0))
break;
}
if(vi!=Arcuri[k][0] && vf!=Arcuri[k][1])
break;
}
if((vi==0) || (vf==0))
break;
while(vi>*varf || vf>*varf || vi<0 || vf<0 )
{
printf(" ---> A-ti introdus un arc dintr-un varf inexistent <--- \n");
printf("Arcul[%d]=",m+1);
scanf("%d %d",&vi,&vf);
}
m++;
Arcuri[m][0] = vi;
Arcuri[m][1] = vf;
nra++;
}
*nrarce=nra;
system("cls");
}
{ int i,j;
printf("\n");
printf("\n ---> Matricea de incidenta <---\n");
for (i=1; i<=varf; i++)
printf("\tV%d",i);
printf("\n");
for (i=1; i<=nrarce; i++)
{
printf("U%d",i);
for (j=1; j<=varf; j++)
{
if ((arcuri[i][0]==j) && (arcuri[i][1]==j))
printf("\t2");
else {
if (arcuri[i][0]==j)
printf("\t-1");
else if (arcuri[i][1]==j)
printf("\t1");
else printf("\t0");
}
}
printf("\n");
}}
}
}
MENIUL DE REDACTARE :
void meniu2(int ma[100][100], int varf , int nrarce , int arc[100][2],int mi[100][100],int
li[100][100])
{
int alegere;
printf("\n\t * * * Meniul - Redactare * * * ");
printf("\n\n ---> Alegeti o optiune :");
printf("\n\t [1] Adaugarea unui varf\n\t [2] Stergerea unui varf\n\t [3] Adaugarea unui
arc\n\t [4] Stergerea unui arc\n\t [5] Editarea unui arc");
printf("\n\t [6] Meniul Principal\n\t [7] Iesire\n");
scanf("%d",&alegere);
switch(alegere)
{
case 1:
system("cls");
printf("\n\t * * * Adaugarea de n varfuri * * * \n\n");
adaugare_v(&varf);
meniu2(ma,varf,nrarce,arc,mi,li);
break;
case 2:
system("cls");
printf("\n\t * * * Stergerea unui varf * * * \n\n");
stergere_v(ma,arc,&varf,&nrarce);
meniu2(ma,varf,nrarce,arc,mi,li);
break;
case 3:
system("cls");
printf("\t\n * * * Adaugarea unui arc * * *");
adaugare_a(arc,&nrarce,varf );
meniu2(ma,varf,nrarce,arc,mi,li);
break;
case 4:
system("cls");
printf("\n * * * Stergerea unui arc * * * \n");
stergere_a(arc,&nrarce);
meniu2(ma,varf,nrarce,arc,mi,li);
break;
case 5:
system("cls");
printf("\n\t * * * Editare Arc * * * \n\n");
editare_a(arc,nrarce);
meniu2(ma,varf,nrarce,arc,mi,li);
break;
case 6:
system("cls");
meniu(ma,varf,nrarce,arc,mi,li);
break;
case 7:
system("cls");
printf("\n * * * A-ti iesit din program ! * * * \n ");
break;
default:
system("cls");
printf("\n\n * * * Optiune inexistenta * * * \n\n");
meniu2(ma,varf,nrarce,arc,mi,li);
break;
}
}
stergere_v2(varf,nrarce,arcuri,i);
i--;
}
}
(*varf)--;
for (i=1;i<=*nrarce;i++)
{
if (arcuri[i][0]>varfsters) arcuri[i][0]--;
if (arcuri[i][1]>varfsters) arcuri[i][1]--;
}
arcuri[i][0] = arcuri[i+1][0];
arcuri[i][1] = arcuri[i+1][1];
}
(*nrarce)--;
system("cls");
printf("\n ---> Arcul a fost sters cu succes ! <--- \n");
}
}
ARANJAREA ARCURILOR :
void aranjare(int arcuri[100][2],int nrarce)
{
int i, k;
for (i=1; i<nrarce; i++)
if ((arcuri[i][0] > arcuri[i+1][0]) || ((arcuri[i][0]==arcuri[i+1][0]) &&
(arcuri[i][1]>arcuri[i+1][1])))
{
k= arcuri[i][0];
arcuri[i][0] = arcuri[i+1][0];
arcuri[i+1][0] = k;
k= arcuri[i][1];
arcuri[i][1] = arcuri[i+1][1];
arcuri[i+1][1] =k;
i=0;
}
}
FUNCTIA PRINCIPALA :
int main()
{
int varf ;
int ma[100][100];
int mi[100][100];
int li[100][100];
int arc[100][2];
int nrarce;
citire(arc,&varf,&nrarce);
meniu(ma,varf,nrarce,arc,mi,li);
return 0 ;
}
Anexa(B) :
Introducerea datelor :
Meniul Principal :
Executie :