Sunteți pe pagina 1din 36

Ministerul Educaţiei, Culturii și Cercetării

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

Indicaţii metodice
pentru efectuarea lucrărilor practice la
Programarea structurată

(specialitatea „Rețele de calculatoare”)


Total ore practice 30

Elaborat: Josan Liudmila,


profesoară la discipline de specialitate

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

1. Itroducerea și extragerea datelor la nivel de cosolă în C++…..2 ore


2. Evaluarea expresiilor aritmetice în C++.....................................2 ore
3. Implementarea algoritmilor de decizie și selecție......................2 ore
4. Implimentarea algoritmilor ciclico-ramificate……...................2 ore
5. Crearea şi prelucrarea masivelor unidimensionale...................2 ore
6. Modificarea masivelor unidimensionale……............................2 ore
7. Prelucrarea diagonalelor în masive bidimensionale..................2 ore
8. Prelucrarea rîndurilor şi coloanelor în masive bidimen……...2 ore
9. Prelucrarea şirurilor de caractere……………...........................2 ore
10.Masive de şiruri…………….......................................................2 ore
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: „Itroducerea și extragerea datelor la nivel de consolă în C++”
Scopul lucrării:
- însuşirea funcţiilor de intrare/ieşire;
- utilizarea funcţiilor de intrare/ieşire la introducerea şi extragerea datelor sub controlul unor formate
şi fără aceasta;

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:

Exemplul 1. Sunt date 2 variabile de tip real. Să printf("\nu=%d\t%d<<2=%d\n",u,u,v);


