Perl Durchschnitt-Subroutine fehlerhaft?

HeinzM

Ensign
Registriert
Apr. 2004
Beiträge
186
Huhu,
schonwieder ich.... :).
Ich möchte mit Hilfe einer Subroutine alle Werte einer Liste herausfiltern die größer als der Durchschnitt sind.
Im Moment sieht die Routine so aus.

Code:
sub gesamt {
	$summe = 0;
	foreach my $zahl (@_) {
		$summe += $zahl;
	}
	return $summe;
}

sub durchschnitt {
	if (@_ == 0) {return}
	my $laenge = @_;
	my $summe = &gesamt(@_);
	$summe/$laenge;
}

sub ueber_durchschnitt {
	my @ergebnis;
	$durch = &durchschnitt(@_);
	print "Durchschnitt $durch \n";
	foreach $vergl (@_) {
		if ($vergl > $durch) {
			push @ergebnis,$vergl;
		}
	}
	return @ergebnis;
}

Wenn ich jetzt eine Liste z.b @test=(1..10) benutze erfolgt das richtige Ergebnis.
Bei einer Liste @test=(100 , 1..10) oder wenn ich die Subroutine mit &ueber_durschnitt (100, 1..10) aufrufe, erhalte ich als Ergebnis 1.
Hat von euch vllt jemand ne Ahnung was ich verbessern könnte?

Viele Grüße,

Heinz
Ergänzung ()

Die Ausgabe, die Ausgabe die bei my @test = (100, 1..10); erzeugt wird ist
Code:
Durchschnitt 14.0909090909091 
Alles über Durchschnitt von 100 1 2 3 4 5 6 7 8 9 10 ist 1.
 
Zuletzt bearbeitet:
bei mir tuts, vllt Schreibfehler in der Ansteuerung?
Der Vollständigkeit halber nochmal der genau Code, mit dem es bei mir geht (den Input Vektor natürlich passend kommentieren).

Code:
    sub gesamt {
    $summe = 0;
    foreach my $zahl (@_) {
    $summe += $zahl;
    }
    return $summe;
    }
     
    sub durchschnitt {
    if (@_ == 0) {return}
    my $laenge = @_;
    my $summe = &gesamt(@_);
    $summe/$laenge;
    }
     
    sub ueber_durchschnitt {
    my @ergebnis;
    $durch = &durchschnitt(@_);
    print "Durchschnitt $durch \n";
    foreach $vergl (@_) {
    if ($vergl > $durch) {
    push @ergebnis,$vergl;
    }
    }
    return @ergebnis;
    }

@test = (1..10);
@test = (100, 1..10);
print ueber_durchschnitt(@test);
 
Ich habs bei mir jetzt auch gelöst.
1 war das Ergebnis da, ich die Subroutine im scalaren Kontext benutzt habe und da hat man mir dann die Anzahl der Element ausgegeben.

Danke nochmal für die Mühe.
 
Zurück
Oben