Sunteți pe pagina 1din 5

1.

Să se scrie programul pentru calculul sumei elementelor unui vector.

Elementele vectorului sunt reale şi se introduc de la tastatură.

Fie X

= (x 1 , x 2 ,…, x n ). Suma elementelor este

S

=

x

1

+

x

2

+

+

x

n

=

n

x

i = 1

i

.

Ştiind că adunarea numerelor reale este asociativă şi că elementul neutru pentru adunare este 0, algoritmul poate fi descris astfel:

S 0 = 0;

……………

+ x 1 = 0 + x 1 = x 1 ;

S 1 = S 0

S 2 = S 1 + x 2 = x 1 + x 2 ; …………… S n = S n-1 + x n = x 1 + x 2 + … + x n ; …………. = S n .

S

Deoarece sumele parţiale S 0 , S 1 , … , S n nu ne interesează şi, în plus, se ocupă inutil memorie internă, însumarea se va realiza în aceeaşi locaţie de memorie, cu

adresa simbolică S. Aici se vor depune sumele parţiale (se va cumula câte un element).

S = 0;

…………

S

S = S +

……………

x 2 =

= S + x 1 = 0 + x 1 = x 1 ;

x 1 + x 2 ;

S = S + x n = x 1 + x 2 + … + x n ;

Algoritmul recursiv poate fi descris cu ajutorul a două formule:

- formula de start: S = 0;

- formula recursivă: S = S + x(i), i= 1,n.

Elementele vectorului sunt reale şi se introduc de la tastatută.

#include<stdio.h> void main() {int n; printf("Introduceti dimensiunea vectorului,n="); scanf("%d",&n); float x[100]; for(int i=0;i<n;i++){printf("x[%d]=",i); scanf("%f",&x[i]);} float s; for(i=0,s=0;i<n;i++) s+=x[i]; printf("Suma este %5.2f \n ",s);

}

2. Să se scrie programul pentru calculul sumei elementelor de rang impar

ale unui vector de dimensiune n.

Fie X=(x 1 ,x 2 ,

multe variante de rezolvare. Varianta 1. Se parcurge vectorul cu indicele pornind de la valoarea iniţială 1

Există mai

,x

n ). Suma elementelor de rang impar este S=x 1 +x 3 +x 5 +

şi crescând cu pasul 2; se utilizează structura DO- WHILE.

#include<stdio.h> void main() {float v[100],s; int n,i; printf("n="); scanf("%d",&n);

for(i=0;i<n;i++){printf("a(%d)=",i);scanf("%f",&v[i]);}

s=0;i=1;

do{s=s+v[i];i=i+2;}while(i<n);

printf("suma este:%f",s);

}

Varianta 2. Se parcurge vectorul cu indicele pornind de la valoarea iniţială 1 şi crescând cu pasul 2; se utilizează structura FOR.

#include<stdio.h> void main() {float v[10],s;int n,i; printf("n="); scanf("%d",&n);

for(i=0;i<n;i++){printf("a(%d)=",i);scanf("%f",&v[i]);}

for(s=0,i=1;i<n;i+=2)s=s+v[i];

printf("suma este:%f",s);

}

Varianta 3. Se parcurge integral vectorul şi se selectează elementele de rang impar, testând indicele prin verificarea restului împărţirii lui i la 2 (i %2).

#include<stdio.h> void main() {float v[10],s;int n,i; printf("n=");scanf("%d",&n);

for(i=0;i<n;i++){printf("a(%d)=",i);scanf("%f",&v[i]);}

s=0;

for(i=0;i<n;i++)

if ((i%2)!=0) s=s+v[i]; printf("suma este:%f",s);

}

Varianta 4. Variabila de ciclare ia valori între 1 şi cel mai apropiat întreg faţă de n/2, iar elementele vectorului se selectează utilizând indicele 2*i-1.

#include<stdio.h> void main() {float v[10],s;int n,i; printf("n=");scanf("%d",&n);

for(i=0;i<n;i++){printf("a(%d)=",i);scanf("%f",&v[i]);}

s=0;

for(i=1;i<n/2+1;i++)

s=s+v[2*i-1];

printf("suma este:%f",s);

}

3. Să se scrie programul pentru calculul sumei elementelor strict pozitive

ale unui vector de dimensiune n.

n

Fie X=(x 1 ,x 2 ,

,x

astfel:

 

S= 0;

------------------

dacă

x 1 >0,

atunci

dacă

x 2 >0,

dacă x n >0, atunci

------------------

}

4.

n ). Suma elementelor este S =

i =1

x i > 0

x

i

. Algoritmul poate fi descris

S = S+ x 1 ;

atunci S = S+ x 2 ;

S = S+ x n ;

dacă S>0 afişează S altfel, afişează că nu există elemente pozitive

#include <stdio.h> void main() { float x[100], s; int n,i; printf("Dimensiunea vectorului:"); scanf("%d",&n); printf("Elementele vectorului: \n"); for(i = 0; i < n; i++) scanf("%f", &x[i]); s = 0; for(i = 0; i < n; i++) if (x[i] > 0)s = s + x[i]; //echivalent cu s += x[i] if (s > 0)printf("Suma=%10.2f",s); else printf("Vectorul nu are elemente pozitive!");

Să se scrie programul pentru calcularea valorii unui polinom într-un

punct dat. Coeficienţii polinomului sunt numere reale şi se introduc de la tastatură. Coeficienţii polinomului se reţin într-un vector. Pentru n, gradul polinomului, vectorul de coeficienţi va conţine n+1 elemente.

