Kezdőlap › Fórumok › Programozás › vektor szétválogatása önmagában
- This topic has 7 hozzászólás, 3 résztvevő, and was last updated 20 years, 8 months telt el by
emperor.
-
SzerzőBejegyzés
-
2004-11-22-20:43 #1986262
Szia!
A paroskeres() funkcióban túlszalad a while ciklus a tömbön. Mivel hossz=10 és a while feltétele, hogy ( i <= hossz ), ezért megvizsgálja a tomb[10]-et is, ami már szemét. 🙂
(A tömb elemei jelen esetben 0-tól 9-ig indexelhetõk.)
Szerintem módosítsd így:Code:int paroskeres(int *tomb,int hossz, int kezdoertek)
{
int i=kezdoertek;
while(( i < hossz ) && ( tomb[i] % 2 == 1 )) { i++; } if( i < hossz ) return(i); else return(kezdoertek); }2004-11-22-20:47 #1986263Szia!
A paroskeres() funkcióban túlszalad a while ciklus a tömbön. Mivel hossz=10 és a while feltétele, hogy ( i <= hossz ), ezért megvizsgálja a tomb[10]-et is, ami már szemét. 🙂
(A tömb elemei jelen esetben 0-tól 9-ig indexelhetõk.)
Szerintem módosítsd így:Code:int paroskeres(int *tomb,int hossz, int kezdoertek)
{
int i=kezdoertek;
while(( i < hossz ) && ( tomb[i] % 2 == 1 )) { i++; } if( i < hossz ) return(i); else return(kezdoertek); }[align=right][snapback]99229[/snapback][/align]
uhh, tényleg… 🙂 nagyon köszi :))
általában ilyen kis apróságokon szoktam elakadni, ez most sem volt másképp 🙂
thx2004-11-22-21:13 #1986264Egyébkét az algoritmus nem túl hatékony. Persze nem 10 elemû tömböknél, hanem ha ‘élesben’ kellene használni. 😉
Megpróbálok egy jobbat alkotni, lagalább én is gyakorlok.2004-11-22-21:29 #1986265Egyébkét az algoritmus nem túl hatékony. Persze nem 10 elemû tömböknél, hanem ha ‘élesben’ kellene használni. 😉
Megpróbálok egy jobbat alkotni, lagalább én is gyakorlok.
[align=right][snapback]99233[/snapback][/align]tudom 🙂
gondolkozok én is egyen 🙂 ha rájövök leírom és összehasonlítjuk, a Tieddel 😉2004-11-22-21:43 #1986266most hirtelen csak az jutott eszembe, hogy egyszerûen megkeresem az elsõ páros elemet, majd az elsõ páratlan elemet, és kicserélem õket… bár nem biztos, hogy ez hatékonyabb
vmint melyik hatékonyabb, ha pl több változót használok, kevesebb feltétel kiértékeléssel, vagy az ha több feltételt kevesebb változóval?2004-11-22-22:18 #1986267Code:#include
#includevoid parosvalogat(int *tomb,int hossz)
{
//a tomb paros szamait alulra csoportositja (nem rendezi), a paratlanokat felulre
int i, a, f, sw;
if (hossz>=2)
{
a = 0;
f = hossz – 1;
do
{
while (aa && (tomb[f] & 1) == 1) //addig lep, amig felul paratlanok vannak
f–;
if (a!=f)
{
//ha meg nem ertek el egymashoz ==> csere
sw=tomb[a];
tomb[a]=tomb[f];
tomb[f]=sw;
}
} while (a!=f);
}
}int main()
{
int A[]={0,1,2,3,4,5,6,7,8,9};
int elemszam = sizeof(A)/sizeof(int);
int i;
printf(„Erdeti: „);
for(i=0;iKözben megcsináltam. Aztán látom, ilyesmire gondoltál te is. Ez alulról felfelé lépked amíg páros van, és felülrõl lefelé amíg ott páratlan, és megcseréli õket ha kell.
Az algoritmus attól nem volt hatékony, hogy minidg végigmentél a tömbön az aktuális elemtõl a legvégéig, majd léptél egyet, és megint a végéig, stb.
2004-11-22-23:04 #1986268jaja, vmi ilyesmire gondoltam.. bár nem ebben a formában, de ahogy elnézem ez a kód elég logikus amit írtál… ezt a hatékonyságot még csak most kezdem kapizsgálni… így látva ezt a kódot, vmivel tisztább a dolog 🙂
2009-12-04-19:56 #1877182üdv
kaptunk ma a suliban egy feladatot, ami a következõképpen szól: adott egy N elemû vektor, s a vektor elemein értelmezett T tulajdonság… szét kell válogatni a tulajdonságfüggvény szerint az elemeket, de a vektoron belül
nos az én esetemben 10 elemû a tömb és a T az páros vagy sem… meg is csináltam az algoritmus, ami sztem jó
próbaképp lekódoltam c-ben, hogy mûxik-e, nos mûködik is de vmiért tullépi a tömb indexelését…
megmutatom a kódot és a kimenetet is, az többet elárul…Code:#includeint paroskeres(int *tomb,int hossz, int kezdoertek){
int i=kezdoertek;
while(( i <= hossz ) && ( tomb[i] % 2 == 1 )){ i++; } if( i <= hossz ) return(i); else return(kezdoertek); } main(){ int A[10]={0,1,2,3,4,5,6,7,8,9}; int s=0,i,j; printf("Erdeti: "); for(i=0;i<10;i++) printf("%d ", A[i]); for( i=0;i<10;i++ ){ j = paroskeres( A , 10 , i ); if( A[i] % 2 == 1 ){ s=A[i]; A[i]=A[j]; A[j]=s; } } printf("nValogatott: "); for(i=0;i<10;i++) printf("%d ", A[i]); printf("n"); }kimenet:
Erdeti: 0 1 2 3 4 5 6 7 8 9
Valogatott: 0 2 4 6 8 -1073743224 3 7 1 9nos igen zavaró az a -1073743224 :))
bocsi, ha nem teljesen olvasható a kód, de még kezdõ vok 😉tudja valaki, hogy tudnám orvosolni a problémát?
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz