Sunteți pe pagina 1din 23

Ministerul Educaţiei, Culturii și Cercetării al Republicii

Moldova

Universitatea Tehnică a Moldovei


Departamentul Tehnologia Informatiei

RAPORT

Lucrarea de laborator nr. 5-6 la Programarea Calculatoarelor

Chişinău – 20XX
LUCRAREA DE LABORATOR Nr. 5 ,6
Tema: Tehnicile prelucrării tablourilor, utilizînd subprograme
Scopul lucrării: însuşirea tehnicilor de algoritmizare şi programare
cu subprograme în prelucrarea tablourilor uni- și bidimensionale în
C.
Obiectivele temei :
1. Aprofundarea cunoştinţelor în limbajul şi mediul TurboC şi
perfecţionarea tehnicii de programare cu
subprograme în prelucrarea tablourilor uni- și bidimensionale.
2. Dezvoltarea procedeelor de algoritmizare şi progamare prin
descompunerea problemei în module
autonome care, apoi, vor fi reprezentate prin module de program
pentru prelucrarea tablourilor uni- și
bidimensionale în C după principii comune cu apeluri multiple,
analizând soluţiile stereotipe şi cele
eficiente.
3. Însuşirea tehnicilor eficiente de parcurgere, căutare, schimbare
şi ordonare a structurilor şi calculul
conform cunoştinţelor obţinute din matematică şi în baza lucrărilor
precedente într-un program complex,
alcătuit după principiile top-down.
4. Llab. 5 se analizează testele din Anexa 2,3. și se preia variantele
problemelor din Llab. 3 și se transformă
în programe cu funcții proprii după stil vechi și nou.
5. Llab. 6 se preia variantele problemelor din Llab. 4 și se
transformă în programe cu funcții proprii definite ca “proceduri” în
C cu transmiterea argumentelor funcțiilor în câteva moduri.
Totodată se aplică și la soluționarea problemelor din Anexa 4.

Anexa 2. Teste de verificre ale cunostintelor:


Ex 3
Programul afișează numerele 2 15 33
#include <stdio.h>
int a=2, b=13, c;
int f(x, y, z) int x, *y, z;
{ *y += x; x *= *y; z--; return (x + z - a); }
main(){ c=f(a, &b, a+4); printf("%d %d %d\n",a,b,c); }

Ex 4
Greșeală în program nu se observă. Schimbări nu sunt necesare
deoarece nu este eroare.
#include <stdio.h>
char *val(int x){ char str[20];
printf(str, "%d", x);
return str; }
void main(){ int x = 5;
char *s = val(x);
printf("The values:\n");
printf("%d %s\n", x, s); }
Ex 6
Programul afișează valori diferite de puncta, și mereu le adaugă
până ce depășești limita.
#include <stdio.h>
main(){ int sum = 0, card; char answer[36];
srand( getpid());
do{ printf( "Aveti %d puncte. Inca?", sum);
if( *gets(answer) == 'n' ) break;

printf( " %d puncte\n",


card = 6 + rand() % (11 - 6 + 1));
} while((sum += card) < 21);
printf ( sum == 21 ? "puncte\n" : sum > 21 ? "Ati depasit
depasit\n": "%d puncte \n", sum);
return 0;
}
Ex 8
Programul afișează niște bare prin intermediul simbolului #
#include <stdio.h>
void bar (int n) { int i;
for (i=0;i<n;i++) putchar('#'); putchar('\n'); }

void main () {
int a[24]={5,10,15,10,5},n=5,k;
for (k=0;k<n;k++)
bar (a[k]);
}
Ex 9
Programul afișează valorile 1.0 și 4.0
#include <stdio.h>

void minmax ( float x[],int n,float* pmin, float* pmax) {


float xmin,xmax; int i;
xmin=xmax=x[0];
for (i=1;i<n;i++) { if (xmin > x[i]) xmin=x[i]; if (xmax=x[i]) xmax=x[i]; }
*pmin=xmin; *pmax=xmax;
}

void main () { float a[]={3,7,1,2,8,4}; float a1,a2;


minmax (a,6,&a1,&a2); printf("%f %f \n",a1,a2);
}
Ex 10
Programul afișează cifra sau numărul dorit în formă de matrice.
#include <stdio.h>
void matrunit (float u[30][30], int n) {
int i,j;
for (i=0;i<n;i++) {
for (j=0;j<n;j++) u[i][j]=100;}
}

void scrmatr (float a[][30], int n) { int i,j;


for (i=0;i<n;i++) {
for (j=0;j<n;j++) printf ("%4.0f",a[i][j]); printf("\n"); }
}
\
void main () {
float x[30][30]; int n;
for (n=2;n<=10;n++) { matrunit(x,n); scrmatr(x,n); getchar();
}
}

Ex 13
Programul calculează Vectorul și Vectorul Ordonat al unui număr
introdus.
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int a[500],n;

int cit(int n,int *a)


{
int i;
rand();
for(i=0;i<n;i++)
a[i]=rand();
return 0;
}
int afis(int n,int *a)
{
int i;
for(i=0;i<n;i++)
printf(" %d",a[i]);
return 0;
}

int fo(int n,int *a)


{
int i,j,aux;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j])
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
for(i=0;i<n;i++)
printf(" %d",a[i]);
return 0;
}

