Sunteți pe pagina 1din 43

Ministerul Educaţiei și Cercetării

al Republicii Moldova
Colegiul Politehnic Bălţi
Catedra „Tehnica de Calcul”

Indicaţii metodice
pentru efectuarea lucrărilor practice
la disciplina Limbaje de programare

(specialitatea „Automatizarea proceselor tehnologice”)

Elaborat: Josan Liudmila,


profesoară la discipline de specialitate

Bălţi, 2023
Conţinutul lucrărilor practice:

1. Evaluarea expresiilor aritmetice în C++


2. Implimentarea algoritmilor de decizie și selecție
3. Implimentarea algoritmilor ciclico-ramificate
4. Rezolvarea problemelor cu funcții matematice
5. Rezolvarea problemelor cu funcții de conversie
6. Procesarea structurilor
7. Crearea şi prelucrarea masivelor unidimensionale
8. Modificarea masivelor unidimensionale
9. Prelucrarea rîndurilor şi coloanelor în masive bidimensionale
10. Prelucrarea diagonalelor în masive bidimensionale
11. Rezolvarea problemelor cu pointeri
12. Prelucrarea şirurilor de caractere
Condiţiile de prezentare a lucrărilor practice:

1. Lucrare practică se prezintă în termenul prestabilit de profesor la pereche;


2. Informaţia din lucrarea practică se înscriu într-un chenar special completat
conform următorului desen:

3. Lucrarea practică va conţine: a) Nr. lucrării practice; b) Tema lucrării practice;


c)Scopul lucrării practice; d)Conţinutul lucrării practice; e)Varianta dvs-tră
conform numarului de ordine din registru; g)Rezultatele obţinute; e)Concluziile în
forma scrisă obţinute în urma efectuării lucrării practice.

4. Lucrarea practică se apreciază cu admis de către profesor, cînd studentul


acumulează bagajul de cunoştinţe necesar la subiectul dat.

5. Admiterea lucrării se face în forma orală la orele practice sau la consultaţii.


Lucrare practică № 1
Tema: „Evaluarea expresiilor aritmetice în C++”
Scopul lucrării:
- utilizarea corectă a operatorilor aritmetici, logici;
- alcătuirea corectă a expresiilor cu respectarea regulilor de conversie implicită şi conversia forţată a
datelor.
Conținutul lucrării:
De alcătuit algoritmul de rezolvare al problemei conform variantei.
Indicaţii metodice:
Datele iniţiale se întroduc de la tastatura. Rezultatele se afişează pe ecran.

Probleme rezolvate:
Probleme propuse spre rezolvare

De calculat valoarea expresiei:


Lucrare practică № 2
Tema: „Implimentarea algoritmilor de decizie și selecție”
Scopul lucrării:
- Obţinerea deprinderii practice de elaborare şi depanare a programelor cu un grad mai înalt de
complicitate.
- Studierea şi utilizarea instrucţiunilor de decizie (if) ale limbajului pentru elaborarea programelor
ramificate;
Conținutul lucrării:
De alcătuit algoritmul de rezolvare al problemei conform variantei.
Indicaţii metodice:
Datele iniţiale se întroduc de la tastatura. Rezultatele se afişează pe ecran.

Probleme rezolvate:
De calculat valoarea funcţiei, in dependenţă de condiţie:
Probleme propuse spre rezolvare 1
De calculat valoarea funcţiei, in dependenţă de condiţie:
Probleme propuse spre rezolvare 2

Va Condiția problemei Obs


r
1. De la tastatură se citeşte un caracter (literă). Elaboraţi un program care va afişa
textul E VOCALA, dacă caracterul introdus este vocală. De exemplu: date de
intrare E, date de ieşire E VOCALA şi NU E VOCALA în caz contrar.
2. De la tastatură se citeşte o cifră. Elaboraţi un program care va afişa cifra scrisă cu
caractere. De exemplu: date de intrare 5, date de ieşire cinci.
3. De la tastatură se citesc 2 numere întregi şi un operator (+ - * / %). Elaboraţi un
program care în dependenţă de datele introduse va afişa rezultatul. Dacă se va
introduce un operator necunoscut rezultatul va fi 0. De exemplu: date de intrare 8 3
%, 8%3=2.
4. De la tastatură se citesc 2 numere reale şi un operator (+ - * /). Elaboraţi un
program care în dependenţă de datele introduse va afişa rezultatul. Dacă se va
introduce un operator necunoscut rezultatul va fi 0. De exemplu: date de intrare 8 3
*, 8*3=24.
5. De la tastatură se citeşte un număr pozitiv, mai mic sau egal cu 100. Elaboraţi un
program care va afişa numărul citit cu cifre romane. De exemplu: date de intrare
18, date de ieşire XVIII.
6. Magazinul comercial Nr 1, oferă clienţilor fideli o gamă largă de reduceri la
produsele procurate. Dacă suma este mai mică decât 500 lei, atunci în zilele de
odihnă reducerea este de 5%, iar în zilele de lucru 3,5%. Dacă suma este mai mare
sau egală cu 500 lei atunci reducerile se oferă respectiv: 4% Luni, Marţi 5%,
Miercuri 6%, Joi 7%, Vineri, 8% Sâmbătă 9%, Duminică 10%. Elaboraţi un
program care în dependenţă de ziua şi suma introdusă va afişa la ecran reducerea
oferită, cât şi Suma ce necesită a fi achitată. De exemplu: date de intrare Duminică
1000, date de ieşire reducere 100 lei, suma ce necesită a fi achitată 900 lei.
Lucrare practică № 3
Tema: „Implimentarea algoritmilor ciclico-ramificate”
Scopul lucrării:
- Obţinerea deprinderii practice de elaborare şi depanare a programelor cu un grad mai înalt de
complicitate.
- Studierea şi utilizarea instrucţiunilor ciclice (for,while, repeat) ale limbajului C pentru elaborarea
programelor;
Conținutul lucrării:
De alcătuit algoritmul de rezolvare al problemei conform variantei.
Indicaţii metodice:
Datele iniţiale se întroduc de la tastatura. Rezultatele se afişează pe ecran.

Probleme rezolvate 1:
Exemplu 1: De calculat valoarea functiei pe intervalul dat, cu pasul argumentului dat, în
dependenţă de condiţia dată.
Probleme propuse spre rezolvare 1

De calculat valoarea funcţiei pe intervalul dat, cu pasul argumentului dat, în dependenţă de condiţia
dată.
Probleme rezolvate 2:
Exemplul 1. Este dat n întreg. Să se afle prima cifra a lui n (n=123, prima cifră este 1).
#include<stdio.h>
#include<conio.h>
void main()
{
int n,c;
clrscr();
printf("n=");
scanf("%d",&n);
//cât n este mai mare ca 9 se face împărţirea lui n la 10, până se
ajunge la prima cifră
while(n>9) n=n/10;
printf("prima cifra este=%d",n);
getch();
}
Exemplul 2.Este dat n întreg. Să se numere din câte cifre este compus n (n=345, c=3).
#include<stdio.h>
#include<conio.h>
void main()
{
int n,c; //c este un contor, iniţial are valoarea zero
c=0;
clrscr();
printf("n=");
scanf("%d",&n);
//atât cât n este mai mare ca zero, n se împarte la zece şi c creşte
while(n>0){
n=n/10;
c=c+1; }
printf("c=%d",c);
getch();
}
Exemplul 3. Date a, b două numere întregi. Să se afle cel mai mic multiplu comun al lor.

