• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

Array zusammenstellen

Biloboy

Anfänger/in
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?
 
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*
 
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?
 
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++
}
 
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
 
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]);
}
 
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 ^^
 
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:
 
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
 
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
 
- 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..)
 
Zurück