void main()
{
system("cls");
printf("n=");
scanf("%d",&n);
cit(n,a);
printf("\nVectorul este\n\n");
afis(n,a);
printf("\nVectorul ordonat este\n\n");
fo(n,a);
getch();
}

Anexa 3
P3.2
#include <stdio.h>
int checkPrime(int n);
int main() {
int n, i, flag = 0;
printf("Introduceti un numar : ");
scanf("%d", &n);
for (i = 2; i <= n / 2; ++i) {
if (checkPrime(i) == 1) {
if (checkPrime(n - i) == 1) {
printf("%d = %d + %d\n", n, i, n - i);
flag = 1;
}
}
}
if (flag == 0)
printf("Numarul %d nu se poate calcula ca suma a doua
numere prime", n);
return 0;
}
int checkPrime(int n) {
int i, isPrime = 1;
for (i = 2; i <= n / 2; ++i) {
if (n % i == 0) {
isPrime = 0;
break;
}
}
return isPrime;
}
P3.4
#include <stdio.h>
int find_maximum(int[], int);

int main() {
int c, array[100], size, location, maximum;

printf("Introduceti un numar : ");


scanf("%d", &size);

printf("Introduceti %d numere : \n", size);

for (c = 0; c < size; c++)


scanf("%d", &array[c]);

location = find_maximum(array, size);


maximum = array[location];
printf("Elementul maxim este localizat in vectorul : %d si are
valoarea : %d.\n", location + 1, maximum);
return 0;
}

int find_maximum(int a[], int n) {


int c, index = 0;

for (c = 1; c < n; c++)


if (a[c] > a[index])
index = c;

return index;
}

P3.6
Prin Recursie :
#include<stdio.h>
int recSearch(int arr[], int l, int r, int x)
{
if (r < l)
return -1;
if (arr[l] == x)
return l;
if (arr[r] == x)
return r;
return recSearch(arr, l+1, r-1, x);
}
int main()
{
int arr[] = {12, 34, 54, 2, 3}, i;
int n = sizeof(arr)/sizeof(arr[0]);
int x = 3;
int index = recSearch(arr, 0, n-1, x);
if (index != -1)
printf("Elementul %d este prezent in vectorul %d", x, index);
else
printf("Elementul %d nu este prezent", x);
return 0;
}
Prin metoda Iterativă :
#include<stdio.h>
int iterativeBsearch(int A[], int size, int element);
int main() {
int A[] = {0,12,6,12,12,18,34,45,55,99};
int n=55;
printf("Elementul %d este prezent in vectorul %d
\n",n,iterativeBsearch(A,10,n));
return 0;
}
int iterativeBsearch(int A[], int size, int element) {
int start = 0;
int end = size-1;
while(start<=end) {
int mid = (start+end)/2;
if( A[mid] == element) {
return mid;
} else if( element < A[mid] ) {
end = mid-1;
} else {
start = mid+1;
}
}
return -1;
}

P3.15
#include <stdio.h>

void getMatrixElements(int matrix[][10], int row, int column) {

printf("\nIntroduceti elementele : \n");

for (int i = 0; i < row; ++i) {


for (int j = 0; j < column; ++j) {
printf("Introduceti a%d%d: ", i + 1, j + 1);
scanf("%d", &matrix[i][j]);
}
}
}
void multiplyMatrices(int first[][10],
int second[][10],
int result[][10],
int r1, int c1, int r2, int c2) {
for (int i = 0; i < r1; ++i) {
for (int j = 0; j < c2; ++j) {
result[i][j] = 0;
}
}
for (int i = 0; i < r1; ++i) {
for (int j = 0; j < c2; ++j) {
for (int k = 0; k < c1; ++k) {
result[i][j] += first[i][k] * second[k][j];
}
}
}
}

void display(int result[][10], int row, int column) {

printf("\nRezultatul este :\n");


for (int i = 0; i < row; ++i) {
for (int j = 0; j < column; ++j) {
printf("%d ", result[i][j]);
if (j == column - 1)
printf("\n");
}
}
}

int main() {
int first[10][10], second[10][10], result[10][10], r1, c1, r2, c2;
printf("Introduceti randurile si coloana pentru prima matrice: ");
scanf("%d %d", &r1, &c1);
printf("Introduceti randurile si coloana pentru a doua matrice: ");
scanf("%d %d", &r2, &c2);

while (c1 != r2) {


printf("Introduceti din nou randuri si coloane.\n");
printf("Introduceti randurile si coloana pentru prima matrice: ");
scanf("%d%d", &r1, &c1);
printf("Introduceti randurile si coloana pentru a doua matrice:
");
scanf("%d%d", &r2, &c2);
}
getMatrixElements(first, r1, c1);
getMatrixElements(second, r2, c2);
multiplyMatrices(first, second, result, r1, c1, r2, c2);
display(result, r1, c2);

return 0;
}
Anexa 4
Ex 5
#include <stdio.h>

int main()
{
int m, n, c, d, matrix[10][10], transpose[10][10];

printf("Introduceti nr. randuri si coloane ale matricei.\n");


scanf("%d%d", &m, &n);
printf("Introduceti elementele matricei : \n");

for (c = 0; c < m; c++)


for (d = 0; d < n; d++)
scanf("%d", &matrix[c][d]);
for (c = 0; c < m; c++)
for (d = 0; d < n; d++)
transpose[d][c] = matrix[c][d];
printf("Rezultatul transpunerii matricei este : \n");

for (c = 0; c < n; c++) {


for (d = 0; d < m; d++)
printf("%d\t", transpose[c][d]);
printf("\n");
}
return 0;
}

Ex 8
# include <stdio.h>
# define max 10
int *maxmin(int ar[], int v);
int main()
{
int arr[max];
int n,i, *p;
printf("Introduceti nr. de valori : ");
scanf("%d",&n);
printf("Introduceti %d valori\n", n);
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
p=maxmin(arr,n);
printf("Minimul este: %d\n",*p++);
printf("Maximul este %d\n",*p);
}
int *maxmin(int arra1[], int v)
{
int i;
static int result_mm[2];
result_mm[0]=arra1[0];
result_mm[1]=arra1[0];
for (i=1;i<v;i++)
{
if(result_mm[0] > arra1[i])
result_mm[0]=arra1[i];
if(result_mm[1]< arra1[i])
result_mm[1]= arra1[i];
}
return result_mm;
}
Ex 10
#include <stdio.h>
int checkPrimeNumber(int n);
int main() {
int n1, n2, i, flag;
printf("Introduceti doua intervale : ");
scanf("%d %d", &n1, &n2);
printf("Numerele prime dintre %d si %d sunt : \n\n", n1, n2);
for (i = n1 + 1; i < n2; ++i) {

flag = checkPrimeNumber(i);

if (flag == 1)
printf("%d ", i);
}
return 0;
}
int checkPrimeNumber(int n) {
int j, flag = 1;
for (j = 2; j <= n / 2; ++j) {
if (n % j == 0) {
flag = 0;
break;
}
}
return flag;
}

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