Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Tablouri multi-dimensionale

c



+ Font mai mare | - Font mai mic



Tablouri multi-dimensionale

C este prevazut cu probabilitatea de a lucra cu tablouri multidi-

mensionale, cu toate ca in practica exista tendinta ca ele sa



fie mult mai putin utilizate decit tabloutile de pointeri. In

aceasta sectiune vom da citeva dintre proprietatile lor.

Sa reluam problema de conversia datei, zi-in-luna in zi-in-

an si viceversa. De exemplu, 1 martie este a 60-a zi dintr-un an

nebisect si a 61-a dintr-un an bisect. Sa definim doua functii

care sa faca conversia 'day_of_year' converteste luna si ziua in

ziua din an si luna, iar 'month_day' converteste ziua din an in

luna si ziua. Daca aceasta din urma functie returneaza doua va-

lori, argumentele 'luna si ziua' vor fi pointeri:

month day (1977, 60, &m, &d)

puna pe m pe 3 si pe d pe 1.

Aceste functii au nevoie de aceasi informatie, o tabela cu numarul

zilelor din fiecare luna ('30 zile are septembrie'). Din moment

ce numarul de zil/luna difera in functie de an bisect sau an

nebisect, este mai usor sa separam aceste informatii pe doua

linii ale unui tablou bidimensional; apoi sa incercam sa tinem

cont de ce se intimpla cu februarie in timpul calcului.

Tabloul si functia pentru rezolvarea transformarilor sint dupa cum

urmeaza:

static int day_tab[2][13] = ,

};

day-of-year(year, month, day) /* pune nr zilei in an */

int year, month, day; /* din luna &an */

month_day(year, yearday, pmonth, pday) /*pune luna, zi */

int year, yearday, *pmounth, *pday; /* din ziua in an */

Tabloul day-tab trebuie sa fie extern ambelor functii

'day_of_year' si 'month_day', in asa fel incit ambele sa-l poata

utiliza.

'day-tab' este primul tablou bidimensional cu care avem de

a face in C, Prin definitie un tablou bidimensional este de

fapt un tablou unidimensional alei carei elemente sint fiecare

in parte cite un tablou. Prin uramre, indicii se scriu astfel

day_tab[i][j]

in loc de

day_tab[i, j]

ca in majoritatea limbajelor in plus un tablou bidimensional paote

fi tratat in mai multe moduri decit in alte limbaje. Elementele

sint memorate pe linii, ceea ce inseamna ca indicele din deapta

varaiaza primul in asa fel incit elementele sint accesate in

ordinea memoriei.

Un tablou se initializeaza printr-o lista de initiali-

zatori scrisi intre acolade; fiecare liniea unui tablou bidimen-

sional este initializata printr-o sublista corspondenta. Am ince-

put tabloul day-tab cu o coloana de zero, in asa fel incit numero-

tarea liniilor poate fi facuta de la 1 la 12 in loc de 1 0-11.

Daca exista spatiu suficient, este mai usor sa se procedeze

innmodul mai sus aratat in loc sa se ajusteze indicii.

In cazul in care un tablou bidimensional trebuie transmis

unei functii, declararea argumentelor in funtie trebuie sa includa

dimensiunea coloanei, dimensiunea liniei este irelevanta deoarece

unei functii i se transmite ca si in cazurile anterioare, uh

pointer. In cazul de fata este vorba de un pointer care parcurge

obiecte care sint tablouri de cite 13 int. Astfel daca trebuie

transmis tabelul day-tab unei functii f, declararea lui f va fi

f(day_tab)

int day_tab[2][13];

Declararea argumentului in f va fi deasemenea

int day-tab[][13];

din moment ce nr liniilor este irelevant, sau ar putea fi

int (*day-tab)[13];

care spune ca argumentul este un pointer pe un tablou de 13 in-

tregi. Sint necesare parantezele pentru ca crosetele au prioritate

mai mare decit *, fara paranteze; declararea

int *day-tab[13];

este un tablou de 13 pointeri pe intregi, dupa cum se va vedea

in sectiunea urmatoare.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1027
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved