You are on page 1of 17

Ministerul Educatiei al Republicii Moldova

Univesitatea Tehnica a Moldovei


Facultatea Calculatoare, Informatica si Microelectronica

Raport
Lucrarea de laborator nr.3
Programarea Calculatoarelor
Tema : Prelucrarea tablourilor unidimensionale n TP i
C
(Varianta nr.5)

A efectuat:
Costraci Mihail
gr. TI-114
A verificat:
V. Marin

Chisinau 2011

Varianta 5
1. SCOPUL LUCRARII
Familiarizarea cu principiile prelucrrii elementelor tablourilor unidimensionale.Algoritmizarea
i nsuirea procedeelor stereotipe de declarare, introducere, afiare i formare prin parcurgere i
calcule ale valorilor elementelor tablourilor unidimensionale.
nsuirea procedeelor avansate de realizare a structurilor ciclice cu instruciunile for, while i
repeat, aplicnd diverse tehnici de programare.
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).
2.Conditia problemei : Sunt date tablourile unidimensionale X={ xi }, i=1,,n; Y={ Yj },
j=1,,m. S se elaboreze algoritmul i programul pentru urmtoarele operaii cu tablourile:
a) variabilei logice t s fie atribuit valoarea TRUE dac mulimea elementelor tabloului X
este submulimea mulimii Y i FALSE n caz contrar. Apoi s se aprecieze
urmtoarele:
b) Z=X Y - intersecia tablourilor;
c) Z=X Y - reuniunea tablourilor;
d) Z=X\Y - diferena tablourilor (n Z conine toate elementele din X care nu se conin n
Y).

3.SCHEMA LOGICA

Start
1

Start

z[40],x[20],y[10],I,j,
n,m,nz,nr,k;

Da

do

3
Nu

Introducem

i=0;i<n
;i++

elementele tab

4
Afiseaza Introdu
elementul %d;i+1);

Da

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

6
Afiseaza Introdu
elementul %d: ",i+1

7
A

NU

DA

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

NU

8
printf("%d" ,
x[i]);

Da

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

10
printf("%d" ,
y[i]);

11

Nu

DA
12

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

13

Da

j=0;j<m;
j++;

NU

14
NU
x[i]==y[
j])

15
z[i]=x[i];nz+

16

17

+;

DA

NU
i=0;i<nz
;i++;

18

printf("%d" ,
z[i]);

19

DA

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

20
z[i]=x[i]

21
int ni=n;
int s;

22

NU

23

Da
s=0

DA
24

NU

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

25

DA

j=0;j<n;j
++;

NU

26
NU
(y[i]==x
[j])

27
S=1

28

29
DA

NU
s==0

30
z[ni++]=y[i];
nz++;

31

E
F

NU
s==0

32
{z[ni++]=y[i];
nz++;}

33

x in reuniune cu
y:

34

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

35
printf("%d" ,
z[i]);

36

NU

i<n
37
nz=0;

38

nr=0;

j=0;j<m;
j++
39

40

x[i]==y[j
]

nr++
41

nr==0
42
z[k]=x[i]; k++;
nz++
43
i++
44

END
Start

Dupa ce am facut schema logica incepem sa criem programul Turbo C.In primlu rind
trebuie sa declaram doua tablouri unidimensionale , Formatul comun de descriere a
tablourilor este tip nume[d1][d1][dn];
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.

La efecturea acestei lucrari vom avea nevoie de instructiunea de ramificare ca if si de


instructiunile ciclice : for_do si while. .Dupa ce am declarat tablourile putem sa
incepem sa efectuam conditia problemei .Trebuie sa facem intersectia dintre doua
tablouri,deci avem nevoie ca elementele din primul tablou X sa coincida cu elementele
din al doilea tablou y si sa se copie in al treilea tablou Z,folosim instructiunile for si
if.Rindu 37-48 din continutul programului .
Pentru efectuarea reuniunii avem nevoie sa gasim toate elementele care se contin in X
si toate elementele lui Y , dar nu si elemtele lor comune, si sa le copiem in tabloul Z.
Rindul 50-69 din continutul programului .
Pentru efectuarea diferentei avem nevoie de elementele din X care nu se contin in Y .
Rindul 70-84 din comtinutul programului .