#include<stdio.h>
#include<conio.h>
void main()
{
int i,min,a,b,div;
float mult;
clrscr();
printf("a, b");
scanf("%d%d",&a,&b);
if(a<b) min=a; else min=b; //mai întâi găsim minimul dintre a şi b
//parcurgem ciclul până la minim
for(i=1;i<=min;i++) //găsim cel mai mare divizor comun a lui a şi b
if((a%i==0)&&(b%i==0)) div=i;
//calculăm multiplu comun
mult=(a*b)/(float)div; //float în faţa lui div-pentru conversie de tip
printf("multiplu comun a 2 numere=%.2f", mult);
getch();
}

Exemplul 4. Să se calculeze expresia: .


#include<stdio.h>
#include<conio.h>
void main()
{
int i,n;
float produs;
clrscr();
printf("n=");
scanf("%d",&n);
//notăm iniţial produsul cu valoarea 1
produs=1;
for(i=1;i<n;i++)
produs=produs*(1+(1/(float)(i*i)));
printf("produs=%.2f",s);
getch();
}
Exemplul 5. Este dat numărul n . Să se verifice dacă n este număr prim sau nu(număr prim se
împarte la 1 şi la el însăşi (1, 2, 3, 5, 7, 11 etc.)).
#include<stdio.h>
#include<conio.h>
void main()
{
int i,n,prime;
prime=1;
clrscr();
printf("n=");
scanf("%d",&n);
//parcurgem ciclul de la 2 până la jumătatea lui n
for(i=2; i<n/2; i++)
if(n%i==0) prime=0; //dacă n are divizori atunci
if(prime==1) printf(“n este număr prim”);
else printf(“n nu este număr prim”);
getch();
}
Exemplul 6. Folosind instrucţiunea case şi do while calculăm:
a. Este dat numărul n să se verifice dacă este număr perfect(suma divizorilor este egală cu el
însăşi 6=1+2+3);

b. Să se calculeze expresia: ;

c. Să se calculeze expresia: , , .
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{
int i,n,f,s1,s2,x,y,n1;
float s=0,s3,e;
char c;
clrscr();
s1=s2=0; s=0; x=y=1; f=1;
printf("n=");
scanf("%d",&n);
do{
printf("\n1:se verifica daca este perfect");
printf("\n2:sa se calculeze expresia din punctual b");
printf("\n3:sa se calculeze suma din punctual c");
printf("\n4:esirea\n");
c=getch(); //aşteapta alegerea unei operaţii
switch(c){ //c primeşte una din valorile (1- 4)
case '1':
for(i=1; i<n; i++){
// aflăm divizorii lui n şi calculăm suma lor
if(n%i==0) s1=s1+i;}
if(s1==n) printf("numar perfect");
else printf("nu este numar perfect");break;
case '2':
for(i=1; i<n; i++) {
f=f*i; //calculăm factorialul
s=s+(pow(-1,i)*(i+1))/f; }
printf("factorial=%d\tsuma=%f\n",f,s); break;
case '3':
printf("dati x"); scanf("%d",&x);
e=0,0001; s3=1; n1=1; y=x;
while(abs(y)>e)
{
n1=n1+1;
s3=s3+y;
y=y*(float)(x/n1);
}
printf("\ns=%f\tn=%d\n",s3,n1);
printf("\ny=%d\n",y); break; }}
while(c!='4'); //ciclul lucrează atât timp pân[ c va primi valoarea 4
getch();
}
Exemplul 7. Să se afişeze toate numerele prime din intervalul [2;50].
#include<stdio.h>
#include<conio.h>
void main(){
int i,j;
int prim=0; //
for(i=2; i<50; i++) {
for(j=2; j<i; j++)
{// dacă restul împărţirii nu e zero, atunci are loc instrucţiunea
//de continue, în caz contrar se trece la else
if(i%j) continue;
else {
prim=1; break; //dacă s-a găsit un număr prim se iese din ciclu
}
}
if(!prim) printf("%3d",i); prim=0;
}
getch();
}

Probleme propuse spre rezolvare 2


1. Este dat x număr întreg. Să se calculeze f(x):

2. Este dat x număr întreg. Să se calculeze f(x):

3. Este dat x număr întreg. Să se calculeze f(x):


4. Programul citeşte valorile a, b, c de tip long, rezolvă ecuaţia ax2+bx+c=0 şi afişează
rezultatul.
5. Programul citeşte un număr întreg din segmentul [1;7] şi afişează denumirea zilei din
săptămână ce corespunde acestei cifre (1 – luni, 2 – marţi,…, 7 - duminică).
6. Un număr natural n se numeşte perfect daca este egal cu suma divizorilor săi naturali mai
mici ca n. Sa se determine toate numerele perfecte până la un număr dat.
7. Pentru n şi x numere întregi date să se calculeze:

a. ;

b. ;
8. Pentru n şi x numere întregi date să se calculeze:

a. ;

b. ;
9. Pentru n şi x numere întregi date să se calculeze:

a. ;

b. ;
10. Pentru n şi x numere întregi date să se calculeze:

a. b. ;
11. Pentru n şi x numere întregi date să se calculeze:

a. s=

b.

12. Pentru n dat să se calculeze: , , , ,


13. Pentru ; n dat, să se calculeze:

14. Pentru Sunt date u, v, să se


calculeze:

15. Sa se afle toate numerele întregi pozitive formate din 3 cifre, egale cu media aritmetica a
numerelor obţinute din fiecare din aceste numere în urma efectuării tuturor permutărilor
(inclusiv cea identica) din cifrele sale.
16. Sa se scrie un program care să calculeze cel de-al n-lea număr al şirului lui Fibonacci (Astfel,
fiecare număr Fibonacci este suma celor două numere Fibonacci anterioare, rezultând
secvenţa 0, 1, 1, 2, 3, 5, 8, 13,...).
17. Sunt date a, b numere întregi. Să se determine toate numerele prime din intervalul [a, b].
18. Pentru un număr n dat să se determine dacă n este număr polindrom (număr polindrom
6789876).
19. Sunt date a, b numere întregi. Să se afişeze toate numerele perfecte din intervalul [a,b].
20. De la tastatură se citesc trei numere întregi pozitive a, b, c mai mici ca 100000. Să se afişeze
toţi divizorii comuni.

Lucrare practică № 4
Tema: “Rezolvarea problemelor cu funcții matematice”

Scopul lucrării:
- Obţinerea deprinderii practice de elaborare şi depanare a programelor ciclice.
- Utilizarea funcțiilor.
- Prelucrarea programelor cu funcții.
Conținutul lucrării:
1. De compus o procedură cu ajutorul datelor introduse de la tastatură.
2. De alcătuit algoritmul de rezolvare al problemei conform variantei.
3. De alcătuit programul corespunzător algoritmului.
Indicaţii metodice:
Datele iniţiale se întroduc de la tastatura. Rezultatele se afişează pe ecran.
Suport teoretic:
Autoapelul se face în conformitate cu antetul funcției recursive. Astfel:

● dacă funcția recursivă este de tip non-void, autoapelul se va face într-o expresie;
● dacă funcția recursivă este de tip void, autoapelul se va face într-o instrucțiune de sine
stătătoare; dacă funcția întoarce valori, se vor folosi parametri de ieșire.

Exemple:

Funcție de tip void Funcție de tip non-void

void fact(int n, int &r){ int fact(int n){

if(n == 0) int r;

r = 1; if(n == 0)

else{ r = 1;

fact(n - 1 , r); else

r = r * n; r = n * fact(n - 1);

} return r;

} }

int main(){ int main(){


int a; int a;

fact(4, a); a = fact(4);

cout << a; cout << a;

return 0;} return 0;}

Probleme propuse spre rezolvare:

1. Să se definească o funcţie care să calculeze suma a două numere reale.


2. Să se definească o funcţie care să permute valorile a două variabile întregi.
3. Să se definească o funcţie care să calculeze cea mai mare dintre două variabile întregi.
4. Să se definească o funcţie care să calculeze cel mai mare element al unui vector de numere reale.
5. Să se definească o funcţie care să calculeze valoarea medie şi dispersia unui şir de numere reale.
6. Să se definească o funcţie care să verifice dacă un an este bisect. Anii bisecţi sunt divizibili cu 4.
Anii divizibili cu 100 nu sunt bisecţi cu excepţia că anii divizibili cu 400 sunt bisecţi. Exemplu.
Anul 1992 este bisect, anul 1900 nu este bisect, anul 2000 este bisect.
7. Să se definească o funcţie generică pentru calculul valorii minime a unui şir de numere.

8. Să se calculeze valoarea aproximativă a funcţei: Se vor aduna primii


50 de termeni.
9. Să se definească o funcţie care să calculeze şi să afişeze rădăcinile ecuaţiei de gradul doi
. Se presupune că parametrii a, b, c ai funcţiei sunt reali şi că .
10. Să se definească o funcţie care să calculeze suprafaţa unui cerc cunoscând raza cercului.
11. Să se definească o funcţie care să calculeze media geometrică a unui şir de numere reale

Sirul de numere şi lungimea lui sunt parametrii de intrare ai funcţiei.


12. Să se definească o funcţie care să calculeze n!. Variabila întreagă n va fi parametrul de intrare
al funcţiei. Funcţia se va scrie în două variante : recursiv şi nerecursiv.
13. Să se definescă o funcţie care să calculeze suma a doi vectori, x şi y, cu câte n componente
reale fiecare. Prototipul funcţiei va fi void suma(double x[], double y[], double z[], int n); unde
z este suma vectorilor x şi y, iar n este dimensiunea celor trei vectori.
14. Să se definească o funcţie generică pentru calculul valorii maxime a unui şir de numere.
15. Să se definească o funcţie care să calculeze suma primelor n numere naturale impare.
16. Să se definească o funcţie care să calculeze produsul scalar a doi vectori, x şi y cu n
componente reale fiecare. Indicaţie. Produsul scalar a doi vectori , x şi y are expresia

17. Să se definească o funcţie care să testeze dacă un număr întreg este par.
18. Să se definească o funcţie care să calculeze o cifră hexazecimală a unui număr întreg.

19. De calculat rădăcinile ecuaţiei x2+ax+b = 0 cu ajutorul funcției;


20. De calculat rădăcinile ecuaţiei cy2–dx–f = 0 cu ajutorul funcției;
21. De calculat numărul punctelor cu ajutorul funcției, ce se găsesc în interiorul cercului cu raza
r cu centrul în începutul coordonatelor; coordobatele sînt date în tablourile X(10), Y(10).
22. De determinat perimetrul triunghiurilor, fiind date coordonatele vîrfurilor (xA,xB,xC),
(yA,yB,yC).
23. De calculat numărul punctelor ce se găsesc în interiorul cercului cu raza r şi centrul în
punctul cu coordonatele (1;1); coordonatele date sînt în tabloul X(10), Y(10).
24. De calculat z= (v1+v2+v3)/3, unde v1,v2, v3 – volumul sferelor cu razele corespunzător r1, r2,
r3.
25. De calculat suma elementelor pozitive ale tabloului X(N), Y(N), Z(N).
26. De calculat media aritmetică a elementelor pozitive pentru tabloul A(N1), B(N2), C(N3).
27. De calculat z =(xm1+xm2)/2, unde xm1 şi xm2 – elementele minime ale tablourilor X1(70), X2(80).
28. De calculat suma elementelor diagonalelor principale ale matricei A(N×N), B(M×M).
29. De calculat z = (s1+s2)/2, unde s1– suma elementelor pozitive ale tabloului X(50); s 2– suma
elementelor negative ale tabloului Y(60).
30. De determinat numărul elementelor pozitive pînă la primul număr negativ din tabloul
X(40), Y(50), Z(N).
Lucrare practică № 5
Tema: „Rezolvarea problemelor cu funcții de conversie”
Scopul lucrării:
- Obţinerea deprinderii practice de elaborare şi depanare a programelor ciclice.
- Definirea subprogramelor-utilizator, apelarea şi aplicarea lor.
Conținutul lucrării:
De alcătuit algoritmul de rezolvare al problemei conform variantei.
Indicaţii metodice:
Datele iniţiale se întroduc de la tastatura. Rezultatele se afişează pe ecran.
Suport teoretic:

Subprogramele in limbajul C++ se numesc funcţii.


Subprogramele pot fi:
▪ standard (predefinite) sau

▪ nestandard (utilizator)
Definiţia conţine antetul funcţiei şi corpul acesteia. Nu este admisă definirea unei funcţii în
corpul altei funcţii.

Sintaxa antetului:

▪ tip_rezultat nume (lista parametrilor formali);


Aici tip_rezultat poate fi : un tip standard, o adresă a unui tip definit anterior, o structură de tip
articol. Dacă este omis se consideră ca fiind tipul int.

sau

▪ void nume (lista parametrilor formali)


Dacă are tipul void , apelul la funcţie se face dintr-o linie de program aparte. În celelalte cazuri
poate fi parte componentă a unor expresii.

Lista parametrilor formali este o listă separată prin virgule de nume de variabile şi tipurile
asociate lor, care primesc valorile argumentelor atunci când este apelată funcţia. O funcţie poate să
nu aibă parametri. Totuşi, parantezele sunt necesare, chiar dacă nu există parametri. Toţi parametrii
funcţiei trebuie declaraţi individual, fiecare conţinând atât tipul cît şi numele. Ei sînt creaţi la
intrarea în funcţie şi distruşi la ieşirea din ea. Parametrilor formali li se pot aplica atribuiri sau
folosiţi în expresii. Aceste variabile îndeplinesc sarcina de primire a valorilor argumentelor
transmise funcţiei.