#include<stdio.h> void main()

{int n; float coef[100], x, val; printf("Introduceti gradul polinomului, n=");scanf("%d",&n); printf("Coeficientii polinomului: \n"); for (int i=0;i<=n;i++){ printf("coeficientul lui x la puterea %d =", i); scanf("%f", &coef[i]);} printf("Punctul pentru care se va calcula valoarea:"); scanf("%f", &x); float temp = 1; val = coef[0]; for (i=1;i<=n;i++) {temp *=x; val = val + coef[i]*temp;// sau val += coef[i]*temp;

}

printf("Valoarea pol. in punctul %5.2f este %5.2f",x,val);

}

5.

elementelor pozitive dintr-un vector de dimensiune n. Fie X = (x 1 , x 2 , … , x n ). Media geometrică a elementelor pozitive este

programul pentru calcularea mediei geometrice a

se

scrie

MG =

∏ x k i i = 1, k
x
k
i
i
= 1,
k

, x i > 0. Ştiind că înmulţirea numerelor reale este asociativă şi are

elementul neutru 1, produsul

P =

x

i

= 1,

k

i se calculează astfel:

- formula de start: P = 1;

- formula recursivă: P = P × x(i) ; x(i) > 0; i = 1,k.

Pentru economie de memorie internă, produsul se calculează direct în variabila MG. Media geometrică se poate determina numai dacă numărul elementelor pozitive (k) este mai mare decât 2. Pentru calcularea mediei geometrice se

utilizează formula n m m a n , a > 0, pentru determinarea căreia există

funcţiile standard exp(x) şi log(x).

a
a

=

e (

*ln(

)) /

#include<stdio.h> #include<math.h> void main() {int n; printf("Introduceti dimensiunea vectorului, n="); scanf("%d",&n); float x[100]; for(int i=0;i<n;i++){ printf("x[%d]=",i); scanf("%f", &x[i]); } float mg=1; int k = 0; for (i=0; i<n;i++) if(x[i] > 0){ mg *= x[i]; k++;} if (k>1) { mg = exp(log(mg)/k); printf("Media geometrica este %f .", mg);} else printf("Media geometrica nu se poate calcula!");

}

6. Să se scrie programul pentru determinarea primei apariţii a unei

valori date într-un vector neordonat, de dimensiune n. Vectorul se parcurge secvenţial de la primul element, cu ajutorul instrucţiunii while, până când se regăseşte valoarea căutată, sau până la ultimul element, caz în care valoarea căutată nu se află în vector, afişându-se un mesaj corespunzător.

#include<stdio.h> void main()

{int n;

float x[100], a;

printf("Introduceti dimensiunea vectorului, n="); scanf("%d",&n); for(int i=0;i<n;i++) {printf("x[%d]=",i); scanf("%f", &x[i]);} printf("Introduceti valoarea cautata:");scanf("%f", &a); i = 0; while ((i<n) && (x[i] != a)) i++;

if (i == n) printf("Valoarea cautata nu exista in vector."); else printf("Prima aparitie a nr. %5.2f este pozitia %d",a,i);

}

7. Să se scrie programul pentru determinarea poziţiei ultimei apariţii a

unei valori date într-un vector neordonat, de dimensiune n. Vectorul se parcurge secvenţial într-o structură FOR, de la primul la ultimul element, reţinând în aceeaşi variabilă (POZ) valoarea curentă a indicelui, în cazul identităţii elementului cu valoarea căutată. Dacă variabila POZ are valoarea -1 la sfârşitul ci- clării, valoarea căutată nu a fost regăsită printre elementele vectorului şi se afişează un mesaj corespunzător.

#include<stdio.h> void main() {float v[10], a;int n,i,poz; printf("n=");scanf("%d",&n);

for(i=0;i<n;i++)

{printf("v(%d)=",i);scanf("%f",&v[i]);} printf("Introduceti valoarea cautata:");scanf("%f", &a);

poz=-1;

for(i=0;i<n;i++)

if (v[i]==a) poz=i; if (poz==-1) printf("valoare negasita"); else printf("pozitia este:%d",poz);

}

8. Să se scrie programul pentru determinarea poziţiei tuturor apariţiilor

unei valori date într-un vector neordonat, de dimensiune n. Vectorul se parcurge secvenţial cu ajutorul instrucţiunii for, de la primul la ultimul element, reţinând valoarea curentă a indicelui în cazul identităţii elementului cu valoarea căutată, într-un vector (poz) de poziţii (vectorul poz se construieşte). Dacă la sfârşitul ciclării vectorul poz este vid (indicele nrpoz al acestuia este 0), valoarea căutată nu a fost regăsită şi se afişează un mesaj corespunzător.

#include<stdio.h> void main() {float x[100], a; int n, poz[100], nrpoz; printf("Introduceti dimensiunea vectorului, n="); scanf("%d",&n); for(int i=0;i<n;i++) {printf("x[%d]=",i); scanf("%f", &x[i]);} printf("Introduceti valoarea cautata:");scanf("%f", &a); nrpoz = 0; for (i=0;i<n;i++) if(x[i] == a) poz[nrpoz++] = i; if(!nrpoz)printf("Valoarea %5.2f nu exista in vector.", a); else {printf("Valoarea %5.2f apare pe pozitiile: ",a); for(i=0;i<nrpoz;i++)printf("%d; ", poz[i]);}

}