Sunteți pe pagina 1din 7

Ministerul Educaţiei, Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei


Departamentul Ingineria Software şi Automatică

RAPORT
Lucrarea de laborator nr. 1
la Matematici Speciale

A efectuat: Marius Corcodel


st. gr. TI-206

A verificat: Inga Lisnic

Chişinău - 2021
Tema: Păstrarea grafurilor in memoria calculatorului.
Scopul lucrării :
 Programarea algoritmilor de prelucrare a caracterelor și a șirurilor de caractere
prin utilizarea funcțiilor predefinite de prelucrare a caracterelor și a șirurilor de
caractere în limbajul C;
 Elaborarea unor proceduri de introducere , extragere si transformare a diferitelor
forme de reprezentare internă a grafurilor cu scoaterea rezultatelor la display si
imprimantă.

Matrice de adiacență

1 2 3 4 5
x1 0 1 1 0 0
x2 0 0 1 1 0
x3 0 0 0 1 0
x4 0 0 0 0 1
x5 0 0 1 0 0

Matrice de incidență

  1 2 3 4 5
U1 -1 1 0 0 0
U2 -1 0 1 0 0
U3 0 -1 1 0 0
U4 0 -1 0 1 0
U5 0 0 -1 1 0
U6 0 0 0 -1 1
U7 0 0 1 0 -1

Lista de incidență
1
1 2;3
2 3;4
3 4;
4 5;
5 3;

#include <iostream>

using namespace std;

int main()
{
modify:
    int n, m;
    int adiacenta[100][100] = {{0}};
    int incidenta[100][100] = {{0}};
    int lista[100][100] = {{0}};
    int i = 0, j = 0, q = 0, x = 0, nr_de_u = 0;
    string rsp;

    cout << "Numarul de x-uri - ";
    cin >> n;
    cout << "\n";

    do
    {
        do
        {
            cout << "In ce varf pleaca x" << i + 1 << "? -> x";
            cin >> x;
            incidenta[q][i] = -1;
            incidenta[q][x - 1] = 1;
            adiacenta[i][x - 1] = 1;
            lista[i][j] = x;
            if ((i + 1) == x)
            {
                incidenta[q][i] = 2;
            }
            cout << "x" << i + 1 << " mai are varfuri? (da/nu) ";
            cin >> rsp;
            j++;
            q++;
            if (x != 0)
            {
                nr_de_u++;
            }
        } while (rsp == "da");
        cout << "\n";
        i++;
        j = 0;
    } while (i < n);

2
    cout << "\n";
    cout << "Lista de adiacenta:\n\n";
    for (int i = 0; i < n; i++)
    {
        cout << i + 1 << " | ";
        for (int j = 0; j < n; j++)
        {
            if (lista[i][j] == 0)
            {
                cout << "0";
                break;
            }
            cout << lista[i][j] << "; ";
        }
        cout << "\n\n";
    }

    cout << "\n";
    cout << "Matricea de adiacenta:\n\n";
    for (int i = 0; i <= n; i++)
    {
        cout << i << "\t";
    }
    cout << "\n";
    for (int j = 0; j <= n; j++)
    {
        cout << "-------";
    }
    cout << "\n";
    for (int i = 0; i < n; i++)
    {
        cout << i + 1;
        for (int j = 0; j < n; j++)
        {
            cout << "\t" << adiacenta[i][j];
        }
        cout << "\n\n";
    }
    cout << "Matricea de incidenta:\n\n";
    for (int j = 0; j <= n; j++)
    {
        cout << j << "\t";
    }
    cout << "\n";
    for (int j = 0; j <= n; j++)
    {
        cout << "-------";
    }
    cout << "\n";
    for (int i = 0; i < nr_de_u; i++)
    {
        cout << "U" << i + 1 << " | ";
3
        for (int j = 0; j < n; j++)
        {
            cout << "\t" << incidenta[i][j];
        }
        cout << "\n\n";
    }
    cout << "Doriti sa modificati datele? - (da/nu) ";
    cin >> rsp;
    if (rsp == "da")
    {
        goto modify;
    }
    else
        return 0;
}

4
1) Metode de reprezentare a grafului
Există 3 metode de bază de definire a unui graf:
1. Matricea de incidență
2. Matricea de adiacență
3. Lista de adiacență (incidență)
2) Matricea de incidență – este o matrice de tipul mxn, în care m este numărul de muchii
sau arce (pentru un graf orientat), iar n este numărul vârfurilor. La intersecția liniei i cu
coloana j se vor considera valori de 0 sau 1 în conformitate cu următoarea regulă:
 1 – dacă muchia i este incidentă cu vârful j (dacă arcul i ”intră” în vârful j în cazul
unui graf orientat);
 0 – dacă muchia (arcului) i și vârful j nu sunt incidente;
 1 – numai pentru grafuri orientate, dacă arcul i ”iese” din vârful j.
3) În limbajul C++, putem realiza aceste metode în mai multe feluri. De exemplu putem citi
direct de la tastatură o matrice de adiacență, și cu ajutorul acestei matrici, putem afișa pe
ecran celelalte două metode datorită faptului că cunoaștem vârfurile adiacente. Totodată,
altă metodă ar fi citirea de la tastatură a numerelor vârfurilor adiacente cu numărul i, altfel
zis, citim de la tastatură o listă de adiacență, și astfel noi cunoaștem în ce vârf pleacă fiecare
x, și cunoscând această informație putem realiza mai ușor algoritmul de afișare pe ecran a
celorlalte două metode.

5
Analiza rezultatelor și concluzii
 In urma efectuării lucrării de laborator am studiat si am aflat cum are loc păstrarea
grafurilor in memoria calculatorului.
 Am studiat cum se realizează programarea algoritmilor de prelucrare a caracterelor și a
șirurilor de caractere prin utilizarea funcțiilor predefinite de prelucrare a caracterelor și a
șirurilor de caractere în limbajul C
 Am studiat cum se elaboreaza procedurile de introducere, extragere si transformare a
diferitelor forme de reprezentare internă a grafurilor cu scoaterea rezultatelor la display si
imprimantă.

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