Tudnátok segíteni ebben a programban?
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,
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):
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.
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;
}
}
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!