Sunteți pe pagina 1din 10

MINISTERUL EDUCAȚIEI ȘI CERCETĂRII AL REPUBLICII MOLDOVA

Universitatea Tehnică a Moldovei


Facultatea Calculatoare, Informatică şi Microelectronică
Departamentul Informatică şi Ingineria Sistemelor

Nume, prenume student Grupa-ID :


Guțenco Vladislav IA-211

Raport
pentru lucrarea de laborator Nr.1

Cursul “Matematica Discretă”

Verificat:
Vladimir Melnic.
Departamentul Informatică şi IS,
Facultatea FCIM, UTM

Chișinău – 2022
1. Scopul lucrării de laborator
I. Studierea metodelor de definire a unui graf: matrice de incidență, matrice de adiacență, liste;
II. Elaborarea unor proceduri de introducere, extragere şi transformare a diferitor forme de
reprezentare internă a grafurilor cu scoaterea rezultatelor la display şi imprimantă.
III. Elaborarea programelor de determinare a matricei drumurilor într-un graf orientat.

2. Sarcina
I. Elaborați procedura introducerii unui graf în memoria calculatorului în formă de:
 matrice de incidență (graf orientat, neorientat)
 matrice de adiacență (graf neorientat).
II. Folosind procedurile menționate elaborați programul care va permite:
 introducerea grafului reprezentat sub oricare din cele trei forme cu posibilități de
corecție a datelor;
 extragerea informației la display.
III. Elaborați procedura de determinare a matricei drumurilor într-un graf orientat.
IV. Realizați un program cu următoarele funcții:
 introducerea grafului ca matrice de adiacență (graf orientat) cu posibilităţi de analiză
sintactică şi semantică şi de corectare a informației;
 determinarea matricei drumurilor;
 extragerea informației la display;
 Graf 12 x 19 Orientat / Neorientat

Matricea de incidență (graf orientat)

1 2 3 4 5 6 7 8 9 10 11 12
m1 0 0 0 0 0 0 0 0 0 -1 1 0
m2 0 0 1 0 0 0 0 0 0 -1 0 0
m3 0 0 0 -1 0 0 0 0 0 0 1 0
m4 0 0 0 0 0 0 1 0 0 0 0 -1
m5 0 0 0 0 0 0 0 0 0 0 1 -1
m6 0 0 0 0 0 0 1 0 0 0 -1 0
m7 0 0 0 0 0 0 -1 0 1 0 0 0
m8 0 0 0 0 0 0 0 -1 1 0 0 0
m9 0 1 0 0 0 0 -1 0 0 0 0 0
m10 1 0 0 0 0 0 0 0 -1 0 0 0
m11 0 -1 0 0 0 0 0 1 0 0 0 0
m12 -1 1 0 0 0 0 0 0 0 0 0 0
m13 -1 0 0 0 1 0 0 0 0 0 0 0
m14 0 0 0 0 1 -1 0 0 0 0 0 0
m15 0 0 1 0 0 -1 0 0 0 0 0 0
m16 0 0 -1 1 0 0 0 0 0 0 0 0
m17 0 1 0 0 0 -1 0 0 0 0 0 0
m18 0 0 0 -1 1 0 0 0 0 0 0 0
m19 0 0 0 -1 0 0 1 0 0 0 0 0
Matricea de incidență (graf neorientat)
n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12

m1 0 0 0 0 0 0 0 0 0 1 1 0

m2 0 0 1 0 0 0 0 0 0 1 0 0

m3 0 0 0 1 0 0 0 0 0 0 1 0

m4 0 0 0 0 0 0 1 0 0 0 0 1

m5 0 0 0 0 0 0 0 0 0 0 1 1

m6 0 0 0 0 0 0 1 0 0 0 1 0

0 0 0 0 0 0 1 0 1 0 0 0
m7
0 0 0 0 0 0 0 1 1 0 0 0
m8
0 1 0 0 0 0 1 0 0 0 0 0
m9
1 0 0 0 0 0 0 0 1 0 0 0
m10
0 1 0 0 0 0 0 1 0 0 0 0
m11
1 1 0 0 0 0 0 0 0 0 0 0
m12
1 0 0 0 1 0 0 0 0 0 0 0
m13
0 0 0 0 1 1 0 0 0 0 0 0
m14
0 0 1 0 0 1 0 0 0 0 0 0
m15
0 0 1 1 0 0 0 0 0 0 0 0
m16
0 1 0 0 0 1 0 0 0 0 0 0
m17
0 0 0 1 1 0 0 0 0 0 0 0
m18
0 0 0 1 0 0 1 0 0 0 0 0
m19
Matricea de adiacenta .

