praegune kellaaeg 20.06.2025 14:32:54
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
taurib
HV vaatleja
liitunud: 26.08.2010
|
16.12.2012 17:03:04
Paluks abi C keeles mullsortimisega |
|
|
Tere
Mul probleem selline, et mul vaja siin varsti kursusetöö vaja ära esitada, kuid ma olen siin mingi probleemi taga kinni, millest ma väga aru ei saa, miks ta sedasi käitub hetkel. Nimelt Pärast seda, kui see läheb 2. korda mullsoritma, tekitab see mingisuguse segaduse ja ta ei oska enam võrrelda Ajakulu ja AjakuluV omavahel.
See, mis on valik[i] peaks valima sealt kõige väiksema ajakulu. Samuti tõstab ta Ajakulu[i][j] ja [i+1][j] sees millegipärast numbreid ümber, kuid peaks ainult "j" siseselt neid tegema
Ette tänades
Kood selline:
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
int main()
{
double ajakulu[2][4]; //Erinevate olude ajakulu
double ajakuluV[2][4];
double ajutine;
int valik[7]; //Milline valik tehtud sai
int i;
int j;
ajakulu[0][0] = 10;
ajakulu[0][1] = 5;
ajakulu[0][2] = 7;
ajakulu[1][0] = 15;
ajakulu[1][1] = 18;
ajakulu[1][2] = 9;
/*
ajakuluV[0][0] = 10;
ajakuluV[0][1] = 5;
ajakuluV[0][2] = 7;
*/
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
ajakuluV[i][j] = ajakulu[i][j];
}
}
printf("%lg %lg %lg", ajakuluV[0][0], ajakuluV[0][1], ajakuluV[0][2]); //1. masiivi ajakulu (kontroll)
printf("\n");
printf("%lg %lg %lg", ajakuluV[1][0], ajakuluV[1][1], ajakuluV[1][2]); //2. masiivi ajakulu (kontroll)
printf("\n");
for (i = 0; i < 2; i++) //Mullsort
{
for (j = 0; j < 3; j++)
{
if (ajakuluV[i][j] < ajakuluV[i][j+1])
{
ajutine = ajakuluV[i][j];
ajakuluV[i][j] = ajakuluV[i][j+1];
ajakuluV[i][j+1] = ajutine;
}
}
if (ajakuluV[i][2] == ajakulu[i][0]){valik[i] = 0;} //Leiab valiku väärtuse
else if (ajakuluV[i][2] == ajakulu[i][1]){valik[i] = 1;}
else if (ajakuluV[i][2] == ajakulu[i][2]){valik[i] = 2;}
}
printf("%lg %lg %lg, %d", ajakuluV[0][0], ajakuluV[0][1], ajakuluV[0][2], valik[0]);printf("\n"); //1. massiivi ajakulu pärast mullsorti
printf("%lg %lg %lg, %d", ajakuluV[1][0], ajakuluV[1][1], ajakuluV[1][2], valik[1]); //2. masiivi ajakulu pärast mullsorti
return 0;
}
|
Pilt sellest, kuidas see mul töötab, esimesed 2 rida on kontroll ja teised 2 rida ongi see koht, kus ta vahetab erinevate tasemete vahel neid numbreid millegi pärast, ma ei tea, milles probleem
3. ja 4. reas olevad 4. numbrid näitavad Ajakulu[i][j] kõige väiksemat numberit, kas 0. 1. või 2.
viimati muutis taurib 16.12.2012 19:31:28, muudetud 1 kord |
|
tagasi üles |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
16.12.2012 18:49:03
|
|
|
Üks viga on kindlasti selles, et jooksed for tsüklis üle massiivide piiride (j=2 puhul ajakuluV[i][j+1] on ajakuluV[i][3]).
|
|
Kommentaarid: 50 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
47 |
|
tagasi üles |
|
 |
pota
HV vaatleja

