Sunteți pe pagina 1din 52

Universitatea Tehnica a Moldovei

Catedra Sisteme Optoelectronice

PROGRAMARE
Lucrari de laborator

pentru studentii grupelor IMT-071.., SOE-071.. sectia de zi. a/u. 2007-2008

Elaborat lector superior Sergiu G. Istrati

Semestrul I
1. Programe liniare in C++ (indrumar N1216, pagi.5)
2.
2.1 Programe ramificate in C++ (indrumar N1216, pagi.6)
2.2 Programe ramificate in C++ (indrumar N892, pagi.18)
3.
3.1 Prelucrarea masivelor unidimensionale in C++ (indrumar N1216, pagi.9)
3.2 Prelucrarea masivelor unidimensionale in C++ (indrumar N1216, pagi.12)
4.
4.1 Prelucrarea masivelor bidimensionale in C++ (indrumar N1216, pagi.15)
4.2 Prelucrarea masivelor bidimensionale in C++ (indrumar N1216, pagi.17)
5.
5.1 Prelucrarea caracterelor in C++ ((indrumar N1216, pagi.25)
5.2 Prelucrarea sirurilor de caractere in C++ (indrumar N1216, pagi.27)
Semestrul II
6. Structuri in C++ (indrumar N1216, pagi.30)
7. Functii in C++ (indrumar N1216, pagi.37)
8. Fisiere in C++ (indrumar N1216, pagi.42)
9. Meniuri in C++ (indrumar N1219, pagi.5)
10. Programe liniare si ramificate in C++Builder
11.Componente VCL. C++Builder
Indrumarele metodice in biblioteca facultatii:
N 891 - Ciclu de prelegeri la disciplina Programare. Limbajul Pascal.
N 1244 - Ciclu de prelegeri la disciplina Programare. Limbajul C.
N 1216 - ndrumar metodic privind ndeplinirea lucrrilor de laborator.
N 892 - ndrumar metodic privind ndeplinirea lucrrilor individuale.
N 1219 - ndrumar metodic privind ndeplinirea lucrrii de curs.

Chisinau 2006
PDF created with pdfFactory Pro trial version www.pdffactory.com

Lucrarea de laborator nr. 1.


Tema: Programe liniare in C++
De calculat valoarea expresiei:
Nr.
var

Formula de calcul
A=

A=|x y / x 3 y / x | ;

2
3
4
5
6
7

2 cos( x pi / 6)
1 / 2 + sin 2 y

z2
; B=1+
3 + z2 /5
y z /( y x)
f=(y-x)
1 + ( y x) 2

x2 x3 x4
+
+
; e=x(sinx 3 + cos 2 y )
2
3
4
bt
Y=e sin( at + b) | bt + a | ; s=bsin(at 2 cos 2t ) 1
S=1+x+

W= x 2 + b b 2 sin 3 ( x + a ) / x ; y=cos 2 x 3 x / a 2 + b 2
bx 2 a
S=x tg ( x + b) + a / x + b ; Q= ax
;
e 1
R=x 2 ( x + 1) / b sin 2 ( x + a ) ; s= xb / a + cos 2 ( x + b) 3
3

x2
+ cos( x + b) 3
a
3
F= m * tg (t )+ | c * sin( t ) | ; z=m cos( bt*sin(t) )+c
Y=sin 3 ( x 2 + a) 2 x / b ; z=

8
9

a
; d=a e a cos(bx / a )
sin ( x / a)

10

Y=b tg 2 x

11

F=ln(a+x 2 ) sin 2 ( x / b) ; z=e cx

12
13
14
15
16

Y=

x+ x+a
x | xb|

a 2 x + b x cos(a + b) x
; r= x 2 + b b 2 sin 3 ( x + a ) / x
x +1

Z= ax sin 2 x + e 2 x ( x + b) ; w=cos 2 x 3 x / a 2 + b 2
a 2 x + e x cos bx
; f=e 2 x ln( a + x) b 3 x ln( b x )
x
bx e sin bx + 1
sin x
Z=
cm ln mx ; s=e ax x + 1 + e bx x + 1.5
2
2
1 + m sin x
U=

C=ln (x+7

1.5 cos 2 x
|x+a|
) ; D=
3tgx
| x+b|

Exemplu de program:
De calculat valoarea expresiei: C=ln (x+7

1.5 cos 2 x
|x+a|
;
) ; D=
3tgx
| x+b|

#include<stdio.h>
#include<conio.h>
PDF created with pdfFactory Pro trial version www.pdffactory.com

#include<math.h>
void main (void) {
int x,a,b; float c,d;
clrscr();
printf("Culegeti valorile x,a,b:\n");
scanf("%d%d%d",&x,&a,&b);
c=log(x+7*sqrt(abs(x+a)/abs(x+b)));
d=1.5*pow(cos(x),2)/3*tan(x);
printf("Rezultatul: c=%f d=%f",c,d);
getch();}

Lucrarea de laborator nr. 2 Tema: Programe ramificate


Problema 1.
De calculat valoarea funciei, n dependen de condiie:
Nr.
var.
1

Funcia

Condiia

at 2 ln t

Y= 1

at cos
bt
e
x 2 7 x 2

Y= ax 3 + 7 x

ln( x + 7 x )
ax 2 + bx + c

W= a / x + x 2 + 1

2
(a + bx ) / x + 1
x 2 7 / x 2

Q= ax + 7 x

ln( x + 7 | x + a | )
1.5 cos 2 x

1.8ax

Y=

2
( x 2) + 6
3tgx

x3 x a

W= x sin ax
e ax cos ax

1 t 2
t<1
t>2

PDF created with pdfFactory Pro trial version www.pdffactory.com

x<1.3
x=1.3
x1.3
x<1.2
x=1.2
x>1.2
x<1.4
x=1.4
x>1.4
x<1
x=1
1<x<2
x2
x>a
x=a
x<a

bx ln( bx )

Q= 1

bx + ln( bx)

b*x<1
b*x=1
b*x>1

sin x ln x
Y= 2

cos x
ln( x + 1)
F= 2

sin | ax |
(ln 3 x + x 2 ) / x + t

Z= x + t + 1 / x

cos x + t sin 2 x

a+b

e x + cos x

S= (a + b) /( x + 1)

e + sin x

a ln x + 3 | a x |
Y=

2a cos x + 3 x 2
a

2
i + bi + c

W= i

+ 3
ai bi

i +1
)
a sin(
n
Z=

cos(i + 1 )

x>3.5
x 3.5

9
10

11

12

13

14

15

16

at 2 + b sin t + 1

W= at + b

2
at cos t + 1
ex ex
x( 2 )

Y= 4

2
x + 3x + 2

10

Exemplu de program:
De calculat valoarea funciei, n dependen de condiie:

PDF created with pdfFactory Pro trial version www.pdffactory.com

x>1
x1
x<0.5
x=0.5
x>0.5
x<2.8
2.8 x <6
x 6

x>1
x1
i<4
4 i 6
i>6

n*(i+1)>0
n*(i+1)<0
t<0.1
t=0.1
t>0.1
x<1.5
x=1.5
x>1.5

ex ex
x( 2 )

Y= 4

2
x + 3x + 2

10

x<1.5
x=1.5
x>1.5

#include<stdio.h>
#include<conio.h>
#include<math.h>
void main (void) {
float x,Y;
const float z=1.5;
clrscr();
printf("Culegeti valoarea x:\n");
scanf("%f",&x);
if (x<z) Y=x*((exp(x)-exp(-x))/2);
else if (x==z) Y=x/(pow(x,4)+3*pow(x,2)+2);
else Y=10;
printf("x=%.3f, Y=%.3f",x,Y);
getch();}
Problema 2
Var

Condiia
Determinai paritatea sumei dintre cifra utilizatorului i valoarea rotungit de la

rezultatul expresiei d=a e a cos(bx / a ) + ax sin 2 x + e 2 x ( x + b) ;

6
7

Determinai paritatea prii ntregi de la suma dintre cifra propus de utilizator i


a 2 x + e x cos bx
x+ x+a
rezultatul expresiei z=e cx
;
+
x
x | x b | bx e sin bx + 1
Determinai dac este par sau impar restul de la mprirea cifrei utilizatorului la
sin x
rezultatul expresiei r= x 2 + b b 2 sin 3 ( x + a ) / x +
cm ln mx ;
1 + m 2 sin 2 x
Determinai dac este par sau impar partea ntreag de la mprirea cifrei
a
utilizatorului la rezultatul expresiei w=cos 2 x 3 x / a 2 + b 2 + b tg 2 x
;
2
sin ( x / a)
Determinai paritatea produsului dintre valoarea rotungit a cifrei (tip real) introdus
|x+a|
de utilizator i rezultatul expresiei f=e 2 x ln( a + x) b 3 x ln( b x ) + ln (x+7
)
| x+b|
;
Determinai paritatea prii intregi de la produsul dintre cifra propus de utilizator i
rezultatul expresiei s=e ax x + 1 + e bx x + 1.5 + m cos( bt*sin(t) )+c;
Determinai paritatea restului de la mprirea (sumei dintre cifra utilizatorului si
10), i rezultatul expresiei y=cos 2 x 3 x / a 2 + b 2 + |x y / x 3 y / x |;

PDF created with pdfFactory Pro trial version www.pdffactory.com

10

11
12

13

14

15
16

Determinai paritatea prii ntregi de la mprirea (diferenei dintre


cifra utilizatorului i 9),
bx 2 a x 2 x 3 x 4
+
i rezultatul expresiei Q= ax
+
+
;
2
3
4
e 1
Determinai paritatea valorii rotungite a ctului dintre cifra utilizatorului i
rezultatul expresiei
2
s= xb / a + cos ( x + b) 3 + e bt sin( at + b) | bt + a | ;
Determinai paritatea diferenei dintre cifra propus de utilizator si partea ntreag
y z /( y x)
+ x 2 + b b 2 sin 3 ( x + a ) / x ;
de la rezultatul expresiei f=(y-x)
2
1 + ( y x)
Determinai paritatea restului de la mprirea cifrei utilizatorului cu rezultatul
expresiei
3
2
e=x(sinx + cos y )+ x 3 tg 2 ( x + b) 2 + a / x + b ;
Determinai paritatea prii intregi de la mprirea cifrei utilizatorului cu rezultatul
expresiei
2
K=b sin(at cos 2t ) 1 + x 2 ( x + 1) / b sin 2 ( x + a ) ;
Determinai paritatea valorii rotungite de la diferena dintre cifra ntrodus de
x2
2 cos( x pi / 6)
utilizator i rezultatul expresiei z=
+ cos( x + b) 3 +
;
a
1 / 2 + sin 2 y
Determinai paritatea ctului dintre partea ntreag a cifrei propuse de utilizator(tip
1.5 cos 2 x
z2
real) i rezultatul expresiei a=
+
;
3tgx
3 + z2 /5
Determinai paritatea restului de la mprirea (produsului dintre cifra utilizatorului
i 7), i rezultatul expresiei Y=sin 3 ( x 2 + a) 2 x / b + ln(a+x 2 ) sin 2 ( x / b) ;
Determinai paritatea prii ntregi de la mprirea (sumei dintre cifra utilizatorului
a 2 x + b x cos(a + b) x
si 6), si rezultatul expresiei F= 3 m * tg (t )+ | c * sin( t ) | +
;
x +1

Exemplu de program.
Determinai paritatea prii intregi de la impartirea (sumei dintre cifra utilizatorului si 6), si rezultatul
a 2 x + b x cos(a + b) x
expresiei F= 3 m * tg (t )+ | c * sin( t ) | +
;
x +1
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
void main(void) {
int m,t,c,x,a,b,u,s,p; float f,k;
printf("\nCulege valorile pentru m,t,c,x,a,b\n");
scanf("%d%d%d%d%d%d",&m,&t,&c,&x,&a,&b);
f=pow((m*tan(t)+abs(c*sin(t))),1/3)+( pow(a,2*x)+pow(b,(-1)*x)*cos(a+b)*
*x )/(x+1); printf("\nCulege o cifr ntreag\n");
scanf("%d",&u); k=(6+u)/f; p=floor(k);
printf("\nf=%f ctul este=%f i partea ntreag=%d",f,k,p);
if (fmod(p,2)==0) printf("\nPartea ntreag este par\n");
else printf("\nPartea ntreag este impar\n"); getch(); }

PDF created with pdfFactory Pro trial version www.pdffactory.com

Lucrarea de laborator nr.3 Tema: Prelucrarea masivelor unidimensionale


Problema 1
Este dat un masiv unidimensional cu n elemente
Condiia

Nr.
var.
1

De aflat suma i cantitatea elementelor pare din masiv.

De calculat media aritmetica i produsul elementelor cu poziii impare.

De comparat produsul elementelor pozitive cu suma elementelor pare.

4
De determinat elementul maximal al masivului
i de aflat dac el este pozitiv sau negativ.
5

De calculat diferena dintre produsul elementelor i media lor aritmetic. De determinat paritatea
diferenei.

De calculat produsul i cantitatea elementelor pozitive din masiv.

De aflat cantitatea i media aritmetic


a elementelor divizibile la trei.

De calculat produsul sumelor elementelor pare


i celor impare din masiv.

De aflat produsul dintre cantitatea elementelor divizibile la doi


i suma lor.

10

De calculat media aritmetica a elementelor impare


din prima 3/4 din masiv.

11

De calculat suma dintre primul element al masivului i ultimul element impar al masivului.

12

De aflat suma i cantitatea elementelor negative din prima jumtate a masivului.

13

De aflat cantitatea elementelor impare printre elementele pozitive ale masivului.

14

De comparat suma elementelor din prima jumtate a masivului cu media aritmetic a elementelor
din a doua jumtate a masivului.

15

Determinai elementul minimal printre elementele cu poziii pare ale masivului.

16

De comparat suma elementelor pare cu produsul elementelor negative, n afar de primul i


ultimul element.

Exemplu de program:
Este dat un masiv unidimensional X(N). De comparat suma elementelor pare cu produsul elementelor
negative n afar de primul i ultimul element.
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main (void) {
int x[50],I,n,s=0,p=1;
PDF created with pdfFactory Pro trial version www.pdffactory.com

clrscr();
printf("Culegeti marimea masivului x\n");
scanf("%d",&n); }
printf("Culegeti masivul x\n");
for(i=0;i<n;i++) {
printf("x[%d] = ",i);
scanf("%d",&x[i]); }
printf("Masivul initial:\n");
for(i=0;i<n;i++) printf("%d ",x[i]);
for(i=1;i<n-1;i++){
if(fmod(x[i],2)==0) s+=x[i];
if(x[i]<0) p*=x[i];}
printf("\nSuma elementelor pare in afara de primul si ultimul element = %d",s);
printf("\nProdusul elementelor negative in afara de primul si ultimul element = %d",p);
if(s>p) printf("\nSuma > Produsul");
else if (s<p) printf("\nSuma < Produsul");
else printf("\nSuma = Produsul");
getch();}
Problema 2
var.

