Sunteți pe pagina 1din 9

MINISTERUL EDUCAIEI REPUBLICII MOLDOVA

UNIVERSITATEA TEHNIC A MOLDOVEI


Facultatea Calculatoare, Informatic si Microelectronic
Automatic si Informatic

RAPORT
Lucrare de laborator nr. 1
La Matematica Discret

Pe tema:

Pstrarea grafurilor in memoria calculatorului.

A efectuat:

st. gr. AI-101

A verificat:

lector superior
Chisinu 2012

1. Scopul lucrrii:
1. Studierea metodelor de definire a unui graf : matricea de inciden, matricea de
adiacen, liste.
2. Elaborarea unor proceduri de introducere , extragere si transformare a diferitelor
forme de reprezentare intern a grafurilor cu scoaterea rezultatelor la display si
imprimant.

2. Sarcina de baz:
1. Elaborai procedura de introducere a unui graf n memoria calculatorului n form
de matrice de inciden, de matrice de adiacen i list de adiacen cu posibiliti de
analiz a certitudinii.
2. Elaborai proceduri de transformare dintr-o form de reprezentare in alta.
3. Folosind procedurile enumerate , elaborai programul care v permite:
* introducerea grafului reprezentat sub oricare forma din cele trei forme cu
posibiliti de corecie a datelor.
* pstrarea grafului n memoria extern n form de lista de adiacen.
* extragerea informaiei ntr-una dintre cele trei forme la imprimant i display.

