Sunteți pe pagina 1din 9

Universitatea Tehnică a Moldovei

Facultatea Calculatoare, Informatică şi Microelectronică


Departamentul Informatica și Ingineria Sistemelor

RAPORT
la lucrarea de laborator nr. 5

la Programarea Calculatoarelor

Tema: Tehnicile prelucrării tablourilor, utilizînd subprograme

Varianta I

A efectuat: st. gr. Ti-183 Bortă Sergiu

A verificat: Marin Ştefan

Chişinău – 2018
Obiectivele temei
- Aprofundarea cunoştinţelor în limbajul şi mediul TurboC şi perfecţionarea tehnicii de programare cu
subprograme în prelucrarea structurilor complexe.
- Însuşirea procedeelor de algoritmizare şi progamare prin descompunerea problemei în module
autonome care, apoi, vor fi reprezentate prin secvenţe /fragmente de program pentru prelucrarea unor
informaţii după principii comune cu apeluri multiple, analizând soluţiile stereotipe şi cele eficiente de
introducere, afişare şi rearanjări ale tablourilor etc.
- Însuşirea tehnicilor eficiente de parcurgere, căutare, schimbare şi ordonare a structurilor şi calculul
conform cunoştinţelor obţinute din matematică în baza ciclurilor şi încorporate într-un program
complex, alcătuit după principiile structurale şi modulare.
Subiectele temei şi ordinea executării
1. Studierea principiilor prelucrării (descrierii, declarării, formării, etc.) tablourilor.
2. Studierea metodei de descompunere top-down a programului pe module aparte care să fie apelate în
diferite sectoare a programului, utilizînd subprograme.
3. Însuşirea tehnicilor moderne de elaborare a programelor complexe în C(cu subprograme proprii) în
baza problemelor din lucr. de laborator nr.3,4.
4. Elaborarea testelor şi depanarea programului diverse moduri în mediul integrat C.
5. Compararea tehnicilor simple şi celor bazate pe principiile structurale şi modulare.

Consideraţii teoretice însuşite


Subprograme în C: FUNCŢII
2.1. Funcţii si programarea structurata
Programarea structurata este o metodă ce rezolva problema cu o strategie a programării mai
eficientă si are următoarele principii:
1. Structurile de control trebuie sa fie cât se poate de simple;
2. Construcţia unui program trebuie sa fie descrisa top-down.
Descrierea top-down se refera la descompunerea problemei noastre in module (subprobleme). De
obicei, aceste module sunt uşor de descris.
In faza de programere modulele vor deveni subprograme iar modulul principal – program
principal.
Subprogramele in limbajul C/C++ se numesc functii.
Un program scris în limbajul C/C++ este un ansamblu de funcţii, fiecare dintre acestea efectuând
o activitate bine definită.
Un program C++ este alcatuit din una sau mai multe functii, din care una este radacina sau
functie principala - adica nu poate lipsi si executia incepe automat cu ea. Aceasta se numeste
main.
Funcţiile comunică prin argumente: ele primesc ca parametri (argumente) datele de intrare,
efectuează prelucrările descrise în corpul funcţiei asupra acestora şi pot returna o valoare
(rezultatul, datele de ieşire).
Funcţiile pot fi descrise în cadrul aceluiaşi fişier, sau în fişiere diferite, care sunt testate şi
compilate separat, asamblarea lor realizându-se cu ajutorul linkeditorului de legături.
Subprogramul este prin urmare un ansamblu alcatuit din tiputi de date, variabile si
instructiuni scrise in vederea unei anumite prelucrari (calcule, citiri, scrieri), care se identifica
printr-un nume si care poate fi executat doar daca este apelat .
1 Definirea şi apelarea funcţiilor în C. În C noţiunea de funcţie este esenţială, deoarece asigură un
mecanism de abstractizare a controlului: rezolvarea unei părţi a problemei poate fi încredinţată unei
funcţii, moment în care suntem preocupaţi de ce face funcţia, fără a intra în detalii privind cum face
funcţia anumite operaţii. Însăşi programul principal este o funcţie cu numele main(), iar programul C este
reprezentat de o mulţime de definiri de variabile şi de funcţii.
Funcţiile pot fi clasificate în:
2. • funcţii care întorc un rezultat;
3. • funcţii care nu întorc nici un rezultat (similare procedurilor din Pascal).
Un program este compus din una sau mai multe funcţii, printre care si "main()" principala funcţie.
Întotdeauna execuţia unui program începe cu "main()". Când o funcţie este apelata (sau invocata) atunci
controlul programului este pasat funcţiei apelate. După ce aceasta îşi termina execuţia, atunci se pasează
înapoi controlul către principala funcţie.