Condiia

Este dat masivul unidimensional X[n]. De creat masivele unidimensionale Y i Z. Masivul Y va


conine elementele negative ale masivului X, iar masivul Z - elementele pozitive.
Snt date dou masive unidimensionale A[n] i B[n].

De calculat valoarea expresiei Z =

S1 + S 2
,
K1 * K 2

unde S1 i K1 snt suma i cantitatea elementelor pozitive din masivul A, iar S2 i K2 - suma i
cantitatea elementelor pozitive din masivul B.
3

Este dat masivul unidimensional K[n]. De aflat cantitatea elementelor impare, valoarea ridicat
la ptrat a crora este mai mic ca 100.

Este dat masivul unidimensional F[n]. De determinat poziiile i valorile primelor 3 elemente
negative

Este dat masivul unidimensional K[n]. De creat masivele unidimensionale L i M. Masivul L va


conine elementele pare ale masivului K, iar masivul M - elementele impare.

Snt date dou masive unidimensionale Q[n] i R[n]. De calculat valoarea expresiei
F=

e S1 + e S 2
, unde S1 i K1 snt suma i cantitatea elementelor pare din masivul Q,
K1 * K 2
iar S2 i K2- suma i cantitatea elementelor impare din masivul R.

PDF created with pdfFactory Pro trial version www.pdffactory.com

Este dat masivul unidimensional Y[n]. De calculat suma rdcinilor ptrate ale elementelor
impare .
Este dat masivul unidimensional D[n]. De determinat valorile i poziiile

ultimelor dou elemente pare.


9

Este dat masivul unidimensional A[n]. De creat masivele unidimensionale B i C. Masivul B va


conine elementele divizibile la trei ale masivului A, iar masivul C - elementele nedivizibile la
trei.
Snt date dou masive unidimensionale F[n] i G[n].

10

S
K

De calculat valoarea expresiei T= e +(S*K),


unde: S este suma elementelor pare de pe poziii impare din masivul F,
iar K cantitatea elementelor pare de pe poziii impare din masivul G.
Este dat masivul unidimensional P[n]. De determinat valoarea i poziia

11

primului element pozitiv din masiv.


12

Este dat masivul unidimensional Q[n]. De aflat valoarea i poziia elementului cu valoarea
maximal printre elementele impare.

13

Este dat masivul unidimensional R[n]. De creat masivele unidimensionale T i U. Masivul T va


conine elementele cu poziii pare din masivul R, iar masivul U - elementele cu poziii impare.
Snt date dou masive unidimensionale X[n] i Y[n].

14

De calculat S=cos(P+M) - P * M , unde: P este produsul elementelor impare din masivul X, iar
M - media aritmetic a elementelor impare din masivul Y.
Este dat masivul unidimensional M[n]. De determinat poziia i valoarea

15

ultimului element impar din masiv.


16

Este dat masivul unidimensional W[n]. De aflat poziia i valoarea elementului cu valoarea
minimal printre elementele pare.

Exemplu de program:
Este dat masivul unidimensional W[n]. Aflai poziia i valoarea elementului cu valoarea minimal printre
elementele pare.
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main (void) {
int w[50],n,i,min,z; clrscr();
printf("Culege marimea masivului n<=50 ");
scanf("%d",&n);
printf("Culege masivul w[%d]\n",n);
for(i=0;i<n;i++) {
PDF created with pdfFactory Pro trial version www.pdffactory.com

printf("w[%d] = ",i); scanf("%d",&w[i]);


if (fmod(w[i],2)==0) {min=w[i]; z=i;} }
printf("\nMasivul initial:\n\n");
for(i=0;i<n;i++) { printf("%3d ",w[i]);
if ((fmod(w[i],2)==0)&&(w[i]<min)) {min=w[i]; z=i;} }
printf("\n\nElementul minimal printre elementele pare este w[%d] = %d",z,min);
getch();}
Lucrarea de laborator nr. 4 Tema: Prelucrarea masivelor bidimensionale
Problema 1 Este dat un masiv bidimensional X[N][M]:
var.

Condiia

De calculat suma i produsul elementelor positive impare din masiv.

De calculat media aritmetic


a elementelor negative din aria haurat, dac N=M.

De calculat produsul elementelor pare din rindul trei.

De calculat suma elementelor impare din coloana doi.

De calculat diferena dintre


suma elementelor primului rnd i suma elementelor rndului doi.

De calculat cantitatea elementelor pozitive


de pe ultimele trei rnduri ale masivului.

De calculat suma i cantitatea elementelor pare


de pe prima i ultima coloan.

De calculat produsul elementelor pare


din aria haurat, dac N=M.

De calculat media aritmetica a elementelor de pe primul rnd


i ultima coloan.

10

De comparat cantitatea elementelor impare din ultimul rnd


cu valoarea elementului N[1][1].

11

De calculat suma i cantitatea elementelor negative mai sus de rndul patru.

12

De comparat produsul elementelor la dreapta de coloana doi


cu valoarea elementului X[3][3].

13

De calculat suma i cantitatea


elementelor pozitive din aria hasurat, dac N=M.

14

De calculat diferena dintre produsul elementelor pozitive a masivului i media aritmetica a


elementelor mai sus de rndul patru.

15

De calculat cantitatea i suma elementelor cu poziii pare


de pe ultimele trei rnduri.

PDF created with pdfFactory Pro trial version www.pdffactory.com

16

De calculat cantitatea elementelor divizibile la trei


din ultimele dou coloane.

Exemplu de program:
Este dat masivul bidimensional Y[N][M]. De calculat cantitatea elementelor divizibile la trei din ultimele
dou coloane.
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main(void) {
int y[10][10],i,j,k,n,m; clrscr();
printf("\nCulegeti cantitatea de linii ale masivului y\n"); scanf("%d",&n);
printf("\nCulegeti cantitatea de coloane ale masivului y\n");
scanf("%d",&m); printf("\nCulegeti masivul y\n\n");
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("y[%d][%d]= ",i,j);
scanf("%d",&y[i][j]);}}
printf("\nMasivul initial:\n");
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%3d ",y[i][j]);}
printf("\n");} k=0;
for(i=0;i<n;i++){
for(j=m-2;j<m;j++){
if(fmod(y[i][j],3)==0) k++;}}
printf("\nCantitatea elementelor divizibile la 3 din ultimele 2 coloane = %d",k);
getch();}

Problema 2
Generator de numere aleatoare Este dat un masiv bidimensional X[n][n]. Dup dorina utilizatorului, de
completat masivul:
a) cu ajutorul generatorului de numere aleatoare;
b) manual.

var.

Condiia

1.
De schimbat cu locul elementele primului rind cu elementele ultimei coloane.
2.

De aranjat n ordine cresctoare elementele fiecrui rnd.

PDF created with pdfFactory Pro trial version www.pdffactory.com

3.
De schimbat cu locul elementele ariei I
4.

cu elementele ariei IV.

De schimbat cu locul elementul maximal al masivului


cu elementul minimal al masivului.

5.

De schimbat cu locul elementele penultimului rnd


cu elementele rndului indicat de utilizator.
De aranjat n ordine cresctoare elementele fiecrei coloane.

6.
7.

De schimbat cu locul elementele ariei II


8.

cu elementele ariei III.

De schimbat cu locul elementul maximal al rndului unu


cu elementul minimal al ultimei coloane.

9.

De schimbat cu locul elementele coloanei doi


cu elementele coloanei indicate de utilizator.
De aranjat n ordine descresctoare elementele fiecrui rnd.

10.
11.

De schimbat cu locul elementele ariei III


12.

cu elementele ariei IV.

De schimbat cu locul elementul minimal al ultimei coloane