liitunud: 09.12.2005
|
16.12.2012 19:25:55
|
|
|
Lisaks sellele pead sa sorteerima kaks korda:
c++:
|
for (i = 0; i < 2; i++) //Mullsort { for (k = 0; k < 2; k++) { for (j = 0; j < 2; j++) {
|
|
|
tagasi üles |
|
 |
taurib
HV vaatleja
liitunud: 26.08.2010
|
16.12.2012 19:41:47
|
|
|
Väga hea, see, et mul teine piir peaks ühevõrra suurem olema, lahendas nii mõndagi ära, tänud selle eest
Kuid miks ma pean seda mullsorti kolme tsüklina jooksutama?
Samuti on mul tunne, et see, kuidas ma neid valikuid teha üritan, ei ole just kõige targem viis. Selles väikeses tsüklis see küll töötab, kuid siis kui mul seda 7 korda teeb, jookseb see lolliks :/
Sest seal tuleb mul seda sama if ja else if koodiosa muutes selline viga: "Bus error (core dumped)"
|
|
tagasi üles |
|
 |
pota
HV vaatleja

liitunud: 09.12.2005
|
16.12.2012 19:51:27
|
|
|
taurib kirjutas: |
Kuid miks ma pean seda mullsorti kolme tsüklina jooksutama? |
pane näiteks
ja vaata mis juhtub sorteerimisega...
|
|
tagasi üles |
|
 |
taurib
HV vaatleja
liitunud: 26.08.2010
|
16.12.2012 20:14:00
|
|
|
Nüüd on asi sedasi, et ma sain selle asja kõik ilusti jooksma, probleem oli suures koodis jagamisega, kuid parandasin selle ära. Ja see, et siin soovitati masiivide suurusi tõsta oli ka väga hea idee
pota kirjutas: |
taurib kirjutas: |
Kuid miks ma pean seda mullsorti kolme tsüklina jooksutama? |
pane näiteks
ja vaata mis juhtub sorteerimisega... |
Ma ei saa siiski pihta sellele, et mis see "k" peaks seal olema? ISegi, kui ma panen selle väärtuseks 100, sordib see ikka ilusti ära :I
|
|
tagasi üles |
|
 |
pota
HV vaatleja

liitunud: 09.12.2005
|
16.12.2012 22:56:52
|
|
|
c++:
|
const int nRows = 10; const int nColumns = 10; int nDoubleSubArray[nRows][nColumns]; int nTemp; for (int nRowCounter = 0; nRowCounter < nRows; nRowCounter++) // 1 - liigub realt reale { for (int nColumnsPassed = 0; nColumnsPassed < nColumns - 1; nColumnsPassed++) // 2 - liigub veerust veergu { for (int nColumnCounter = 0; nColumnCounter < nColumns - 1; nColumnCounter++) // 3 - vahetab veergude väärtused { if (nDoubleSubArray[nRowCounter][nColumnCounter] > nDoubleSubArray[nRowCounter][nColumnCounter + 1]) { nTemp = nDoubleSubArray[nRowCounter][nColumnCounter]; nDoubleSubArray[nRowCounter][nColumnCounter] = nDoubleSubArray[nRowCounter][nColumnCounter + 1]; nDoubleSubArray[nRowCounter][nColumnCounter + 1] = nTemp; } } } }
|
|
|
tagasi üles |
|
 |
taurib
HV vaatleja
liitunud: 26.08.2010
|
17.12.2012 01:14:06
|
|
|
Sain selle programmi valmis, tänud teile vastuste eest, pota, sinu seda asja ma natuke veel uurin, kuid ma sellest teemast siin minema nüüd.
Kuid pota, see 2x mullsort töötab igati hästi, kui on tegemis [x][y]. Seda on pigem nagu siis vaja, kui on [x][y][z], et see sordiks kõiki kolme. Lihtsalt minu puhul oli siin see probleem, et see jooksis piiridest välja ja tuli neid suurendada, et see ilusti töötaks
|
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|