C++
Am realizat un microblog educational la adresa
http://www.edmodo.com/public/profudeinfo/c
de unde puteti downloada gratuit resurse esentiale despre limbajul C++.
Iata o mica parte din resurse:
Clasa a XI -a
1. Sortarea crescatoarea a unui tablou unidimensional in C++
#include<iostream.h>
typedef int sir[25];
sir v;
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>
typedef int sir[25];
sir v;
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;
}
foarte tare site-ul…o alta metoda de a invatza…tine-o tot asa!!
Multumesc.
Daca ati putea sa faceti unu cu reuniunea a 2 vectori
Multumesc mult
banuiesc ca acum elevii nu mai scuz daca nu shtiu algoritmii astia la ora
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
@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")?