cu elementul maximal de pe rndul indicat de utilizator.

13.

De schimbat cu locul elementele primei coloane


Cu elementele ultimului rnd.
De aranjat n ordine descresctoare elementele fiecrei coloane.

14.
15.

De schimbat cu locul elementele ariei II


16.

cu elementele ariei IV.

De schimbat cu locul elementul maximal al coloanei indicate de utilizator


cu elementul minimal de pe rndul trei.

Exemplu de program:
Este dat un masiv bidimensional X[n][n]. Dup dorina utilizatorului,
de completat masivul:
a) cu ajutorul generatorului de numere aleatoare;
b) manual.
De schimbat cu locul elementul maximal al coloanei indicate de utilizator cu elementul minimal de pe
rndul trei.
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
void main(void) {
int x[20][20],n,i,j,min,minj,max,maxi,maxj,aux;
PDF created with pdfFactory Pro trial version www.pdffactory.com

char z; clrscr();
printf("\nCulegeti marimea masivului 3<n<20 ");
scanf("%d",&n);
label: clrscr();
printf("\n\nAlegeti metoda de completare a masivului (a/m):\n");
printf("\n a- Automat\n");
printf("\n m- Manual\n");
z=getch();
if((z=='a')||(z=='A')) goto automat; else
if((z=='m')||(z=='M')) goto manual; else goto label;
automat:randomize();
for(i=0;i<n;i++){
for(j=0;j<n;j++){
x[i][j]=random(19)-9;}}
goto masiv;
manual: printf("\nCulegeti masivul x[%d][%d]\n",n,n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("x[%d][%d]= ",i,j);
scanf("%d",&x[i][j]);}}
masiv: clrscr();
printf("\nMasivul x[%d][%d] initial:\n\n",n,n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%3d ",x[i][j]);}
printf("\n\n");}
min=x[3][0]; minj=0;
for(j=0;j<n;j++)
if (x[3][j]<min) {min=x[3][j]; minj=j;}
printf("\nElementul minimal de pe rindul 3 este x[3][%d]= %d\n",minj,min);
printf("\nIndicati coloana dorita ");
scanf("%d",&maxj);
max=x[0][maxj]; maxi=0;
for(i=0;i<n;i++)
if (x[i][maxj]>max) {max=x[i][maxj]; maxi=i;}
printf("\nElementul maximal de pe coloana %d este x[%d][%d]= %d\n",
maxj,maxi, maxj,max);
aux=x[3][minj];
PDF created with pdfFactory Pro trial version www.pdffactory.com

x[3][minj]=x[maxi][maxj];
x[maxi][maxj]=aux;
printf("\nMasivul x[%d][%d] final:\n\n",n,n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%3d ",x[i][j]);}
printf("\n\n");}
printf("\nElementul minimal de pe rindul 3 a fost schimbat\n");
printf("cu elementul maximal de pe coloana %d",maxj);
getch();}
Lucrarea de laborator nr. 5 Tema: Prelucrarea irurilor de caractere
Problema 1
var.

Condiia

1.

Este dat un ir de caractere. De comparat cantitatea vocalelor cu cantitatea consoanelor din ir.

2.

Este dat un ir de caractere. De determinat de cte ori n ir se ntlnete fiecare pereche de


caractere identice aezate alturi. Exemplu: aabbaa

3.

Este dat un ir de caractere. De ters din ir toate spaiile de prisos. Astfel, ntre cuvinte va fi
numai cte un spaiu.

4.

Este dat un ir de caractere. De aranjat caracterele din ir n ordine alfabetic.

5.

Este dat un ir de caractere. De aflat de cte ori este ntlnit n ir fiecare din caractere.

6.

Este dat un ir de caractere. De ters din ir toate vocalele.

7.

Este dat un ir de caractere. De ters din ir toate perechile de caractere identice aezate alturi.
Exemplu: aa, bb.

8.

Este dat un ir de caractere. De determinat valorile i poziiile ultimelor dou vocale din ir.

9.

Este dat un ir de caractere. De schimbat cu locul caracterele unu cu trei, cinci cu apte, nou cu
unsprezece .a.m.d. Dac ultimul caracter va fi fr pereche, el va rmne neschimbat.

10.

Este dat un ir de caractere. De indicat simbolurile care se ntlnesc o singur dat n text.

11.

Este dat un ir de caractere. De inversat irul, folosind principiile clasice de inversare a


masivelor.

12.

Este dat un ir de caractere. De ters simbolul , din ir i de calculat numrul de nlturri.

13.

Este dat un ir de caractere. De determinat valorile i poziiile primelor trei consoane din ir.

14.

Este dat un ir de caractere. Din textul dat de ters caracterele majuscule i de calculat lungimea
textului rmas.

15.

Este dat un ir de caractere. De ters din ir caracterele de pe poziii impare.

16.

Este dat un ir de caractere. De ters din ir caracterele minuscule de pe poziii impare.

PDF created with pdfFactory Pro trial version www.pdffactory.com

Exemplu de program:
Este dat un ir de caractere. De ters din ir caracterele minuscule de pe poziii impare.
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<conio.h>
void main (void) {
char s[256],g[256]; int i,n,z,k;
clrscr(); puts("Culege un sir de caractere\n");
gets(s); n=strlen(s); z=0;
for(i=0;i<n;i++){ k=s[i];
if((k<97)||(k>122)) {g[z]=s[i]; z++;}
if((fmod(i,2)==0)&&(k>=97)&&(k<=122)) {g[z]=s[i]; z++;} }
g[z]='\0'; clrscr();
puts("\nSirul initial s:"); puts(s);
strcpy(s,g);
puts("\nSirul final:"); puts(s);
printf(\nCaracterele minuscule de pe pozitiile impare au fost sterse); getch(); }

Problema 2
Masive de iruri. Not. ir normal un ir de caractere compus din cuvinte separate prin spaiu. Dup
ultimul cuvnt urmeaz punct.
var.
1.

Condiia
Este dat un ir normal. De schimbat cu locul primul i ultimul caracter din fiecare cuvnt al
irului.

2.

Este dat un ir normal. De efectuat cutarea perechilor de cuvinte, n care unul din cuvinte este
inversia altuia.

3.

Este dat un ir normal. De aranjat cuvintele din ir n ordine alfabetic.

4.

Este dat un ir normal. De determinat cuvintele cu caracterele aranjate n ordine alfabetic.

5.

Este dat un ir normal. De inversat cuvintele de pe poziii impare.

6.

Este dat un ir normal. De ters litera din mijloc din toate cuvintele de lingime impar.

7.

Este dat un ir normal. De aranjat cuvintele din ir n ordine invers.

8.

Este dat un ir normal . De determinat cuvntul care conine numrul maximal de consoane.

9.

Este dat un ir normal. De ters din ir cuvintele ce se ntlnesc o singur dat.

10.

Este dat un ir normal. De schimbat cu locul cel mai scurt cuvnt cu cel mai lung cuvnt.

11.

Este dat un ir normal. De ters din ir cuvintele ce se repet.

PDF created with pdfFactory Pro trial version www.pdffactory.com

12.

Este dat un ir normal. De aranjat cuvintele irului n ordine descresctoare dup cantitatea de
vocale din cuvinte.

13.

Este dat un ir normal. De determinat cuvintele ce se ntlnesc n ir de k ori. Numrul k va fi


indicat de utilizator.

14.

Este dat un ir normal. De gsit cuvintele simetrice de lungime par.

15.

Este dat un ir normal. De ters din ir cuvintele simetrice.

16.

Este dat un ir normal. De inversat cuvintele de lungime par ce se afl pe poziii impare.

Exemplu de program:
Este dat un ir normal. De inversat cuvintele de lungime par ce se afl pe poziii impare.
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<conio.h>
void main (void) {
char s[250],G[250]="",x[250][250],SP[2]=" ",PK[2]="."; int n,i,r,k;
clrscr(); puts("Culege un sir de caractere\n");
gets(s); n=strlen(s); r=0; k=0;
for(i=0;i<n;i++) {
if((s[i]!=' ')&&(s[i]!='.')) {x[r][k]=s[i];k++;}
if((s[i]==' ')||(s[i]=='.')) {x[r][k]='\0';r++;k=0;} }
for(i=0;i<r;i++) {
if( (fmod(i,2)!=0)&&(fmod(strlen(x[i]),2)==0) ) strrev(x[i]); }
for(i=0;i<r;i++) { strcat(G,x[i]);
if(i<(r-1)) strcat(G,SP);}
strcat(G,PK); clrscr();
printf("\nSirul initial:\n"); puts(s); strcpy(s,G);
printf("\nSirul final:\n"); puts(s);
printf("\nCuvintele de lungime para pe pozitii impare au fost inversate\n"); getch(); }
Lucrarea de laborator nr. 6
var.
1.

Tema: Prelucrarea articolelor

Condiia

Cmpuri necesare

De alctuit un articol cu N nscrieri, care conine informaia despre


orarul primirii pacienilor de ctre medic.

Numele de familie a

a) De realizat cutarea pacienilor dup numele de familie.

pacientului

b) De aranjat nscrierile n ordine cresctoare dup

Ora primirii

ora primirii pacientului.


PDF created with pdfFactory Pro trial version www.pdffactory.com

2.

De alctuit un articol cu N nscrieri, care conine informaia despre


emisiunile difuzate de ctre un post TV.
a) De realizat cutarea emisiunilor dup denumire.
b) De schimbat cu locul nscrierile emisiunilor cu durata minim

Denumirea emisiunii
Ora nceperii emisiunii
Durata emisiunii

i maxim.
3.

De alctuit un articol cu N nscrieri, care conine informaia despre


amplasarea crilor pe rafturile unei biblioteci.

Denumirea crii

a) De realizat cutarea crilor dup numrul raftului.


b) De aranjat nscrierile n ordine descresctoare dup numrul

Secia bibliografic

raftului.
Numrul raftului
4.

De alctuit un articol cu N nscrieri, care conine informaia despre


mrimea datoriei beneficiarilor centralei telefonice.
a) De realizat cutarea beneficiarilor dup numele de familie.

Numele de familie
beneficiarului

b) De aranjat nscrierile n ordine cresctoare dup mrimea


datoriei de abonat.

Numrul de telefon

Mrimea datoriei
5.

De alctuit un articol cu N nscrieri, care conine informaia despre

Familia studentului

studenii unei faculti.


a) De realizat cutarea studenilor dup denumirea grupei.

Grupa academic

b) De aranjat nscrierile n ordine invers.


Catedra
6.

De alctuit un articol cu N nscrieri, care conine informaia despre


un grup de angajati.

Numele de familie a
muncitorului

a) De realizat cutarea angajailor dup postul ocupat.


b) De aranjat nscrierile n ordine cresctoare dup vechimea n

Postul ocupat

munc.
Vechimea n munc
7.

De alctuit un articol cu N nscrieri, care conine informaia despre


abonaii unei biblioteci.
a) De realizat cutarea abonailor dup numele de familie.
b) De ters din articol nscrierile abonailor cu cantitile minim
i maxim de cri mprumutate.

Numele de familie a
abonatului
Cantitatea de cri
mprumutate
Anul naterii al
abonatului

8.

De alctuit un articol cu N nscrieri, care conine informaia despre


un grup de studeni.

PDF created with pdfFactory Pro trial version www.pdffactory.com

Numele de familie a

a) De realizat cutarea studenilor dup vrsta lor.


b) De schimbat cu locul nscrierile pentru studenii cu cea mai
mic i cea mai mare vrst.
9.

studentului
Anul naterii
Grupa academic

De alctuit un articol cu N nscrieri, care conine informaia despre


cursul valutar la o cas de schimb.

Denumirea valutei

a) De realizat cutarea valutei dup denumirea sa.


b) De aranjat nscrierile n ordine cresctoare dup cursul de

Cursul de schimb

schimb.
10.

De alctuit un articol cu N nscrieri, care conine informaia despre


Marca automobilului

un grup de automobile.
a) De realizat

cutarea automobilelor

dup numrul de

nregistrare a lor.

Numrul de nregistrare

b) De aranjat nscrierile n ordine alfabetic dup marca


automobilelor.
11.

De alctuit un articol cu N nscrieri, care conine informaia despre


numerele de telefoane a unui grup de persoane.
a) De realizat cutarea unei persoane dup numrul de telefon.

Numele de familie a
persoanei

b) De aranjat nscrierile n ordine descresctoare dup numrul


de telefon.
12.

Numrul de telefon

De alctuit un articol cu N nscrieri, care conine informaia despre


studenii unei grupe.
a) De calculat balul mediu pentru fiecare student reieind din
rezultatele la trei examene.
b) De aranjat nscrierile n ordine descresctoare dup balul

Numele de familie a
studentului
Notele la trei examene
Balul mediu

mediu
13.

De alctuit un articol cu N nscrieri, care conine informaia despre

Denumirea leciei

orarul leciilor unui student ntr-o zi a sptmnii.


a) De realizat cutarea leciei dup ora curent.

nceputul leciei

b) De schimbat cu locul prima i ultima nscriere


Sfritul leciei
14.

De alctuit un articol cu N nscrieri, care conine informaia despre


paapoartele unui grup de persoane.
a) De realizat cutarea persoanei dup numrul paaportului.
b) De aranjat nscrierile n ordine invers.

15.

Numele de familie a
personei
Anul naterii
Numrul paaportului.

De alctuit un articol cu N nscrieri, care conine informaia despre


meniul ntr-un restaurant.
a) De aflat preul celor trei bucate alese de client.

PDF created with pdfFactory Pro trial version www.pdffactory.com

Denumirea bucatelor

b) De aranjat nscrierile n ordine descresctoare dup preul

Preul bucatelor

bucatelor.

16.

De alctuit un articol cu N nscrieri, care conine informaia despre


angajaii unei ntreprinderi.
a) De realizat cutarea angajailor dup numele de
familie

Numele de familie a
angajatului
Postul ocupat
Mrimea salariului

b) De aranjat nscrierile n ordine descresctoare


dup mrimea salariului.

Exemplu de program:
Condiia
De alctuit un articol cu

nscrieri, care conine informaia despre

angajaii unei ntreprinderi.


a) De realizat cutarea angajailor dup numele de
familie
c) De aranjat nscrierile n ordine descresctoare
dup mrimea salariului.

#include<stdio.h>
#include<conio.h>
#include<string.h>
struct angajat {
char nume[30];
char post[20];
float salar; };
void main (void) {
struct angajat x[50],art;
int i,n,k,z,d; float aux,max;
char caut[30],r; clrscr();
printf(Culege numarul de angajati\n);
scanf(%d,&n);
for(i=0;i<n;i++) {
printf(\nCulege numele angajatului %d : ,i);
scanf(%s,x[i].nume);
PDF created with pdfFactory Pro trial version www.pdffactory.com

Cmpuri necesare

Numele de familie a
angajatului
Postul ocupat
Mrimea salariului

printf(\nCulege postul angajatului %d : ,i);


scanf(%s,x[i].post);
printf(\nCulege salariul angajatului %d : ,i);
scanf(%f,&aux); x[i].salar=aux;}
printf(\n\n\t ***** Baza initiala este *****\n\n);
printf(\t--------------------------------------------\n);
printf(\t|

Numele

Postul

| Salariul |\n);

printf(\t|------------------------------------------|\n);
for(i=0;i<n;i++) {
printf(\t|%16s|%14s|%10.2f|\n,x[i].nume,x[i].post,x[i].salar);
printf(\t|------------------------------------------|\n);}
printf(\nPentru continuare culegeti orice tasta...);
getch();
r1: clrscr();
printf(\n Cautare angajatului dupa nume.\n Culegeti numele cautat: );
scanf(%s,caut);
printf(\n\n\t ***** Rezultatul cautarii *****\n\n);
printf(\t--------------------------------------------\n);
printf(\t|

Numele

Postul

| Salariul |\n);

printf(\t|------------------------------------------|\n);
k=0;
for(i=0;i<n;i++) {
if(strcmp(x[i].nume,caut)==0){ k++;
printf(\t|%16s|%14s|%10.2f|\n,x[i].nume,x[i].post,x[i].salar);
printf(\t|------------------------------------------|\n);}}
if(k==0) printf(\nNu exista angajat cu asa nume.\n);
printf(\nDoriti sa repetati cautarea? (y/n) : );
r=getch(); if((r==y)||(r==Y)) goto r1;
for(i=0;i<n;i++) {
max=x[i].salar; z=i;
for(d=i;d<n;d++) {
if (max<x[d].salar) {max=x[d].salar; z=d;}}
art=x[i]; x[i]=x[z]; x[z]=art;}
clrscr();
printf(\n\n\t ***** Baza aranjata este *****\n\n);
printf(\t--------------------------------------------\n);
printf(\t|

Numele

Postul

| Salariul |\n);

printf(\t|------------------------------------------|\n);
PDF created with pdfFactory Pro trial version www.pdffactory.com

for(i=0;i<n;i++) {
printf(\t|%16s|%14s|%10.2f|\n,x[i].nume,x[i].post,x[i].salar);
printf(\t|------------------------------------------|\n);}
printf(\n\nPentru iesire culegeti orice tasta...); getch(); }
Lucrarea de laborator nr. 7 Tema: Subprograme
Problema 1
a) Rezolvai sarcina cu ajutorul subprogramelor.
b) Pentru completarea masivelor folosii generatorul de numere aleatoare.
Condiia

Folosirea subprogramelor pentru:

var.
1.

Snt date trei masive unidimensionale A[N], B[M] i C[K]. Aranjarea elementelor masivelor
De aranjat elementele fiecrui masiv n ordine cresctoare.

2.

n ordine cresctoare.

Snt date dou masive bidimensionale X[N,N] i Y[M,M]. Calcularea sumelor i cantitilor
De calculat suma i cantitatea elementelor de sub diagonala elementelor de sub diagonalele
secundar pentru fiecare masiv.

3.

secundare ale masivelor.

Snt date dou masive unidimensionale X(N) i Y(M). De Aflarea

mediei

aritmetice

aflat media aritmetic i abaterea maximal de la ea pentru abaterii maximale de la ea n


fiecare din masive.
4.

ambele masive.

Snt date dou masive bidimensionale A[X,X] i B[Y,Y]. De Calcularea sumei i produsului
calculat suma i produsul elementelor deasupra diagonalei elementelor deasupra diagonalei
secundare n masive.

secundare pentru fiecare masiv.


5.

Snt date dou masive unidimensionale X[K] i Y[M]. De Determinarea

valorilor

calculat valoarea expresiei Z=(Xmax-Ymin)/(Ymax-Xmin), elementelor

maximale

unde Xmax i Xmin snt valorile elementelor maximal i minimale pentru ambele masive.
minimal din masivul X, iar Ymax i Ymin snt valorile
elementelor maximal i minimal din masivul Y
6.

Snt date dou masive bidimensionale A[N,M] i B[K,L]. De Calcularea


calculat cantitile elementelor negative de pe fiecare rnd n elementelor
parte n ambele masive.

cantitilor
negative

de

pe

fiecare rnd n parte n ambele


masive.

7.

Snt date dou masive unidimensionale X[N] i Y[M]. De Calcularea sumelor rdcinilor
calculat valoarea expresiei Z= i =0 X [i ] i =0 Y [i ] .
n

ptrate ale elementelor n ambele


masive.

8.

Snt date dou masive bidimensionale S[N,M] i Z[K,L]. Calcularea cantitilor i sumelor
Calculai cantitile i sumele elementelor divizibile la cinci elementelor divizibile la cinci din
din ambele masive.

PDF created with pdfFactory Pro trial version www.pdffactory.com

ambele masive.

9.

Snt date dou masive bidimensionale A[N,M] i B[K,L]. De Aflarea valorilor i poziiilor
aflat valorile i poziiile elementelor minimale de pe fiecare elementelor
rnd al ambelor masive.

10.

minimale

de

pe

fiecare rnd al ambelor masive.

Snt date dou masive bidimensionale X[N,M] i Y[K,L]. Calcularea sumelor i cantitilor
De calculat valoarea expresiei Z=(Sx+Sy) (Kx*Ky), unde elementelor
Sx i Kx snt respectiv suma i cantitatea elementelor coloanele

pozitive
pare

ale

de

pe

ambelor

pozitive de pe coloanele pare ale masivului X, iar Sy i Ky masive.


suma i cantitatea elementelor pozitive de pe coloanele pare
ale masivului Y.
11.

Snt date dou masive bidimensionale B[N,N] i C[M,M]. Determinarea

valorilor

De calculat suma dintre elementul maximal deasupra elementelor maximale deasupra


diagonalei principale a masivului B i elementul maximal diagonalelor principale n ambele
deasupra diagonalei principale a masivului C.
12.

masive.

Snt date masivele unidimensionale X[N] i Y[M]. De aflat Determinarea

valorilor

valorile i poziiile elementelor minimale din ambele poziiilor elementelor minimale n


masive.
13.

ambele masive.

Snt date masivele bidimensionale A[N,M] i B[K,L]. De Calcularea sumelor elementelor


calculat sumele elementelor pozitive de pe fiecare coloan pozitive de pe fiecare coloan n
n ambele masive.

14.

Sunt date dou masive unidimensionale X(K) i Y(M). De Aranjarea elementelor ambelor
aranjat n ordine invers elementele ambelor masive.

15.

ambele masive.

masive n ordine invers.

Snt date dou masive bidimensionale X[N,M] i Y[K,L]. Calcularea sumelor elementelor
De calculat suma elementelor maximale de pe fiecare maximale de pe fiecare coloan n
coloan a masivului X i suma elementelor maximale de pe ambele masive.
fiecare coloan a masivului Y.

16.

Snt date dou masive bidimensionale X[N,N] i Y[M,M]. Determinarea

elementelor

De calculat produsul dintre elementul minimal de sub minimale de sub diagonalele


diagonala principal a masivului X i elementul minimal de principale n ambele masive.
sub diagonala principal a masivului Y.

PDF created with pdfFactory Pro trial version www.pdffactory.com

Exemplu de program:
Condiia

Folosirea subprogramelor pentru:

Snt date dou masive bidimensionale X[N,N] i Y[M,M]. De Determinarea elementelor minimale
calculat produsul dintre elementul minimal de sub diagonala de sub diagonalele principale n
principal a masivului X i elementul minimal de sub diagonala ambele masive.
principal a masivului Y.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int masiv (int z[50][50], int k) {
int r,c,mini,minj,min;
min=z[1][0]; mini=1; minj=0;
for(r=1;r<k;r++)
for(c=0;c<r;c++)
if(min>z[r][c]) {min=z[r][c]; mini=r; minj=c;}
printf(\nElementul minimal de sub diagonala principala este\n);
printf(elementul [%d][%d] = %d\n,mini,minj,min);
return(min);}

