matematica discreta lab1

13
MINISTERUL EDUCAŢIEI 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: Păstrarea grafurilor in memoria calculatorului.

Upload: maxim-tincu

Post on 26-Dec-2015

18 views

Category:

Documents


0 download

DESCRIPTION

Matematica discreta Lab1

TRANSCRIPT

Page 1: Matematica discreta Lab1

MINISTERUL EDUCAŢIEI 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: Păstrarea grafurilor in memoria calculatorului.

A efectuat: st. gr. AI-101

A verificat: lector superior

Chisinău 2012

Page 2: Matematica discreta Lab1

1. Scopul lucrării:

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. Elaborați procedura de introducere a unui graf în memoria calculatorului în formă

de matrice de incidență, de matrice de adiacență și listă de adiacență cu posibilități de

analiză a certitudinii.

2. Elaborați proceduri de transformare dintr-o formă de reprezentare in alta.

3. Folosind procedurile enumerate , elaborați programul care vă permite:

* introducerea grafului reprezentat sub oricare forma din cele trei forme cu

posibilități de corecție a datelor.

* păstrarea grafului în memoria externă în formă de lista de adiacență.

* extragerea informației î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;

Page 3: Matematica discreta Lab1

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++){

Page 4: Matematica discreta Lab1

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";}

Page 5: Matematica discreta Lab1

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;}}

Page 6: Matematica discreta Lab1

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){

Page 7: Matematica discreta Lab1

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;}

Page 8: Matematica discreta Lab1

4. Afisare la ecran:

Page 9: Matematica discreta Lab1

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.