Array zusammenstellen

Biloboy

Benutzer
Mitglied seit
02.10.2001
Beiträge
53
Reaktionspunkte
2
Folgendes Problem. Ich muss ein Programm schreiben, welches aus einem Array mit verschiedenen Sekundenwerte mit Kommastellen, jeweils den ersten Eintrag pro Sekunde rausschneidet.

Zum Beispiel sollte aus dem Array (22.313,22.200,23.525,23.555,24.022) nur die Werte 22.313,23.525,24.002 in ein neues Array geschrieben werden.

Wie kann ich das anstellen?
 
T

Thomsn

Guest
Entweder das Element direkt per Indizierung ansprechen oder einfach das ganze Array durchsuchen?

EDIT: Achso, und danach die jeweiligen Elemente in ein neues Array packen.

Ich kann mir vorstellen, dass diese Antwort vielleicht etwas unbefriedigend ist, aber so wie Du gefragt hast, fällt mir keine sinnvollere ein. *g*
 
TE
B

Biloboy

Benutzer
Mitglied seit
02.10.2001
Beiträge
53
Reaktionspunkte
2
Thomsn am 25.05.2007 13:37 schrieb:
Entweder das Element direkt per Indizierung ansprechen oder einfach das ganze Array durchsuchen?

EDIT: Achso, und danach die jeweiligen Elemente in ein neues Array packen.

Ich kann mir vorstellen, dass diese Antwort vielleicht etwas unbefriedigend ist, aber so wie Du gefragt hast, fällt mir keine sinnvollere ein. *g*


mmh, verstehe leider wirklich nicht genau was du meinst. könntest du es mir vielleicht bildlich darstellen?
 

Cpt_Kirk

Erfahrener Benutzer
Mitglied seit
29.03.2001
Beiträge
144
Reaktionspunkte
4
kannst die float zahlen nicht einfach zu Integerzahlen casten?
Die Funktion zum abschneiden der nachkommastellen müsste "trunc" oder so ähnlich heissen...

Mit welcher Sprache willst du das denn machen?

Sowie du nur noch integer werte hast, einfach ne Schleife

FOR i=1 to length.A1
{
if A1[ i ] notelementof A2
then {A2[ ]=A2[ ]+A1[ i ]}
i++
}

fertisch

A1= erster Array, A2=zweites Array
Die Operatoren sind dann natürlich je nach gewählter Programmiersprache abzuändern ;)

€: Ok, du willst die nachkommastellen ja behalten...
Dann muss du sie trotzdem Casten, und die puren Integerwerte schreibst du in A1, wie gehabt. Die Ausgangswerte bleiben in A0.
Dann müsste folgendes funzen:

FOR i=1 to length.A1
{
if A1[ i ] notelementof A2
then {A2[ ]=A2[ ]+A0[ i ]}
i++
}
 
P

Pasdan

Guest
Biloboy am 25.05.2007 13:32 schrieb:
Folgendes Problem. Ich muss ein Programm schreiben, welches aus einem Array mit verschiedenen Sekundenwerte mit Kommastellen, jeweils den ersten Eintrag pro Sekunde rausschneidet.

Zum Beispiel sollte aus dem Array (22.313,22.200,23.525,23.555,24.022) nur die Werte 22.313,23.525,24.002 in ein neues Array geschrieben werden.

Wie kann ich das anstellen?

also ich würde dir empfehlen:
mit einer for schleife durch alle elemente des arrays zu gehen
also von null bis länge des arrays -1 (jenachdem ob die elemente von 1 oder von null an aus gezählt werden)
zuvor initialisierst du eine neue integervariable mit 0
dann fängst du die schleife an.
in der schleife vergleichst du diese Variable mit dem abgerundeten wert aus dem array
spricht bei dir wäre der erste wert abgerundet 22
wenn der abgerundete wert größer als der wert in deiner variabeln ist, schreibe ihn in dein neues array (natürlich ungerundet) und den gerundeten in deine variable
fertig

MfG
 
TE
B

Biloboy

Benutzer
Mitglied seit
02.10.2001
Beiträge
53
Reaktionspunkte
2
Danke vielmals, funktioniert einwandfrei...

Jetzt brauche ich aber noch eine weitere Funktion. Und zwar müssen bei denselben Sekunden immer die zweiten Angaben genommen werden.

Also zum Beispiel aus (22.333,22.453,23.485) muss 22.453 und 23.485 herausgepickt werden.

Hier noch der Code der ersten Frage:


$data = array(22.123,22.324,23.443,23.746,24.443);
$count = count($data);
$counter = 0;

for($i = 0; $i < $count; $i++) {
if($counter < intval($time_all[$i])) {
$time[$i] = $data[$i];
}
$counter = intval($time_all[$i]);
}
 