void main (void) {


int x[50][50],y[50][50],i,j,n,m,minx,miny,p;
clrscr(); randomize();
printf(\nCulege marimea masivului X : );
scanf(%d,&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
x[i][j]=random(20)-8;
printf(\nMasivul initial X este: \n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf(%3d ,x[i][j]);}
printf(\n);}
printf(\nCulege marimea masivului Y : );
scanf(%d,&m);
for(i=0;i<m;i++)
for(j=0;j<m;j++)
y[i][j]=random(20)-8;
PDF created with pdfFactory Pro trial version www.pdffactory.com

printf(\nMasivul initial Y este: \n);


for(i=0;i<m;i++){
for(j=0;j<m;j++){
printf(%3d ,y[i][j]);}
printf(\n);}
printf(\nPentru masivul X: \n);
minx=masiv(x,n);
printf(\nPentru masivul Y: \n);
miny=masiv(y,m);
p=minx*miny;
printf(\nProdusul elementelor minimale P = %d,p);
getch();}
Lucrarea de laborator nr. 8 Tema: Prelucrarea fiierelor
Cu scopul de a face mai comod utilizarea programului, n cadrul lui va fi creat un meniu, cu ajutorul
cruia va fi simplu de trecut dintr-o etap a rezolvrii n alta. n aa fel, programul trebuie s conin
urmtoarele puncte de meniu:
1. Completarea bazei de date i nscrierea ei n fiierul baza.txt.
2. Citirea bazei de date din fiierul baza.txt i afiarea ei la monitor.
3. Introducerea unei noi nscrieri la sfritul fiierului existent baza.txt.
4. Cutarea informaiei n baz conform punctului a) din condiie.
5. Aranjarea nscrierilor conform punctului b) din condiie i afiarea bazei finale ordonate la
monitor.
6. Ieire
var

Condiia
Cmpuri necesare

1.

De alctuit un articol cu N nscrieri, care conine informaia despre


cursul valutar la o cas de schimb.

Denumirea valutei

a) De realizat cutarea valutei dup denumirea sa.


d) De aranjat nscrierile n ordine cresctoare dup cursul de

Cursul de schimb

schimb.
2.

De alctuit un articol cu N nscrieri, care conine informaia despre un

Marca automobilului

grup de automobile.
a) De realizat cutarea automobilelor dup numrul de nregistrare

Numrul de nregistrare

a lor.
b) De aranjat nscrierile n ordine alfabetic dup marca
automobilelor.
3.

De alctuit un articol cu N nscrieri, care conine informaia despre

PDF created with pdfFactory Pro trial version www.pdffactory.com

Numele de familie a

abonaii unei biblioteci.


a) De realizat cutarea abonailor dup familie.
b) De ters din articol nscrierile abonailor cu cantitile minim i
maxim de cri mprumutate.
4.

Anul naterii
Cantitatea de cri
mprumutate

De alctuit un articol cu N nscrieri, care conine informaia despre un


grup de studeni.
a) De realizat cutarea studenilor dup vrsta lor.
b) De schimbat cu locul nscrierile pentru studenii cu cea mai mic
i cea mai mare vrst.

5.

abonatului

De alctuit un articol cu N nscrieri, care conine informaia despre


studenii unei grupe.
a) De calculat balul mediu pentru fiecare student reieind din
rezultatele la trei examene.

Numele de familie A
studentului
Anul naterii
Grupa academic
Numele de familie a
studentului
Notele la trei examene
Balul mediu

b) De aranjat nscrierile n ordine descresctoare dup balul mediu.


6.

De alctuit un articol cu N nscrieri, care conine informaia despre


numerele de telefoane la un grup de persoane.
a) De realizat cutarea unei persoane dup numrul de telefon.

Numele de familie a
persoanei

b) De aranjat nscrierile n ordine descresctoare dup numrul de


telefon.
7.

De alctuit un articol cu N nscrieri, care conine informaia despre


paapoartele unui grup de persoane.
a) De realizat cutarea persoanei dup numrul paaportului.
b) De aranjat nscrierile n ordine invers.

8.

De alctuit un articol cu N nscrieri, care conine informaia despre

Numarul de telefon.
Numele de familie a
personei
Anul naterii
Numrul paaportului.
Denumirea leciei

orarul leciilor unui student ntr-o zi a sptmnii.

9.

a) De realizat cutarea leciei dup ora curent.

nceputul leciei

b) De schimbat cu locul prima i ultima nscriere.

Sfritul leciei

De alctuit un articol cu N nscrieri care conine informaia despre


orarul primirii pacienilor de catre medic.

Numele de familie a

a) De realizat cutarea pacienilor dup familie.

pacientului

b) De aranjat nscrierile n ordine cresctoare dup ora primirii

Ora primirii

pacientului.
10.

De alctuit un articol cu N nscrieri, care conine informaia despre

Denumirea bucatelor

meniul ntr-un restaurant.


a) De aflat preul celor trei bucate alese de client.
b) De aranjat nscrierile n ordine descresctoare dup preul
bucatelor.

PDF created with pdfFactory Pro trial version www.pdffactory.com

Preul bucatelor

11.

De alctuit un articol cu N nscrieri, care conine informaia despre


amplasarea crilor pe rafturile unei biblioteci.
a) De realizat cutarea crilor dup numrul raftului.
b) De aranjat nscrierile n ordine descrescatoare dup numarul

Denumirea crii
Secia bibliografic
Numrul raftului

raftului.
12.

De alctuit un articol cu N nscrieri, care conine informaia despre


emisiunile difuzate de ctre un post TV.
a) De realizat cutarea emisiunilor dup denumire.

Denumirea emisiunii
Ora nceperii emisiunii.
Durata emisiunii

b) De schimbat cu locul nscrierile emisiunilor cu durata minim i


maxim.
13.

De alctuit un articol cu N nscrieri, care conine informaia despre


studenii unei faculti.

Numele de familie a
studentului

a) De realizat cutarea studenilor dup denumirea grupei.


b) De aranjat nscrierile n ordine inversa.

Grupa academic
Catedra

14.

De alctuit un articol cu N nscrieri, care conine informaia despre


mrimea datoriei beneficiarilor centralei telefonice.

Numele de familie a
beneficiarului

a) De realizat cutarea beneficiarilor dup numele de familie.


b) De aranjat nscrierile n ordine crescatoare dup mrimea

Numarul de telefon

datoriei de abonat.

Mrimea datoriei de
abonat

15.

De alctuit un articol cu N nscrieri, care conine informaia despre un


grup de angajati.
a) De realizat cutarea angajailor dup postul ocupat.
b) De aranjat nscrierile n ordine crescatoare dup vechimea n

Numele de familie a
muncitorului
Postul ocupat
Vechimea n munc

munc.
16.

De alctuit un articol cu N nscrieri, care conine informaia despre


calculatoarele unui laborator de programare.

Denumirea staiei

a) De realizat cutarea staiilor dup denumirea lor.


b) De aranjat nscrierile n ordine descrescatoare dup memoria
RAM.

PDF created with pdfFactory Pro trial version www.pdffactory.com

Memoria RAM

Exemplu de program:
Condiia
Cmpuri necesare
De alctuit un articol cu

nscrieri, care conine informaia despre

calculatoarele unui laborator de programare.


a) De realizat cutarea staiilor dup denumirea lor.
b) De aranjat nscrierile n ordine descrescatoare dup
memoria RAM.

