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 = x1 + x 2 + ... + x n =

x
i =1

tiind c adunarea numerelor reale este asociativ i c elementul neutru pentru adunare este 0, algoritmul poate fi descris astfel: S 0 = 0; S1 = S0 + x1 = 0 + x1 = x1; S2 = S1 + x2 = x1 + x2; S n = S n-1 + x n = x 1 + x 2 + + x n ; ... S = Sn. Deoarece sumele pariale S 0 , S 1 , , S n nu ne intereseaz i, n plus, se ocup inutil memorie intern, nsumarea se va realiza n aceeai locaie de memorie, cu adresa simbolic S. Aici se vor depune sumele pariale (se va cumula cte un element). S = 0; .. S = S + x1 = 0 + x1 = x1; S = S + x2 = x1 + x2; S = S + xn = x1 + x2 + + xn; 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 ,...,x n ). Suma elementelor de rang impar este S=x 1 +x 3 +x 5 +... Exist mai multe variante de rezolvare. Varianta 1. Se parcurge vectorul cu indicele pornind de la valoarea iniial 1

i crescnd 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 iniial 1 i crescnd 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, testnd indicele prin verificarea restului mpririi 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 utiliznd 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.

Fie X=(x 1 ,x 2 ,...,x n ). Suma elementelor este S = astfel:

i =1 x i >0

x . Algoritmul poate fi descris


i

S= 0; -----------------dac x 1 >0, atunci S = S+ x 1 ; dac x 2 >0, atunci S = S+ x 2 ; .......................... dac x n >0, atunci S = S+ x n ; -----------------dac S>0 afieaz S altfel, afieaz 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!"); }

4. S se scrie programul pentru calcularea valorii unui polinom ntr-un punct dat. Coeficienii polinomului sunt numere reale i se introduc de la tastatur. Coeficienii polinomului se rein ntr-un vector. Pentru n, gradul polinomului, vectorul de coeficieni va conine 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. S se scrie programul pentru calcularea mediei geometrice a elementelor pozitive dintr-un vector de dimensiune n. Fie X = (x 1 , x 2 , , x n ). Media geometric a elementelor pozitive este

MG = k

i =1, k

, x i > 0. tiind c nmulirea numerelor reale este asociativ i are

elementul neutru 1, produsul P =

i =1, k

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 numrul elementelor pozitive (k) este mai mare dect 2. Pentru calcularea mediei geometrice se utilizeaz formula a m = e ( m*ln( a )) / n , a > 0, pentru determinarea creia exist funciile standard exp(x) i log(x).
n

#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 apariii a unei valori date ntr-un vector neordonat, de dimensiune n. Vectorul se parcurge secvenial de la primul element, cu ajutorul instruciunii while, pn cnd se regsete valoarea cutat, sau pn la ultimul element, caz n care valoarea cutat nu se afl n vector, afindu-se un mesaj corespunztor.
#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 poziiei ultimei apariii a unei valori date ntr-un vector neordonat, de dimensiune n. Vectorul se parcurge secvenial ntr-o structur FOR, de la primul la ultimul element, reinnd n aceeai variabil (POZ) valoarea curent a indicelui, n cazul identitii elementului cu valoarea cutat. Dac variabila POZ are valoarea -1 la sfritul ciclrii, valoarea cutat nu a fost regsit printre elementele vectorului i se afieaz un mesaj corespunztor.
#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 poziiei tuturor apariiilor unei valori date ntr-un vector neordonat, de dimensiune n. Vectorul se parcurge secvenial cu ajutorul instruciunii for, de la primul la ultimul element, reinnd valoarea curent a indicelui n cazul identitii elementului cu valoarea cutat, ntr-un vector (poz) de poziii (vectorul poz se construiete). Dac la sfritul ciclrii vectorul poz este vid (indicele nrpoz al acestuia este 0), valoarea cutat nu a fost regsit i se afieaz un mesaj corespunztor.
#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]);} }

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