Sunteți pe pagina 1din 4

1. S se scrie programul care face interschimbarea elementelor egal deprtate de capetele unui vector i afiarea vectorului obinut.

Secvena folosit pentru comutare este : aux=x[i]; x[i]=x[n-i-1];x[n-i-1]=aux , i=1, n/2


#include <stdio.h> #include <conio.h> void main(void) {int x[50],i,aux, n; /* citirea elementelor vectorului */ printf("\n lungimea sirului n<50 este:");scanf("%d",&n); printf("\n Vectorul initial este:"); for (i=0;i<n;i++){printf("\n x[%d]=",i);scanf("%d",&x[i]);} /* interschimbarea elementelor vectorului x */ for (i=0;i<n/2;i++) {aux=x[i];x[i]=x[n-i-1];x[n-i-1]=aux;} /* afisarea vectorului comutat */ printf("\n Vectorul comutat este:"); for (i=0;i<n;++i){ printf("\nx[%i]=%i",i,x[i]); } getch(); }

2. S se scrie programul pentru cutarea unei valori date ntr-un ir de numere, ordonat cresctor, de dimensiune n. Pornind de la ipoteza c irul este ordonat, cutarea valorii se realizeaz pe subiruri, n funcie de elementul central al subirului curent. Rangul elementelor unui subir poate lua valori n intervalul [ls , ld ] [1, n] , unde l s este limita din stnga i l d este limita din dreapta. Dac valoarea cutat nu coincide cu elementul central al subirului, procesul de cutare continu pe subirul din stnga (dreapta) elementului central, dup cum valoarea este mai mic (mai mare) dect acesta, modificndu-se corespunztor l d (l s ) pentru noul subir. Modificarea limitei dreapta (stnga) se realizeaz prin incrementarea (decrementarea) cu o unitate. Rangul elementului central al subirului curent se determin astfel: i =

cutat coincide cu elementul central al subirului curent, sau cnd l s > l d , caz n care valoarea dat nu se regsete n irul iniial.
#include<stdio.h> void main() {float x[100], a; int n, ls, ld, mij, gasit; 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); ls = 0; ld = n-1; gasit = 0; do { mij = (ls + ld) / 2; if (x[mij] == a) gasit = 1; else if (x[mij] < a) ls = mij + 1;

l s + ld . Procesul de cutare se oprete cnd valoarea 2

else ld = mij - 1;} while(ld>=ls && !gasit); if (gasit) printf("Pozitia este: %d", mij); else printf("Valoarea nu se gaseste in vector!"); }

3. S se scrie programul pentru determinarea elementului maxim dintrun vector de dimensiune n i a poziiei primei i ultimei sale apariii. Fie vectorul X = (x 1 , x 2 , , x n ). Maximul din vectorul X este MAX = max(x i ), i = 1,n. Deoarece, la un moment dat, comparaia se realizeaz numai pentru dou valori, algoritmul poate fi descris astfel: MAX 1 = max(x 1 , x 2 ); MAX 2 = max(MAX 1 , x 3 ); MAX 3 = max(MAX 2 , x 4 ); .. MAX n-1 = max(MAX n-2 , x n ); .. MAX = MAX n-1. Maximele pariale MAX 1 , MAX 2 , , MAX n-1 nu intereseaz i de aceea se va utiliza o singur variabil (MAX) pentru reinerea elementului maxim din vector. De asemenea, pentru a putea exprima iterativ procesul, variabila MAX va fi iniializat cu x(1). Algoritmul recursiv poate fi descris astfel: - formula de start: MAX = x(1); - formula recursiv: MAX = max (MAX, x(i)), i=2,n. Pentru a reine poziia valorii maxime din vector se utilizeaz variabilele ppoz i upoz, iniiate cu 0 (corespunztor poziiei elementului cu care se iniializeaz variabila MAX). n procesul iterativ, variabila ppoz se modific dac un element x(i) este fie strict mai mare dect MAX (pentru reinerea poziiei primei apariii), iar variabila upoz se modific dac un element x(i) este mai mare sau egal dect MAX (pentru reinerea poziiei ultimei apariii).
#include<stdio.h> void main() {int n, ppoz,upoz;float x[100], max; printf("Introduceti dimensiunea vectorului, n="); scanf("%d",&n); for(int i=0;i<n;i++) {printf("x[%d]=",i); scanf("%f", &x[i]);} // upoz = ultima pozitie a maximului; // ppoz = prima pozitie a maximului max = x[0]; ppoz = upoz = 0; for (i=1;i<n;i++) if(x[i] >= max) {if (x[i] > max) ppoz = i; //prima aparitie max = x[i]; upoz = i; } //ultima aparitie printf("Maximul este %5.2f. \nPrima aparitie este pe pozitia %d,ultima aparitie este pe pozitia %d.\n", max, ppoz, upoz); }