#include<stdio.h>
#include<conio.h>
#include<string.h>
struct laborator {
char nume[30];
int ram; };
void main (void) {
struct laborator x[50],art,aux;
int i,n,k,z,d,max,q;
char caut[30],r,w;
FILE *f1;
// Afisarea meniului
m0: clrscr();
printf("\n\n\t * * * M E N I U * * *\n\n");
printf("\t1: Completarea bazei de date.\n");
printf("\t2: Citirea bazei de date din fisier.\n");
printf("\t3: Introducerea unei noi inscrieri.\n");
printf("\t4: Cautarea statiilor dupa denumire.\n");
printf("\t5: Aranjarea inscrierilor in descrestere.\n");
printf("\t6: Iesire.\n\t");
scanf("%d",&q);
switch(q) {
case 1: goto m1;
case 2: goto m2;
case 3: goto m3;
case 4: goto m4;
case 5: goto m5;
case 6: goto m6;
default:goto m0;}
PDF created with pdfFactory Pro trial version www.pdffactory.com

Denumirea staiei
Memoria RAM

// 1: Completarea bazei de date


m1: clrscr();
printf("\n\nCulege numarul de calculatoare\n");
scanf("%d",&n);
for(i=0;i<n;i++) {
printf("\nCulege numele statiei %d : ",i);
scanf("%s",x[i].nume);
printf("\nCulege volumul memoriei RAM pentru statia %d : ",i);
scanf("%d",&x[i].ram);}
// 1: Inscrierea bazei in fisierul baza.txt
f1=fopen("baza.txt","w");
for(i=0;i<n;i++) {
fwrite(&x[i],sizeof(x[i]),1,f1); }
fclose(f1);
printf("\nBaza de date completata a fost inscrisa in fisierul \"baza.txt\"\n");
printf("\nPentru iesire in meniu culegeti ENTER\n");
getch(); goto m0;

// 2: Citirea bazei din fisierul baza.txt si afisarea ei la monitor.


m2: clrscr();
printf("\n\n\t*** Baza citita din fisier este ***\n\n");
printf("\t----------------------------------------\n");
printf("\t|

NUMELE

| R A M (Mb) |\n");

printf("\t|---------------------|----------------|\n");
f1=fopen("baza.txt","r");i=0;
while ( fread(&x[i],sizeof(x[i]),1,f1)==1){
printf("\t|%21s|%16d|\n",x[i].nume,x[i].ram);i++;
printf("\t|---------------------|----------------|\n");}
fclose(f1);n=i;
printf("\nPentru iesire in meniu culegeti ENTER\n");
getch(); goto m0;

// 3: Introducerea unei noi inscrieri


m3: clrscr();
printf("\nDoriti sa mai adaogati o inscriere ? y/n\n");
w=getch();
if((w=='n')||(w=='N')) {goto m0;}
PDF created with pdfFactory Pro trial version www.pdffactory.com

if((w=='y')||(w=='Y')) {
printf("\nCulege numele statiei ");
scanf("%s",aux.nume);
printf("\nCulege volumul memoriei RAM ");
scanf("%d",&aux.ram);
f1=fopen("baza.txt","a");
fwrite(&aux,sizeof(aux),1,f1);
fclose(f1);
printf("\nInscrierea a fost adaogata la sfirsitul fisierului\n");
printf("\nPentru iesire in meniu culegeti ENTER\n");
getch(); goto m0;}

// 4: Cautarea statiilor dupa nume


m4: clrscr();
f1=fopen("baza.txt","r");i=0;
while ( fread(&x[i],sizeof(x[i]),1,f1)==1){i++;};
n=i; fclose(f1);
printf("\n Cautarea calculatorului dupa nume.\n Culegeti numele cautat: ");
scanf("%s",caut);
printf("\n\n\t ***** Rezultatul cautarii *****\n\n");
printf("\t----------------------------------------\n");
printf("\t|

NUMELE

| R A M (Mb) |\n");

printf("\t|---------------------|----------------|\n");
k=0;
for(i=0;i<n;i++) {
if(strcmp(x[i].nume,caut)==0){ k++;
printf("\t|%21s|%16d|\n",x[i].nume,x[i].ram);
printf("\t|---------------------|----------------|\n");}}
if(k==0) printf("\nNu exista statie cu asa nume.\n");
printf("\nPentru iesire in meniu culegeti ENTER\n");
getch(); goto m0;

// 5: Aranjarea inscrierilor
m5: f1=fopen("baza.txt","r");i=0;
while ( fread(&x[i],sizeof(x[i]),1,f1)==1){i++;};
n=i; fclose(f1);
for(i=0;i<n;i++) {
max=x[i].ram; z=i;
PDF created with pdfFactory Pro trial version www.pdffactory.com

for(d=i;d<n;d++) {
if (max<x[d].ram) {max=x[d].ram; z=d;}}
art=x[i]; x[i]=x[z]; x[z]=art;}
clrscr();
printf("\n\n\t ***** Baza aranjata este *****\n\n");
printf("\t----------------------------------------\n");
printf("\t|

NUMELE

| R A M (Mb) |\n");

printf("\t|---------------------|----------------|\n");
for(i=0;i<n;i++) {
printf("\t|%21s|%16d|\n",x[i].nume,x[i].ram);
printf("\t|---------------------|----------------|\n");}
printf("\nPentru iesire in meniu culegeti ENTER\n");
getch(); goto m0;

// 6: Iesire
m6: clrscr();
printf("\nPentru Iesire culegeti orice tasta ..."); getch();}
Lucrarea de laborator N 9
Tema: Meniuri in C++
Condiiile din fiecare variant includ cte un masiv bidimensional x[n,n] care conine o arie haurat
n mod specific pentru fiecare variant n parte. Rezolvarea problemei se reduce la prelucrarea
elementelor din ariile haurat i nehaurat, conform condiiilor variantei.
Primul pas n rezolvarea sarcinii va fi afiarea condiiilor problemei la monitor n mod program.
Completarea masivului, adic atribuirea valorilor elementelor masivului va fi efectuat manual sau
automat la alegerea utilizatorului.
Dup completarea masivului, acesta va fi afiat ntr-o form comod de citit, adic elementele
fiind ordonate pe linii i coloane. Mai mult ca att, masivul va fi afiat n dou culori: elementele ariei
haurate ntr-o culoare, iar elementele ariei nehaurate n alt culoare.
Apoi urmeaz rezolvarea fiecrui din cele trei puncte ale sarcinei. Pentru acest scop vor fi create
cteva subprograme, fiecare din ele rezolvnd o subsarcin concret. Cantitatea de subprograme va
depinde de condiiile problemei i dorina executorului.
Dup rezolvarea celor trei puncte ale sarcinei i afiarea rezultatelor primite masivul final va fi
afiat la monitor.
Cu scopul de a face mai comod utilizarea programului, n cadrul lui va fi creat un meniu, cu
ajutorul crui va fi simplu de trecut dintr-o etap a rezolvrii n alta. n aa fel programul trebuie s
conin urmtoarele puncte de meniu:
1) afiarea condiiilor problemei;
PDF created with pdfFactory Pro trial version www.pdffactory.com

2) completarea masivului n mod manual;


3) completarea masivului n mod automat;
4) afiarea masivului (n 2 culori);
5) rezolvarea punctului a) din condiie;
6) rezolvarea punctului b) din condiie;
7) rezolvarea punctului c) din condiie;
8) afiarea masivului final (n 2 culori);
9) ieire.
Dup rezolvarea fiecrui punct din cele trei existente, rezultatul corespunztor va fi afiat la monitor.
Punctele din meniu 5,6,7 ce corespund rezolvrii punctelor a,b,c din condiie pot fi unite ntr-un numr
mai mic sau desprite ntr-un numr mai mare de puncte de meniu, n dependen de condiiile problemei
i dorina executorului.
Variante
Nr.
var.
1.

Condiia
Este dat masivul x[n][n].
a)De aflat media aritmetic a elementelor impare din aria haurat.
b)De aflat poziia i cantitatea elementelor din masiv egale cu cifra
propus de utilizator.
c)Daca element egal cu cifra data nu exist n masiv, de nscris ntrun fiier un comentariu respectiv i de generat un semnal audio.

2.

Este dat masivul x[n][n].


a) De aflat elementele maximale din fiecare poriune a ariei
haurate cu vecinii lor.
b) De calculat media aritmetic a elementelor pare din toat aria
haurat.
c) De nlocuit toate elementele din aria nehaurat cu zero.

3.

Este dat masivul x[n][n].


a) De aflat suma primului i ultimului element par din aria haurat
i pozitia lor.
b) Da aflat cte elemente cu valoarea acestei sume snt n aria
nehaurat.
c) De scris n fiier valorile i poziiile tuturor vecinilor celui mai
mic element pozitiv din aria haurat.

PDF created with pdfFactory Pro trial version www.pdffactory.com

Masivul

4.

Este dat masivul x[n][n].


a) De aflat media aritmetic a elementelor divizibile la patru din
aria hasurat.
b) De egalat toate elementele din aria nehasurat cu zero de culoare
galben.
c) De aflat valoarea i locul elementelor maximale din fiecare rnd
din aria haurat.

5.

Este dat masivul x[n][n].


a) De prezentat elementele pare cu vecinii lor din aria haurat
(n valori i poziii).
b) Elementele negative din aria nehaurat de nlocuit cu "8".
c) De scris n fiier numrul elementelor impare din aria haurat.

6.

Este dat masivul x[n][n].


a) Aflai media aritmetic a elementelor >5 din aria haurat.
b) Scriei n fiier cantitatea elmentelor din aria haurat egale cu
cifra utilizatorului.
c) Aflai suma elementelor de pe perimetrul ariei nehaurate.

7.

Este dat masivul x[n][n].


a) Aflai media aritmetic a elementelor pare din aria haurat i o
nscriei n fiier.
b) Aflai elementul maximal de pe fiecare coloan par din aria
haurat.
c) Aflai cte elemente n aria haurat snt egale cu cifra user-ului.

8.

Este dat masivul x[n][n].


a) Aflai media aritmetic a elementelor de pe perimetrul ariei
haurate.
b) Aflai numrul elementelor pare din fiecare coloan impar din
aria haurat.
c) Aflai cel mai mare element din fiecare poriune nehaurat i
nscriei-le n fiier.

9.

Este dat masivul x[n][n].


a) De aflat valoarea i poziia fiecrui element par din aria haurat.
b) Aranjai n ordine descresctoare elementele din fiecare coloan
din aria haurat.

PDF created with pdfFactory Pro trial version www.pdffactory.com

c) De aflat numrul elementelor pare din aria " * ".


10. Este dat masivul x[n][n].
a) Aranjai n ordine cresctoare elementele fiecrui rnd din aria
haurat.
b) Aflai elementele maximale de pe fiecare coloan din aria
haurat.
c) Aflai cantitatea elementelor din aria nehaurat egale cu cifra
utilizatorului i scriei-o ntr-un fiier.
11. Este dat masivul x[n][n].
a) De aflat poziia i cantitatea elementelor egale cu cifra propus de
utilizator.
b) Aflai elementul maximal de pe fiecare coloan impara din
aria haurat.
c) nscriei ntr-un fiier suma elementelor negative din masiv.
12. Este dat masivul x[n][n].
a) De calculat produsul elementelor impare din aria haurat.
b) Determinai elementul maximal de pe perimetrul ariei haurate.
c) nscriei ntr-un fiier valorile i poziiile elementelor din fiecare
col al ariei haurate.
13. Este dat masivul x[n][n].
a) De aflat media aritmetic a elementelor divizibile la trei din aria
haurat.
b) Aflai cantitatea elementelor impare din fiecare coloan par din
aria haurat.
c) nscriei n fiier cantitatea zerourilor din aria nehaurat.
14. Este dat masivul x[n][n].
a) De aflat cte elemente n aria haurat snt egale cu cifra user-ului.
b) De aflat valoarea i poziia elementelor minimale din fiecare rnd
din aria haurat.
c) nscriei n fiier suma elementelor pare din aria nehaurat.
15. Este dat masivul x[n][n].
a) Aranjati n ordine cresctoare elementele din fiecare coloan din
aria haurat.
b) Aflai cantitatea elementelor din aria nehaurat egale cu cifra
utilizatorului.
c) nscriei n fiier produsul elementelor impare din aria nehaurat.
PDF created with pdfFactory Pro trial version www.pdffactory.com

16. Este dat masivul x[n][n].


a) De aflat media aritmetic a elementelor pare din aria haurat.
b) De prezentat elementele pare cu vecinii lor din aria haurat
(n valori i poziii).
c) De comparat sumele elementelor din ariile haurat i nehaurat.
17. Este dat masivul x[n][n].
a)De aflat suma primului i ultimului element par din aria haurat
i poziia lor.
b) Aflai suma elementelor de pe perimetrul ariei nehaurate.
c) Comparai produsele elementelor impare din ariile haurat i
nehaurat.
18. Este dat masivul x[n][n].
a) De aflat suma primului i ultimului element impar din aria
haurat i poziia lor.
b) Aflai suma elementelor de pe perimetrul ariei nehaurate.
c) Comparai produsele elementelor impare din ariile haurat i
nehaurat
19. Este dat masivul x[n][n].
a) De scris n fiier valorile i poziiile tuturor vecinilor celui mai
mare element pozitiv din aria haurat.
b) Aflai media aritmetic a elementelor de pe perimetrul ariei
haurate.
c) Comparai mediile aritmetice ale elementelor pozitive din ariile
haurat i nehaurat
20. Este dat masivul x[n][n].
a) Aranjai n ordine descresctoare elementele fiecrui rnd din aria
haurat.
b) De egalat toate elementele din aria nehaurat cu zero de culoare
galben.
c) Comparai mediile aritmetice ale elementelor pozitive din ariile
haurat i nehaurat

PDF created with pdfFactory Pro trial version www.pdffactory.com

Exemplu de rezolvare a unei sarcini