Codul sursă C care descrie ce face o funcţie se numeşte "definiţia funcţiei". Aceasta are următoarea
formă generala:
tip nume_funcţie (lista_parametri_formali)
{
< declaraţia variabilelor locale, vizibile numai pentra această funcţie; >
< instrucţiuni executabile; >
return <rezultatul final>;
}

Principiile programării structurate. Programarea structurată are ca scop dezvoltarea unor


programe uşor de realizat în echipă, uşor de depanat şi de actualizat. Conceptul de subalgoritm
prevede ca orice problema poate apare ca o subproblema S a unei probleme mai complexe.
Algoritmul de rezolvare a problemei S devine in acest caz un subalgoritm pentru algoritmul de
rezolvare a problemei. Deci SUBPROGRAMUL va reprezinta parti identificabile prin nume
care se pot activa la cerere prin intermediul acetui nume. O parte din subprogram se contruieste
ca subprogram daca un algoritm cuprinde in mai multe locuri aceiasi secventa de operatii
executabila pentru aceleasi date sau pentru date diferite. In loc ca subprogramul sa cuprinda in
acelasi loc, acelasi grup de instructiuni, concepand grupul de intructiuni ca subprogram, el va
aparea in program o singura data si se va activa de mai multe ori. Partea respectiva de program
rezolva o subproblema din cele in care se descompune problema complexa.Apar deci câteva
principii de care un programator trebuie să ţină seama. Acestea se numesc principiile programării
structurate.
Primul principiu este modularizarea. În cadrul unor probleme complexe este necesară
descompunerea acestora în subprobleme mai simple, pentru care se pot scrie module de program
mai simple. Fiecare modul este independent de celelalte, în final ele interacţionând printr-un
program principal, un fel de interfaţă. Modulele pot fi implementate de programatori diferiţi din
cadrul unei echipe. Ele pot fi testate, modificate, depanate în mod independent, neafectând şi
celelalte module.
Modulele au aceeaşi structură ca şi programele principale, putând declara variabile atât în
module (numite variabile locale) cât şi în programul principal (numite variabile globale).
Modulele create sunt proceduri şi funcţii şi vor fi studiate în cadrul unui limbaj de programare.
Un al doilea principiu este structurarea datelor şi a prelucrărilor. Datele se pot grupa în structuri
de date aşa cum am aratat mai sus. Prelucrările asupra datelor se pot grupa şi ele în structuri
despre care vorbim în teorema Bohm-Jacopini.
Comunicarea între funcţii se face prin argumente şi valori returnate de funcţii. Comunicarea între
funcţii poate fi făcută şi prin intermediul variabilelor externe.
O metodă de a se schimba cu datele între funcţii se face prin argumentele funcţiei (lista-
parametri formali). Parantezele mici care urmează după numele funcţiei închid lista
argumentelor.
În limbajul C argumentele funcţiilor sunt transmise, de obicei, prin valoare. Aceasta
înseamnă că în C funcţia apelată primeşte valorile argumentelor sale într-o copie particulară de
variabile temporare (în realitate pe stivă).
Exemplul : suma a 2 matrici
#include<stdio.h>
#include<conio.h>
#define MAXLIN 100
#define MAXCOL 200

void citireMatrice(int lin, int col, int x[][MAXCOL]);


void afisareMatrice(int lin, int col, int x[][MAXCOL]);
void sumaMatrice(int, int, int[][MAXCOL], int[][MAXCOL], int[][MAXCOL]);

void main(void) {
int a[MAXLIN][MAXCOL], b[MAXLIN][MAXCOL], c[MAXLIN][MAXCOL];
int m, n;
clrscr();
//la intrare se introduce m=3 n=4
if(scanf("m=%d n=%d", &m, &n) != 2)
printf("Eroare la citirea dimensiunilor");
else {
printf("\nDimensiunile matricii(%d, %d)", m, n);
printf("\nMatricea a=\n");
citireMatrice(m,n,a);
puts("\nDupa citire: matricea a=");
afisareMatrice(m,n,a);
printf("\nMatricea b=\n");
citireMatrice(m,n,b);
puts("\nDupa citire: matricea b=");
afisareMatrice(m,n,b);
sumaMatrice(m,n,a,b,c);
puts("\nDupa citire: matricea c=");
afisareMatrice(m,n,c);
}
getch();
}
void citireMatrice(int lin, int col, int x[][MAXCOL]) {
int i, j;
for(i=0; i<lin; i++)
for(j=0; j<col; j++)
scanf("%d", &x[i][j]);
}
void afisareMatrice(int lin, int col, int x[][MAXCOL]) {
int i, j;
for(i=0; i < lin; i++) {
printf("\n");
for(j=0; j < col; j++)
printf("%d\t", x[i][j]);
}
}
void sumaMatrice
(int lin,int col,int x1[][MAXCOL],int x2[][MAXCOL],int x3[][MAXCOL]) {
int i, j;
for(i=0; i<lin; i++)
for(j=0; j<col; j++)
x3[i][j] = x1[i][j] + x2[i][j]; }
2.Condiţia problemei
Însuşirea tehnicilor moderne de elaborare a programelor complexe în C(cu subprograme
proprii) în baza problemelor din lucr. de laborator nr.3,4.

