Sunteți pe pagina 1din 11

Ministerul Educatiei si Stiintei al R.M.

Universitatea Tehnica a Moldovei


Facultatea Calculatoare, Informatica si Microelectronica
Specialitatea Automatica si Informatica

Referat
la disciplina: Programarea calculatorului

La tema: “Prelucrarea tablourilor


unidimensionale in C”

A elaborat: studenta gr.AI-091


Rusu Zinaida

A verificat: lector asistent


Moraru Octombrina

Chisinau 2009
1 Definiţie

Tablou = succesiune de locaţii de memorie recunoscute prin acelaşi identificator şi prin


poziţia fiecăreia în cadrul şirului. Poziţia este dată printr-un număr pozitiv numit index.
Valorile atribuite elementelor tabloului trebuie să fie de acelaşi tip.
Organizarea unui tablou în memorie este de forma:
a) Declararea vectorilor
Ex. int x[8];
[0] [1] [2] [3] [4] [5] [6] [7]
x 23 67
A

x[0] = 23;
x[5] = 67;

b) Citirea vectorilor
Ex.
int tablou[10];
int i;
printf(“\n Introduceti dimensiunea tabloului ”);
scanf(“%d”,&n);
for(i=0; i<n; i++)
{
printf(“\n tablou[%d] = ”,i); //se va afisa tablou[i]= şi se aşteaptă
scanf(“%d”,&tablou[i]); //introducerea valorii care se atribuie
} // variabilei tablou[i]

Obs:
1. Dimensiunea tabloului introdusă de către utilizator (n) nu trebuie să depăşească
dimensiunea cu care a fost declarat vectorul, (în cazul anterior n introdus de utilizator nu
trebuie să depăşească 10 întrucât declaraţia a fost tablou[10]).
2. Identificarea zonei de memorie unde va fi reţinut tabloul se face cu ajutorul
numelui tabloului. Acesta are ca valoare adresa primului element din tablou), ceea ce îl
deosebeşte de variabilele simple care nu reprezintă o adresă.
&st ≡ st ≡ &st[0];
3. Instrucţiunea printf() din interiorul buclei cu contorizare va afişa numai numele
variabilei care se citeşte.
4. Instrucţiunea scanf() va prelua şi va memora valoarea pentru poziţia respectivă
(tablou[i]).
5. Dacă secvenţa de citire este alcătuită sub forma:
for(i=0; i<n; i++)
{
printf(“\n tablou[%d] = %d: ”,i, tablou[i]);
scanf(“%d”,&tablou[i]);
}
se va afişa, pentru i=0, tablou[0] = -30731 şi se va executa apoi instrucţiunea de citire,
deci se va aşteapta introducerea valorii care se va memora în locaţia tablou[0];
Valoarea afişată –30731 provine din faptul că în momentul afişării variabila tablou[i] nu
este iniţializată şi de aceea se va afişa o valoare aleatoare care va fi găsită în memorie la adresa
respectivului element.
c) Afişarea vectorilor

Ex.
int tab[5]={1,2,3,4,5}; //sau vectorul este introdus ca la ex. de mai sus
printf(“\n Elementele vectorului sunt: ”);
for(i=0; i<5; i++)
printf(“\n tab[%d] = %d”, i, tab[i]);
Obs.
În acest caz elementele tabloului au fost iniţializate direct. Pentru aceasta valorile care
trebuiesc reţinute în tablou au fost trecute între acolade {}.

d) Prelucrări asupra vectorilor


Ex. Să se afişeze valorile unei funcţii considerând că x parţine unui vector de valori.

f :DC
D  ( , - 3]  [3,  )
f ( x)  x2  9 x  {-5, - 2, 0, 5, 7, 9}  f(x)  {4, x, x,4, 40 , 72}

Obs.
Prin caracterul x s-a reprezentat faptul că respectivele valori x[i] nu aparţin domeniului
de definiţie.
Etapele cara trebuiesc parcurse pentru determinarea valorilor funcţiei:

- declararea vectorului de intrare xfloat x[5] şi a vectorului de ieşire f float f[5]


- citirea numărului de elemente din x şi a valorilor acestuia;
- verificarea apartenenţei valorii x[i] la D şi a valorilor funcţiei (pentru x[i]  D). Dacă x[i]
nu aparţine lui D atunci evident calculul valorii lui f nu este posibil. De aceea s-a folosit
variabila j care să indice poziţia valorii care a putut fi calculată în vectorul f. Totodată
valorile x[i] care aparţin domeniului sunt memorate în vectorul x1;
- afişarea vectorilor x1, şi f;