Observaţie: în C++ toate funcţiile au acelaşi nivel de influenţă. Asta înseamnă că nu pot fi
definite într-o funcţie alte funcţii.

Funcţia se utilizează prin apelare la ea. Apelul funcţiei este o construcţie urmată de punct şi
virgulă, numită instrucţiune de apel, de forma:

nume_funcţie (lista_parametrilor_efectivi);
Parametrii declaraţi în antetul unei funcţii sunt numiţi formali, pentru a sublinia faptul că ei
nu reprezintă valori concrete, ci numai ţin locul acestora pentru a putea exprima procesul de calcul
realizat prin funcţie. Ei se concretizează la execuţie prin apelurile funcţiei.

Probleme propuse spre rezolvare:

1. Funcţia schimbă cu locurile simbolul cu cod maxim cu simbolul cu cod minim într-un şir de
caractere
2. Programul prelucrează un şir numeric. Se utilizează o funcţie de citire a elementelor şi o
funcţie ce returnează numărul de elemente pare negative din şir.
3. Programul afişează elementul maxim de pe liniile unei matrice. Se utilizează o funcţie care
primeşte drept argumenţi un pointer la matrice şi numărul liniei.
4. Programul sumează componentele unui şir numeric. Se utilizează o funcţie recursivă
5. Funcţia cu număr variabil de parametri sumează numere întregi.
6. Să se realizeze un program care conţine o funcţie ce citeşte elementele unui vector de
dimensiunea n cu valori întregi şi o funcţie ce returnează câte elemente impare pozitive sunt.
7. Să se realizeze un program care conţine o funcţie ce citeşte elementele unui vector de
dimensiunea n cu valori întregi şi o funcţie ce returnează produsul elementelor pare pozitive.
8. Să se realizeze un program care conţine o funcţie ce citeşte elementele unui vector de
dimensiunea n cu valori reale şi o funcţie ce returnează indicele celui mai mare element.
9. Să se realizeze o funcţie care primeşte un simbol ca parametru şi returnează numărul lui de
ordine dacă-i literă şi -1 în caz contrar. (De ex.: şi ‘c’ şi ‘C’ sunt litere cu numărul de ordine
3).
10. Să se realizeze o funcţie care primeşte un şir de simboluri ca parametru şi returnează 1 dacă
şirul e palindromic (se citeşte la fel din ambele direcţii) şi 0 în caz contrar.
11. Să se realizeze un program care conţine o funcţie ce citeşte elementele unui vector de
dimensiunea n cu valori întregi şi o funcţie ce returnează lungimea celui mai lung subşir
nedescrescător din acest tablou.

12. Să se scrie o funcţie care dintr-o dată calendaristică definită prin numărul zilei din an şi anul
respectiv, determină luna şi ziua din luna respectivă.
13. Să se scrie o funcţie care afişează caracterele unui tablou şi citeşte un întreg.
14. Să se scrie o funcţie care calculează produsul, suma şi numărul elementelor pozitive ale unui
tablou n-dimensional.
15. Să se scrie o funcţie care citeşte un întreg care aparţine unui interval dat.
16. Să se scrie o funcţie care citeşte o dată calendaristică şi determină data calendaristică pentru
ziua următoare.
17. Să se scrie o funcţie care calculează produsul, suma şi numărul elementelor negative ale unui
tablou n-dimensional.
18. Să se scrie o funcţie care calculează produsul, suma şi numărul elementelor unui tablou n-
dimensional dintr-un interval indicat.
19. Să se scrie o funcţie care calculează valoarea unui polinom de gradul n.
20. Într-un tablou de N numere reale de găsit elementul minimal şi de schimbat cu primul
element.
21. Funcţia afisare afişează 65 de simboluri ‘*’ consecutive.
22. Programul efectuează acelaşi lucruca și în varianta1; dar funcţia are doi parametri : un
caracter şi un întreg.
23. Programul înmulţeşte două valori întregi, utilizând o funcţie.
24. Programul calculează factorialul pentru numerele din intervalul 0 – 170, utilizând o funcţie.
25. Funcţia calculează cel mai mare divizor comun a două numere întregi fără semn.
26. Programul citeşte două numere întregi fără semn şi calculează cel mai mic multiplu comun al
lor.
27. Funcţia cu număr variabil de parametri sumează numere întregi.
28. Să se realizeze un program care conţine o funcţie ce citeşte elementele unui vector de
dimensiunea n cu valori întregi şi o funcţie ce returnează câte elemente impare pozitive sunt.
29. Să se realizeze un program care conţine o funcţie ce citeşte elementele unui vector de
dimensiunea n cu valori întregi şi o funcţie ce returnează produsul elementelor pare pozitive.
30. Să se scrie o funcţie care calculează produsul, suma şi numărul elementelor unui tablou n-
dimensional dintr-un interval indicat.
Lucrare practică № 6
Tema: „Procesarea structurilor”
Scopul lucrării:
- Obţinerea deprinderii practice de elaborare şi depanare a programelor cu un grad mai înalt de
complicitate.
- Studierea şi utilizarea instrucţiunilor structurate ale limbajului C++ pentru elaborarea
programelor;
Conținutul lucrării:
De alcătuit algoritmul de rezolvare al problemei conform variantei.
1. Despre studenţi din grupă este dată următoarea informaţie: FNP, anul, ziua şi luna naşterii,
anul de studii, anul înmatriculării la Colegiu, semestrul, notele pe fiecare semestru.
1. Este determinată înregistrarea:
struct denum: string[M];
aria : real;
popul, scoli, spitale, IM: Integer; end;
Indicaţii metodice:
1. De alcătuit programul, care permite afişarea informaţiei iniţiale şi a informaţiei conform
variantei indicată în formă de tabel.
2. Datele de ieşire(rezultatele) se afişează la ecran în LC++.

Suport teoretic:
Un mod de grupare al datelor este tabloul. Tabloul este un set ordonat de date de acelaşi tip.
Un alt mod de grupare al datelor este structura. Structura reuneşte date de diferite tipuri, dar care
se află într-o legătură logică. Obiectele ce fac parte din structură se numesc câmpuri sau membrii
structurii. La definirea şi utilizarea structurilor e necesar a cunoaşte trei lucruri: 1) definirea
structurii; 2) declararea variabilei, care corespunde acestui tip; 3) asigurarea accesului la
componentele variabilei-structură.
O declaraţie de structură are forma:
struct nume { lista de declaraţii } nume1, nume2,…, numen;

Accesul la membrii stucturii se face în două moduri: global sau pe componente. Referirea
globală este permisă numai în operaţia de atribuire, cu condiţia ca ambele variabile (sursă şi
destinaţie) să aibă acelaşi tip. Referirea pe componente (prin numele lor) este o reflectare a faptului
că articolul este o structură cu acces direct. Referirea câmpurilor unei structuri se face prin
calificare, folosind operatorul. (punct).
Se pot declara pointeri către structuri. Există două întrebuinţări ale pointerilor pentru
structuri : generarea unei apelări de funcţii prin referinţă şi crearea listelor înlănţuite. De exemplu :
struct bal { float bilanţ; char nume[80]; } pers, *pstr;. Atunci pstr=&pers; plasează adresa
structurii pers în pstr. Pentru a avea acces la membrii structurii folosind acest pstr se utilizează
operatorul ->: pstr->bilanţ , pstr->nume[0].
Probleme propuse spre rezolvare:

1. De afişat lista studenţilor în ordinea crescătoare a reitingului total(media aritmetică a notelor pe


cei 4 ani de studii). (1)
1. De afişat lista studenţilor în ordinea crescătoare a reitingului după ultima sesiune. (1)
2. De calculat reitingul total al grupei şi de afişat lista studenţilor cu reitingul mai mare decît
reitingul mediu.(1)
3. De calculat reitingul total al grupei şi de afişat lista studenţilor cu reitingul mai mic decît
reitingul mediu.(1)
4. De afişat lista studenţilor în ordinea crescătoare a numelui de familie. (1)
5. De afişat lista studenţilor în ordinea crescătoare a anului de naştere. (1)
6. De afişat lista studenţilor–eminenţi(cu note de 9 şi 10) în ordinea crescătoare a anului de studii.
(1)
7. De afişat informaţia despre studenţii care au bursă(cu media mai mare de 8).(1)
8. De afişat informaţia despre studenţii care nu au bursă(cu media mai mică de 8). (1)
9. De afişat informaţia despre studenţii cu numele de familie, ce încep cu o literă, dintr–un interval
anumit.(1)
10. De afişat informaţia despre ţara (ţările) cu densitate(locuitori/km2) maximă. (2)
11. De afişat informaţia despre ţări în ordine descrescătoare a populaţiei. (2)
12. De afişat informaţia despre ţări în ordine descrescătoare a numărului de spitale la 1000 de
locuitori. (2)
13. De afişat informaţia despre ţări indicînd densitatea poulaţiei, numărul şcolilor, spitalelor la 1000
de locuitori. (2)
14. De afişat informaţia despre ţări în ordine descrescătoare a numărului de şcoli, IMÎ la 1000 de
locuitori. (2)
15. De afişat informaţia despre ţara (ţările) cu densitate minimă. (2)
16. Programul declară o structură carte care conţine 3 elemente. Primul element conţine numele
autorului, al doilea – denumirea cărţii, al treilea – preţul. Sunt prelucrate informaţiile despre câteva
cărţi.
17. Se dă o listă de persoane şi punctajele obţinute de acestea la un concurs. Programul
ordonează descrescător persoanele în funcţie de punctaj şi afişează lista ordonată.
18. Programul exemplifică folosirea reuniunilor pentru citirea şi afişarea datelor despre mai
multe persoane de ambele sexe.
19. Programul declară un tablou de structuri student cu elementele: nume – numele studentului,
tabloul note[5] – pentru a păstra notele, med – pentru păstrarea notei medii. Se utilizează funcţiile
de introducere a datelor despre fiecare student, de calculare a notei medii fiecărui student şi
atribuirii ei variabilei med, de afişare a listei studenţilor.
20. Se consideră structura
struct complex
{ double real, imag; };
ce descrie numerele complexe. Să se definească o funcţie care să adune două numere complexe.
Să se facă un program care să definească trei variabile de tipul complex, să atribuie valori la
două dintre variabile şi să calculeze suma lor utilizând funcţia. Se vor scrie apoi valorile
variabilelor pe ecran sub forma (real, imag). Vom defini tipul de date cu instrucţiunea typedef.
Programul ce rezolvă problema este următorul.
21. Se consideră structura complex din problema rezolvată 1. Să se facă un program care să
definească un vector x cu 10 componente de tipul complex. Se va calcula dimensiunea structurii
complex şi a vectorului x cu ajutorul instrucţiunii sizeof.
22. Se consideră structura complex din problema 8. Să se definească funcţii pentru scăderea,
înmulţirea şi împărţirea a două numere complexe. Prototipurile acestor funcţii vor fi

numcmp subcmp(numcmp a, numcmp b)


numcmp mulcmp(numcmp a, numcmp b)
numcmp divcmp(numcmp a, numcmp b)
23. Fie structura
struct data
{
char nume[20];
int zi, luna, an:
};
ce descrie data naşterii unei persoane. Să se definească un vector cu 5 elemente tip data care
se vor iniţializa cu valorile
nume zi luna an
Radu 10 7 1985
Dragos 11 2 1992
Cosmin 5 9 1978
Ovidiu 8 9 1964
Raul 15 4 1994
Să se calculeze câte persoane sunt născute după anul 1990.
24. Programul realizează operaţii cu fracţii raţionale ( introducere, extragere, atribuire,
inversare, adunare, scădere, înmulţire, împărţire ).
25. Programul realizează admiterea la un liceu şi permite:
● iniţializarea vectorului de înregistrări de tip elev;

● adăugarea unui elev în vector;

● calcularea mediilor;
26. Programul realizează admiterea la un liceu şi permite:
● înlocuirea unui elev cu alt elev;

●inserarea unui elev pe o anumită poziţie în vector;


27. Programul realizează admiterea la un liceu şi permite:
● eliminarea din vector a unui elev având un anumit nume;

● căutarea unui elev după nume;


28. Programul realizează admiterea la un liceu şi permite:
● listarea alfabetică a elevilor;

● listarea elevilor în ordinea descrescătoare a mediilor.


29. Programul administrează un parc de automobile. Informaţiile relative la un automobil sunt:
numărul de locuri, marca, tipul de carburant, numărul de înmatriculare. Programul permite
intrarea unei maşini, ieşirea unei maşini, înlocuirea unei maşini cu alta de acelaşi model
(având alt număr de înmatriculare).

Lucrare practică № 7
Tema: “Crearea şi prelucrarea masivelor unidimensionale”
Scopul lucrării:
- Obţinerea deprinderii practice de elaborare şi depanare a programelor ciclice.
- Studierea şi utilizarea instrucţiunilor de bază ale limbajului pentru crearea şi prelucrarea
masivelor unidimensionale;
Conținutul lucrării:
De alcătuit algoritmul de rezolvare al problemei conform variantei.
Indicaţii metodice:
Datele iniţiale se întroduc de la tastatura. Rezultatele se afişează pe ecran.
Probleme rezolvate:
Sunt date 2 masive unidimensionale X şi Y cu n elemente. De creat un nou masiv Z(n) astfel, încît:

Schema-bloc a programului:
Probleme propuse spre rezolvare
Sînt date 2 masive unidimensionale cu n elemente.
De calculat valoarea funcţiei în conformitate cu condiţia
Lucrare practică № 8
Tema: „Modificarea masivelor unidimensionale”
Scopul lucrării:
- Obţinerea deprinderii practice de elaborare şi depanare a programelor ciclice.
- Studierea şi utilizarea instrucţiunilor de bază ale limbajului pentru prelucrarea şi modificarea
masivelor unidimensionale;
Conținutul lucrării:
De alcătuit algoritmul de rezolvare al problemei conform variantei.
Indicaţii metodice:
Datele iniţiale se întroduc de la tastatura. Rezultatele se afişează pe ecran.