Listing-ul programului:
#include <iostream>
using namespace std;
void Afisare(int arr[40][40], int a, int b)
{
int r = a, c = b ;
for(int i = 0; i < r; i++)
{
cout << endl;
for(int j = 0; j < c; j++)
{
cout << " " << arr[i][j];
}
}
cout << endl;
}
void SchimbareaElementelor(int arr[40][40] ,int a ,int b)
{
int r = a, c = b ;
int r1 , c1;
char el;
cout << "Doresti sa modifici elementul ? T-da / F-nu" << endl;
cin >> el;
while( el == 'T')
{
// Primul element al matricei are coordonatele (0,0). Tine minte cand
numeri numerele
cout << "Introdu randul: ";
cin >> r1; // Alege randul unde se afla elementul care tre schimbat
cout << endl;
cout << "Introdu coloana: ";
cin >> c1; // Alege colana unde se afla elementul care tre schimbat
cout << endl;
cin >> arr[r1][c1];
for(int i = 0; i < r; i++)
{
cout << endl;
for(int j = 0; j < c; j++)
{
cout << " " << arr[i][j];
}
}
cout << endl;
cout << "Doresti sa modifici elementul ? ";
cin >> el;
}
// Afisarea matricei
for(int i = 0; i < r; i++)
{
cout << endl;
for(int j = 0; j < c; j++)
{
cout << " " << arr[i][j];
}
}
}
void SumaElementPozit(int arr[40][40] , int a, int b)
{
int r = a, c = b ;
int suma = 0;
for(int i = 0; i < r; i++)
{
cout << endl;
for(int j = 0; j < c; j++)
{
if( arr[i][j] > 0)
{
suma = suma + arr[i][j];
}
}
}
cout << "Suma tuturor numerelor naturale este egala cu: " << suma <<
endl;
}
void ElementeNule(int arr[40][40] , int a , int b )
{
int r = a, c = b ;
int k = 0;
for(int i = 0; i < r; i++)
{
cout << endl;
for(int j = 0; j < c; j++)
{
if(arr[i][j] == 0)
{
k++;
}
}
}
cout << "In matrice sunt " << k << " numere nule. " << endl;
}
int main()
{
int arr[40][40];
int r, c, q, z;
cout << "Introdu numarul de randuri: ";
cin >> r;
cout << endl;
cout << "Introdu numarul de coloane: ";
cin >> c;
cout << endl;

cout << "Introduceti matricea: " << endl;


for(int i =0; i < r; i++)
{
for(int j = 0; j < c; j++)
{
cin >> arr[i][j];
}
}
cout << "Pentru a accesa menu-ul este necesar sa tastati: 13 " << endl;
cin >> q;
while(z != 5)
{
cout << " Pentru a afisa matricea tastati: 1 " << endl;
cout << " Pentru a schimba elementele matricei tastati: 2 " << endl;
cout << " Pentru a observa suma elementelor pozitive tastati: 3 " << endl;
cout << " Pentru a vedea numarul elementelor nule tastati: 4 " << endl;
cout << " Pentru a iesi tastati: 5 " << endl;
cout << endl;
cin >> z;
if(z == 1)
{
//Afisarea(arr, r, c);
}
else if(z == 2)
{
SchimbareaElementelor(arr, r, c);
}
else if(z == 3)
{
SumaElementPozit(arr, r , c);
}
else if(z == 4)
{
ElementeNule(arr, r , c);
}
}
return 0;
}

După execuţia programului am obţinut următorul rezultat pe ecran:

Meniu:

Concluzii:În urma lucrării date de laborator am obținut abilități în lucrul cu


subrogramele,utilizarea acestora in lucrul cu tablourile cît unidimensionale atît și
bidimensionale.

