lucrarea de laborator 3 c

Upload: dorina-muntean

Post on 08-Oct-2015

22 views

Category:

Documents


0 download

DESCRIPTION

instruire practica

TRANSCRIPT

LUCRAREA DE LABORATOR 3

LUCRAREA DE LABORATOR 3

Prelucrarea tablourilor unidimensionale n TP i C

Obiectivele temei

1. Familiarizarea cu principiile prelucrrii elementelor tablourilor unidimensionale.

2. Algoritmizarea i nsuirea procedeelor stereotipe de declarare, introducere, afiare i formare prin parcurgere i calcule ale valorilor elementelor tablourilor unidimensionale.

3. nsuirea procedeelor avansate de realizare a structurilor ciclice cu instruciunile for, while i repeat, aplicnd diverse tehnici de programare.

4. nsuirea procedeelor de operare n interfaa TP i C la nivelul submeniurilor DEBUG i BREAK/WATCH (mijloacele de depanare-urmrire a variabilelor i punctele de ntrerupere).

Subiectele temei i ordinea executrii1. Studierea principiilor prelucrrii (descrierii, declarrii, formrii, etc.) tablourilor unidimensionale -- variabilelor cu indici i instruciunilor ciclice n C i recapitularea n TP.

2. Studierea metodelor de introducere i afiare clar a tablourilor unidimensionale.

3. nsuirea tehnicilor fundamentale de programare a nmagazinrii diferitor valori n baza elementelor: sumei i produsului; determinrii valorilor maxime i minime; diferitor cutri, rearanjri i transformri ale elementelor tablourilor.

4. Elaborarea algoritmului i programului TP i C pentru rezolvarea problemei (variantele vezi n Anexa L.lab nr.3), asigurnd universalitatea.

5. Depanarea programului i verificarea la PC a problemei trasate cu diverse combinaii de date.

6. Controlul corectitudinei programului cu ajutorul variantei de testare.

7. Analiza eficienei programului i soluiei problemei trasate.

Coninutul raportului

1. Drile de seam (rapoartele) la toate lucrrile de laborator, ncepnd cu aceast lucrare, se cere obligator s se includ schemele logice ale algoritmilor cu exemplificarea corectitudinii prin date concrete. Analiza erorilor admise pe parcursul efecturii lucrrii i modalitile de excludere. Restul vezi cerinele din lucrarea de laborator nr.1.

Noiuni generale

1. Tipul tablou (array, masiv).

Tablouri: O metod de organizare a datelor este - t a b l o u l (tabele) cu iruri (de o lungime cunoscut) de variabile de acelai tip. Structura:

Ansamblu omogen de variabile numite componentele tabloului

Toate componentele aparin aceluiai tip

Componentele sunt identificate cu ajutorul indicilor

Tablouri:

Unidimensionale (1 dimensionale)

Bidimensionale (2 dimensionale), etc.

Un ir de elemente de acelai tip se mai numete i vector sau tablou unidimensional. Deci tabloul este un tip de date compus dintr-un numr precizat de date de acelai tip. Referirea la elementele tabloului se face prin numele variabilei tablou urmat de indexul elementului pus ntre paranteze drepte [ ].

1.1 Tipul tablou i modurile de declarare n C

In C, tablourile unidimensionale sunt alctuite dintr-un grup de elemente de acelai tip (numit tip de baza) si referite printr-un nume comun.

Variabilele de tip tablou se definesc in maniera: tip_de_baza nume_var [dimensiune];

. Deci tabloul se poate caracteriza prin tip, nume i dimensiune. Formatul comun de descriere a tablourilor este:tip nume[d1][d1][dn]; unde :

tip este tipul comun pentru toate elementele tabloului, adic tipul tabloului de_baza. Tip al unui tablou poate fi orice tip de date deja definit: ntreg, real, caracterial .a. nume este numele tabloului. In calitate de nume al tabloului este folosit orice identificator. Mai mult ca att, deoarece numele tabloului este identificator, asupra lui se rspndete totul ce-i indicat n compartimentul Nume de variabile (identificatori), d1,d2,dn- dimensiunile tabloului (cifre ntregi sau variabile i atunci trebuie definite nainte de declararea tablourilor).

Dimensiunea tabloului indica numarul de elemente prezente in tablou. Dimensiunea tabloului poate fi o expresie constanta cu rezultat intreg.Un element al tabloului este accesat folosind ca index poziia elementului, astfel tabloul_meu[6] va referi al saptelea element al tabloului tabloul_meu.

Atentie! In C, "numerotarea" elementelor tablourilor ncepe cu poziia 0, astfel, daca avem definitia:

