1. Sortarea crescatoarea a unui tablou unidimensional in C++
Metoda BUBBLE SORT
#include<iostream.h>
int v25];
int i, n, ok, aux;
void main()
{
cout<<„n=”;
cin>>n;
for(i=1;i<=n;i++)
{
cout<<„v[„<<i<<„]=”;
cin>>v[i];
}
for(i=1;i<=n;i++)
cout<<v[i]<<” „;
//sortarea crescatoare
do{
ok=1;
for(i=1;i<=n-1;i++)
if(v[i]>v[i+1])
{
// interschimbare
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
ok=0;
}
}while(ok!=1);
cout<<„–––––––„<<endl;
for(i=1;i<=n;i++)
cout<<v[i]<<” „;
}
2. Cautarea binara intr-un tablou unidimensional – C++
#include<iostream.h>
#include<math.h>
int v[25];
int i,n,li,ls,lm, gasit;
void main()
{
cout<<„n=”;
cin>>n;
cout<<„Cauta elementul =”;
cin>>x;
for(i=1;i<=n;i++)
{
cout<<„v[„<<i<<„]=”;
cin>>v[i];
}
for(i=1;i<=n;i++)
cout<<v[i]<<” „;
li=1;
ls=n;
gasit=0;
while((li<=ls)&&(!gasit))
{
lm=floor((li+ls)/2);
if(v[lm]<x)
{
li=lm+1;
}
else if(v[lm]==x)
{
cout<<„l-am gasit pe pozitia”<<lm;
gasit=1;
}
else ls=lm-1;
}
}
3. Interclasarea a doua tablouri unidimensionala in C++
#include<iostream.h>
typedef int sir[25];
sir a,b,c;
int n,m,i,j,k;
void main(void)
{
cout<<„Introduceti lungimile celor 2 vectori a si b= „;
cin>>m>>n;
// cititi elementele celor 2 vectori ordonati crescatori
for(i=1;i<=m;i++)
{
cout<<„a[„<<i<<„]=”;
cin>>a[i];
}
for(i=1;i<=n;i++)
{
cout<<„b[„<<i<<„]=”;
cin>>b[i];
}
// interclasarea
i=1;
j=1;
k=0;
while((i<=m)&&(j<=n))
{
if(a[i]<b[j])
{
k++;
c[k]=a[i];
i++;
}
else {
k++;
c[k]=b[j];
j++;
}
}
// adaugam elementele ramase neparcurse
if(i<=m)
{
while(i<=m)
{
k++;
c[k]=a[i];
i++;
}
}
if(j<=n)
{
while(j<=n)
{
k++;
c[k]=b[j];
j++;
}
}
// afisez vectorul interclasat
for(i=1;i<=k;i++)
cout<<c[i]<<” „<<endl;
}
Multumesc.
Daca ati putea sa faceti unu cu reuniunea a 2 vectori
Multumesc mult
Pe mine ma intereseaza ca ei sa tina minte ideea algoritmului, apoi sa fie capabili sa o implementeze corect intr-un limbaj de programare.
Succes Adrian!
Vacanta placuta.
e naspa
foooarte tare site-ul!in acest mod,educatia in Romania se poate dezvolta armonios!
E bine asa si vrem mai mult multumim pentru ca ne ajutati sa invatam.
@Cazacu, ma bucur ca resursele mele va ajuta sa invatati mai bine, o sa mai adaug si altele in perioada urmatoare.
Keep in touch 🙂
Putem sa postam si noi probleme rezolvate/algoritimi si sa facem un forrum?Ar fii mult mai interesant…intrati si pe infoarena(www.infoarena.ro)
Sortarea crescatoarea a unui tablou unidimensional in C++ nu e facuta corect!!! aici trebuie schimbat:
do{
ok=1;
for(i=1;i<=n-1;i++)
cu
for(i=0;i<n-1;i++)
Spor la treaba in continuare.
nu neaparat e bine si cu for(i=1;i<=n-1;i++)
😛
Era corectt` 😕 sii
for(i=1;1<n;i++)
nu` ? 😀
dap
do{
ok=1;
for(i=1;i<=n-1;i++)
cu
for(i=0;i<n-1;i++)
ambele is corecte. daca pornesti de la 0 te opresti inainte de n (ca sa ai acelasi nr de elemente).
daca pornesti de la 1 te opresti chiar la n.
Daca nu stiti bine info nu va mai bagati asa aiurea… chiar n-are rost
:))
ii bine cum or scris astia… nu mai zi pristii:))
@gabi:
Din punct de vedere al functionalitatii algoritmului e corect in ambele moduri. Din punct de vedere al managementului memoriei, in C/C++ e mai corect
for(i=0;i<n-1;i++){…}
Problemele apar cand n este egal cu numarul de elemente din vector.
In exemplu v este un sir de 25 int… In momentul in care vei dori sa folosesti toate cele 25 de elemente, vei intalni o eroare (probabil run-time), ce apare datorita faptului ca in C/C++ un vector cu 25 de elemente contine toate elementele de la 0 la 24 inclusiv.
Astfel:
for(i=1; i<=25; i++)
{
v[i]=i;
}
va incerca sa stocheze la adresa v[25] valoare 25… dar el nu are alocata o asemenea adresa…
Pentru a preveni aceasta eroare se pot face 2 corectari:
1.
for(i=1; i<=25; i++)
{
v[i-1]=i;
}
2.
Cea mentionata de Sandu Andrei.
P.S.: In exemplu eu nu am vazut nici un fel de verificare pentru lungimea vectorului… asa ca problema poate aparea oricum. In mod normal, undeva dupa citirea lui n ar trebui verificat daca n < 25
Acum, as avea si eu o curiozitate: de ce in manualele de scoala se scriu vectori in stil Pascal desi manualul este de C/C++ (sau "bilingv")?
De acord cu Sandu Andrei….va compara dupa programul intitial…mail la final a[n] cu a[n+1] (i=n). Aici iti iese din vector si programul iti va da eroare. Bafta…si ms..uitasem.
cine ma poate ajuta si pe mine am de facut urmatoarea problema
Se da un numar intreg:
– inversati numarul
-eliminati cifrele pare
@Ada
Se compara elementele invecinate, adica v[i] cu v[i+1], daca i =1 atunci v[1]cu v[2], i=2 => v[2] cu v[3], … la ultimul pas, penultimul cu ultimul, adica cand i=n-1se compara v[n-1] cu v[n].
Sper ca acum e mai clar 🙂
domnule profesor de info spuneti-mi si mie o carte de informatica foarte buna de invatat programarea in C++ si mai multe chestii.Sunt in clasa a-9 la mate-info intensiv si vreau sa invata programarea.
Buna Ovidiu,
http://ler.is.edu.ro/~ema/publicatii.html
Succes!
Ce inseamna, daca pun intr-un program, WHILE(a)
cat timp a este diferit de zero, adica adevarat, se executa blocul de instructiuni 🙂
Va rog sa faceti un cod in C++ pentru scaderea a doua numere :
// Program de adunare a doua numere:
// –––––––––––
// primul numar:
var nr1 = Vector(5);
nr1[0] = 3;
nr1[1] = 4;
nr1[2] = 5;
nr1[3] = 6;
nr1[4] = 7;
// al doilea numar:
var nr2 = Vector(5);
nr2[0] = 1;
nr2[1] = 5;
nr2[2] = 6;
nr2[3] = 7;
nr2[4] = 8;