Kezdőoldal » Számítástechnika » Programozás » El tudná valaki magyarázni,...

El tudná valaki magyarázni, hogy mit is csinál ez a program pontosan?

Figyelt kérdés

#include <iostream>

using namespace std;

int main ()

{

int a[100],b[100],n,i,k,j,y;

cout<<"n=";

cin>>n;

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

{

cout<<"a["<<i<<"]=";

cin>>a[i];

b[i]=0;

}

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

{

k=0;

for(y=0;y<n;y++)

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

k++;

if(b[k]==0)

b[k]=a[i];

else

{

j=k+1;

while(b[j]!=0)

j++;

b[j]=a[i];

}

}

for(j=0;j<n;j++)

cout<<b[j]<<" ";

return 0;

}



2013. márc. 11. 10:57
 1/4 anonim ***** válasza:
Rendez.
2013. márc. 11. 13:44
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:

//Ez a program épp dobogós helyet pályáz meg a kevésbé hatékony rendezések világbajnokságán. Részletesen:

#include <iostream>

using namespace std;

int main ()

{

int a[100],b[100],n,i,k,j,y;

cout<<"n="; //bekér egy egészet (n)

cin>>n; //beolvas egy egészet (n)

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

{

cout<<"a["<<i<<"]="; //bekéri az "a" tömb "n"-edik elemét

cin>>a[i]; //beolvassa az "a" tömb "n"-edik elemét

b[i]=0; //a "b" tömb "n"edik elemét kinullázza

}

for(i=0;i<n;i++) //ciklus 0-tól "n-1"-ig

{

k=0; //kinullázza k-t

for(y=0;y<n;y++) //ciklus 0-tól "n"-ig

if(a[i]>a[y]) //"a" minden elemére ellenőrzi, hogy nagyobb-e, mint a többi elem a tömbben

k++; //ha nagyobb, inkrementálja "k"-t

if(b[k]==0) //ha a "b" tömbben még nem volt olyan, ami "k" darab tömbbeli elemtől lett volna nagyobb

b[k]=a[i]; //akkor a "b" tömb "k"-adik helyére írjuk az értéket

else //ha pedig már volt

{

j=k+1;

while(b[j]!=0) //addig másoljuk az "a" tömb "i"-edik elemét "b"-be "k"-tól kezdődően, amíg nem találunk 0-t

j++;

b[j]=a[i];

}

}

for(j=0;j<n;j++) //végigmegyünk a "b" tömbön

cout<<b[j]<<" "; //kiírjuk "b" elemeit

return 0;

}

2013. márc. 11. 13:55
Hasznos számodra ez a válasz?
 3/4 A kérdező kommentje:

köszi szépen!

if(b[k]==0) //ha a "b" tömbben még nem volt olyan, ami "k" darab tömbbeli elemtől lett volna nagyobb

b[k]=a[i]; //akkor a "b" tömb "k"-adik helyére írjuk az értéket

ezt a részt nem igazán értem, el tudnád magyarázni másképp?

2013. márc. 11. 14:14
 4/4 anonim ***** válasza:

Mindig veszel az a tömbből egy elemet (a[i]). Ezt hasonlítgatod össze a többi elemmel a-ból. k azt jelenti, hogy mennyi elemtől volt nagyobb az adott a[i] elemed. Így ha az eredeti tömbödben nincsenek ismétlődő elemek, akkor a b[k] pontosan az adott elem helyét fogja megadni egy rendezett tömbben (nyilván a legkisebb lesz a legelső, nála nincs kisebb, így b[0]-ba kerül, mivel k-t egyszer sem növelted. A legnagyobb pedig az utolsó helyre kerül (n-1) mivel saját maga kivételével minden elemtől nagyobb volt). Az if(b[k]==0) azt ellenőrzi, nem volt-e már olyan szám, amit arra a helyre írtál (ez ugye akkor fordulhat elő, ha vannak ismétlődő számjegyek) b[k]=a[i]; pedig csak az előző feltétel helyessége esetén fut le, vagyis ha nincs ismétlődés és nyugodtan beírhatjuk a számunkat.

Amennyiben van ismétlődés, akkor megyünk az else ágra, és a legközelebbi olyan helyre írunk b-ben, ahova még nem írtunk. Ez ugye nem rontja el a rendezettséget, mivel egyforma számokat írkálunk egymás után, és később sem zavar, mert ha nagyobbat találunk, akkor az összes egyformánál nagyobb lesz, azaz mindet át fogjuk lépni beírásnál.


Egyébként bár nem próbáltam ki a kódot, elég érdekes eredményt adhat ha a rendezendő tömbbe 0-kat is adsz.

2013. márc. 11. 14:29
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!