RAPORT
la lucrarea de laborator nr. 5-6
la Programarea Calculatoarelor
Varianta 12
Chişinău 2020
Scopul lucrării
Obiectivele temei
1. Extras Teoretic
2. O functie este o parte denumita a programului care poate fi apelata din alte
parti ale programului atit de des, cit este nevoie. Conform consideraţiilor
teoretice funcţiile sunt un aspect important al programării, ce permit
încapsularea unor rutine in cadrul unor "cutii negre", astfel ca programatorul
care se foloseşte de anumite funcţii, elaborate de programator, trebuie sa
cunoască acţiunea lor şi modul in care sunt implementate, iar pentru cele din
bibliotecile standarde al limbajului C doar acţiunea lor, nu si modul in care
sunt implementate. Totodată, funcţiile permit structurarea programului pe
blocuri, separând astfel zonele de cod ce îndeplinesc aceleaşi acţiuni si
conferând o mai mare lizibilitate a codului.
Funcţiile mai pot fi clasificate în:
3. - funcţii care întorc un rezultat;
4. - funcţii care nu întorc nici un rezultat;
5. - funcţii care întorc mai mute rezultate.
6. Definiţia funcţiilor
7. Sintaxa definiţiei unei funcţii este următoarea:
8. Definiţia-funcţiei:
9. <clasă de memorie> tip-funcţie<opt> nume-funcţie(lista-parametri)
10.{ corp-funcţie }
11.unde lista-parametri:
12.declaraţie-parametru
13.declaraţie-parametru, lista-parametri
14.Corpul-funcţiei:
15.<declaraţiile variabilelor locale>; < <instrucţiuni> <instrucţiune-
compusă>>; <return rezultatul final>;
2.1. Noţiuni generale despre pointeri. Un pointer este o variabilă care conţine
adresa unei alte variabile. Pointerii sunt foarte mult utilizaţi în programe scrise în
C, pe de o parte pentru că uneori sunt unicul mijloc de a exprima un calcul, iar pe
de altă parte pentru că oferă posibilitatea scrierii unui program mai compact şi mai
eficient decît ar putea fi obţinut prin alte căi. Deoarece un pointer conţine adresa
unui obiect, cu ajutorul lui putem avea acces, în mod indirect, la acea variabilă
(obiect). Să presupunem că x este o variabilă de tip întreg şi px un pointer la
această variabilă. Atunci aplicând operatorul unar & lui x, instrucţiunea: px = &x;
atribuie variabilei px adresa variabilei x; în acest fel spunem că px indică
(pointează) spre x. Invers, dacă px conţine adresa variabilei x, atunci instrucţiunea:
y = *px;
Rezolvare
int tmp;
if(x > y)
{
tmp=x;
x=y;
y=tmp;
}
return (x+y)/2;
}
int x=20, y=8;
main()
{
msort(x,y);
printf("%d %d\n", x, y);
}
6.
#include <stdio.h>
main()
{ int sum = 0, card;
char answer[36];
srand( getpid()); /* рандом */
do
{ printf( "aveiti %d puncte. inca? ", sum);
if( *gets(answer) == 'n' ) break;
/* Altfel va fi prea puțin */
printf( " %d puncte\n",card = 6 + rand() % (11 - 6 + 1));
}
while((sum += card) < 21); /* SIC ! */
printf ( sum == 21 ? "puncte\n" :
sum > 21 ? "depășit\n":
"%d puncte \n", sum);
}
Acest program ia random numere pozitive de la 6 pana la 11,declarandunele ca niste
puncte.Compiland programul avem 0 puncte,daca mai dorim puncte apasam
enter,maximum de puncte care putem sal avem in program e setat <21.Cand intrecem
maximul de puncte,programul ne anunta ca am depasit.
7.
/* файл A.c */
int x=666; /*глоб.*/
main() {
f(3);
printf(" ::x = %d\n", x); g(2); g(5);
printf(" ::x = %d\n", x); }g(n) {
static int x=17;
/*видима только в g*/
printf("g::x = %2d g::n = %d\n", x++, n);
if(n) g(n-1); else x = 0; } /* файл B.c */ extern x; /*глобал*/ f(n){ /*локал функции*/ x+
+; /*глобал*/ {
int x; /*локал блока*/
x = n+1; /*локал*/
n = 2*x; /*локал*/ } x = n-1; /*глобал*/}
Programul dat printeaza la inceputul programului si sfarsitul lui numarul “7”.Acest
numar este setat prin f(3) unde 3 este n,iar in program numarul n adica 3 se aduna cu 1
apoi se inmulteste cu 2 si se scade cu 1.adica ((3+1)*2)-1=7.Iar intre numerele 7 sunt doua
coloane.In coloanal din stanga se printeaza numere de la 0 pana la 5 asa este dat in
program,iar coloanal din partea dreapta se printeaza numere de la 5 la 0 ,descrescator.
8.
#include <stdio.h>
// Desenarea unei bare orizontale compuse din n caractere
void bar (int n) { int i;
for (i=0;i<n;i++) putchar('#'); putchar('\n'); }
// Desenare histograma pe baza unui vector de intregi
void main () {
int a[24]={5,10,15,10,5},n=5,k;
clear(); // sterge ecran
for (k=0;k<n;k++)
bar (a[k]); // desenare bara k de lungime a[k]
}
10.
.....................................................................................................................................
Din lab3
12. Să se elaboreze algoritmul şi programul pentru următoarele: Să se
compună un algoritm şi să se scrie un program C pentru aflarea tuturor
numerelor naturale ce nu depăşesc numărul N>9999, considerat
cunoscut, şi sunt egale cu suma cuburilor cifrelor lui. Toate rezultatele să
se scrie într-un tablou care să fie afişat într-un mod clar.
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
int check(int x)
{
int value = x;
int cnt = 0;
while(value)
{
cnt += (int)pow(value % 10,3);
value /= 10;
}
int a[10005];
int n = 0;
int main()
{
for(int i = 0; i <= 9999; i++)
if( check(i))
a[n++] = i;
return 0;
}
Run
0 1 153 370 371 407
#include<stdio.h>
#include<math.h>
#include<time.h>
int main()
{
srand(time(NULL));
int n;
printf("Marimea tabloului : ");
scanf("%d", &n);
int a[n];
int i;
create_array(a, i, n);
printf("\n\n");
int j = 1;
int b[n];
int q = 0;
int o;
array_b(a, b, i, j, o, n, q);
int w[n];
array_w(a, w, i, j, o, n);
array_bw(b, w, i, j, n, q);
printf("Tabloul care se cere in conditie : \n\n");
print_array(b, i, n);
return 0;
}
void create_array(int a[100], int i, int n)
{
for(i = 0; i < n; i++)
{
a[i] = rand() % 10;
printf("%d ", a[i]);
}
}
void array_b(int a[100], int b[100], int i, int j, int o, int n, int q)
{
for(i = 0, j = 1, o = 0; o < n, i < n; i++, j++, o++)
{
b[o] = a[i] * a[j];
i = i + 1;
j = j + 1;
q++;
}
}
void array_w(int a[100], int w[100], int i, int j, int o, int n)
{
for(i = 0, j = 1,o = 0; o < n, i < n; i++, j++, o++)
{
w[o] = a[i] + a[j];
i = i + 1;
j = j + 1;
}
}
.....................................................................................................................................
Din lab4
return(0);
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void IntroMatrixA(int j,float(*a)[8])
{
printf("Introdu prima linie:");
for (j=0; j<8; j++)
{
scanf("%f",&a[0][j]);
}
}
void StructureA(int j,int i,float(*a)[8])
{
for (j=0; j<8; j++)
{
for (i=1; i<8; i++)
{
a[i][j]=pow(a[0][j],i+1);
}
}
}
void Afisarea(int i,int j,float(*a)[8])
{
for (i=0; i<8; i++)
{
printf("\n");
}
}
}void Afisarea1(int i1,int j1,float(*b)[8])
{for (i1=0; i1<8; i1++)
{
printf("\n");
}
}}
void StructureB(int j1, int i1, float (*b)[8])
{
for (j1=0; j1<8; j1++)
{
b[i1][j1]=1;
}
}
void StructureB1(int j1,float (*b)[8],float (*a)[8])
{
for (j1=0; j1<8; j1++)
{
b[1][j1]=a[0][j1];
}
}
void StructureB2(int j1, int i1, float (*b)[8],float (*a)[8])
{
for (j1=0; j1<8; j1++)
{
for (i1=2; i1<8; i1++)
{
b[i1][j1]=pow(b[1][j1],i1);
}
}
printf("\n");
}
void StructureC(int i, int j,float (*c)[8],int k, float (*a)[8],float (*b)[8])
{
for(i=0; i<=8; i++)
{
for(j=0; j<=8; j++)
{
c[i][j]=0;
for(k=0; k<=8; k++)
c[i][j]=c[i][j]+3*a[i][k]*b[k][j];
}
}
}
void EMax(int i,int j,float max, float (*c)[8])
{
for (i=0; i<8; i++)
{
for (j=0; j<8; j++)
{
if ((i+j)>=8 && i>j && (max<c[i][j]))
max=c[i][j];
}
}
printf("\n \nelementul max din triunghiul hasurat=%f",max);
}
int main()
{
int i,j,s,n,m,i1,j1,k;
float a[8][8];
float b[8][8];
float c[8][8];
IntroMatrixA(j,a);
StructureA(j,i,a);
Afisarea(i,j,a);
StructureB(j,i,b);
StructureB1(j,b,a);
StructureB2(j,i,b,a);
Afisarea1(i,j,b);
StructureC(i,j,c,k,a,b);
printf("\n");
Afisarea(i,j,c);float max1=c[0][0];
EMax(i,j,max1,c);
return (0);
}
Ex.6 Anexa 4
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void Random(int (*c)[100], int i, int j, int n)
{
srand(time(NULL));
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
c[i][j] = rand() % 9-0;
}
}
}
void Afisare(int (*c)[100], int i, int j, int n)
{
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
printf("%d\t", c[i][j]);
}
printf("\n");
}
}
void Min(int i,int n, int min,int (*c)[100])
{
for (i=0; i<n; i++)
{
if (min>c[i][0])
{
min=c[i][0];
}
}
printf("\n Min=%d",min);
}
void Suma(int i,int n, int (*c)[100])
{
int s=0;
for (i=0; i<n; i++)
{
s+=c[i][3];
}
printf("\n Suma coloanei 4=%d",s);
}
void MaxSecGalben(int i,int n,int j, int max,int (*c)[100])
{
for (i=0; i<n; i++)
{
for (j=1; j<n; j=j+3)
if (max<c[i][j])
{
max=c[i][j];
}
}printf("Max din Galben= %d",max);
}
void MaxSecVerde(int i,int n,int j, int max,int (*c)[100])
{
for (i=0; i<n; i+=2)
{
for (j=0; j<n; j=j+1)
if (max<c[i][j])
{
max=c[i][j];
}
}printf("Max din Verde= %d",max);
}
int main()
{
int i,j,n,max,min,s;
int c[100][100];
printf("Inroduceti numarul liniilor si coloanelor=");
scanf("%d",&n);
Random(c,i,j,n);
Afisare(c,i,j,n);
Min(i,n,min,c);
Suma(i,n,c);
MaxSecGalben(i,n,j,max,c);
MaxSecVerde(i,n,j,max,c);
return (0);
}
Concluzie