Sunteți pe pagina 1din 13

Ministerul Educaţiei, Culturii si Cercetarii al Republicii

Moldova

Universitatea Tehnică a Moldovei

Facultatea Calculatoare Informatica si Microelectronica


Departamentul IIS

RAPORT
Lucrarea de laborator nr.5
la Programarea Calculatoarelor

A efectuat:
st. gr. AI-171 S.Crușnevschi

A verificat:
dr., conf.univ. M. Kulev

Chişinău -2017
Lucrarea de laborator nr.5
Tablouri bidimensionale (matrici)

Scopul lucrării[1] Studierea şi utilizarea instrucţiunilor de bază ale limbajului


pentru prelucrarea şi modificarea masivelor bidimensionale.
.

Condiția problemei: Să se scrie un program ce va prelucra un masiv bidimensional


cu n linii şi m coloane, având următoarele condiţii:
Varianta 8: W[n,m]
a) Schimbaţi cu locul elementul maximal al rândului 1 cu elementul minimal al coloanei n;
b) Să se calculeze suma şi cantitatea elementelor negative mai sus de rândul patru.

Lucrarea de laborator nr.5 - Masive bidimensionale


Executat de studentul gr.
M E N I U L P R O G R A M U L U I:
1. Prima condiţie a problemei
2. A doua condiţie a problemei
3. Iesire din sistem
Alege condiţia: 1
------------------------------------------------------------------------------
Submeniul primei condiţii a problemei
1. Introduce matricea manual
2. Introduce matricea aleator (utilizând funcţia random)
Alege condiţia: ?

Noţiuni principale din teorie şi metode folosite[1]:


Tablou bidimensional - 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-o
suită de două numere pozitive (indexi), care reprezintă cele două dimensiuni (linie şi
coloană).

Tip nume[dim1][dim2];
unde:
Tip - poate fi unul din tipurile de bază folosit (int, float,char,...) sau un tip definit de utilizator
(articole, obiecte);
nume – numele prin care va fi referită matricea;
dim1 – numărul de linii din matrice;
dim2 – numărul de coloane din matrice.

Citirea elementelor unui tablou nu este posibilă decât prin citirea fiecărui
element. De aceea, ca şi în cazul vectorilor, operaţia de citire a matricelor impune
folosirea a două secvenţe ciclice suprapuse. Acestea corespund indicilor liniei i,
respectiv coloanei j.

Analiza datelor:
a) date de intrare:
n,m, key, keya - variabile simpe fara zecimale,W[i][j] –valoarea elementelor tabelului (de
introdus de la tastatura).
b) date de ieşire:
c,S,exit,min,max–variabile simple fara zecimale, W[i][j] –valoarea elementelor tabelului (de
afişat pe ecran).
c) date intermediare:temp,-variabile pentru parcurgerea tabloului, Y[2]-tablou pentru stocarea
datelor intermediare,

Codul (textul) programului in limbajul C++:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int m,i,j,n,temp,key,exit=0,W;

printf("n=%i,m=%i\n",n,m);

while(1){
printf("Lucrarea de laborator nr.5 - Masive bidimensionale\n");
printf("Executat de studentul Crusnevschi Stanislav gr Ai-171\n");
printf("M E N I U L P R O G R A M U L U I\n");
printf("\n1. Prima conditie a problemei");
printf("\n2. A doua conditie a problemei");
printf("\n3. Iesire din sistem\n");
scanf("%i",&key);

switch(key)
{
case 1:{
int keya;
printf("1:Manual\n2:Random\n");
scanf("%d",&keya);
switch(keya)
{
case 1:
{
printf("Introduceti marimile matricei:\n");
scanf("%d",&n);
scanf("%d",&m);
int W[10][10];
printf("Introduceti matricea:\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d", &W[i][j]);
int min,max,
Y[2];
printf("Matricea introdusa:\n");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<m;j++)
printf("%d\t",W[i][j]);
}

max=W[0][0];
for(j=0;j<m;j++)
if(W[0][j]>max)
{
max=W[0][j];
Y[0]=j;
}

min=W[0][m-1];
for(i=0;i<n;i++)
if(W[i][m-1]<min)
{
min=W[i][m-1];
Y[1]=i;
}

temp=W[0][Y[0]];
W[0][Y[0]]=W[Y[1]][m-1];
W[Y[1]][m-1]=temp;

printf("\n\n Matricea obtinuta: \n");


for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<m;j++)
printf("%d\t",W[i][j]);
}

printf("\n\n\n\n");
break;
}

