Sunteți pe pagina 1din 8

Aloritm de cautare binara

Se aplica doar pe un vector ordonat (fie crescator fie descrescator). Pentru implementarea algoritmului vom folosi urmatoarele variabile: Stindicele celui mai din stanga element din vector Drindicele celui mai din dreapta element din vector Mij=(st+dr)/2indicele din mijlocul vectorului Gasit (care poate fi 1 sau 0) ajuta la implementarea metodei falsei ipoteze N=7 V=1 V=(-1,15,29,30,37,45,63) X=15(valoarea de cautat) Mij=(0+6)div 2=3 X=v[mij]=? 15=30? NU St=0; dr=mij-1 Mij=(0+2)div 2=1 X=v[mij]?DA Gasit=1 //citeste x si vector Gasit=0;//presupunem sa x nu se gaseste in vector St=0;dr=n-1; While(st<=dr&&gasit==0) {mij=(st+dr)/2; If(x==v[mij]) Gasit=1; Else If(x<v[mij]) Dr=mij-1; Else St=mij+1; } If(gasit==1) Cout<<am gasit; Else Cout<<nu am gasit;

Implementarea algoritmului pe vector ordonat crescator

Ce modificare trebuie facuta pe algoritm pentru a cauta o valoare x intr-un vector ordonat descrescator ? //citeste x,vector Gasit=0; St=0;dr=n-1; While(st<=dr&& gasit==0)

{mij=(st+dr)/2 if(x==v[mij]) gasit=1; else if(x<v[mij]) dr=mij+1; else st=mij-1; } If(gasit==1) Cout<<am gasit|; Else Cout<<nu am gasit;

Algoritm de stergere a unui element din vector


Stergerea unui element dintr-un vector de realizeaza prin deplasarea elementelor imediat urmatoare cu o pozitie de la stanga la dreapta .Numarul de elemente n dupa stergere o sa scada cu o unitate Cout<<p=cin>>p; For(i=p;i<n;i++) V[i-1]=v[i]; N=n-1 //afisare vector; Se citeste de la tastatura o valoare intreaga x si apoi se citeste un vector cu n elemente numere intregi.Sa se verifice daca x se gaseste in vector si in caz afirmativ sa se stearga x . #include<iostream.h> Void main() Int a[100],n,i,x,gasit,poz; Cout<<n=;cin>>n; For(i=0;i<n;i++) {cout<<v[<<i+1<<]=; Cin>>v[i]; } Gasit=0; For(i=0;i<n&&gasit==0;i++) If(v[i]==x; {gasit=1;poz=i; } If(gasit==1); { For(i=p+1;i<n;i++) V[i-1]=v[i];

N=n-1; For(i=1;i<n;i++) Cout<<v[i]<< ; Else For(i=1;i<n;i++) Cout<<v[i]<< ;

Inserarea unui element intr-un vector


