Documente Academic
Documente Profesional
Documente Cultură
Laborator 9
Tablouri în limbajul C
Scopul acestei lucrări de laborator este familiarizarea studenților cu tipurile de date tablou și utilizarea
acestora în limbajul de programare C. Se vor prezenta sumar noțiuni teoretice și se vor rezolva aplicații
folosind mediul de programare CodeBlocks.
Noțiuni teoretice
Un tablou este colecție de variabile de același tip care sunt apelate folosind același nume (al tabloului).
În limbajul C, tablourile se regăsesc în locații de memorie adiacente, unde primul element corespunde
adresei de memorie cea mai mică (din blocul de memorie alocat) și ultimul element corespunde
adresei de memorie cea mai mare. Tablourile pot avea mai multe dimensiuni. Uzual putem denumi
tablourile unidimensionale, șiruri, iar tablourile bidimensionale matrice.
element a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8]
adresă 1000 1001 1002 1003 1004 1005 1006 1007 1008
valoare 1 3 2 1 1 1 0 2 5
Indexarea într-un tablou în limbajul C se referă la referă la apelul elementelor din tablou. În C
indexarea începe de la 0 (pentru primul element) și merge până la n-1 (unde n reprezintă numărul de
elemente din tablou). Limbajul C nu are posibilitatea de verificare a depășirii limitelor pentru tablouri.
Programatorul are datoria de a asigura verificarea depășirii limitelor acolo unde este nevoie.
Notă: există o strânsă legătură între tablouri și pointeri (operatorii & și *) lucru care va fi punctat
sumar în acest laborator printr-un exemplu și în laboratorul viitor în detaliu.
Tablouri unidimensionale
Formă:
tip nume_variabila[dimensiune]
unde tip reprezintă tipul de date ale tabloului (int, float, etc.) nume_variabila reprezintă numele
tabloului și dimensiune reprezintă numărul de elemente din tablou. Observăm că se folosesc
parantezele drepte „ [] ” pentru declararea tabloului. Folosirea parantezelor drepte este necesară
și pentru referirea la un termen din interiorului tabloului.
1
Programarea Calculatoarelor și Limbaje de Programare II - Laborator
Aplicații rezolvate
Aplicația 1. Să se scrie un program în care se declară un șir a cu dimensiunea 100 (definită cu directiva
define) și se introduc valori pare (de la 0 la 2n) pentru elementele șirului. Ulterior, se va afișa șirul.
Aplicația 2. Să se scrie un program în care se citesc de la tastatură elementele unui sir a[n] (n citit de
la tastatură) și se afișează șirul.
2
Programarea Calculatoarelor și Limbaje de Programare II - Laborator
Observații:
Tablouri bidimensionale
Forma:
unde tip reprezintă tipul de date ale tabloului (int, float, etc.) nume_variabila reprezintă numele
tabloului și dimensiune_1 respectiv dimensiune_2 reprezintă numărul de linii respectiv coloane din
tablou.
Aplicații rezolvate
Aplicația 3. Să se scrie un program în care se citește de la tastatură o matrice pătratică A3x3 cu numere
întregi, după care se înlocuiește elementul A[1][1] cu 0 și se afișează matricea.
3
Programarea Calculatoarelor și Limbaje de Programare II - Laborator
Matrice pătratice
O serie de aplicații inginerești au strânsă legătură cu matricele pătratice. Dacă discutăm de o matrice
pătratică, atunci știm că aceasta are două diagonale, una principală (de la elementul A[0][0] până la
elementul A[n-1][n-1]) și una secundară (de la elementul A[n-1][0] până la elementul A[0][n-1]). În
tabelul următor sunt prezentare relațiile matematice care descriu poziția relativă dintre elementelor
matricei pătratice și diagonalele acesteia.
Mai mult, se pot folosi relațiile din tabelul anterior pentru a determina limitele (inferioară și
superioară) și regulile de parcurgere a matricelor pătratice în zonele de interese (față de diagonale).
Aceste reguli sunt prezentate în tabelul următor.
4
Programarea Calculatoarelor și Limbaje de Programare II - Laborator
Tablouri multidimensionale
Forma:
unde tip reprezintă tipul de date ale tabloului (int, float, etc.) nume_variabila reprezintă numele
tabloului și dimensiune_1, dimensiune_2, etc. reprezintă dimensiunile tabloului.
Limbajul C oferă posibilitatea inițializării unui tablou în momentul declarării acestuia. Forma generală
de inițializare a tablourilor este similară cu cea a inițializării unor variabile, dar se folosesc parantezele
acoladă „ {} ”.
Forma:
unde tip reprezintă tipul de date ale tabloului (int, float, etc.) nume_variabila reprezintă numele
tabloului și dimensiune_1, dimensiune_2, etc. reprezintă dimensiunile tabloului și listă_valori
reprezintă valorile folosite în inițializarea tabloului. Dacă lista_valori nu conține suficiente valori
pentru a acoperi toate elementele tabloului, elementele neacoperite vor fi inițializate cu 0.
5
Programarea Calculatoarelor și Limbaje de Programare II - Laborator
Exemple:
int i[10]={1,2,3,4,5,6,7,8,9,10};
int matrice[4][5] = {
1,2,3,6,7,
5,9,7,6,1,
3,2,4,1,8,
9,8,2,6,5
};
Șiruri de caractere
Șirurile de caracter în C reprezintă tablouri unidimensionale care conțin caractere și este terminat în
caracterul null (\0). Așadar pentru a folosi un șir de 11 caractere este necesară declararea tabloului cu
dimensiunea 12, pentru a permite adăugarea caracterului null.
Exemple:
Notă: compilatorul C poate determina dimensiunea unui șir de caractere fără declararea aceste
dimensiuni (intre []) dacă șirul este inițializat. Astfel exemplul de mai sus poate deveni char sir[]=”Imi
place C”; iar compilatorul va aloca memorie pentru 12 caractere (este considerat și caracterul null).
Aplicații rezolvate
6
Programarea Calculatoarelor și Limbaje de Programare II - Laborator
Aplicația 5. Să se scrie un program care înmulțește două matrice oarecare Amxn și Bnxl rezultatul fiind o
matrice Pmxl. Dimensiunile matricelor se citesc de la tastatură (max 20). Elementele celor două matrice
A și B se citesc de la tastatură. Se vor afișa cele trei matrice.
7
Programarea Calculatoarelor și Limbaje de Programare II - Laborator
8
Programarea Calculatoarelor și Limbaje de Programare II - Laborator
Aplicația 6. Să se scrie un program care calculează produsul elementelor strict negative situate
deasupra celor două diagonale unei matrice pătratice Anxn având elemente numere întregi. Elementele
se citesc de la tastatură. Să se afișeze matricea și rezultatele obținute.
9
Programarea Calculatoarelor și Limbaje de Programare II - Laborator
Aplicații propuse:
1. Să se scrie un program care determină numărul elementelor pare dintr-un șir de numere
întregi.2
2. Să se scrie un program care calculează suma elementelor impare dintr-un șir de numere reale.
3. Să se scrie un program care citește doi vectori de numere întregi cu dimensiunea n și
calculează produsul lor scalar.
4. Să se scrie un program care ordonează în ordine crescătoare un șir de n numere întregi.
5. Să se scrie un program care determină transpusa unei matrice pătratice anxn.
6. Se citește de la tastatură o matrice oarecare (Amxn). Să se scrie un program care să calculeze
media aritmetică a elementelor de pe cele două diagonale.
7. Se citește de la tastatură o matrice oarecare (Amxn). Să se scrie un program care să verifice
dacă matricea este simetrică iar în cazul ȋn care nu este, să se schimbe cu 0 toate elementele
nesimetrice. (Simetria matricei se verifică fată de diagonala principală).
10