Sunteți pe pagina 1din 6

MINISTERUL EDUCAŢIEI REPUBLICII MOLDOVA

UNIVERSITATEA TEHNICAĂ A MOLDOVEI


Facultatea Calculatoare, Informaticaă si Microelectronicaă

RAPORT
Lucrare de laborator №:1
Disciplina : Matematica Discretaă
Tema: Păstrarea grafurilor in memoria calculatorului.

A elaborat: st. gr. ISBM-131 Moscalu Adrian

A verificat: Gheorghe Cebanu

Chisinău 2014
1)Scopul lucrării:
1) Studierea metodelor de definire a unui graf : matricea de
incidentțaă, matricea de adiacentțaă, liste.
2) Elaborarea unor proceduri de introducere , extragere si
transformare a diferitelor forme de reprezentare internaă a grafurilor cu
scoaterea rezultatelor la display si imprimantaă .

2)Sarcina de bază:
1) De elaborat procedura de introducere a unui graf îîn memoria calculatorului
îîn formaă de matrice de incidentțaă, de matrice de adiacentțaă sț i listaă de adiacentțaă
cu posibilitaă tți de analizaă a certitudinii.
2) De elaborat proceduri de transformare dintr-o formaă de reprezentare in alta.
3) Folosind procedurile enumerate ,de elaborat programul care va permite:
> introducerea grafului reprezentat sub oricare forma din cele trei forme cu
posibilitaă tți de corectție a datelor.
> paă strarea grafului îîn memoria externaă îîn formaă de lista de adiacentțaă.
> extragerea informatției îîntr-una dintre cele trei forme la imprimantaă sț i display.

