Teil von struct-Feld übergeben
-
in createPOP fülle ich die char-Felder in dem struct-Feld und will dann das Feld ab der aktuellen pos an eine andere funktion übergeben ... C will aber nicht
struct chromoson { unsigned char gene[CHROMO_LENGTH]; float fitness; }; ... int createPOP(struct chromoson** cp){ short iGene, iCit; for(iCit=0; iCit < POP_SIZE; iCit++) { for (iGene=0; iGene < CHROMO_LENGTH; iGene++) (*cp+iCit)->gene[iGene]=RANDOM_NUM; if(getFitness(&(*cp+iCit))==EVO_END) return EVO_END; /* '&' erwartet L-Wert */ } return 0; } int getFitness(struct chromoson** cp){ /*hier soll im aktuellen Element gerechnet werden*/ ...
-
Bin mir jetzt nicht sicher, aber da
if(getFitness(&(*(cp+iCit)))==EVO_END) return EVO_END;
, müsste auch
if(getFitness(cp+iCit)==EVO_END) return EVO_END;
funktionieren...
-
Was ist ein Chromoson, hab ich da in Bio was verpasst?
-
Original erstellt von RTC:
**Bin mir jetzt nicht sicher, aber daif(getFitness(&(*(cp+iCit)))==EVO_END) return EVO_END;
, müsste auch
if(getFitness(cp+iCit)==EVO_END) return EVO_END;
funktionieren...**
hoffentlich nicht ... dann kapier ich nämlich garnix mehr ...
cp ist doch ein **, wenn ich cp+i schreibe müsste der doch i*ptr_size an dem ptr auf das struct-array vorbeizeigen (auf irgendein schwachsinn) ... oder??
daher dachte ich mir: erstmal cp dereferenzieren (*cp) und auf das geünschte ele zeigen (*cp+i), und von da die adresse holen (&(*cp+i)), aber geht halt net ...
EDIT: ja das is schon ganz dolle biologiemässig! bin grad son bisschen an dem tutorial auf http://www.ai-junkie.com am machen (genetic alg)
[ Dieser Beitrag wurde am 18.06.2003 um 12:46 Uhr von Dill editiert. ]
-
ich habe jetzt ein bisschen (viel) mit meiner funktion rumgespielt.
die sache läuft jetzt auch und eigentlich auch schicker, aber es stört mich doch, dass ich es nicht auf die art hinkriege wie ich es zuerst machen wollte.
(statt inkrementieren (*cp)++ in der schleife die einzelnen elemente immer mit einer zählvar adressieren)
habe mal die versuche kommentiert dringelassen, wäre nett wenn mir mal jemand meinn denkfehler klarmachen kann ...int createPOP(struct chromoson** cp){ short iGene,iCit,wrand; //for(iCit=0; iCit < POP_SIZE; iCit++, (*cp)++) { for(iCit=0; iCit < POP_SIZE; iCit++, (*cp)++) { for (iGene=0; iGene < CHROMO_LENGTH; iGene++) { wrand=(int)(((float)rand()/(RAND_MAX+1)*100))%14; //(*cp+iCit)->gene[iGene]=wrand; //(*cp)[iCit].gene[iGene]=wrand; (*cp)->gene[iGene]=wrand; } //if(getFitness(&(*(cp+iCit)))==1); //if(getFitness(cp+iCit)==1); //if(getFitness(&((*cp)[iCit]))==1); if(getFitness(cp)==1); } return 0; }
-
Hmmm, http://www.wissen.de
kennt chromoson auch net
-
Heißt ja auch Chromosom
-
garnet
-
http://www.wissen.de/xt/default.do?MENUNAME=Suche&query=Chromosom
... und was ist das?