Sa se inserze valoarea x inaintea unui element de valoare y dintr-un vector cu n elemente nr intregi 1.Citesc x,y 2.Citesc n ,vectorul 3.Caut y in vector si ii retin pozitia 4. Daca am gasit y atunci produc inserarea 5.Afisez vectorul n-n+1; for(i=n-2;i>=p;i--) v[i+1]=v[[i]; v[p]=x; //afisez vectorul #include<iostream.h> Void main() Int a[100],i,n,p,y,gasit=0,x; Cout<<n=;cin>>n; For(i=0;i<n;i++) {cout<<v[<<i+1<<]=; Cin>>v[i]; } Cout<<y=;cin>>y; Cout<<x=cin>>x; For(i-0;i<n&&gasit==0;i++) If (v[i]==y) {Gasit=1; P=1; } If( gasit==1) N=n+1; For(i=n-2;i>=p;i--) V[i+1]=v[i]; V[p]=x; For(i=0;i<n;i++) Cout<<v[i]<< ; }

A sorta elementele unui vector inseamna a le ordona unul fata de celalalt in functie de criteriul dat.In cazul algoritmului de sortare prin selectie directa fiecare element joaca rolul unui pivot fiind comparat cu restul elementelor aflate dupa el in vector. Elementele pivot sunt parcurse cu un contor i cu valori de la 0 pana la n-2 inclusiv. Restul elementelor cu care se compara pivotul sunt parcurse cu un contor j care pleaca de la i+1 pana la n-1 inclusiv.La fiecare pas se compara v[i] cu v[j] si daca nu este respectata ordinea fie crescatoare fie descrescatoare atunci cele 2 elemente se interschimba prin metoda paharelor //citire n,vector; //sortare crescatoare For(i=0;i<n-1;i++) For(j=n+1;i<n;i++) If(v[i]>v[j]) {aux=v[i]; V[i]=v[j]; V[j]=aux; } //Afisare vector

Algoritm de sortare prin selectie directa

Algortim de sortare prin metoda bulelor


//citire vector Sortat=o//pp ca vectorul nu este sortat While(sortat==0)//cat timp v nu e sortat {sortat=1;//la o trecere pe vector,pp ca acesta este sortat For(i=0;i<ni++) If(v[i]>v[i]+1) {aux=v[i]; V[i]=v[i+1]; V[i+1]=aux; Sortat=0; } } In acest algoritm se compara perechi de elemente consecutive adica v[i] cu v[i+1].Se presupune ca vectorul nu este sortat initial, cat timp vectorul nu este sortat la fiecare pas: -presupunem ca la o trecere pe vector acesta este sortat -daca la trecerea pe vector se gasesc 2 elemente v[i] si v[i+1] care nu respecta ordinea ceruta atunci le vom interschimba prin metoda paharelor si sortat devine 0 Algoritmul va continua pana cand la o trecere pe vector se constata ca toate elementele sunt ordonate.

Se citeste de la tastatura un vector v cu n elemente numere naturale.Se cere sa se afiseze cel mai mare numar care se poate form cu prima cifra a fiecarui element din vector #include<ioastream.h> Void main() {Unsigned i,n,v[100]; Cout<<n=;cin>>n; For(i=0;i<n;i++) {cout<<[<<i+1<<]=; Cin>>v[i]; } For(i=0;i<n;i++) {while(v[i]>9) V[i]=v[i]/10; } }

Este matricea la care numarul de linii este egal cu numarul de coloane N=m Operatiile de citire si de afisare in cazul matricii patratice vor ramane la fel cu modificarea ca atat i cat si j vor avea valori cuprinse intre 0 si n Caracteristicile matricii patratice: A= Elem. deasupra Diag. principale

Matricea patratica

Elem.sub Diag.principala

Diag.principala

Elemente pe diagonala principala I=j a) For(i=0;i<n;i++) For(j=0;j<n;j++) If(i==j) <prelucreaza a[i][j]> b) For(i=0;i<n;i++) <prelucreaza a[i][j]> Elemente aflate sub diagonala principala

Elem.aflate desupra diag.sec

Elem.aflate dub diag.sec.

Diag .secundara

Elemente de pe diagonala secundara I+j=n-1 Elemente aflate deasupra diagonalei secundare I+j<n-1 Elemente aflate sub diagonala secundara I+j>n-1 Se citeste de la tastatura un numar natural n si apoi se citesc pe rand cele n*n elemente ale unei matrici patratice .Se cere: a) Sa se calculeze suma elementelor aflate pe diagonala principala b) Sa se calculeze produsul elementelor aflate pe diagonala secundara c) Determinati cate patrate perfecte se afla deasupra diagonalei principale # include<iostream.h> Void main() {Int a[10][10],i,n,j, Cout<<n=;cin>>n; For(i=0;i<n;i++) For(j=0;j<n;j++) {cout<<a[<<i+1<<j+1<<]=; Cin>>a[i][j]; } Int s=0; For(i=0;i<n;i++) For(j=0;j<n;j++) If(i==j) S=s+a[i][j]; Cout<<s=<<endl; Int p=1; For(i=0;i<n;i++) For(j=0;j<n;j++) If(i+j=n-1) P=p*a[i][j]; Cout<<p=<<endl; Int nr=0; For(i=0;i<n;i++) For(j=0;j<n;j++) If(i<j)&&(sqrt a[i][j]==(int)(sqrt (a[i][j]) Nr++; Cout<<nr=;<<endl; }

Scrieti un program care citeste de la tastatura un numar natural n ,construieste in memorie si afiseaza pe ecran o matrice nu n linii si n coloane in care elementele de pe cele 2 diagonale sunt egale cu 0, elementele care se afla deasupra ambelor diagonale sunt egale cu 1,elementele care se afla sub ambele diagonale sunt egale cu 2 iar restul sunt egale cu 3 #include<iostream.h> Void main() {int a[50][50],i,j,n; Cout<<n=;cin>>n; For(i=0;i<n;i++) For(j=0;j<n;j++) If(i==j&&i+j==n-1) A[i][j]=0; If(i<j&&i+j<n-1) A[i][j]=1; If(i>j&&i+j>n-1) A[i][j]=2; Else A[i][j]=3; For(i=0;i<n;i++) {for(j=0;j<n;j++) Cout<<a[i][j]<< ; Cout<<endl; } }

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