4.CONTINUTUL PROGRAMULUI

1. #include<stdio.h>
2. #include<conio.h>
3.
4. void main()
5.
6. { int z[40],x[20],y[10],i,j,n,m,nz,nr,k;
7. clrscr();
8. printf("Introduceti numarul de elemente primului tablou: ");
9. scanf("%d" ,&n);
10. printf("\ Introduceti numarul de elementele tabloului al doilea: ");
11. scanf("%d" ,&m);
12.
13.
14. printf("\ Introduceti elementele tabloului 1 ");
15. for (i=0;i<n;i++)
16. {
17. printf("\n Introdu elementul %d: ",i+1);
18. scanf("%d" ,&x[i]);
19. }
20.
21. printf("Introdu tabl 2");
22. for (i=0;i<m;i++)
23. {
24. printf("\n Introdu elementul %d: ",i+1);
25. scanf("%d" ,&y[i]);

26. }
27.
28.clrscr();
29. printf("\n tablou 2 : ");
30.for(i=0;i<n;i++)
31. printf("%d" , x[i]);
32.
33. printf("\n tablou 2 :" );
34. for(i=0;i<m;i++)
35. printf("%d" , y[i]);
36.
37. nz=0;
38.for(i=0;i<n;i++) // se efectueaza intersectia lui x si y
39. {
40.for(j=0;j<m;j++)
41. if(x[i]==y[j]){ z[i]=x[i];nz++;}
42. }
43.
44.printf("\n x in intersectia cu y : ");
45. for (i=0;i<nz;i++)
46.printf("%d" , z[i]);
47.
48.
49.// Se efectueaza reuniunea
50.nz=0;
51. for(i=0;i<n;i++)
52. z[i]=x[i];
53. int ni=n;

54. int s;
55. do{
56. s=0;
57. for(i=0;i<m;i++)
58. for(j=0;j<n;j++)
59.
60. if (y[i]==x[j]) s=1; //{z[ni++]=y[i]; nz++;}
61. if (s==0) {z[ni++]=y[i]; nz++;}
62. }
63. while(i<m); {
64.
65. printf("\n x in reuniune cu y: ");
66. for(i=0;i<n+nz;i++)
67.

printf("%d" , z[i]);

68.
69.i=0;k=0;nz=0;
70. while(i<n);

//operatie diferentei z=x\y

71. {
72. nz=0;
73. nr=0;
74. for(j=0;j<m;j++)
75.

if(x[i]==y[j]) nr++;

76.
77. if(nr==0)
78.

79.

z[k]=x[i];

80.

k++;

81.

nz++;

82.

83. i++;
84. }
85.
86. for (k=0;k<nz;k++) // afiseaza diferenta z=x\y
87. printf("%d ",z[k]);
88.
89. getch();
90.

Pentru elaborarea acestui program in primul rind am determinat care este conditia
problemei.Am declarat tablourile X si Y .Apoi depa declarare am inceput sa indeplinesc
conditiile problemei .La efectuarea acestora am avut nevoie de instructiunea while
Instructiunea while
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.

Instruciunea for
Format:
for (expresie-1opt;
expresie-2opt;
expresie-3opt)

instruciune
Aceast instruciune este echivalent cu:
expresie-1;
while (expresie-2) {
instruciune;
expresie-3;
}

Figura 1 .Rezultatul copilarii programului

La efectuarea acestiu program am intilnit urmatoarele dificultati :la efectuarea


conditiei, diferenta dintre tabloul X si Y ,ciclul pe care l-am scris in program cu
celelalte conditii nu mergea ,imi dadea eroare .De aceea am elaborat un program aparte

Figura 2 . Afiseaza rezultatele diferentei

5.CONCLUZIE
In acest laborator am invatat principiile de prelucrare a tablourilor
unidimensionale,Algoritmizarea i nsuirea procedeelor stereotipe de declarare, introducere,
afiare i formare prin parcurgere i calcule ale valorilor elementelor tablourilor
unidimensionale.nsuirea procedeelor avansate de realizare a structurilor ciclice cu
instruciunile for, while i repeat, aplicnd diverse tehnici de programare.Am insuit procedee
avansate de realizare a structurilor ciclice cu instruciunile for, while i repeat, aplicnd diverse
tehnici de programare.

You might also like