Probleme rezolvate:

1. Este dat un masiv unidimensional X cu n elemente. Aranjaţi elementele primei jumătăţi din
masiv în ordine descrescătoare. Afişaţi masivul rezultant ca răspuns.

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
void main(void) {
int x[20],n,k,i,j,max,aux,r;
printf("\nCulege mărimea masivului n<=20\n");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("Culege elementul %d\n",i);
scanf("%d",&x[i]);}
printf("Masivul iniţial este:\n");
for(i=0;i<n;i++){
printf("%d ",x[i]);}
if (fmod(n,2)==0) k=floor(n/2); else k=floor(n/2)+1;
for(j=0;j<k;j++){ max=x[j];
for(i=j+1;i<k;i++){
if (x[i]>max) {max=x[i]; r=i; aux=x[j]; x[j]=max; x[r]=aux;}
}}; printf("\nMasivul final este:\n");
for(i=0;i<n;i++){
printf("%d ",x[i]);}
getch();
}
2. Este dat un masiv unidimensional X(11). 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[11],i,s=0,p=1;
clrscr();
printf("Culegeti masivul x[11]\n");
for(i=0;i<11;i++) {
printf("x[%d] = ",i);
scanf("%d",&x[i]); }
printf("Masivul initial:\n");
for(i=0;i<11;i++) printf("%d ",x[i]);
for(i=1;i<10;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();}
Probleme propuse spre rezolvare 1
Este dat un masiv unidimensional cu n elemente:
Var Condiţia Masiv
1. Aranjaţi elementele masivului în ordine inversă. X(N)
2. Echivalaţi elementele negative cu modulul lor. Z(N)
3. Aranjaţi elementele primei jumătăţi a masivului în ordine inversă. A(N)
4. Elementele divizibile la 4 de înlocuit cu produsul tuturor elementelor S(N)
din masiv.
5. Aranjaţi elementele masivului în ordine crescătoare. Y(N)
6. Inlocuiţi elementele negative cu suma tuturor elementelor din masiv. R(N)
7. Aranjaţi elementele jumătăţii a doua a masivului în ordine crescătoare. X(N)
8. Schimbaţi cu locul elementele primei jumătăţi a masivului cu X(N)
elementele jumătăţii a doua.
9. Aranjaţi elementele jumătăţii a doua din masiv în ordine K(N)
descrescătoare.
10. Aranjaţi în ordine inversă elementele jumătăţii a doua. M(N)
11. Schimbaţi cu locul elementele: 1 cu 2; 3 cu 4; 5 cu 6 … B(N)
12. Aranjaţi în ordine crescătoare elementele primei jumătăţi. N(N)
13. Aranjaţi pe primele locuri ale masivului elementele negative, apoi – Z(N)
cele pozitive .
14. Aranjaţi elementele masivului în ordine descrescătoare. D(N)
15. Elementele negative echivalaţi cu 0, iar cele pozitive – cu 1. P(N)
Probleme propuse spre rezolvare 2
Este dat un masiv unidimensional:
Var Condiţia Masiv
1. De aflat suma şi cantitatea elementelor pare din masiv. X[12]
2. De calculat media aritmetica şi produsul elementelor cu poziţii impare. Z[15]
3. De comparat produsul elementelor positive cu suma elementelor pare. A[10]
4. De determinat elementul maximal al masivului şi de aflat dacă el este S[13]
pozitiv sau negativ.
5. De calculat diferenţa dintre produsul elementelor şi media lor Y[12]
aritmetică. De determinat paritatea diferenţei.
6. De calculat produsul şi cantitatea elementelor pozitive din masiv. R[11]
7. De aflat cantitatea şi media aritmetică a elementelor divizibile la trei. X[14]
8. De calculat produsul sumelor elementelor pare şi celor impare din X[10]
masiv.
9. De aflat produsul dintre cantitatea elementelor divizibile la doi şi suma K[15]
lor.
10. De calculat media aritmetica a elementelor impare din prima 3/4 din M[16]
masiv.
11. De calculat suma dintre primul element al masivului şi ultimul element B[11]
impar al masivului.
12. De aflat suma şi cantitatea elementelor negative din prima jumătate a N[13]
masivului.
13. De aflat cantitatea elementelor impare printre elementele pozitive ale Z[10]
masivului.
14. De comparat suma elementelor din prima jumătate a masivului cu D[14]
media aritmetică a elementelor din a doua jumătate a masivului.
15. Determinaţi elementul minimal printre elementele cu poziţii pare ale P[13]
masivului.
Lucrare practică № 9
Tema: “Prelucrarea rîndurilor şi coloanelor în masive bidimensionale”
Scopul lucrării:
- Studierea şi utilizarea tehnicilor şi instrucţiunilor de bază ale limbajului pentru
- prelucrarea diagonalelor masivelor bidimensionale.
- Obţinerea deprinderii practice de elaborare şi depanare a programelor cu
- structură “ciclu în ciclu”.
- Însuşirea prelucrării masivelor bidimensionale la nivel de linii şi coloane.
Conținutul lucrării:
De alcătuit algoritmul de rezolvare al problemei conform variantei.
Indicaţii metodice:
Datele iniţiale se întroduc de la tastatura. Rezultatele se afişează pe ecran.
Probleme rezolvate:
Este dat un masiv bidimensional X[n,n]. Determinaţi elementul minimal printre
elementele minimale ale coloanelor impare.

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
void main(void) {
int x[20][20],n,k,i,j,min,minim;
printf("\nCulege mărimea masivului n<=20\n");
scanf("%d",&n);
printf("\nCulege elementele masivului\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("\nCulege elementul x[%d][%d]\n",i,j);
scanf("%d",&x[i][j]);}}
printf("\nMasivul iniţial este:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d ",x[i][j]);}
printf("\n");}
minim=x[1][1]; k=1;
for(i=0;i<n;i++){
if (x[i][1]<minim) minim=x[i][1];}
j=1;
while (j<n){
min=x[1][j];
for(i=0;i<n;i++){
if(x[i][j]<min) min=x[i][j];}
printf("\npe coloana %d minimalul este=%d\n",j,min);
if(min<minim) {minim=min; k=j;}
j+=2;}
printf("\nMinimalul dintre minimali este pe coloana %d si=%d\n",k,minim);
getch();
}
Probleme propuse spre rezolvare:

Este dat un masiv bidimensional [n,n]:


Var Condiţia Masiv
1. Calculaţi suma şi cantitatea elementelor pozitive pare printre elementele rîndurilor X[n,n]
impare.
2. Printre rîndurile pare ale masivului determinaţi rîndul cu suma maximală a elementelor. A[n,n]
3. Determinaţi elementul maximal printre elementele rîndurilor pare. B[n,n]
4. Determinaţi elementul maximal printre elementele minimale ale rîndurilor impare. F[n,n]
5. Calculaţi media aritmetică a elementelor negative impare printre elementele rîndurilor H[n,n]
pare.
6. Printre rîndurile impare ale masivului determinaţi rîndul cu produsul minimal al T[n,n]
elementelor.
7. Determinaţi elementul minimal printre elementele rîndurilor impare. E[n,n]
8. Determinaţi elementul minimal printre elementele maximale ale rîndurilor pare. W[n,n]
9. Calculaţi produsul şi cantitatea elementelor divizibile la 3 printre elementele coloanelor G[n,n]
pare.
10. Printre coloanele pare ale masivului determinaţi coloana cu suma minimală a K[n,n]
elementelor.
11. Determinaţi elementul maximal printre elementele coloanelor impare. C[n,n]
12. Determinaţi elementul maximal printre elementele maximale ale coloanelor pare. Y[n,n]
13. Calculaţi media aritmetică a elementelor negative pare printre elementele coloanelor L[n,n]
pare.
14. Printre coloanele impare ale masivului determinaţi coloana cu produsul maximal al P[n,n]
elementelor.
15. Determinaţi elementul minimal printre elementele coloanelor pare. R[n,n]
Lucrare practică № 10
Tema: “Prelucrarea diagonalelor în masive bidimensionale”
Scopul lucrării:
- Studierea şi utilizarea tehnicilor şi instrucţiunilor de bază ale limbajului pentru
prelucrarea diagonalelor masivelor bidimensionale.
- Obţinerea deprinderii practice de elaborare şi depanare a programelor cu
structură “ciclu în ciclu”.
- Însuşirea procedeelor stereotipe de introducere şi afişare a masivelor
bidimensionale.
Conținutul lucrării:
De alcătuit algoritmul de rezolvare al problemei conform variantei.
Indicaţii metodice:
Datele iniţiale se întroduc de la tastatura. Rezultatele se afişează pe ecran.
Probleme rezolvate:
Este dat un masiv bidimensional X[n,n]. Determinaţi paritatea sau imparitatea
elementului minimal de pe diagonala principală.

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
void main(void) {
int x[20][20],n,i,j,min;
printf("\nCulege mărimea masivului n<=20\n");
scanf("%d",&n);
printf("\nCulege elementele masivului\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("\nCulege elementul x[%d][%d]\n",i,j);
scanf("%d",&x[i][j]);}}
printf("\nMasivul iniţial este:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d ",x[i][j]);}
printf("\n");}
min=x[1][1];
for(i=0;i<n;i++){
if(x[i][i]<min) min=x[i][i];}
if(fmod(min,2)==0)
printf("\nElementul minimal de pe diagonala principală este par si=%d\n",min);
else printf("\nElementul minimal de pe diagonala principală este
impar şi=%d\n",min);
getch();
}
Probleme propuse spre rezolvare
Este dat un masiv bidimensional [n,n]:

Var Condiţia Masiv


1. Calculaţi suma şi cantitatea elementelor pare de sub diagonal principală. X[n,n]

2. Calculaţi media aritmetică a elementelor impare positive de pe diagonala A[n,n]


principală.
3. Determinaţi poziţia şi valoarea elementului maximal de sub diagonala principal. B[n,n]
4. Determinaţi poziţia şi valoarea elementului maximal de pe diagonala principal. F[n,n]
5. Calculaţi media aritmetică a elementelor pozitive deasupra diagonalei principale. H[n,n]
6. Calculaţi media aritmetică a elementelor pare negative de pe diagonala secundară. T[n,n]
7. Determinaţi poziţia şi valoarea elementului minimal deasupra diagonalei principale. E[n,n]
8. Determinaţi poziţia şi valoarea elementului minimal de pe diagonala secundară. W[n,n]
9. Calculaţi produsul şi cantitatea elementelor impare de sub diagonala secundară. G[n,n]
10. Calculaţi media aritmetică a elementelor divizibile la 3 de pe ambele diagonale. K[n,n]
11. Determinaţi poziţia şi valoarea elementului maximal deasupra diagonalei C[n,n]
secundare.
12. Determinaţi paritatea sau imparitatea elementului maximal de pe diagonala Y[n,n]
secundară
13. Calculaţi media aritmetică a elementelor negative deasupra diagonalei secundare. L[n,n]
14. Calculaţi cantităţile elementelor pare şi impare de pe ambele diagonale. P[n,n]
15. Determinaţi poziţia şi valoarea elementului minimal de sub diagonala secundară. R[n,n]
Lucrare practică № 11
Tema: „Rezolvarea problemelor cu pointeri”

Scopul lucrării:
- Obţinerea deprinderii practice de elaborare şi depanare a programelor cu un grad mai înalt de
complicitate.
- obţinerea deprinderilor practice la utilizarea pointerilor, însuşiri aritmeticii pointerilor în
limbajul C++ şi a legăturii dintre pointeri şi tablouri.
Conținutul lucrării:
De alcătuit algoritmul de rezolvare al problemei conform variantei.
Indicaţii metodice:
Datele iniţiale se întroduc de la tastatura. Rezultatele se afişează pe ecran.

Suport teoretic:
Un pointer este o variabilă valorile căreia sunt adrese de memorie. Pe adresele-valori ale unui
pointer se pot păstra date de un anumit tip. Acest tip se indică în declaraţia variabilei de tip pointer
şi se numeşte tipul de bază al pointerului sau tipul spre care pointează pointerul.
Declaraţia de pointer are formatul: tip *id1, *id2,_, *idn, unde tip este un tip de date care
arată ce tip de date se vor păstra pe adresele-valori ale variabilelor id1, id2,_,idn. De
exemplu: int *pi, i; Aici i este o variabilă simplă de tip int, iar pi este un pointer ce indică spre
tipul int, adică în pi se vor păstra adrese ale datelor de tip int. La fel char *c; c este pointer la un
obiect de tipul char. Se pot declara şi tablouri de pointeri: char *s[80].
Alocarea memoriei pentru pointeri. Unui pointer i se alocă, de obicei, un cuvânt al
calculatorului, adică 2 octeţi. Însă modificatorii near, far, huge pentru tipul pointer modifică modul
de alocare a pointerilor în memorie. Modificatorii far şi huge alocă 2 cuvinte, adică 4 octeţi de
memorie pentru pointeri, iar near sau lipsa oricărui modificator semnifică alocarea pointerului pe
un cuvânt, adică pe 2 octeţi de memorie.
Operatori specifici pentru pointeri: * - se utilizează pentru accesul la conţinutul variabilei
adresate; & - se utilizează pentru aflarea adresei variabilei. Pentru tipărirea adreselor se foloseşte
specificatorul de format %p. Pentru a atribui pointerului pi adresa variabilei i scriem pi=&i. Dacă
pi este un pointer, atunci *pi este data stocată pe adresa-valoare a lui pi. De exemplu, fie i=10 şi
pi=&i. Atunci pi are ca valoare adresa lui i, iar *pi este chiar valoarea 10 a lui i. La declaraţie
pointerii se pot iniţializa: float w, *y=&w; sau char *pc=”Informatica”; Aici pc este un pointer
de tipul char * şi lui i se atribuie ca valoare adresa de început a şirului de caractere ”Informatica”,
adică adresa primului caracter din şir.
Se pot declara pointeri de tipul void *, adică pointeri la care nu se indică tipul de bază. În acest
caz nu se ştie în prealabil tipul datelor ce se vor păstra pe adresele-valori ale pointerului. De
exemplu: int x=10, *pi; void *pv; Atribuirea pi=&x şi pv=pi sunt corecte. Atribuirea pi=pv nu
este corectă. La atribuirea sau citirea datelor de pe adresele-valori ale unui pointer de tip void *
trebuie explicit indicat tipul datelor respective, adică pi=(int*)pv.

