Array aufsplitten

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Sasu
Beiträge: 1
Registriert: Di 21. Jul 2015, 16:49

Array aufsplitten

Beitrag von Sasu »

Hallo zusammen,

ich probiere mich im Moment ein wenig an Feldern und was ich damit alles machen kann.
Dazu habe ich eine Aufgabe, die ich gefunden habe ein wenig abgewandelt und möchte nun die Werte aus einem Feld mit einer Zahlenfolge in zwei Felder aufteilen. Und zwar in Eines, wo nur gerade Zahlen rein kommen und Eines, wo ich die Ungeraden eintrage.

Soweit so gut - klappt auch.
Mein Problem dabei ist nun, dass bei den beiden Feldern, die ich dann habe, ja die maximale Anzahl Felder, gleich der des Ausgangsfeldes ist. Wer weiß, vielleicht will ja jemand nur gerade Zahlen eingeben? Wenn das aber nicht der Fall ist, dann habe ich Nullen in meinem Feld, die ich dort ja eigentlich nicht haben möchte.
Beispiel:
Ausgangsfeld hat die folgenden Zahlen
1 2 3 4

nach meinem Programm hat dann das Feld der geraden Zahlen dieses Aussehen:
2 4 0 0

und das Feld für ungerade Zahlen
1 3 0 0
Hat da jemand einen Rat, wie ich die Nullen wegbekomme?

Es grüßt euch
Das Sasu

Warf
Beiträge: 2137
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Array aufsplitten

Beitrag von Warf »

Nun zunächst möchte ich dich bitten Arrays doch bitte Arrays zu nennen, da Felder in der Objekt Orientierten Programmierung etwas anderes sind und das zu Missverständnissen führen kann. Wenn du unbedingt einen Deutschen begriff haben möchtest so wäre der Begriff Vektor aus der Mathematik der richtige Name.

Das was du suchst sind Dynamische Arrays und die Methode SetLength(DayArray, Length);

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Array aufsplitten

Beitrag von baumina »

Und wie sieht dein Quellcode aus?
.

RuhrPotto
Beiträge: 39
Registriert: Mi 6. Mai 2015, 12:52

Re: Array aufsplitten

Beitrag von RuhrPotto »

Warf hat die Antwort eigentlich schon gegeben.
Aber mal ein möglicher Code dazu:

Code: Alles auswählen

 
var
  aOrg
  aOdd
  aEven : array of integer;
  i,
  iOrg,
  iOdd,
  iEven : integer;
 
  iOrg := Length(aOrg);
  SetLength(aOdd,iOrg);
  SetLength(aEven,iOrg);
 
  iOdd := 0;
  iEven := 0;
  for i := 0 to iOrg -1 do
    if Odd(iOrg[i]) then
    begin
      aOdd[iOdd] := iOrg[i];
      Inc(iOdd);
    end
    else
    begin
      aEven[iEven] := iOrg[i];
      Inc(iEven);
    end;
 
  SetLength(aOdd,iOdd);
  SetLength(aEven,iEven);
 
So sollte es klappen ..
Jeder macht Fehler - viele Fehler brauchen EDV!

Antworten