Cpt_Kirk

Erfahrener Benutzer
Mitglied seit
29.03.2001
Beiträge
144
Reaktionspunkte
4
Biloboy am 25.05.2007 15:57 schrieb:
Danke vielmals, funktioniert einwandfrei...

Jetzt brauche ich aber noch eine weitere Funktion. Und zwar müssen bei denselben Sekunden immer die zweiten Angaben genommen werden.

Also zum Beispiel aus (22.333,22.453,23.485) muss 22.453 und 23.485 herausgepickt werden.

Hier noch der Code der ersten Frage:


$data = array(22.123,22.324,23.443,23.746,24.443);
$count = count($data);
$counter = 0;

for($i = 0; $i < $count; $i++) {
if($counter < intval($time_all[$i])) {
$time[$i] = $data[$i];
}
$counter = intval($time_all[$i]);
}

ganz blöde Lösung:

$time_all[$i] = $time_all[$i] - intval($time_all[$i] :-D

Ansonsten such nach ner Funktion die den Float-Wert in zwei Ints wandelt und vergleiche dann ;) (also im endeffekt ja der gleiche Algorithmus wie ich ihn gepostet habe, nur etwas schöner ^^)

Ooodddeeerrrr: Die Float werte in Strings umwandeln, die dann zerschneiden mit "." als Trennzeichen und dann wieder zurück nach Int casten :-D
Wobei ich denke das das alles mit ner Funktion besser aussieht ^^
 
P

Pasdan

Guest
Biloboy am 25.05.2007 15:57 schrieb:
Jetzt brauche ich aber noch eine weitere Funktion. Und zwar müssen bei denselben Sekunden immer die zweiten Angaben genommen werden.

Was genau willst du jetzt machen, willst du nach größe ordnen bzw. immer den größten wert?
oder willst du wirklich immer den zweiten wert? :confused:
:confused: ich bin verwirrt :confused:
 
TE
B

Biloboy

Benutzer
Mitglied seit
02.10.2001
Beiträge
53
Reaktionspunkte
2
Pasdan am 29.05.2007 08:26 schrieb:
Biloboy am 25.05.2007 15:57 schrieb:
Jetzt brauche ich aber noch eine weitere Funktion. Und zwar müssen bei denselben Sekunden immer die zweiten Angaben genommen werden.

Was genau willst du jetzt machen, willst du nach größe ordnen bzw. immer den größten wert?
oder willst du wirklich immer den zweiten wert? :confused:
:confused: ich bin verwirrt :confused:

Immer den letzten Wert einer Sekunde...

Als Beispiel:

Von 22.123, 22.345, 22.456, 23.333, 23.457, 23.746

brauche ich nur die Werte 22.456 und 23.746
 
P

Pasdan

Guest
Biloboy am 30.05.2007 10:12 schrieb:
Immer den letzten Wert einer Sekunde...

Als Beispiel:

Von 22.123, 22.345, 22.456, 23.333, 23.457, 23.746

brauche ich nur die Werte 22.456 und 23.746

hmm, also da würde ich den bestehenden kram kopieren
davor ein temporäres array initialisieren
das bestehende array mit dem befehl array_reverse in das temporäre array laden und dann den kopierten teil so anpassen das die forschleife durch das temporäre array läuft
!!! Achtung, bei deinem Integervergleich würde ich empfehlen anstatt kleiner (<) den vergleichsoperator ungleich (!=) zu verwenden, sonst hast du möglicherweise probleme, wenn du wie jetzt, nach array_reverse, aufsteigende werte hast!!!
nachdem die forschleife beendet ist musst du nur noch deinen entstandenen array nochmal mit array_reverse umdrehen, damit die originalreihenfolge wieder hergestellt wird
 

Wookie23

Neuer Benutzer
Mitglied seit
28.01.2005
Beiträge
25
Reaktionspunkte
0
- neues Array anlegen
- ersten Zeitwert in eine Variable speichern
- for Schleife über das Zeitwert-Array
-- den gespeicherten Zeitwert mit dem aktuellen Zeitwert aus dem Array vergleichen (mit trunc .. also nur die Zahl vorm Komma)
--> falls unterschiedlich: gespeicherte Variable im neuen Array abspeichern
-- gespeicherte Variable durch aktuellen Zeitwert aus Array ersetzen


Die Aufgaben ersten und letzten Zeitwert raussuchen lassen sich auch recht leicht kombinieren ..

(Ich geh in der Lösung davon aus, dass das Array sortiert ist .. und dass immer mehr als ein Zeitwert vorhanden ist (sonst wird der einizg vorhandene Zeitwert abgespeichert..)
 
Oben Unten