//deplasare la dreapta a lui x,
se efectueze operaţiile suma, produs şi
înseamnă împărţirea lui cu 2
împărţire. y=x>>2;
#include<stdio.h> printf("\nx=%ld\t%ld>>2=%ld\
#include<conio.h> n",x,x,y);
int main(){ getch();}
float k,l;
clrscr(); Exemplul 4. Programul determine maximul şi
printf("dati k si l:"); minimul dintre două numere întregi date.
scanf("%f%f",&k,&l); #define max(x,y) x>y?x:y
printf("suma=%.2f",k+l); #define min(x,y) x<y?x:y
printf("\nimpartirea=%.2f",k/l); #include <stdio.h>
printf("\nprodus=%.2f",k*l); int main(){
getch();} int x,y;
printf(“daţi x şi y”);
Exemplul 2. Este dat un număr întreg.
scanf(“%d%d”,&x,&y);
Programul verifică dacă numărul introdus este printf(“maximul=%d”,max(x,y));
pozitiv, negativ sau zero. printf(“\nminimul=%d”,min(x,y));
#include <stdio.h> getch();}
int main() Exemplul 5. Să se determine aria unui triunghi
{
int nr; în funcţie de lungimile laturilor sale.
printf("Numar="); #include<stdio.h>
scanf("%d",&nr); #include<conio.h>
(nr<0)?printf("negativ\n"):((nr>0)? #include<math.h>
printf("pozitiv\n") : printf("zero\ int main(){
n")); float a,b,c,p,aria;
} printf(“Daţi lungimile laturilor:\
n”);
Exemplul 3. Programul citeşte două scanf(“%f%f%f”,&a,&b,&c);
numere întregi şi testează operatorii >> şi <<. p=(a+b+c)/2;
Tastaţi programul pentru: x=1, u=4; x=2, u=8; aria=sqrt(p*(p-a)*(p-b)*(p-c));
x=3, u=5; x=-1, u=-1; x=-5, u=-5. printf(“Aria este: %7.3f”,aria);
#include<stdio.h> getch();}
#include<conio.h> Exemplul 5. Este dat n întreg. Să se afle
int main(){ ultima cifră a lui n.
long x,y; #include<stdio.h>
int u,v; #include<conio.h>
clrscr(); int main(){
printf("dati x,u:"); int n,c;
scanf("%ld%d",&x,&u); printf("n=");
//deplasare la stânga a lui u, scanf("%d",&n);
înseamnă înmulţirea lui cu 2 n=n%10; printf("c=%d",c);
v=u<<2; getch();}
Probleme propuse spre rezolvare:

Var Condiția problemei


.
1. De la tastatură se citește un caracter. Elaboraţi un program prin intermediul la ecran se va afişa un
triunghi de forma
a) b)
Date de intrare * Date de intrare *
Date de ieşire Date de ieşire
* ****
** ***
*** **
**** *
2. Într-o tabără numărul de băieţi este cu 10 mai mare decât cel al fetelor. De la tastatură se citeşte
numărul de fete. Elaboraţi un program prin intermediul căruia se va determina numărul elevilor
din tabără. Exemplu: date de intrare: 50 date de ieşire: 110.
3. Într-un autobuz care pleacă în excursie sunt 7 copii. De la încă două şcoli urcă alţi copii, numărul
acestora citindu-se de la tastatură. Elaboraţi un program prin intermediul căruia se va determina
numărul copiilor care au plecat în excursie. Exemplu: Date de intrare: 15 20 Date de ieşire: 42
copii.
4. Un brăduţ este împodobit cu globuleţe albe, roşii şi albastre. Numărul globuleţelor albe se citeşte
de la tastatură. Elaboraţi un program prin intermediul căruia se va determina numărul globuleţelor
din brăduţul, dacă numărul de globuleţelor roşii este cu 3 mai mare decât numărul de globuleţe
albe, iar numărul globuleţele albastre este mai mic cu 2 decât totalul celor albe şi roşii. Exemplu:
Date de intrare: 12 Date de ieşire: 52.
5. Ion şi Vasile joacă după următoarele reguli: Ion spune un număr iar Vasile trebuie să găsească
cinci numere consecutive, crescătoare, numărul din mijloc fiind cel ales de Ion. Elaboraţi un
program prin intermediul căruia la ecran se vor afişa numerele găsite de către Vasile. Exemplu:
Ion spune 10, Vasile spune 8 9 10 11 12.
6. Doi copii au primit acelaşi n mere, n se citeşte de la tastatură. Elaboraţi un program prin
intermediul căruia la ecran se va afişa numărul de mere pe care îl au copii dacă primul copil
mănâncă un măr şi dă unul celuilalt copil. Exemplu: Date de intrare: 10 Date de ieşire: primul
copil 8 mere al doilea copil 11 mere.
7. Maria vrea să verifice dacă greutatea şi înălţimea ei corespund vârstei pe care o are. Ea a găsit
într-o carte următoarele formule de calcul ale greutăţii şi înălţimii unui copil, v fiind vârsta:
greutate=2*v+8 (în kg), înălţime=5*v+80 (în cm).
8. Elaboraţi un program prin intermediul căruia se va determina greutatea şi înălţimea ideală a unui
copil, dacă vârsta se citeşte de la tastatură.) Se introduc de la tastatură trei cifre. Elaboraţi un
program prin intermediul căruia se va afişa pe aceeaşi linie 5 numere formate cu aceste cifre luate
o singură dată. Exemplu: date de intrare: 3 4 2 Date de ieşire: 324 342 243 234 432.
9. De la tastatură se citesc tei numere întregi. Elaboraţi un program prin intermediul căruia se vor
determina toate sumele posibile de câte două numere. Afişarea va cuprinde şi termenii sumei, nu
numai valoarea ei. Exemplu: Date de intrare: 2 13 4 Date de ieşire: 2+13=15 2+4=6 13+4=17.
10. De la tastatură se citeşte un număr întreg n(1≤n≤10). Elaboraţi un program prin intermediul căruia
se va afişa la ecran tabla înmulţirii cu numărul n. Exemplu: pentru n=5, se va afişa pe verticală
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25 6x5=30 7x5=35 8x5=40 9x5=45 10x5=50.
11. De la tastatură se citeşte un număr întreg, care reprezintă numărul de ani. Elaboraţi un program
prin intermediul căruia la ecran se va afişa numărul de luni, zile şi ore corespunzătoare. Se
consideră că un an are 365 zile. Exemplu: date de intrare: 2 date de ieşire: 24 luni 730 zile 17520
ore.
12. De la tastatură se citesc două numere întregi a şi b. Elaboraţi un program prin intermediul căruia
să se schimbe între ele valorile variabilelor a şi b. La ecran se vor afişa noile valori ale lui a şi b.
13. Distanţa dintre două oraşe A şi B este de x km. Un şofer cu automobilul, parcurge această distanţă
în a minute. Elaboraţi un program prin intermediul căruia la ecran se va afişa viteza medie a
automobilului, dacă valorile lui x şi a se citesc de la tastatură.
14. Distanţa dintre două oraşe A şi B este de x km. Un şofer cu automobilul parcurge această distanţă.
Elaboraţi un program prin intermediul căruia se va determina costul deplasării, dacă la distanţa de
100 km automobilul consumă în medie y litri de combustibil. Costul unui litru de combustibil,
distanţa dintre oraşe şi consumul la 100km, se citesc de la tastatură.
15. O navă parcurge distanţa d (în km) dintre două staţii orbitale în a săptămâni şi b zile. Elaboraţi un
program prin intermediul căruia se va determina viteza navei exprimată în km/oră.
Lucrare practică № 2
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ă № 3
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ă № 4
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();
}
1 1 1 1
produs=(1+ 2
)(1+ 2 )(1+ 2 ). ..(1+ 2 )
Exemplul 4. Să se calculeze expresia: 1 2 3 n .
#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);
n
∑ −1i (i+1 )/i!
b. Să se calculeze expresia: i=1 ;
x x3
2
xn
s=1+ x + + +⋯+
c. Să se calculeze expresia: 2! 3! n! , e=0 . 0001 , |x/n!|>e .
#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
x , daca−2≤x<2 ,
f ( x )=
4 , in caz contrar ;
2. Este dat x număr întreg. Să se calculeze f(x):
{
x 2 + 4 x+ 5 , x≤2 ,
f ( x )= 1
, in ca z contrar ;
x 2 + 4 x +5
3. Este dat x număr întreg. Să se calculeze f(x):

{
0 , x ≤0 ,
f ( x )= 2
x −x , 0<x≤1 ,
x −sin πx 2 , in caz contrar .
2

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:
n i
∑ ix!
a. i=1 ;
n
(−1 )i (i+1 )
∑ i!
b. i=1 ;
8. Pentru n şi x numere întregi date să se calculeze:
n i( i−1)/2
(−1 )

i!
a. i=1 ;
n
∑ ( i1! + √|x|)
b. i=1 ;
9. Pentru n şi x numere întregi date să se calculeze:
n
sin(ix )
∏ (1+ i!
)
a. i=1 ;
n

( x2 )
2 i+ x
1
∑ i!( x+i)!
b. i=1 ;
10. Pentru n şi x numere întregi date să se calculeze:
n n
x +cos (ix ) (1−x )i+1 + 1
∑ ∏ 2
a. i=1 2i
b. i=1 ((i−1)!+1 ) ;
11. Pentru n şi x numere întregi date să se calculeze:
(−1)[lg 1 ] (−1)[lg 2 ] (−1)[lg n ]
+ +. ..+
a. s= 1 2 n
n
(1−x )i+1 + 1
∏ 2
b. i=1 ((i−1)!+1 )
n x
∑ 1+|yi |
x = y 1=1 , x i=0 ,3 x i−1 , y i =xi−1 + y i−1 , i=2,3,...
12. Pentru n dat să se calculeze: i=1 i , 1

13.
a =3 bk −1 +2 ak−1 ; b k =2 ak −1 +bk −1 ; k=2,3,... ; n dat, să se calculeze:
Pentru a 1=b 1=1 ; k
n k
∑ (1+a 22+b 2 )k ! .
k =1 k k

14.
a =2b k −1 +ak −1 ; b k =2 a2k −1 +bk −1 , k=2,3,... Sunt date u, v, să se
Pentru a 1=u ; b 1=v ; k
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ă № 5
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ă № 6
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ă № 7
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ă № 8
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ă № 9
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.
Lucrare practică № 10
Tema: „Masive de şiruri”
Scopul lucrării:
- Utilizarea funcţiilor standarde de prelucrare a şirurilor de caractere şi operaţii cu şiruri.
- Utilizarea funcțiilor standard la prelucrarea masivelor de ș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:
Şir normal – un şir de caractere compus din cuvinte separate prin spaţiu. După
ultimul cuvint urmează punct.
Este dat un şir normal. De inversat cuvintele de lungime pară ce se află pe poziţii
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(); }
Probleme propuse spre rezolvare:

Şir normal – un şir de caractere compus din cuvinte separate prin spaţiu. După
ultimul cuvint urmează punct.

Var Condiţia
1. Este dat un şir normal. De schimbat cu locul primul şi ultimul caracter din
fiecare cuvint al şirului.
2. Este dat un şir normal. De efectuat căutarea perechilor de cuvinte, in care unul
din cuvinte este inversia altuia.
3. Este dat un şir normal. De determinat cuvintele cu caracterele aranjate in
ordine alfabetică.
4. Este dat un şir normal. De inversat cuvintele de pe poziţii impare.
5. Este dat un şir normal. De şters litera din mijloc din toate cuvintele de lingime
impară.
6. Este dat un şir normal. De aranjat cuvintele din şir in ordine inversă.
7. Este dat un şir normal . De determinat cuvintul care conţine numărul maximal
de consoane.
8. Este dat un şir normal. De şters din şir cuvintele ce se intilnesc o singură dată.
9. Este dat un şir normal. De schimbat cu locul cel mai scurt cuvint cu cel mai
lung cuvint.
10. Este dat un şir normal. De şters din şir cuvintele ce se repetă.
11. Este dat un şir normal. De aranjat cuvintele şirului in ordine descrescătoare
după cantitatea de vocale din cuvinte.
12. Este dat un şir normal. De determinat cuvintele ce se intilnesc in şir de k ori.
Numărul k va fi indicat de utilizator.
13. Este dat un şir normal. De găsit cuvintele simetrice de lungime pară.
14. Este dat un şir normal. De şters din şir cuvintele simetrice.
15. Este dat un şir normal. De şters din şir cuvintele ce se repetă.

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