Teorie :
Se numeste graf ansamblu format dintr-o multime finite X si o aplicatie F a lui X in
X. Se noteaza G=(X,F). Numarul elementelor multimilor X determina ordinal grafului
finit. Daca card X=n, graful G=(X,F) se numeste graf finit de ordinul n. Elementele
multimii X se numesc varfurile grafului. Geometric, varfurile unui graf le
reprezentam prin puncte sau cerculete. Perechea de varfuri (x,y) se numeste arc
varful x se numeste originea sau extremitatea initiala a arcului (x,y) iar varful y se
numeste extremitatea finala sau terminal. Un arc (x,y) il reprezentam geometric
printr-o sageata orientate de la varful x la varful y.
Daca un varf nu este extremitatea nici unui arc el se numeste varf izolat, iar daca
este extremitatea a mai mult de doua arce- nod. Un arc (x,y) pentru care
extremitatea initiala coincide cu cea finala se numeste bucla.Arcele unui graf le mai
notam si cu u1,u2,..., iar multimea arcelor grafului o noatam cu U.
Doua arce se numesc adiacente daca sunt distncte si au o extremitate comuna.Doua
varfuri se numesc adiacente daca sunt distinct si sunt unite prtr-un arc.
Un arc (x,y) se spune ca este incident cu virful x spre exterior si este incident cu
varful y spre interior.
3) Continutul programului :
#include"stdlib.h"
#include"conio.h"
#include"iostream.h"
#include"fstream.h"
main( ){
system("cls");
ofstream out("date.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 Dati nr. de varfuri: ";
out<<"\n Dati nr. de varfuri: ";
cin>>n; out<<n;
n=n+1;
cout<<"\n Introducem legaturile dintre virfuri:\n";
out<<"\n Introducem legaturile dintre virfuri:\n";
for(i=1;i<n;i++){
for(j=1;j<n;j++) {
cout<<"x"<<i<<"x"<<j<<" "; out<<"x"<<i<<"x"<<j<<" ";
cin>>A[i][j]; out<<A[i][j]; }} eticheta: n=n+ee; ee=0;

cout<<"\n Optiuni disponibile:\n-------------------------------------------";


out<<"\n Optiuni disponibile:\n-------------------------------------------";
cout<<"\n 1) Vezi matriciea de adiacenta.";
out<<"\n 1) Vezi matriciea de adiacenta.";
out<<"\n 2) Vezi matriciea de incidenta.";
cout<<"\n 2) Vezi matriciea de incidenta.";
out<<"\n 3) Vezi lista de adiacenta.";
cout<<"\n 3) Vezi lista de adiacenta.";
out<<"\n 4) Modifica legaturile intre virfuri.";
cout<<"\n 4) Modifica legaturile intre virfuri.";
out<<"\n 5) Adauga un varf si laturile comune cu el.";
cout<<"\n 5) Adauga un varf si laturile comune cu el.";
out<<"\n 6) Evita un varf.";
cout<<"\n 6) Evita un varf.";
cout<<"\n 7) Iesire.\n------------------------------------------- ";
out<<"\n 7) Iesire.\n------------------------------------------- ";
out<<"\n Alege optiunea dorita:";
cout<<"\n Alege optiunea dorita:\n";
cin>>nm;
out<<nm;

switch(nm) {case 1 : { cout<<"\n\n Matricea de adiacenta este:\n";


out<<"\n\n Matricea de adiacenta este:\n";
cout<<" | ";
out<<" | ";
for(r=1;r<n;r++){
cout<<"x"<<r<<" | "; out<<"x"<<r<<" | ";}
for(i=1;i<n;i++){
cout<<"\n"; out<<"\n";
cout<<"====="; out<<"=====";
for(k=1;k<n;k++){cout<<"=====";out<<"=====";}
cout<<"\nx"<<i<<" | "; out<<"\nx"<<i<<" | ";
for(j=1;j<n;j++){ cout<<A[i][j]<<" | " ;out<<A[i][j]<<" | " ;}}
cout<<"\nDoriti sa alegeti alta optiune ? Daca da atunci tastati 0: ";
out<<"\nDoriti sa alegeti alta optiune ? Daca da atunci tastati 0: ";
cin>>w; out<<w;
if(w==1){ return 0;}
if(w!=1){system("cls"); goto eticheta;}}
case 3 : {cout<<"\n\n\nLista este :"; out<<"\n\n\nLista este :";
for(i=1;i<n;i++){ out<<"\nx"<<i<<" | "; cout<<"\nx"<<i<<" | ";
for(j=1;j<n;j++){ if(A[i][j]!=0){ out<<j<<" " ;cout<<j<<" " ;}}
out<<"0";cout<<"0";}
out<<"\nDoriti sa alegeti alta optiune ? Daca da atunci tastati 0: ";
cout<<"\nDoriti sa alegeti alta optiune ? Daca da atunci tastati 0:
"; cin>>w; out<<w; if(w==1){ return 0;} if(w!=1){system("cls");

goto eticheta;}}
case 2 :{ cout<<"\n\Matricea de incidenta este:\n";
out<<"\n\Matricea de incidenta este:\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<<"\nDoriti sa alegeti alta optiune ? Daca da atunci tastati 0:";
out<<"\nDoriti sa alegeti alta optiune ? Daca da atunci tastati 0:";
cin>>w; out<<w;
if(w==1){return 0;}
if(w!=1){system("cls"); goto eticheta;}}
case 4: {cout<<"\n Alege virfurile la care vrei sa faci modificari:\n";
cin>>po; cin>>pp;
i=po; j=pp;
cout<<"Dam valoarea noua a 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<<"
"; cin>>A[i][j];}}
for(i=1;i<n;i++){
for(j=n;j<n+1;j++) {
cout<<"x"<<i<<"x"<<j<<" ";
cin>>A[i][j];}} ee=1; goto eticheta; }
case 7: {cout<<"Lucrare efectuata de Moscalu Adrian .Tastati 1 pentru e iesi
defenitiv :";
cin>>w; if(w==1){ return 0;} if(w!=0){
system("cls"); goto eticheta;} }
case 6: { cout<<" Indicati virful care doriti sa fie evitat:";
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 necesara:";
goto eticheta; } }
out.close();
return 0;}

Remarca :
Programul contine o eroare :
La eliminarea unui virf se elimin legaturile lui si virful
astfel la indeplinirea punctului 6 matricea de incidenta ,
de adiacenta si lista de adiacenta se prezinta cu erori !

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