0% found this document useful (0 votes)
38 views7 pages

Sem 11 Subprograme

The document describes several problems involving the use of subprograms (functions) in C programs to: 1. Sort a vector using selection sort and subprograms for reading, displaying, and sorting the vector. 2. Calculate the scalar product of two vectors in three different ways using subprograms. 3. Calculate the matrix product of two matrices using subprograms for reading, displaying, and calculating the product. 4. Calculate the sum of elements below the secondary diagonal (excluding the diagonal) of a matrix using subprograms for reading, displaying the matrix, and calculating the sum in two different ways.

Uploaded by

patriciasoare
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
38 views7 pages

Sem 11 Subprograme

The document describes several problems involving the use of subprograms (functions) in C programs to: 1. Sort a vector using selection sort and subprograms for reading, displaying, and sorting the vector. 2. Calculate the scalar product of two vectors in three different ways using subprograms. 3. Calculate the matrix product of two matrices using subprograms for reading, displaying, and calculating the product. 4. Calculate the sum of elements below the secondary diagonal (excluding the diagonal) of a matrix using subprograms for reading, displaying the matrix, and calculating the sum in two different ways.

Uploaded by

patriciasoare
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 7

Seminar 11

Subprograme. Alocare statica de memorie

1. Realizati programul C care sorteaza un vector prin metoda selectiei ( cu 2 for-uri) folosind subprograme
pentru:
- citirea vectorului
- afisarea vectorului
- sortare vector.

Exemplu:
Dati dimensiune vector: 5 vectorul sortat este:
p[0]=4 p[0]=0
p[1]=3 p[1]=1
p[2]=2 p[2]=2
p[3]=1 p[3]=3
p[4]=0 p[4]=4

1. Biblioteci: stdio.h, conio.h


2. Functie pentru citire vector (parametrii de intrare (IN): p,m; parametrii de iesire (OUT): - )

void citire (float p[10], int m) //sau int p[ ]


{
int i;
for (i=0;i<m;i++)
{
printf("p[%d]=", i);
scanf("%f", &p[i]);
}
}

3. Functie de afisare vector (parametrii de intrare (IN): p,m; parametrii de iesire (OUT): - ):

void afisare (float p[10], int m)


{ int i;
for (i=0;i<m;i++)
printf("p[%d]=%6.2f\t", i, p[i]);
}
4. Functie de sortare vector (parametrii de intrare (IN): p,m; parametrii de iesire (OUT): p ):
void sortare (float p[10], int m)
{ int i,j; float aux;
for (i=0;i<m-1;i++)
for (j=i+1;j<m;j++)
if (p[i]>p[j]) {
aux=p[i];
p[i]=p[j];
p[j]=aux;
}
}

1
5. Functia main
int main()
{ - declarare variabile: int n; float v[10]
- citire numar de elemente vector (n);
- apelare functii de citire si afisare vector:
citire(v,n);
afisare (v,n);

- apelare functie de sortare vector:


sortare(v,n);
- apelare functie de afisare vector ( pentru a afisa vectorul sortat)
afisare(v,n);
}

Pb. 2 Produs vectorial (3 cazuri)


1. Biblioteci: stdio.h, conio.h, malloc.h
2. Functie de citire vector ( void CitireV(int p[10], int m) )
3. Functie de afisare vector ( void AfisareV (int p[10], int m) )
4. Cazuri pentru calcul produs vectorial
a. //CAZ I - transfer prin valoare
void ProdusVect1(int p[10], int q[10], int n, int pv[10])
{
int i;
for (i=0;i<n;i++)
pv[i]=p[i]*q[i];

}
b. //CAZ II - rezultatul se intoarce prin numele functiei la apel
int *ProdusVect3(int p[10], int q[10], int n, int pv[10])
{
int i;
for (i=0;i<n;i++)
pv[i]=p[i]*q[i];

return (pv);
}

c. //CAZ III - simulare transfer prin adresa


