Einzelnen Beitrag anzeigen

altesfossil

Registriert seit: 26. Feb 2007
2 Beiträge
 
#1

Speichern und umwandeln von records und arrays

  Alt 27. Feb 2007, 09:50
Hi,

ich bin Delphi-Neuling, muss aber für meine Diplomarbeit in Delphi programmieren, und zwar als console application. Einen Teil hab ich auch schon. Das Programm soll N Populationen einen Chromosomensatz zuordnen, Das macht es ja schon. Nur haperts bei mir noch an:

1. Die Chromosomensätze, die es mir liefert, sollen in einer Datei gespeichert werden, weil ich die zu einem späteren zeitpunkt wieder brauchen werde.

2. ich sollte diese Datei überprüfen können, sie sollte also z.b. mit dem texteditor oder excel lesbar sein.

3.es gibt N populationen, jede population hat eine bestimmte Anzahl k von Idividuen drin, z.b. 500. Jetzt soll nochmal ein array( teilpopulation) mit k Einträgen entstehen, welche k-mal den chromosomensatz von Population 1 beinhaltet, dann ein weiterer array mit dem chromosomensatz von Population 2, usw... bis N. Diese N arrays würde ich auch gerne in eine Datei schreiben. Auch diese Daten würde ich gerne überprüfen und ich muss sie später abrufen und umwandeln können. da die zu speichernden Records aus array[1..10] of integer bestehen, noch eine Frage: kann man diese einzelarrays auch in einen String[10] umzuwandeln? Wenn ja, wie geht das?

Ich hoffe, einer von euch kann mir da weiterhelfen und es war halbswegs verständlich.....

Hier das bisherige Programm:

Delphi-Quellcode:
program Project2;


{$APPTYPE CONSOLE}



const maxN = 10000;


//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


type
   chromosomentyp = array[1..10] of Integer; {erstellt einen Vektor mit 10 Einträgen}

    genotyp =
      record
         chromosom1: chromosomentyp; {erstellt das Gesamtchromosom eines Individuums}
         chromosom2: chromosomentyp;
      end;

    teilpopulation = array[1..maxN] of genotyp;



//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


var i, j, s, vertauschungen, freiheitsgrad, stelle : Integer; //Zähl- und Arbeitssvariablen
        geno : genotyp;
   besucht : array[1..10] of Boolean;
        k :integer;
        teilpop : teilpopulation;
        neu, N : Integer;
   eingabe : Integer;








//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++





 begin
 randomize;
   //Anmerkung: k muss kleiner oder gleich maxN sein.
   Write ('Bitte geben sie die Anzahl der Populationen ein:');
        Readln (N);
        //Write('Bitte geben Sie die Groesse k der Teilpopulation an (max. ', maxN, '): ');
   //ReadLn(k);



     for s:=1 to N do begin




      for j:=1 to 10 do begin

      geno.chromosom1[j] := Random(2);


                geno.chromosom2[j] := geno.chromosom1[j];

      //Speichert, welche chromosomen noch nicht geändert wurden.
      besucht[j] := false;
           end;

                //Gibt die Anzahl der stattfindenden Vertauschungen an, sprich die Allelfrequenz. Hier 0,5-->5 Vertauschungen
            vertauschungen := 5; //später bei mehr oder weniger Vertauschungen :=random(10)+1

           //Anzahl der Möglichkeiten ein Chromosom zu ändern.
           //Dies entspricht stets der Anzahl der false im Feld besucht.
           freiheitsgrad := 10;

           for i:=1 to vertauschungen do begin
      //Gibt an, an der wievielten der verbleibenden Stellen ein Chromosom geändert werden soll.
      stelle := Random(freiheitsgrad) + 1;
      for j:=1 to 10 do begin
         //Falls eine noch nicht veränderte Stelle gefunden wurde...
         if (not besucht[j]) then begin
            stelle := stelle - 1;
            
            //Falls die Änderungsstelle gefunden wurde...
            if (stelle = 0) then begin
               //...verändere den Zustand der Stelle (ändert eine 0 in eine 1 und umgekehrt)
               geno.chromosom2[j] := (geno.chromosom2[j]+1) mod 2;

               //...und markiere diese Stelle als geändert/besucht.
               besucht[j] := true;
               
               //Da die Änderungsstelle nun gefunden wurde, können wir die j-Schleife nun abbrechen.
               break;
            end;
         end;
      end;

      //Da auf jeden Fall oben eine Änderung stattgefunden hat (klar), sinkt der Freiheitsgrad
      //für weitere Änderungen.
      freiheitsgrad := freiheitsgrad - 1;
           end;

        

          writeln;
          writeln;
          //Hier kommt das, was abgespeichert werden soll
          writeln('Population ',s,':');






          for i:=1 to 10 do begin
               write(geno.chromosom1[i]);
          end;


          writeln;

          for i:=1 to 10 do begin
               Write(geno.chromosom2[i]);
               
          end;

         




end;
readln;
end.
  Mit Zitat antworten Zitat