1 Scopul lucrarii:
Familiarizarea cu tehnicile de prelucrare a tablourilor
unidimensionale (TU), insusirea instructiunilor ciclice si
aprofundarea cunostintelor despre modul de lucru in SO si “TP”.

2 Sarcina lucrarii:
Este dat tabloul unidimensional x={x i },i=1,…,n;cu elemente
reale.Alcatuiti algoritmul si programul pentru
urmatoarele:obtinerea tabloului unidimensionalT cu valori logice,
reiesind din urmatoarele:
a) variabilei t sa-I fie atribuita valoarea TRUE, daca elementele
tabloului X sunt ordonate strict in ordinea crescatoare, iar
valoarea FALSE in caz contrar;
b) variabilei t sa-I fie atribuita valoarea TRUE, daca in tabloul
X nu sint prezente elementele de zero si totodata elementele
positive se alterneaza cu cele negative, iar valoarea FALSE
in caz contrar;
c) variabilei K sa-i fie atribuit numarul primei intrari Y in
tabloul X,altfel,adica daca Y nu se contine in X,sa se calculeze
K= x  x x  x x x  ...  xx x ...x ,unde m este numarul primului
1 1 2 1 2 3 1 2 m

element negative al tabloului X.

3 Schema bloc de tip liniar:

start

Lungimea
vectorului a

A
A

NU
i=0;i<n;i
++
DA

xi

t=1

NU
I=0; i<n-1;
i++

DA
NU
xi<xi+1

t=0

NU
t=1

FALSE DA

TRUE

B
N

d=1

i=0;
i<n; i+
+
DA
NU

Xi=0||i||
2=1&&-
xi<0
DA

d=0

NU

d=0

DA

TRUE FALSE

Numarul y

K=-1

C
C

NU
i=0;
i<n; i+
+

DA
NU
Xi=y

DA

K=i

NU
k K=-1

DA
STOP K=0

NU
i=0;
i<n; i+
+
DA
NU
Xi<0

DA

m=1

i=0;
i<=m; i+
+

DA
D F
F
D

P=1

NU
K=k+p j=0;
j<=i; j+
+
DA
n
P=  xi
i 1

4 Listingul:
#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
clrscr();
printf("\n\n Lucrare de laborator nr. 3, varianta 1");
printf("\n elaborata de studenta gr. AI-091, FCIM, Rusu Zinaida");
int x[10], y[10],c,i,n,h;
float m,o,s1,s2,p1,p2,minx=0,maxy=0;
s1=0;
s2=0;
p1=1;
p2=1;
printf("\n\ndati nr. de celule tabelului x\n");
scanf("%i",&n);
printf("dati nr. de celule tabelului y\n");
scanf("%i",&h);
printf("introduceti elementele tabloului x\n");
for(i=1;i<=n;i++)
scanf("%i",&x[i]);
printf("introduceti elementele tabloului y\n");
for(i=1;i<=h;i++)
scanf("%i",&y[i]);
printf("dati valoare lui c, dela 1 la 3\nc=");
scanf("%i",&c);
if(c==3)
{
for(i=1;i<=n;i++)
s1=s1+x[i];
for(i=1;i<=h;i++)
s2=s2+y[i];
o=s1/s2;
printf("x/y=%.3f\n",o);
}
if(c==2)
{
for(i=1;i<=n;i++)
p1=p1*x[i];
for(i=1;i<=h;i++)
p2=p2*y[i];
o=p1/pow(2.17,(c/h));
printf("o=%f\n",o);
}
if(c==1)
{
minx=minx+x[1];
maxy=maxy+y[1];
for(i=2;i<=n;i++)
if(minx>x[i])
minx=x[i];
else minx=x[i];
for(i=2;i<=h;i++)
if(maxy<y[i])
maxy=y[i];
else maxy=y[1];
m=minx/maxy;
printf("minx/maxy=%f",m);
}
getch();
}

5 Rezultatele afisarii (printscreen):


6 Concluzie:

In urma executarii acestei lucrari m-am familiarizat cu tehnicile


de prelucrare a tablourilor unidimensionale .Am insusit instructiunile
ciclice si mi-am aprofundat cunostintele despre modul de lucru in
sistemul “C” .