void ProdusVect2(int p[10], int q[10], int n, int **pv)
{ int i;
for (i=0;i<n;i++)
*(*pv+i)=p[i]*q[i];
}

2
5. In functia main:
{
o Declarare variabile (int) : p1[10], p2[10], p3[10], *p4, n;
o Citire nr elemente vector (n);
o Apelare functii de citire si afisare vector p1 si p2 : (exp. pt. p1: CitireV(p1,n); AfisareV (p1,n); )
o Apel functii pentru calcul produs vectorial

//CAZ I - prin valoare


ProdusVect1 (p1,p2,n,p3);
AfisareV(p3,n);

//CAZ II - prin numele functiei


ProdusVect3 (p1,p2,n,p3);
AfisareV(p3,n);

//CAZ III - simuland transferul prin adresa *


p4=(int*)malloc(n*sizeof(int));
ProdusVect2 (p1,p2,n,&p4);
AfisareV(p4,n);
free(p4);

Pb. 3 Produs matrice


Exemplu
Nr. linii m1 - m: 3
Nr col. m1/Nr linii m2 - n: 2
Nr. col m2 – p: 3
mat[0][2]=4
mat[0][0]=1 mat[1][0]=5
mat[0][1]=2 mat[1][1]=6
mat[1][0]=3 mat[1][2]=7
mat[1][1]=4
mat[2][0]=5 mat[0][0]=2 mat[0][1]=3 mat[0][2]=4
mat[2][1]=6 mat[1][0]=5 mat[1][1]=6 mat[1][2]=7

mat[0][0]=1 mat[0][1]=2
mat[1][0]=3 mat[1][1]=4
mat[2][0]=5 mat[2][1]=6 mat[0][0]=12 mat[0][1]=15 mat[0][2]=18
mat[1][0]=26 mat[1][1]=33 mat[1][2]=40
mat[0][0]=2 mat[2][0]=40mat[2][1]=51mat[2][2]=62
mat[0][1]=3

1. Biblioteci: stdio.h, conio.h


2. Functie de citire matrice:

void citireMat (int mat[][10], int m, int n)


{

3
int i,j;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
printf("mat[%d][%d]=", i,j);
scanf("%d", &mat[i][j]);
}
}

3. Functie de afisare matrice


void afisareMat (int mat[][10], int m, int n)
{
int i,j;
for (i=0;i<m;i++)
{ for (j=0;j<n;j++)
printf("mat[%d][%d]=%d", i,j, mat[i][j]);
printf("\n");
}
}

4. Functie de calcul pentru produsul a doua matrice

void ProdusMat (int m1[][10], int m2[][10], int m, int n, int p, int m3[][10])
{ int i,j,k;
for (i=0;i<m;i++)
for(j=0;j<p;j++)
{ m3[i][j]=0;
for (k=0;k<n;k++)
m3[i][j]=m3[i][j] + m1[i][k]*m2[k][j];
}
}

5. In functia main:
{
- Declararea variabilelor (int): int m1[10][10], m2[10][10], m,n,p, m3[10][10];
- Se citesc dimensiunile matricelor (Nr. linii m1 – m; Nr col. m1/Nr linii m2 – n, Nr. Col. M2 - p);
- Apelare functii de citire si afisare pentru m1 si m2; (exp. pt. m1: citireMat(m1,m,n);
afisareMat(m1,m,n); )
- Apelare functie pentru calculul produsului:
ProdusMat(m1,m2,m,n,p,m3);
- Apelare functie pentru afisarea matricei rezultat:
afisareMat (m3,m,p);
}

4
Pb. 4 Scrieti programul C care sa calculeze suma elementelor de sub diagonala secundara (exclusiv
diagonala) dintr-o matrice. Se vor folosi subprograme pentru:
- Citirea matricii
- Afisare matricii
- Calcul suma elemente (prin adresa si prin numele functiei la apel)

1. Biblioteci: stdio.h, conio.h