Cod Program Matrice de incidenta Neorientat:

#include <stdio.h>
void incidenta(int a[100][100],int n, int m){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%i",a[i][j]);
}
printf("\n");
}
}
int main()
{
int a[100][100]=
{{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,0},
{0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0},
{0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,1},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1},
{0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,1 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,1 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,0 ,0 ,0},
{0 ,1 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0},
{1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0},
{0 ,1 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0},
{1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{1 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,1 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,1 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0}
,
{0 ,0 ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,1 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0}}
;

int n=19;
int m=12;
printf("Matricea de incidenta neorientat:\n");
incidenta(a,n,m);
return 0;
}

Matricia de incidenta Orientat

#include <stdio.h>
void incidenta(int a[100][100],int n, int m){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%i",a[i][j]);
}
printf("\n");
}
}
int main()
{
int a[100][100]= {{0,0,0,0,0,0,0,0,0,-1,1,0},
{0,0,1,0,0,0,0,0,0,-1,0,0},
{0,0,0,-1,0,0,0,0,0,0,1,0},
{0,0,0,0,0,0,1,0,0,0,0,-1},
{0,0,0,0,0,0,0,0,0,0,1,-1},
{0,0,0,0,0,0,1,0,0,0,-1,0},
{0,0,0,0,0,0,-1,0,1,0,0,0},
{0,0,0,0,0,0,0,-1,1,0,0,0},
{0,1,0,0,0,0,-1,0,0,0,0,0},
{1,0,0,0,0,0,0,0,-1,0,0,0},
{0,-1,0,0,0,0,0,1,0,0,0,0},
{-1,1,0,0,0,0,0,0,0,0,0,0},
{-1,0,0,0,1,0,0,0,0,0,0,0},
{0,0,0,0,1,-1,0,0,0,0,0,0},
{0,0,1,0,0,-1,0,0,0,0,0,0},
{0,0,-1,1,0,0,0,0,0,0,0,0},
{0,1,0,0,0,-1,0,0,0,0,0,0},
{0,0,0,-1,1,0,0,0,0,0,0,0},
{0,0,0,-1,0,0,1,0,0,0,0,0}};
int n=19;
int m=12;
printf("Matricea de incidenta orientat:\n");
incidenta(a,n,m);
return 0;
}
 Graful, 12 vârfuri și 21 de arce
Matricea de adiacență

Afisarea matricei de adiacenta a


grafului cu 12 vârfuri și 21 de arce
și convertirea ei in Matricea
Drumului
Codul Programului:
#include <stdio.h>
void adiacenta(int a[100][100],int n){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d",a[i][j]);
}
printf("\n");
}
}

void drumuri(int a[100][100],int n){


int i,j,m;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
for (m= 0; m < n;m++)
{
if (a[i][m] == 1 && a[j][i] == 1)
{
if (j != m)
{
a[j][m] = 1;
}
}

}
}
}
}
int main()
{
int a[100][100]={{0,0,0,0,1,1,0,0,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0,0,0},
{1,0,0,1,1,0,0,1,0,1,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,0,0,1,0,0},
{1,0,0,1,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0},
{0,0,0,1,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,1,1,0,0}};
int n=12;
printf("\nMatricea de adiacenta:\n\n");
adiacenta(a,n);
drumuri(a,n);
printf("\nMatricea drumului:\n\n");
adiacenta(a,n);
return 0;
}

Concluzie:

In urma efectuarii lucrarii date unde am studiat metodele de definire a unui graf: in matrice
adiacenta,matrice de incedinta si lista,am elaborat un procedeu de introducere, afisare si extragere a
unei din metodele mentionate mai sus prin programul C
Efecuand aceasta lucrare de laborator,am obtinut practica de lucru metodele de reprezentare ale
grafului
Pe parcursul lucrarii, am ajuns la concluzia ca cea mai simpla metoda de introducere a grafului de la
tastatura este lista adiacenta, care permite utilizatorului sa aleaga cu usurinta virfurile necesare

S-ar putea să vă placă și