4. S se scrie programul pentru determinarea elementului maxim dintrun vector de dimensiune n i a tuturor apariiilor sale. Varianta 1. Deoarece valoarea maxim poate aprea n vector de mai multe

ori (cel puin o dat i cel mult de n ori n cazul irului constant), se va construi un vector de poziii poz. Vectorul poz se construiete simultan cu determinarea elementului maxim. Astfel, n urma comparaiei ntre variabila max i elementul x(i) apar dou cazuri: - dac x(i) = max, se construiete un nou element n vectorul de poziii (indicele vectorului poz se incrementeaz cu 1). - dac x(i) > max, nseamn c s-a gsit o nou valoarea maxim i indicele vectorului poz se iniializeaz cu 1. Pentru ambele cazuri, n vectorul poz se reine valoarea curent a indicelui de parcurgere a vectorului de date.
#include<stdio.h> void main() {int n; printf("Introduceti dimensiunea vectorului, n="); scanf("%d",&n); float x[100],max; for(int i=0;i<n;i++) {printf("x[%d]=",i); scanf("%f", &x[i]);} int poz[100],nrpoz;max = x[0]; poz[0]=0;nrpoz = 1; for(i=1;i<n;i++) if(max<x[i]){ max = x[i];poz[0] = i;nrpoz = 1;} else if(max == x[i]) {poz[nrpoz] = i;nrpoz++;} printf("Maximul este %5.2f si apare pe pozitiile:",max); for(i=0;i<nrpoz;i++) printf("%d; ", poz[i]); }

Varianta 2. Vectorul poz se construiete dup ce s-a determinat valoarea maxim.


#include <stdio.h> void main() {float x[100]; int poz[100];float max; int n,i,k; printf("Dimensiunea vectorului:"); scanf("%d",&n); printf("Elementele vectorului: \n"); for (i = 0; i < n; i++) {printf("x[%d]=",i);scanf("%f", &x[i]); } max = x[0]; for (i = 1; i <= (n-1); i++) if (x[i] > max) max = x[i]; k = 0; for (i = 0; i < n; i++) if (x[i] == max) {poz[k] = i; k++;} printf("Maximul este =%10.2lf pe pozitiile: \n", max); for (i = 0; i < k; i++) printf(" %d", poz[i]); }

5. S se scrie programul pentru inserarea unui element dat ntr-un vector ordonat de dimensiune n. Dup inserare vectorul va rmne ordonat. Fie vectorul X = (x 1 , x 2 , , x n ) i a valoarea care trebuie inserat n vectorul ordonat. Se parcurge vectorul atta timp ct valoarea curent din vectorul x este mai mic dect valoarea a i mai sunt elemente n vector. La ieirea din structura

repetitiv, indicele curent reprezint poziia din vector unde trebuie inserat valoarea. Inserarea se realizeaz glisnd toate valorile din dreapta cu o poziie.
#include<stdio.h> void main() {int n;float x[100], a; printf("Dimensiunea vectorului:");scanf("%d",&n); for(int i=0;i<n;i++) {printf("x[%d]=",i); scanf("%f", &x[i]);} printf("Introduceti valoarea:");scanf("%f", &a); i=0; while ((i<n) && (x[i]<a))i++; for(int j=n;j>i;j--) x[j] = x[j-1]; x[j] = a;n++; printf("Vectorul rezultat este:\n"); for(i=0;i<n;i++)printf("%4.2f ",x[i]); }

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