Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Vectori multidimensionali (matrice)

Vectori multidimensionali (Matrice)

O matrice bidimensionala poate fi memorata in cateva moduri:

- Ca un vector de vectori. Exemplu :

char a[20][20]; // a[i] este un vector

- Ca un vector de pointeri la vectori. Exemplu:

char* a[20]; // sau char ** a;

- Ca un singur vector ce contine elementele matricei, fie in ordinea liniilor, fie in ordinea coloanelor.

Matricele alocate dinamic sunt vectori de pointeri la liniile matricei.

Pentru comparatie vom folosi o functie care ordoneaza un vector de nume (de siruri) si functii de citire si afisare a numelor memorate si ordonate.

Prima forma (vector de vectori) este cea clasica, posibila in toate limbajele de programare, si are avantajul simplitatii si claritatii operatiilor de prelucrare.



De remarcat ca numarul de coloane al matricei transmise ca argument trebuie sa fie o constanta, aceeasi pentru toate functiile care lucreaza cu matricea.

#define M 30                                // nr maxim de caractere intr-un sir

// ordonare siruri

void sort ( char vs[][M], int n)


// citire siruri in matrice

int citmat ( char vs[][M] )

// afisare matrice cu siruri

void scrmat (char vs[][M],int n)

O matrice alocata dinamic este de fapt un vector alocat dinamic ce contine pointeri la vectori alocati dinamic (liniile matricei). Liniile matricei pot avea toate aceeasi lungime sau pot avea lungimi diferite. Exemplu cu linii de lungimi diferite :

// ordonare vector de pointeri la siruri

void sort ( char * vp[],int n)

// citire siruri si creare vector de pointeri



int readstr (char * vp[])

return n;

// afisare siruri reunite in vector de pointeri

void printstr ( char * vp[], int n)

In exemplul anterior am presupus ca vectorul de pointeri are o dimensiune fixa si este alocat in functia "main".

Daca se cunoaste de la inceput numarul de linii si de coloane, atunci putem folosi o functie care aloca dinamic memorie pentru matrice. Exemplu:

// alocare memorie pentru o matrice de intregi

// rezultat adresa matrice sau NULL

int * * intmat ( int nl, int nc)


Utilizarea unui singur vector pentru a memora toate liniile unei matrice face mai dificila selectarea de elemente din matrice (prin indici de linie si coloana) si chiar sortarea liniilor (de lungime fixa).

biologie

botanica






Upload!

Trimite cercetarea ta!
Trimite si tu un document!
NU trimiteti referate, proiecte sau alte forme de lucrari stiintifice, lucrari pentru examenele de evaluare pe parcursul anilor de studiu, precum si lucrari de finalizare a studiilor universitare de licenta, masterat si/sau de doctorat. Aceste documente nu vor fi publicate.