case 2:
{
puts("Introduceti marimile matricei:");
scanf("%d",&n);
scanf("%d",&m);
int W[10][10];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
W[i][j]=rand()%100-60;
int min,max,
Y[2];
printf("Matricea introdusa:\n");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<m;j++)
printf("%d\t",W[i][j]);
}

max=W[0][0];
for(j=0;j<m;j++)
if(W[0][j]>max)
{
max=W[0][j];
Y[0]=j;
}

min=W[0][m-1];
for(i=1;i<n;i++)
if(W[i][m-1]<min)
{
min=W[i][m-1];
Y[1]=i;
}

temp=W[0][Y[0]];
W[0][Y[0]]=W[Y[1]][m-1];
W[Y[1]][m-1]=temp;

printf("\n\n Matricea obtinuta: \n");


for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<m;j++)
printf("%d\t",W[i][j]);
}

printf("\n\n\n\n");
break;
}

break;
}
case 2:{
int c=0,keya,
S=0;

printf("1:Manual\n2:Random\n");
scanf("%d",&keya);
switch(keya)
{
case 1:
{
printf("Introduceti marimile matricei\n");
scanf("%d",&n);
scanf("%d",&m);

int W[10][10];

printf("Introduceti matricea:\n");

for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&W[i][j]);
printf("Matricea introdusa:\n");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<m;j++)
printf("%d\t",W[i][j]);
}

for(i=0;i<3;i++)
{
for(j=0;j<m;j++)
{
if(W[i][j]<0)
{
S=S+W[i][j];
c++;
}

printf("\nSuma elementelor = %i\n Nr elementelor negative = %i",S,c);


printf("\n\n\n\n");
break;
}
case 2:
{
printf("Introduceti marimile matricei\n");
scanf("%d",&n);
scanf("%d",&m);
int W[10][10];

printf("Matricea introdusa:\n");

for(i=0;i<n;i++)
for(j=0;j<m;j++)
W[i][j]=rand()%100-55;

for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<m;j++)
printf("%d\t",W[i][j]);
}

for(i=0;i<3;i++)
{
for(j=0;j<m;j++)
{
if(W[i][j]<0)
{
S=S+W[i][j];
c++;
}

}
printf("\nSuma elementelor = %i\n Nr elementelor negative = %i",S,c);
printf("\n\n\n\n");
break;
}
}
break;
}

case 3:
{return 0;}

default:{printf("\nNu este asa element al meniului!"); printf("\n\n\n\n");}


}
}
}
Date de intrare Nr.1 (key,keya,n,m,W[i][j]):
1133
5 7 -11
9 -21 -13
1 80 1

Rezultatul obtinut:
Date de intrare Nr.2 (key,keya,n,m):
2266
Rezultatul obtinut:
Date de intrare Nr.2(key)
3
Rezultatul obtinut:
Analiza rezultatelor si concluzii:

1. Verificarea ne arată că rezultatul obţinut este corect şi programul lucrează corect.


2. Tablourile bidimensionale sunt foarte utile la stocarea informatiei de acelasi tip de date si
apelarea acestora.
3. A fost inteles principiul de lucru cu tablourile bidimensionale.
4.Tablourile sunt utile la prelucrarea datelor stocate in ele.
5. Nu este prevazuta iesirea din program, la momentul chind utilizatorul se afla in al doilea
submeniu.
6.Codul programului este lung din motivul repetarilor segmentelor de cod.
7. Trebuie de utilizat subprograme pentru minimizarea codului sursa.

Bibliografie:

1. PROGRAMARE Indicatii de laborator Partea I, Chișinău, V. Derevlenco, I. Ichim, L. Bodean

S-ar putea să vă placă și