perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 25
Click for quality!




11.02.2012 / 07:53

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragfor schleife
Seitenanfang
Hallo,

ich möchte aus zwei Arrays paarweise Werte an zwei Variablen übergeben und diese in einer Gleichung bzw. in einer Subroutine nutzen. Dabei gehe ich folgendermaßen vor:

$i=0;
for (@index,@temp)
{
$tmean=$temp[$i];
$doy=$index[$i];
$i=$i+1;
...
}

Bei einer Printanweisung erkenne ich, dass die Werte so übergeben werden, wie ich sie eigentlich benötige. Dennoch bekomme ich beim Aufruf meiner Subroutine (dreieck) die Fehlermeldung "use of uninitilized value". Der Aufruf der Subroutine steht ebenfalls in der for-Schleife und soll für jeden Wert $tmean die Rechnung durchführen.


$Irate=$ampI*dreieck($minI, $optI, $maxI, $tmean);

Gleiches gilt für $doy. Mit dem jeweiligen Wert soll die folgende Subroutine gerufen werden:


daylength($lat,$doy,$dl,$delta);

Die Werte, die zurückkommen, sollen dann in der Rechnung


$I=$I-$I*$Irate*$dl/24;
$P=$P+$Prate*(1-$I)-$a*$P*(24-$dl)/24;

verarbeitet werden. Für jedes Wertepaar $tmean und $doy soll ein neuer Wert $I und $P errechnet und dann im nächsten Durchlauf verwendet werden.

Jemand eine Idee wie das zu bewerkstelligen ist? Bin recht ratlos, wo mein Fehler liegt bzw. meine Fehler liegen.

Bin dankbar für jede Hilfe, LarsVegas

Datum: 23.08.2005-14:28

Beitragre: for schleife
Seitenanfang
Wenn die Werte bei einem print passend ausgegeben werden, kann's das eigentlich nicht sein. Sind die beiden Arrays @index und @temp gleich gross? Soll heissen: scalar @index == scalar @temp und $#index == $#temp? Wenn nicht kann es daran liegen, denn das kleinere gibt dann nur noch undef zurueck.

Sind denn alle deine anderen Werte definiert?

Und wo genau wird der Fehler ausgegeben? Bzw. welche Zeile genau generiert die Warnung?

Und warum laesst Du die for() Schleife nicht gleich mit $i laufen?

for(my $i = 0; $i < @index; $i++) {
$tmean=$temp[$i];
$doy=$index[$i];
}

Datum: 23.08.2005-23:01

Beitragre: for schleife
Seitenanfang
Hey,

danke für deine Antwort. Mit deinem Schleifenkonstrukt scheint es tatsächlich zu funktionieren?! der Fehler wurde in der Subroutine ausgegeben, was ich auch nicht nachvollziehen kann. Denn: beide Arrays enthalten die gleiche Anzahl von Werten und auch alle anderen Variablen, die übergeben werden, sind fest definiert. Bei diversen Probeläufen mit einzelnen Werten funktionierte alles ohne Probleme. Zur Schleifenkonstruktion: Ich programmiere erste seit einigen Monaten, weshalb ich in den Formlierungen nicht immer besonders sicher bin. Ich habe diverse Varianten ausprobiert, deine ist freilich elegant und funktioniert, wie gesagt. Wird denn der jeweils errechnete Wert für $P beim nächsten Schleifendurchlauf als Größe verwendet, ohne dass ich ihm ein [$i] bzw. [$i+1] zuweisen muss? Die Gleichung steht schließlich auch in der Schleife. Die Ergebnisse scheinen mir immernoch nicht korrekt zu sein...

Gruß,

LarsVegas

Datum: 24.08.2005-00:54

Beitragre: for schleife
Seitenanfang
Sollte kein Vorwurf sein, wollte nur wissen ob es einen besonderen Grund fuer dieses Schleifenkonstrukt gibt, da ich das so auch noch nicht gesehen hatte, denn:

Eine for() Schleife sollte eine Start-, Lauf- und eine Abbruchbedingung haben (getrennt durch die Semikola). So wie Du sie verwendet hattest iteriert sie einfach ueber beide Arrays und setzt bei jedem Ablauf $_ auf den Wert des aktuellen Elements, also das gleiche wie foreach(@index, @temp) { ... }

Wenn es nur ein skalares $I und $P gibt werden die natuerlich bei jedem Schleifendurchlauf ueberschrieben.

Werden diese nur innerhalb des Schleifendurchlaufs gebraucht, sollte das so gehen. Willst Du aber fuer jedes @index-Element I und P berechnen und die auch nach der Schleife verwenden, musst Du sie als Array definieren und mit dem Zaehler $i arbeiten.

Datum: 24.08.2005-08:45

Beitragre: for schleife
Seitenanfang
Hi,

hatte ich auch nicht so aufgefasst. Nochmal zu den Variablen $I und $P: Ich arbeite - da ich die Werte für eine Graphik verwenden will - mit dem push-Befehl


push(@P,$P)

und schreibe das Array @P dann in eine Datei. Eigentlich auch keine saubere Methode, da ich die Werte an ein anderes Programm übergeben will, aber offensichtlich kein Array als Parameter übergeben kann, sondern nur Variablen. OK, funktioniert aber auch so. Danke auf jeden Fall für deine Hilfe.

Gruß

Datum: 24.08.2005-11:28

-






-
-