Probleme propuse spre rezolvare:

1. Programul determină elementul maxim dintr-un şir numeric; sunt demonstrate diferite moduri de
adresare la elementele unui tablou unidimensional.
2. Programul inversează un şir de caractere.
3. Programul afişează doar numerele prime dintr-un tablou de numere întregi pozitive.
4. Programul determină caracterul de cod maxim într-un şir de caractere.
5. Programul ordonează crescător un şir de caractere.
6. Programul formează din vectorul x de numere întregi un vector y de numere întregi, în care y[i] să
fie restul împărţirii lui x[i] la suma cifrelor lui.
7. Programul afişează doar simbolurile cuprinse între simbolurile ( şi ). Se presupune că nu există mai
multe paranteze.
8. Programul afişează doar simbolurile cuprinse între simbolurile ( şi ). Se presupune că nu există mai
multe paranteze. (Alt variant)
9. Programul determină şi afişează elementul maxim pe liniile unui tablou bidimensional. Sunt
demonstrate diferite moduri de adresare la elementele tabloului.
10. Se va aloca un vector de 5 componente tip double folosind operatorul new. Se vor citi
componentele vectorului de la tastatură şi se va calcula suma componentelor.
11. Se va aloca un vector de 3 componente tip double folosind operatorul malloc. Se vor citi
componentele vectorului de la tastatură şi se va calcula suma componentelor.
12. Fie doi vectori, x şi y, cu câte trei componente de tip double fiecare. Elementele acestor vectori se
vor citi de la tastatură. Să se facă un program care să calculeze suma celor doi vectori. Vectorii se
vor aloca cu instrucţiunea new.
13. Fie doi vectori, a şi b, cu câte trei componente de tip double fiecare. Elementele acestor vectori se
vor citi de la tastatură. Să se facă un program care să calculeze produsul scalar al celor doi vectori.

Indicaţie. Produsul scalar al celor doi vectori este


14. Fie un vector a cu trei componente de tip double. Componentele vectorului a se citesc de la
tastatură. Să se determine cel mai mic component al vectorului a. Vectorul a se va aloca cu
instrucţiunea new.
15. Fie un vector x cu trei componente de tip double. Componentele vectorului x se citesc de la
tastatură. Să se determine cel mai mare component în valoare absolută al vectorului a. Vectorul a se
va aloca cu instrucţiunea malloc.
16. Să se facă o funcţie care să calculeze suma componentelor unui vector x cu cinci componente de tip
double. Prototipul funcţiei va fi
double suma(double x[]) ;
Să se utilizeze funcţia pentru a calcula în funcţia main() suma componentelor unui vector a cu 5
componente de tip double alocat cu funcţia new. Elementele vectorului a se citesc de la tastatură.
17. Programul determină cel mai mic număr dintre elementele de indice par ale unui şir numeric.
18. Programul determină elementul maxim dintr-un şir numeric; sunt demonstrate diferite moduri de
adresare la elementele unui tablou unidimensional.
19. Programul inversează un şir de caractere.
20. Programul afişează doar numerele prime dintr-un tablou de numere întregi pozitive.
21. Programul determină caracterul de cod maxim într-un şir de caractere.
22. Programul ordonează crescător un şir de caractere.
23. Programul formează din vectorul x de numere întregi un vector y de numere întregi, în care y[i] să
fie restul împărţirii lui x[i] la suma cifrelor lui.
24. Programul afişează doar simbolurile cuprinse între simbolurile ( şi ). Se presupune că nu există mai
multe paranteze.
25. Programul afişează doar simbolurile cuprinse între simbolurile ( şi ). Se presupune că nu există mai
multe paranteze. (Alt variant)
26. Programul determină şi afişează elementul maxim pe liniile unui tablou bidimensional. Sunt
demonstrate diferite moduri de adresare la elementele tabloului.
27. Se va aloca un vector de 5 componente tip double folosind operatorul new. Se vor citi
componentele vectorului de la tastatură şi se va calcula suma componentelor.
28. Se va aloca un vector de 3 componente tip double folosind operatorul malloc. Se vor citi
componentele vectorului de la tastatură şi se va calcula suma componentelor.
29. Fie doi vectori, x şi y, cu câte trei componente de tip double fiecare. Elementele acestor vectori se
vor citi de la tastatură. Să se facă un program care să calculeze suma celor doi vectori. Vectorii se
vor aloca cu instrucţiunea new.
30. Fie doi vectori, a şi b, cu câte trei componente de tip double fiecare. Elementele acestor vectori se
vor citi de la tastatură. Să se facă un program care să calculeze produsul scalar al celor doi vectori.

Indicaţie. Produsul scalar al celor doi vectori este


Lucrare practică № 12
Tema: „Prelucrarea şirurilor de caractere”
Scopul lucrării:
- Utilizarea funcţiilor standarde de prelucrare a şirurilor de caractere şi operaţii cu şiruri.
- Declararea șirurilor de caractere și utilizarea lor în cadrul aplicaților.
- Copierea, concatenarea și compararea șirurilor de caractere.
- Utilizarea funcțiilor standard la prelucrarea șirurilor de caractere.
- Conversia datelor din/în șir de caractere.
Conținutul lucrării:
De alcătuit algoritmul de rezolvare al problemei conform variantei.
Indicaţii metodice:
Datele iniţiale se întroduc de la tastatura. Rezultatele se afişează pe ecran.

Probleme rezolvate:
Este dat un şir de caractere. De şters din şir caracterele minuscule de pe poziţii 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();
}
Probleme propuse spre rezolvare:

Va Condiţia
r
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 cite ori in şir se intilneşte fiecare pereche de
caractere identice aşezate alături. Exemplu: aa…bb…aa…
3. Este dat un şir de caractere. De şters din şir toate spaţiile de prisos. Astfel, intre
cuvinte va fi numai cite un spaţiu.
4. Este dat un şir de caractere. De aranjat caracterele din şir in ordine alfabetică.

5. Este dat un şir de caractere. De aflat de cite ori este intilnit in ş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 aşezate
alături. Exemplu: aa, bb.
8. Este dat un şir de caractere. De determinat valorile şi poziţiile 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 fără pereche, el va rămine neschimbat.
10. Este dat un şir de caractere. De indicat simbolurile care se intilnesc o singură dată in 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 numărul de inlăturări.

13. Este dat un şir de caractere. De determinat valorile şi poziţiile primelor trei
consoane din şir.
14. Este dat un şir de caractere. Din textul dat de şters caracterele majuscule şi de
calculat lungimea textului rămas.
15. Este dat un şir de caractere. De şters din şir caracterele de pe poziţii impare.

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