int tabloul_meu[100]; unde primul element al tabloului va fi tabloul_meu[0], iar ultimul tabloul_meu[99].

Tablourile sunt stocate in memorie la locaii consecutive, un tablou ocupnd o zona contigua de memorie, cu primul element al tabloului aflat la adresa mai mica.

Ex.: int x[8]; [0] [1] [2] [3] [4] [5] [6] [7]

23 67

valorile X

x[0]=23;

x[5]=67;

Atentie! O problema legata de tablouri este ca in C nu se face nici o verificare legata de "marginile" tabloului, astfel ca se pot accesa greit elemente din afara tabloului. De exemplu, pentru definiia:

int tabloul_meu[100]; daca accesam tabloul_meu[105] nu se va semnala nici o eroare, returnndu-se valoarea de la o locaie de memorie aflata la o distanta de 5 locaii fa de sfritul tabloului, fapt ce va duce la comportri "bizare" ale programului. Aceeai situaie, dar fa de nceputul tabloului, se ntmpla la accesarea tabloul_meu[-5].

Accesul la elementele tabloului Cu toate c tabloul este un tot ntreg, nu se poate vorbi despre valoarea tabloului ntreg. Tablourile conin elemente cu valorile crora se opereaz n program. Fiecare element n tablou i are indicele i valoarea sa. n calitate de indice a unui element se folosete un numr ntreg ce indic numrul de ordine al elementului n tablou. Enumerarea elementelor n tablou conform numrului de ordine se ncepe de la zero. Deci, indicele unui element poate avea valori de la 0 pna la d-1, unde d este dimensiunea tabloului.

n calitate de valoare a unui element din tablou poate servi orice numr de tipul indicat la descrierea tabloului, adica tipul valori atribuit oricrui element din tablou trebuie s fie compatibil cu tipul tabloului. Sintaxa de acces la orice element a unui tablou este urmtoarea: nume[i1][i2]..[in]. Unde nume este numele tabloului, i1 indicele elementului n dimensiunea 1, i2-indicele elementului n dimensiunea 2, in - indicele elementului n dimensiunea n. n cele mai dese cazuri se opereaz cu massive unidimensionale i bidimensionale. Accesul la un element al unui tablou unidimensional se face n felul urmtor: nume[i]; unde nume - numele tabloului, i-numarul de ordine a elementului n tablou.

Iniializarea tablourilor. Deseori e necesar ca elementele tabloului s posede valori chiar la momentul descrierii tabloului. Procesul de atribuire a valorilor elementelor tabloului n timpul descrierii lui se numete iniializarea tabloului. Sintaxa de iniializare a unui tablou unidimensional este:

tip nume[d]={v0,v1,v2,,vn-1};

unde tip este tipul tabloului, nume este numele tabloului, v0,v1,v2,vn-1 valorile respective ale elementelor nume[0],nume[1] etc. Exemplu:

int x[8]={1,3,15,7,19,11,13,5};

E de menionat faptul, c indicii tabloului se schimb ncepnd dela zero.Adic la descrierea tabloului valoarea maxim a indicelui tabloului coincide cu numrul de elemente n tablou minus unu. La iniializarea tabloului nu e numaidect de indicat dimensiunile tabloului.Compilatorul va determina numrul elementelor dup descrierea tabloului i va forma un tablou cu mrimea respectiv. De exemplu:

int x[]={1,3,15,7,19,11,13,5};2 Instruciunile ciclice i cele adiionale n CInstruciunea while

Format:

while (expresie)

instruciune

Instruciunea se execut repetat atta timp ct valoarea expresiei este diferit de zero. Testul are loc naintea fiecrei execuii a instruciunii. Prin urmare ciclul este urmtorul: se testeaz condiia din paranteze dac ea este adevrat, deci expresia din paranteze are o valoare diferit de zero, se execut corpul instruciunii while, se verific din nou condiia, dac ea este adevrat se execut din nou corpul instruciunii. Cnd condiia devine fals, adic valoarea expresiei din paranteze este zero, se face un salt la instruciunea de dup corpul instruciunii while, deci instruciunea while se termin.

Example:

a)calculeaz suma componentelor vectorului a de dimensiune m

suma=i=0;

while(++i< m) suma+=a[i];

b)citirea repetat de caractere pn la tastarea lui 'Y'

while(getche()!='Y');

c) char *adr; while(*adr!=NULL) { if(*adr=='*')*adr='+';

adr++; };d) while (*p == ' ') p++;

Instruciunea do

Format:

do instruciuni while (expresie);

Instruciunea se execut repetat pn Cnd valoarea expresiei devine zero. Testul are loc dup fiecare execuie a instruciunii.

Example:

i = 1; n = 1;

do {

n *= i;

i++;

} while (i