Bibliografie
6. O. Catrina, I. Cojocaru, Turbo C++, ed. Teora 1993
7. V. Petrovici, Florin Goicea, Programarea in limbajul C. Eed. Teora 1999
8. Liviu Negrescu, ,,Limbajul C” ,volumul I_partea I-a si partea II-a9 9ditura MicroInformatica, Cluj-
napoca 2015
9. Б.Керниган, Д.Ритчи. Язык программирования Си. Санкт-Петербург, 2001,,, Brian Kernighan,
Dennis Ritchie ” The C Programming Language” este în l. română format electronic
10. Vlad Caprariu ”Ghid de utilizare Turbo C” Cluj - Napoca 1993.

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

  • Composite&Builder
    Composite&Builder
    Document8 pagini
    Composite&Builder
    Сергей Борта
    Încă nu există evaluări
  • Laborator-3 TMPS Borta
    Laborator-3 TMPS Borta
    Document7 pagini
    Laborator-3 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-2 TS
    Laborator-2 TS
    Document13 pagini
    Laborator-2 TS
    Сергей Борта
    Încă nu există evaluări
  • Laborator-5 TMPS Borta
    Laborator-5 TMPS Borta
    Document6 pagini
    Laborator-5 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-3 TMPS Borta
    Laborator-3 TMPS Borta
    Document7 pagini
    Laborator-3 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-2 TMPS Borta
    Laborator-2 TMPS Borta
    Document11 pagini
    Laborator-2 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-2 TMPS Borta
    Laborator-2 TMPS Borta
    Document11 pagini
    Laborator-2 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-5 TMPS Borta
    Laborator-5 TMPS Borta
    Document6 pagini
    Laborator-5 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-1 TMPS Borta
    Laborator-1 TMPS Borta
    Document10 pagini
    Laborator-1 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • LP6 Matlab
    LP6 Matlab
    Document8 pagini
    LP6 Matlab
    Сергей Борта
    Încă nu există evaluări
  • Laborator-4 TMPS Borta
    Laborator-4 TMPS Borta
    Document9 pagini
    Laborator-4 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-1 TMPS Borta
    Laborator-1 TMPS Borta
    Document10 pagini
    Laborator-1 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Lab1 Programarea
    Lab1 Programarea
    Document7 pagini
    Lab1 Programarea
    Сергей Борта
    Încă nu există evaluări
  • LAB3 Matlab
    LAB3 Matlab
    Document13 pagini
    LAB3 Matlab
    Сергей Борта
    Încă nu există evaluări
  • LAB4 Matlab
    LAB4 Matlab
    Document20 pagini
    LAB4 Matlab
    Сергей Борта
    Încă nu există evaluări
  • Lab 5
    Lab 5
    Document9 pagini
    Lab 5
    Сергей Борта
    Încă nu există evaluări
  • Laborator-4 TMPS Borta
    Laborator-4 TMPS Borta
    Document9 pagini
    Laborator-4 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator6,7 (Var1) Programarea
    Laborator6,7 (Var1) Programarea
    Document8 pagini
    Laborator6,7 (Var1) Programarea
    Сергей Борта
    Încă nu există evaluări
  • LAB2 Matlab
    LAB2 Matlab
    Document9 pagini
    LAB2 Matlab
    Сергей Борта
    Încă nu există evaluări
  • LAB1
    LAB1
    Document4 pagini
    LAB1
    Сергей Борта
    Încă nu există evaluări
  • Lab 3
    Lab 3
    Document8 pagini
    Lab 3
    Сергей Борта
    Încă nu există evaluări
  • Lab4 Programarea
    Lab4 Programarea
    Document6 pagini
    Lab4 Programarea
    Сергей Борта
    Încă nu există evaluări
  • TI183 BortaSergiu Lab2
    TI183 BortaSergiu Lab2
    Document4 pagini
    TI183 BortaSergiu Lab2
    Сергей Борта
    Încă nu există evaluări
  • Lab 5
    Lab 5
    Document9 pagini
    Lab 5
    Сергей Борта
    Încă nu există evaluări
  • Lab2 Programarea
    Lab2 Programarea
    Document14 pagini
    Lab2 Programarea
    Сергей Борта
    Încă nu există evaluări
  • PR Lab2
    PR Lab2
    Document5 pagini
    PR Lab2
    Сергей Борта
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document3 pagini
    Lab 1
    Сергей Борта
    Încă nu există evaluări
  • TI183 BortaSergiu Lab3
    TI183 BortaSergiu Lab3
    Document5 pagini
    TI183 BortaSergiu Lab3
    Сергей Борта
    Încă nu există evaluări
  • Lucrare de Laborator nr.1 Tema: Cercetarea Microclimatului La Posturile de Lucru
    Lucrare de Laborator nr.1 Tema: Cercetarea Microclimatului La Posturile de Lucru
    Document14 pagini
    Lucrare de Laborator nr.1 Tema: Cercetarea Microclimatului La Posturile de Lucru
    VeronikaMalkoki
    Încă nu există evaluări
  • Lab1 Pam
    Lab1 Pam
    Document9 pagini
    Lab1 Pam
    Ion Popescu
    100% (2)