2. Functie pentru citirea matricei ( void citireMat (int mat[][10], int m, int n) )
3. Functie pentru afisarea matricei ( void afisareMat (int mat[][10], int m, int n) )
4. Functie pentru calculul sumei elem de sub diag secundare (exclusiv)

//CAZ I - prin valoare, simuland transferul prin adresa *


void SumaSubDiagSecExclusiv1 (int m1[][10], int m, int *s)
{ int i,j;
*s=0;
for (i=1;i<m;i++)
for(j=(m-i);j<m;j++)
*s=*s+m1[i][j];
}

//CAZ II - rezultatul se intoarce prin numele functiei la apel


int SumaSubDiagSecExclusiv2 (int m1[][10], int m)
{ int i,j, s;
s=0;
for (i=1;i<m;i++)
for(j=(m-i);j<m;j++)
s=s+m1[i][j];
return (s);
}

5. In functia main:
{
- Declarare de variabile (int): m1[10][10], m2[10][10], m,n,sum;
- Citire dimensiuni matrice (m si n );
- Apel functie de citire si afisare matrice
- Apel functie de calcul suma elemente
//CAZ I - prin valoare, simuland transferul prin adresa *
SumaSubDiagSecExclusiv1 (m1, m, &sum);
printf("Suma este: %d", sum);

//CAZ II - rezultatul se intoarce prin numele functiei la apel


printf ("Suma este %d", SumaSubDiagSecExclusiv2 (m1,m));
}

5. Scrieti programul C care determina liniile unei matrice cu elemente în ordine crescatoare.
Rezultatul va fi retinut intr-un vector. Se vor folosi subprograme pentru: Citire matrice, Afisare
matrice, Afisare vector, Verificare daca o linie are elementele in ordine crescatoare, Creare vector rezultat cu
numarul liniilor care au elementele in ordine crescatoare.

5
Exemplu
Dati dimens linii: 3
Dati dimens col: 3
matrice alocata static
m1[0][0]=3
m1[0][1]=2 m1[0][0]=3 m1[0][1]=2 m1[0][2]=1
m1[0][2]=1 m1[1][0]=1 m1[1][1]=4 m1[1][2]=5
m1[1][0]=1 m1[2][0]=7 m1[2][1]=8 m1[2][2]=9
m1[1][1]=4
m1[1][2]=5 Rezultat:
m1[2][0]=7 p[0]=1 (linia 1)
m1[2][1]=8 p[1]=2 (linia 2)
m1[2][2]=9

Indicatii
- biblioteci: stdio.h, conio.h
- functie de citire matrice
- functie de afisare matrice
- functie de afisare vector
- functie care verificare daca o linie are elementele in ordine crescatoare

int VerifSortLinie (int p[], int m) //intoarce 1 daca linia e sortata si 0 daca nu e sortata
{
int i, b=1;
for (i=0;i<m-1;i++)
if (p[i]>p[i+1])
{b=0;
break;
}
return b; }
- functie pentru crearea vectorului rezultat ce contine numarul liniilor care au elementele in ordine
crescatoare. In cadrul acestei functii este apelata si functia VerifSortLinie ()

void VerifLiniiMatriceStatic (int m1[][20], int m, int n, int r1[], int *dim_r1)
{ int i,j;
*dim_r1=0;
for (i=0;i<m; i++)
if (VerifSortLinie (m1[i],m)==1)
{ r1[*dim_r1]= i;
*dim_r1=*dim_r1+1; //(*dim_r1)++;
} }
- in functia main:
o declarare variabile intregi: rez2[20], matr2[20][20], m, n, dim_rez2;
o citire dimensiuni matrice (m si n)
o apelare functie pentru citire matrice alocata static:
o apelare functie afisare matrice
o apelare functie care obtine numarul liniilor
VerifLiniiMatriceStatic(matr2, m, n, rez2, &dim_rez2);

6
o afisare rezultat (apelare functia care afisaza un vector folosind parametrii aferenti,
respectiv vectorul creat si dimensiunea obtinuta)
afisareV(rez2,dim_rez2);

You might also like