Este dat masivul bidimensional x[n][n] cu aria haurat
a) De aflat valorile i poziiile elementelor maximale
din cele 2 poriuni ale ariei haurate.
b) De nscris ntr-un fiier suma elementelor pare din aria haurat.
c) De aranjat elementele fiecrui rnd din aria haurat n ordine cresctoare.
Listingul programului:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
//afisarea conditiilor problemei la monitor
void conditii (void) {
int i,j,n=10,k; clrscr();
gotoxy(20,2);textcolor(11);
cprintf("\n");
gotoxy(29,4);textcolor(15); cprintf("Conditiile problemei:");
gotoxy(10,5);textcolor(11);
cprintf("Este dat masivul bidimensional x[N][N] cu aria hasurata (rosie)");
gotoxy(5,6); cprintf("a) De aflat valorile si pozitiile elementelor maximale");
gotoxy(5,7); cprintf(" din cele 2 portiuni ale ariei hasurate"); gotoxy(5,8);
cprintf("b) De inscris intr-un fisier suma elementelor pare din aria hasurata");
gotoxy(5,9);
cprintf("c) De aranjat fiecare rind din aria hasurata in ordine crescatoare");
k=floor(float(n)/float(2));
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
if( (i<k) && ( (j>=i) && (j<(n-i)) ) )
{gotoxy(15+(j*3),11+i);textcolor(12); cprintf("* ");}
else if( (i>=k) && ( (j>=(n-i-1)) && (j<=i) ) )
{gotoxy(15+(j*3),11+i);textcolor(12);cprintf("* ");}
else {gotoxy(15+(j*3),11+i);textcolor(10);cprintf("* ");} } }
textcolor(15);gotoxy(10,wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); }
//afisarea masivului initial in 2 culori la monitor
void afisare (int y[50][50],int m) {
int i,j,k; clrscr();gotoxy(15,2);textcolor(15);
PDF created with pdfFactory Pro trial version www.pdffactory.com

cprintf("Masivul x[%d][%d] este:\n",m,m); k=floor(float(m)/float(2));


for(i=0;i<m;i++) {
for(j=0;j<m;j++) {
if( (i<k) && ( (j>=i) && (j<(m-i)) ) )
{gotoxy(15+(j*4),4+i);textcolor(12); cprintf("%3d ",y[i][j]);}
else if( (i>=k) && ( (j>=(m-i-1)) && (j<=i) ) )
{gotoxy(15+(j*4),4+i);textcolor(12);cprintf("%3d ",y[i][j]);}
else {gotoxy(15+(j*4),4+i);textcolor(10);cprintf("%3d ",y[i][j]);} } }
textcolor(15);gotoxy(10,wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); }
//determinarea elementelor maximale in valori si pozitii din cele 2 portiuni hasurate
void maxim (int y[50][50],int m) {
int i,j,k,max1,rmax1,cmax1,max2,rmax2,cmax2;
//portiunea de sus a ariei hasurate.
k=floor(float(m)/float(2));
max1=y[0][0]; rmax1=0; cmax1=0;
for(i=0;i<k;i++) {
for(j=i;j<(m-i);j++) {
if (y[i][j]>=max1) {max1=y[i][j]; rmax1=i; cmax1=j;} } }
//portiunea de jos a ariei hasurate.
max2=y[m-1][0]; rmax2=m-1; cmax2=0;
for(i=k;i<m;i++) {
for(j=(m-i-1);j<=i;j++) {
if (y[i][j]>=max2) {max2=y[i][j]; rmax2=i; cmax2=j;} } }
//afisarea rezultatelor
clrscr();gotoxy(15,2);textcolor(15);
printf("Elementele maximale din ariile hasurate:");
for(i=0;i<m;i++) {
for(j=0;j<m;j++) {
if( (i<k) && ( (j>=i) && (j<(m-i)) ) )
{gotoxy(15+(j*4),4+i);textcolor(12); cprintf("%3d ",y[i][j]);}
else if( (i>=k) && ( (j>=(m-i-1)) && (j<=i) ) )
{gotoxy(15+(j*4),4+i);textcolor(12);cprintf("%3d ",y[i][j]);}
else {gotoxy(15+(j*4),4+i);textcolor(10);cprintf("%3d ",y[i][j]);}
if( ((i==rmax1)&&(j==cmax1)) || ((i==rmax2)&&(j==cmax2)) )
{gotoxy(15+(j*4),4+i);textcolor(15);cprintf("%3d ",y[i][j]);} } }
textcolor(15);gotoxy(10,wherey()+2);
cprintf("Elementul

Maximal

din

portiunea

hasurata

%d",rmax1,cmax1,y[rmax1][cmax1]);
PDF created with pdfFactory Pro trial version www.pdffactory.com

de

sus

este

x[%d][%d]

gotoxy(10,wherey()+1);
cprintf("Elementul

Maximal

din

portiunea

hasurata

de

%d",rmax2,cmax2,y[rmax2][cmax2]);
gotoxy(10,wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>");
getch(); }
//calcularea sumei elementelor pare si inscrierea ei in fisier
void fisier (int y[50][50],int m) {
int i,j,k,s=0; FILE *f;
k=floor(float(m)/float(2));
//portiunea de sus a ariei hasurate
for(i=0;i<k;i++) {
for(j=i;j<(m-i);j++) {
if (fmod(y[i][j],2)==0) s+=y[i][j]; } }
//portiunea de jos a ariei hasurate.
for(i=k;i<m;i++) {
for(j=(m-i-1);j<=i;j++) {
if (fmod(y[i][j],2)==0) s+=y[i][j]; } }
if((f=fopen("c:/suma.txt","w"))==NULL) {
clrscr();gotoxy(15,2);textcolor(15);
cprintf("Fisierul nu poate fi deschis"); goto exit;}
fprintf(f,"Suma elementelor pare din aria hasurata S=%d",s); fclose(f);
clrscr();gotoxy(15,2);textcolor(15);
cprintf("In fisierul c:\\suma.txt au fost inscrise urmatoarele date:");
textcolor(11);gotoxy(15,wherey()+2);
cprintf("Suma elementelor pare din aria hasurata S=%d",s);
exit: textcolor(15);gotoxy(15,wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); }
// aranjarea elementelor ariei hasurate in ordine crescatoare
void aranjare (int(*k)[50],int z) {
int i,j,g,c,min,aux,w;
w=floor(float(z)/float(2));
//aranjare in ordine crescatoare portiunea de sus
for(i=0;i<w;i++) {
for(j=i;j<(z-i);j++) {
min=*(k[i]+j);c=j;
for(g=j;g<(z-i);g++) {
if (*(k[i]+g)<min) {min=*(k[i]+g);c=g;}}
aux=*(k[i]+j); *(k[i]+j)=*(k[i]+c); *(k[i]+c)=aux;}}
PDF created with pdfFactory Pro trial version www.pdffactory.com

jos

este

x[%d][%d]

//aranjare in ordine crescatoare portiunea de jos


for(i=w;i<z;i++) {
for(j=(z-i-1);j<=i;j++) {
min=*(k[i]+j);c=j;
for(g=j;g<=i;g++) {
if (*(k[i]+g)<min) {min=*(k[i]+g);c=g;}}
aux=*(k[i]+j); *(k[i]+j)=*(k[i]+c); *(k[i]+c)=aux;}}
clrscr();gotoxy(15,2);textcolor(15);
cprintf("Elementele fiecarui rind din aria hasurata");
textcolor(15);gotoxy(15,wherey()+1);
cprintf("au fost aranjate in ordine crescatoare");
textcolor(11);gotoxy(15,wherey()+2);
cprintf("Pentru a vedea rezultatul alegeti punctul 8 din meniu");
textcolor(15);gotoxy(15,wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); }
//prelucrarea exceptiei in caz cind elementele masivului nu au valori
void gresala (int q) {
if (q==0) { clrscr();gotoxy(15,2);textcolor(12);
cprintf("Masivul nu poate fi prelucrat. Elementele nu au valori");
textcolor(15);gotoxy(15,wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); } }
//programul principal
void main(void) {
int x[50][50]={0},t[50][50]={0};
int n,i,j,z=0,h=0; char w,v;
//afisarea meniului
m0:clrscr(); textcolor(15); gotoxy(15,2);
cprintf("Alege din meniu:\n"); gotoxy(15,4);
cprintf("1: Afisarea conditiilor initiale\n"); gotoxy(15,5);
cprintf("2: Completarea masivului in mod manual\n"); gotoxy(15,6);
cprintf("3: Completarea masivului in mod automat\n"); gotoxy(15,7);
cprintf("4: Afisarea masivului initial\n"); gotoxy(15,8);
cprintf("5: Aflarea elementelor maximale din portiunile hasurate\n"); gotoxy(15,9);
cprintf("6: Inscrierea sumei in fisier\n"); gotoxy(15,10);
cprintf("7: Aranjarea elementelor ariei hasurate\n"); gotoxy(15,11);
cprintf("8: Afisarea masivului final\n"); gotoxy(15,12);
cprintf("9: Iesire\n"); gotoxy(15,13);
// alegerea din meniu
w=getch();
PDF created with pdfFactory Pro trial version www.pdffactory.com

switch (w) {
case '1': goto m1;
case '2': goto m2;
case '3': goto m3;
case '4': goto m4;
case '5': goto m5;
case '6': goto m6;
case '7': goto m7;
case '8': goto m8;
case '9': goto m9;
default : goto m0;}
m1: conditii(); goto m0;
m2: //completare manuala a masivului
clrscr(); z=1; gotoxy(15,2); textcolor(15);
cprintf("Culege marimea masivului x N=");
scanf("%d",&n); gotoxy(15,3);
cprintf("Culege elementele masivului x[%d][%d]\n",n,n);
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
gotoxy(15+(j*4),5+i);
scanf("%3d",&x[i][j]); } }
textcolor(15);gotoxy(10,wherey()+1);
cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); goto m0;
m3: //completare automata a masivului
clrscr(); z=1; gotoxy(15,2); textcolor(15);
cprintf("Culege marimea masivului x N=");
scanf("%d",&n); randomize();
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
x[i][j]=random(100)-50; }}
// afisarea masivului initial
gotoxy(15,4); textcolor(15);
cprintf("Masivul initial x[%d][%d] este;\n",n,n);
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
textcolor(15); gotoxy(15+(j*4),6+i);
cprintf("%3d ",x[i][j]); } }
gotoxy(10,wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>");
PDF created with pdfFactory Pro trial version www.pdffactory.com

getch(); goto m0;


m4: if (z==1) {afisare(x,n); goto m0;};
gresala(z); goto m0;
m5: if (z==1) {maxim(x,n); goto m0;};
gresala(z); goto m0;
m6: if (z==1) {fisier(x,n); goto m0;};
gresala(z); goto m0;
m7: if (z==1) { for(i=0;i<n;i++) for(j=0;j<n;j++) t[i][j]=x[i][j];
aranjare(t,n); h=1; goto m0; };
gresala(z); goto m0;
m8: if (h==1) {afisare(t,n); goto m0;};
if (h==0) { clrscr();gotoxy(15,2);textcolor(12);
cprintf("Masivul nu poate fi afisat. Elementele nu au fost aranjate");
textcolor(15);gotoxy(15,wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>");
getch(); goto m0;}
m9: clrscr();
gotoxy(15,2); textcolor(15); cprintf("Intradevar doriti sa iesiti ? y/n");
v=getch(); if ((v=='n')||(v=='N')) goto m0;
gotoxy(15,4); textcolor(15);
cprintf("Pentru iesire din program culegeti <ENTER>"); getch(); }
Lucrarea de laborator nr.10
Tema: Programe liniare si ramificate in C++ Builder
Exemplu de program:
1.De calculate valoarea expresiei:

x + a
1.5 cos 2 x
C = ln x + 7
;D=
;

x+b
3tgx

2.De calculat valoarea funciei, n dependen de condiie:


ax 2 + bx + c
x < 1.2

2
W = a / x + x + 1 x = 1.2

2
(a + bx ) / x + 1 x > 1.2
Pentru rezolvarea acestor probleme vom folosi urmtoarele componente:
Label;
Edit;
Panel;
Button;
MainMenu (component invizibil) care este folosit pentru a crea meniul formei.
PDF created with pdfFactory Pro trial version www.pdffactory.com

Fiecare problem va fi creat n interiorul unei componente Panel, adic pe Panel1 vor fi
amplasate componentele pentru problema 1 i respectiv pe Panel2 vor fi amplasate componentele pentru
problema 2 dup cum se vede n figura de mai jos.

Fig.1 Conexiunile dintre componente.


Variabelele pe form sunt amplasate cu ajutorul componentei Label, valorile acestor variabele sun
indicate n componenta Edit, iar rezultatele vor fi afiate n Panel.

PDF created with pdfFactory Pro trial version www.pdffactory.com

Fig.2 Interfaa problemei 1

Fig.3 Interfaa problemei 2

PDF created with pdfFactory Pro trial version www.pdffactory.com

Pentru a efectua rezolvarea acestor probleme facem dublu clic pe componenta Rezolvare (care este
un Button) i scriem n acolade codul programului:
Pentru prima problem
float a,b,x,c,d;
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
x=StrToFloat(Edit3->Text);
c=log(x+7*sqrt(abs(x+a)/abs(x+b)));
d=1.5*pow(cos(x),2)/3*tan(x);
Panel3->Caption="C="+FloatToStr(c);
Panel4->Caption="D="+FloatToStr(d);
Pentru a doua problem
float a,b,c,x,W;
a=StrToFloat(Edit4->Text);
b=StrToFloat(Edit5->Text);
c=StrToFloat(Edit6->Text);
x=StrToFloat(Edit7->Text);
if(x<1.2)W=a*pow(x,2)+b*x+c;
else if(x=1.2)W=a/x+sqrt(pow(x,2)+1);
else W=(a+b*x)/sqrt(pow(x,2)+1);
Panel5->Caption="W="+FloatToStr(W);
Dup compilare (tasta F9) iniial va aprea forma din fig.4, trecerea de la o problem la alta se va
efectua din meniul File fig.5.

Fig.4 Fereastra iniial

PDF created with pdfFactory Pro trial version www.pdffactory.com

Fig.5

Fig.6 Rezultatele problemei 1.

PDF created with pdfFactory Pro trial version www.pdffactory.com

Fig.7 Rezultatele problemei 2.


Listingul Programului
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include<math.h>
#include "Unit1.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//initial facem invizibile componentele Panel1, Panel2
Panel1->Visible=false;
Panel2->Visible=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Problema11Click(TObject *Sender)
{
//in momentul cind vom tasta din meniu Problema1, Panel1 va deveni vizibil
Panel1->Visible=true;
Panel2->Visible=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Problema21Click(TObject *Sender)
{
//in momentul cind vom tasta din meniu Problema2, Panel2 va deveni vizibil
Panel1->Visible=false;
Panel2->Visible=true;
}
PDF created with pdfFactory Pro trial version www.pdffactory.com

//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)


{
float a,b,x,c,d;
//convertam din text in float
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
x=StrToFloat(Edit3->Text);
c=log(x+7*sqrt(abs(x+a)/abs(x+b)));
d=1.5*pow(cos(x),2)/3*tan(x);
//afisarea rezultatelor
Panel3->Caption="C="+FloatToStr(c);
Panel4->Caption="D="+FloatToStr(d);
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
float a,b,c,x,W;
//convertam din text in float
a=StrToFloat(Edit4->Text);
b=StrToFloat(Edit5->Text);
c=StrToFloat(Edit6->Text);
x=StrToFloat(Edit7->Text);
if(x<1.2)W=a*pow(x,2)+b*x+c;
else if(x=1.2)W=a/x+sqrt(pow(x,2)+1);
else W=(a+b*x)/sqrt(pow(x,2)+1);
//afisarea rezultatelor
Panel5->Caption="W="+FloatToStr(W);
}
//--------------------------------------------------------------------------Variantele lucrarilor de laborator.
a) De calculat valoarea expresiei:
Var

Formula de calcul
x2
Y=sin 3 ( x 2 + a) 2 x / b ; z= + cos( x + b) 3
a

F= 3 m * tg (t )+ | c * sin( t ) | ; z=m cos( bt*sin(t) )+c

2
3

sin x

Z=

1 + m sin x
2

6
7

s=e ax x + 1 + e bx x + 1.5

cm ln mx ;

F=ln(a+x 2 ) sin 2 ( x / b) ; z=e cx

4
5

Y=

x+ x+a
x | xb|

a 2 x + b x cos(a + b) x
; r= x 2 + b b 2 sin 3 ( x + a ) / x
x +1

Z= ax sin 2 x + e 2 x ( x + b) ; w=cos 2 x 3 x / a 2 + b 2
U=

a 2 x + e x cos bx
; f=e 2 x ln( a + x) b 3 x ln( b x )
x
bx e sin bx + 1
2 cos( x pi / 6)
A=
1 / 2 + sin 2 y

z2
B=1+
3 + z2 /5

PDF created with pdfFactory Pro trial version www.pdffactory.com

Nota

A=|x y / x 3 y / x | ;

y z /( y x)
1 + ( y x) 2

x2 x3 x4
S=1+x+
+
+
; e=x(sinx 3 + cos 2 y )
2
3
4
bt
Y=e sin( at + b) | bt + a | ; s=bsin(at 2 cos 2t ) 1

10
11
12

f=(y-x)

W= x 2 + b b 2 sin 3 ( x + a ) / x ; y=cos 2 x 3 x / a 2 + b 2
bx 2 a
;
e ax 1
s= xb / a + cos 2 ( x + b) 3

S=x 3 tg 2 ( x + b) 2 + a / x + b ;

13

R=x 2 ( x + 1) / b sin 2 ( x + a ) ;

14
15

Y=b tg 2 x

a
; d=a e a cos(bx / a )
sin ( x / a)

C=ln (x+7

16

Q=

1.5 cos 2 x
|x+a|
) ; a=
3tgx
| x+b|

b) De calculat valoarea functiei in dependenta de conditie:


var

Functia

Conditia

var

Functia

Conditia

x3 x a

W= x sin ax
e ax cos ax

x>a

x 2 7 / x 2

Q= ax + 7 x

ln( x + 7 | x + a |

X<1.4

bx ln bx

Q= 1

bx + ln bx

Bx<1

1.5 cos 2 x

1.8ax
Y=

2
( x 2) + 6
3tgx

X<1
X=1

sin x ln x
Y= 2

cos x

x>3.5

ln( x + 1)
F= 2

sin | ax |

(ln x + x ) / x + t

Z= x + t + 1 / x

cos x + t sin 2 x

x=a
x<a
10

Bx=1
Bx>1

11

x 3.5

x>1

12

X1

X<0.5
X=0.5
x>0.5

13

at 2 + b sin t + 1

W= at + b

at 2 cos t + 1
at ln t

Y= 1

e at cos bt

x 7 x

Y= ax 3 + 7 x

ln( x + 7 x )

PDF created with pdfFactory Pro trial version www.pdffactory.com

X=1.4
X>1.4

1<x<2
x>2
T<0.1
T=0.1
t>0.1
1 t 2
t<1
t>2
X<1.3
X=1.3
x>1.3

a ln x + 3 | x |
Y=

2a cos x + 3 x 2

x1

a
2
i + bi + c

W= i

ai + bi

15
I<4
4 i 6
i>6

i2 + 1
a
sin(
)

n
Z=

cos(i + 1 )

14

x>1

Sin
i +1
f0
n

16

Sin
i +1
p0
n
2

ax 2 + bx + c

W= a / x + x 2 + 1

2
(a + bx ) / x + 1

a+b

e x + cos x

S= (a + b) /( x + 1)

e + sin x

e x e x
x(

Y= 4

2
x + 3x + 2

10

X<1.2
X=1.2
X>1.2
X<2.8
2.8 x <6
x 6

X<1.5
X=1.5
x>1.5

Lucrarea de laborator nr.11


Tema: Componente VCL in C++ Builder
De descris proprietile principale i de realizat careva exemple folosind urmtoarele componente:
Nr.Var

Componentele

MainMenu, Label, Animate

MainMenu, Edit, Button

MainMenu, Memo

MainMenu, CheckBox

MainMenu, RadioButton

MainMenu, ListBox

MainMenu, ComboBox

MainMenu, GroupBox

MainMenu, RadioGroup

10

MainMenu, Panel, ColorBox

11

MainMenu, Image, OpenPictureDialog

12

MainMenu, BitBtn

PDF created with pdfFactory Pro trial version www.pdffactory.com

13

MainMenu, ColorBox, Memo

14

MainMenu, TabControl

15

MainMenu, TrackBar

16

MainMenu, ProgressBar

17

MainMenu, Animate, Button

18

MainMenu, DateTimePicker

19

MainMenu, StatusBar

20

MainMenu, OpenDialog

21

MainMenu, SaveDialog

22

MainMenu, OpenPictureDialog

23

MainMenu, SavePictureDialog

Exemplu

n acest exemplu sunt prezentate careva funii i proprieti a urmtoarelor componente:


MainMenu
Memo
Panel
RadioButton
ColorBox
ComboBox
OpenDialog

Fig.1 Compenentele

PDF created with pdfFactory Pro trial version www.pdffactory.com

Listingul Programului
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma link "CGRID"
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::ColorBox1Change(TObject *Sender)
{
if(RadioButton1->Checked==true)Panel1->Color=ColorBox1->Selected;
if(RadioButton2->Checked==true)Panel2->Color=ColorBox1->Selected;
if(RadioButton3->Checked==true)Panel3->Color=ColorBox1->Selected;
if(RadioButton4->Checked==true)Panel4->Color=ColorBox1->Selected;
if(RadioButton5->Checked==true)Panel5->Color=ColorBox1->Selected;
if(RadioButton6->Checked==true)Panel6->Color=ColorBox1->Selected;
}
//--------------------------------------------------------------------------void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
if(RadioButton1->Checked==true)Panel1->Caption=ComboBox1->Text;
if(RadioButton2->Checked==true)Panel2->Caption=ComboBox1->Text;
if(RadioButton3->Checked==true)Panel3->Caption=ComboBox1->Text;
if(RadioButton4->Checked==true)Panel4->Caption=ComboBox1->Text;
if(RadioButton5->Checked==true)Panel5->Caption=ComboBox1->Text;
if(RadioButton6->Checked==true)Panel6->Caption=ComboBox1->Text;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Open1Click(TObject *Sender)
{
if (OpenDialog1->Execute())
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
else
Memo1->Clear();
Memo1->Alignment=taCenter;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Exit1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------

PDF created with pdfFactory Pro trial version www.pdffactory.com

Fig.2 Rezultatul

PDF created with pdfFactory Pro trial version www.pdffactory.com

Cerine privind coninutul raportului


n timpul perfectrii raportului pentru lucrrile de laborator e necesar de inut cont
de urmtoarele cerine.
a) Foaia de titlu

Ministerul Educaiei al Republicii Moldova


Universitatea Tehnic a Moldovei
Catedra Sisteme Optoelectronice

REFERAT

La disciplina Programare
Lucrarea de laborator nr. __
Tema: _______________

A efectuat studentul grupei ___


A verificat profesorul

__ _______
S. Istrati

Chisinu ___

b) Coninutul raportului:
1) Varianta
2) Condiiile problemei
3) Schema logic a algoritmului
4) Listingul programului
5) Descrierea programului (algoritm, variabile, instruciuni, funcii etc.)
6) Descrierea i analiza rezultatelor
7) Concluzii.

PDF created with pdfFactory Pro trial version www.pdffactory.com