3. Listing-ul programului in C:
#include"stdlib.h"
#include"iostream.h"
#include"conio.h"
#include"math.h"
#include"fstream.h"
main()
{
system("cls");
ofstream out("textzz.txt");
float A[20][20];
int AA[20];
int BB[20];
int z,t,i,j,n,p=0,b,o,k,r,s,k1,r1,nm,w,po,pp,d,ee=0;
cout<<"\n\n\t\t Lucrare de laborator nr.1 la Matematica discreta";
cout<<"\n Dam numarul de varfuri: n= ";
out<<"\n Dam numarul de varfuri: n= ";
cin>>n;

out<<n;
n=n+1;
cout<<"\n Introducem legaturile \n";
out<<"\n Introducem legaturile \n";
for(i=1;i<n;i++){
for(j=1;j<n;j++) {
cout<<"x"<<i<<"x"<<j<<" "; /*indicator optic*/
out<<"x"<<i<<"x"<<j<<" ";
cin>>A[i][j];
out<<A[i][j]; }}
eticheta:
n=n+ee;
ee=0;
cout<<"\n
meniu";
out<<"\n
meniu";
cout<<"\n 1: Matriciea de incidenta";
out<<"\n 1: Matriciea de incidenta";
out<<"\n 2: Matriciea de adiacenta";
cout<<"\n 2: Matriciea de adiacenta";
out<<"\n 3: Lista de adiacenta";
cout<<"\n 3: Lista de adiacenta";
out<<"\n 4: Modificarea legaturilor intre virfuri";
cout<<"\n 4: Modificarea legaturilor intre virfuri";
out<<"\n 5: Adaugarea unui varf si a tuturor laturilor comun cu el";
cout<<"\n 5: Adaugarea unui varf si a tuturor laturilor comun cu el";
out<<"\n 6: Evitarea unui varf";
cout<<"\n 6: Evitarea unui varf";
cout<<"\n 7: Iesire";
out<<"\n 7: Iesire";
out<<"\n
Alegeti optiunea convenabila si tastati enter:";
cout<<"\n
Alegeti optiunea convenabila si tastati enter:\n";
cin>>nm;
out<<nm;
switch(nm) {case 1 : { cout<<"\n\n Afisarea matricei de incidenta:\n";
out<<"\n\n Afisarea matricei de incidenta\n";
cout<<" ";
/* element pentru regularea matriciei
desenate*/
out<<" ";
for(r=1;r<n;r++){

cout<<"x"<<r<<" "; /*pu. a ne arata cu care varf este


legatura*/
out<<"x"<<r<<" ";}
for(i=1;i<n;i++){
cout<<"\n";
out<<"\n";
cout<<"";
/*a indrepta desenu*/
out<<"";
for(k=1;k<n;k++){
cout<<"";
/*pentru a desena kletka*/
out<<"";}
cout<<"\nx"<<i<<"";
/*elementu de la kare
porneste*/
out<<"\nx"<<i<<"";
for(j=1;j<n;j++){
cout<<A[i][j]<<" " ;
out<<A[i][j]<<" " ;}}
cout<<"\ndaca doriti sa schimbati varianta alesa tastati
tasta 0";
out<<"\ndaca doriti sa schimbati varianta alesa tastati
tasta 0 ";
cin>>w;
out<<w;
if(w==1){
return 0;}
if(w!=1){system("cls");
goto eticheta;}}
case 3 : {cout<<"\n\n\nlist!";
out<<"\n\n\nlist!";
for(i=1;i<n;i++){
out<<"\nx"<<i<<" "; /*trasarea liniea ce desparte varful
principal de sec.*/
cout<<"\nx"<<i<<" ";
for(j=1;j<n;j++){
if(A[i][j]!=0){
out<<j<<" " ;
cout<<j<<" " ;}}
out<<"0";
cout<<"0";}

out<<"\ndaca doriti sa schimbati varianta alesa tastati tasta 0";


cout<<"\ndaca doriti sa schimbati varianta alesa tastati tasta 0";
cin>>w;
out<<w;
if(w==1){
return 0;}
if(w!=1){system("cls");
goto eticheta;}
}
case 2 :{ cout<<"\n\Afisam matricea de adiacenta:\n";
out<<"\n\Afisam matricea de adiacenta:\n";
k=0;
p=0;
for(i=1;i<n;i++){
for(j=1;j<n;j++){
if(A[i][j]!=0){
k++;
AA[k]=i;
BB[k]=j;
p++;}} }
cout<<" "<<"";
out<<" "<<"";
k=0;
for(o=1;o<n;o++){
cout<<" x"<<o<<"";
out<<" x"<<o<<"";}
for(s=1;s<p+1;s++){
k++;
cout<<"\n";
out<<"\n";
for(o=1;o<n+1;o++){
cout<<"";
out<<"";}
cout<<"\nu"<<s<<" ";
out<<"\nu"<<s<<" ";
b=0;
k1=AA[k];
r1=BB[k];
for(o=1;o<n;o++){
if(k1==r1){if(k1==o){b=2;}if(k1!=o){b=0;}}

if(k1!=r1){if(k1==o){b=-1;}if(k1!=o){b=0;}if(r1==o){b=1;}}
if(b<0) {
cout<< b<<" ";
out<< b<<" ";}
if(b>=0){
cout<<" "<<b<<" ";
out<<" "<<b<<" ";}}}
cout<<"\ndaca doriti sa schimbati varianta alesa tastati tasta 0";
out<<"\ndaca doriti sa schimbati varianta alesa tastati tasta 0";
cin>>w;
out<<w;
if(w==1){
return 0;}
if(w!=1){
system("cls");
goto eticheta;}}
case 4: {cout<<"\n alegeti virfurile intre care doriti sa faceti
modifikari\n";
cin>>po;
cin>>pp;
i=po;
j=pp;
cout<<"dam noua valoare legaturii ";
cout<<"x"<<i<<"x"<<j;
cin>>A[i][j];
system("cls");
goto eticheta;}
case 5: {for(i=n;i<n+1;i++){
for(j=1;j<n+1;j++) {
cout<<"x"<<i<<"x"<<j<<" "; /*indikator optik*/
cin>>A[i][j];}}
for(i=1;i<n;i++){
for(j=n;j<n+1;j++) {
cout<<"x"<<i<<"x"<<j<<" "; /*indikator optik*/
cin>>A[i][j];}}
ee=1;
goto eticheta; }
case 7: {cout<<"Sunteti sigur ca doriti sa iesiti? Daca da, tastati 1.";
cin>>w;
if(w==1){

return 0;}
if(w!=0){
system("cls");
goto eticheta;} }
case 6: { cout<<" Pe care varf doriti sa-l evitati?";
cin>>d;
i=d;
for(j=1;j<n;j++) {
A[i][j]=NULL;}
j=d;
for(i=1;i<n;i++);
{
A[i][j]=NULL;}
goto eticheta; }
default: {system("cls");
cout<<"Alegeti optiunea corecta";
goto eticheta;
}}
out.close();
return 0;
}

4. Afisare la ecran:

5. Concluzie:
Prin intermediul acestei lucrari de laborator, am reusit sa elaborez un program in
compilatorul C++, prin care am introdus un graf in memoria calculatorului in forma de
matrice de incidenta si de adiacenta,lista de adiacenta. Acest program contine si functii
de transformare dintr-o forma de reprezentare a grafului in alta si de afisare la display
a tuturor functiilor sale prin intermediul unui meniu de navigare.