Informatică, întrebare adresată de ionutbarosanu2, 8 ani în urmă

Am nevoie de o solutie de 100p!

#899 OrdonareF

Cerinţa
Scrieţi definiția completă a subprogramului C++ ordonare care are 2 parametri: a, prin care primeşte un tablou unidimensional cu maximum 1000 de numere naturale mai mici decât 1.000.000.000 și n, numărul efectiv de elemente ale tabloului.

Subprogramul ordonează crescător elementele tabloului a, fără a returna valori.

Restricţii şi precizări
-0 < n <= 1000
-numele subprogramului cerut este ordonare
-parametrii sunt, în această ordine: a, n
-elementele tabloului a sunt indexate de la zero

Exemplu
Dacă n=6 și a=(63,273,9,83,93,123), după apelul subprogramului tabloul a devine (9,63,83,93,123,273).

Important
Soluţia propusă va conţine doar definiţia subprogramului cerut. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

Solutia mea este:

#include
using namespace std;
void ordonare(int a[],int n)
{
int i,j;
for(i=1; i<=n; i++)
for(j=i+1; j<=n; j++)
if(a[i]>a[j])
swap(a[i],a[j]);
}
int n,i,a[1001];
int main()
{
cin>>n;
for(i=1; i<=n; i++)
cin>>a[i];
ordonare(a,n);
for(i=1; i<=n; i++)
cout< return 0;
}



Răspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

void ordonare(int a[], int n)

{

  int i,j, aux;

  for (i=0;i<n-1; ++i)

       for (j=i+1; j<n; ++j)

            if (a[j]<a[i]) {

               aux=a[i]; a[i]=a[j]; a[j]=aux;

            }

   return;

}

Explicație:

Nu ai fost atent la această Restricţie...

-  elementele tabloului a sunt indexate de la zero.

Şi aici nu e bine...

for(i=1; i<=n; i++)

for(j=i+1; j<=n; j++)

if(a[i]>a[j])

swap(a[i],a[j]);

}

Dacă ar fi indexarea de la 1 până la n (dar tr. să fie de la zero conform restricţiilor), cum ai folosit se obţine eroare pt. i=n, deoarece j=i+1 şi ieşi din limitele vectorului. Tr. să ai for(i=1; i<n; i++) , numai pentru indexarea de la 1...

Alte întrebări interesante