Kezdőoldal » Számítástechnika » Programozás » Tudnátok segíteni ebben a...

Tudnátok segíteni ebben a programban?

Figyelt kérdés

A program célja az lenne, hogy bekérek 10 számot majd ezeket növekvő sorba rendezni, s végül kiírni egy fájlba.


int main(int argc, char** argv) {

FILE *fp;

int i = 0, szam, j;

int szamok[10];

fp = fopen("szamok.dat", "w");

while (i < 10) {

printf("adj meg egy szamot: ");

scanf("%d", &szam);

szamok[i] = szam;


i++;

}

int csere;

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

{

for (j = 1; j < 10; j++)

{

if (szamok[j] > szamok[i]) {

csere = szamok[i];

szamok[i] = szamok[j];

szamok[j] = csere;

}

}

}

i = 0;

while (i < 10) {

szam = szamok[i];

fprintf(fp, " %d,", szam);

i++;

}

fclose(fp);

return (EXIT_SUCCESS);


Beírtam 10-től visszafele a számokat és ez lett a végeredmény:

10, 2, 3, 4, 5, 6, 7, 8, 9, 1,



2016. dec. 26. 16:01
 1/5 anonim ***** válasza:

Két észrevétel:


1.: a számbekérést lehet rövidíteni:

scanf("%d", &szamok[i++]);


2.: a rendező algoritmusok meg már minden programozási nyelven megvannak a neten (Buborék C-ben):

[link]

2016. dec. 26. 16:47
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
A rendezésed hibás. Csak egyszer megy végig a tömbön és csak a szomszédos elemeket cseréli ha kell. Nézd át a rendezési algoritmusokat.
2016. dec. 26. 17:08
Hasznos számodra ez a válasz?
 3/5 _Jessy_ ***** válasza:

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

{

for (j = 1; j < 10; j++)

{

if (szamok[j] > szamok[i]) {

csere = szamok[i];

szamok[i] = szamok[j];

szamok[j] = csere;

}

}

}

Helyett ez kellene:

bool voltcsere;

voltcsere = true;

while(voltcsere){

voltcsere = false;

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

{

for (j = 1; j < 10; j++)

{

if (szamok[j] > szamok[i]) {

csere = szamok[i];

szamok[i] = szamok[j];

szamok[j] = csere;

voltcsere = true;

}

}

}

}

Így néz ki helyesen a buborékrendezés.

2016. dec. 27. 13:44
Hasznos számodra ez a válasz?
 4/5 _Jessy_ ***** válasza:

Reméltem, hogy a while törzsébe kerülő rész jó, de látom, hogy az sem az igazi :)

Szóval ez lenne az:


bool voltcsere;

voltcsere = true;

while(voltcsere){

voltcsere = false;

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

{

if (szamok[i+1] < szamok[i]) {

csere = szamok[i];

szamok[i] = szamok[i+1];

szamok[i+1] = csere;

voltcsere = true;

}

}

2016. dec. 27. 13:54
Hasznos számodra ez a válasz?
 5/5 _Jessy_ ***** válasza:
Úgy néz ki, ma nem vagyok a topon :D az előzőről meg lemaradt egy '}' a végéről.
2016. dec. 27. 13:58
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!