1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!usr/bin/perl -w
use 5.014;
my $time = <STDIN>
if ($time <= 49) {
my $result = $time / 1;
print "Time Points\n";
printf "%3f %3f\n", $time, $result;
} elsif ($time <= 99) {
my $result = $time / 2 * 1;
print "Time Points\n";
printf "%3f %3f\n", $time, $result;
} elsif ($time <= 199) {
my $result = $time / 3 * 2;
print "Time Points\n";
printf "%3f %3f\n", $time, $result;
} elsif ($time <= 299) {
my $result = $time / 4 * 3;
print "Time Points\n";
printf "%3f %3f\n", $time, $result;
} elsif ($time <= 500) {
my $result = $time / 5 * 4;
print "Time Points\n";
printf "%3f %3f\n", $time, $result;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!usr/bin/perl -w
use 5.014;
my $t = <STDIN>;
my $classmax = &clm($t, 49, 99, 199, 299, 500);
sub clm {
my($c) = shift @_;
if (@_ != 5) {
print "Something went wrong";
foreach (@_) {
if ($c < $_) {
my(@div) = shift @_;
} elsif ($c > $_) {
my $divi = @div;
my $re1 = $t / $divi;
my $zre = $divi - 1;
my $re2 = $re1 * $zre;
print "Your points are $re2\n";
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#Erspielte Zeit wird eingegeben.
#Das erste Argument ist die erspielte Zeit die in $t gespeichert wurde.
#$c wird auf den Wert $t (<STDIN>) gesetzt, indem $t als 1. Argument für die Subroutine zur Verfügung gestellt wird.
#Die Anweisung überprüft auf die Vollständigkeit der Argumente.
#Fals etwas nicht der Überprüfung entspricht wird eine Warnung ausgegeben.
#Nun werden die restlichen Argumente ("Klassen 1-5 ($_[1]..$_[5])") genommen.
#Jetzt wird jedes Element aus @_ mit $c (der Wert von $t (<STDIN>)9 verglichen.
#Wert $_ aus @_ wird zu @div hinzugefügt, wenn $c kleiner als $_ ist um später den Divisor im skalaren Kontext zu ermitteln.
#Wenn nun $c ($t) größer ist als $_ soll gerechnet werden.
#Divisor wird nun aus @div (von vorher) ermittelt (skalarer Kontext).
#result1 (re1) resultiert aus $t (<STDIN>/Dividend) durch den divisor.
#$zre ist ein Zwischenergebnis um auf den Faktor zu kommen
#result2 (re2/Produkt) ergibt sich aus $re2 (faktor1) und $zre (faktor2)
#$re2/mein Ergebnis wird ausgegeben und "sichtbar gemacht".
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use strict;
use warnings;
use 5.014;
my $time = <STDIN>;
chomp $time;
my $result;
if ($time <= 49) {
$result = $time / 1;
} elsif ($time <= 99) {
$result = $time / 2 * 1;
} elsif ($time <= 199) {
$result = $time / 3 * 2;
} elsif ($time <= 299) {
$result = $time / 4 * 3;
} elsif ($time <= 500) {
$result = $time / 5 * 4;
}
print "Time Points\n";
printf "%3f %3f\n", $time, $result;
2017-07-22T11:47:55 LinuxerDu kannst das erste Skript schon verkürzen, indem Du die Redundanzen entfernst. Die Ausgabe wiederholst Du in jedem Zweig, wozu?
Deklariere $result oberhalb der if-Zweige; über die if-Zweige setzt Du dann nur die Berechnung für $result um und danach gibst Du dann das Ergebnis einmal aus:
Code: (dl )1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23use strict;
use warnings;
use 5.014;
my $time = <STDIN>;
chomp $time;
my $result;
if ($time <= 49) {
$result = $time / 1;
} elsif ($time <= 99) {
$result = $time / 2 * 1;
} elsif ($time <= 199) {
$result = $time / 3 * 2;
} elsif ($time <= 299) {
$result = $time / 4 * 3;
} elsif ($time <= 500) {
$result = $time / 5 * 4;
}
print "Time Points\n";
printf "%3f %3f\n", $time, $result;
Guest DieZahlCode (perl): (dl )1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24#!usr/bin/perl -w use 5.014; my $t = <STDIN>; my $classmax = &clm($t, 49, 99, 199, 299, 500); sub clm { my($c) = shift @_; if (@_ != 5) { print "Something went wrong"; foreach (@_) { if ($c < $_) { my(@div) = shift @_; } elsif ($c > $_) { my $divi = @div; my $re1 = $t / $divi; my $zre = $divi - 1; my $re2 = $re1 * $zre; print "Your points are $re2\n"; } } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
#!/usr/bin/perl use warnings; use strict; my $t = <STDIN>; my $classmax = clm($t, 49, 99, 199, 299, 500); sub clm { my $c = shift; # Wenn man shift ohne Argument verwendet, bezieht es sich automatisch auf @_ my @a = @_; if ($#a != 4) { print "Something went wrong.\n"; exit; } my $i; foreach $i (@a) { if ($c < $i) { my @div = shift @a; # Ich hab' keine Ahnung, was das bewirkt (vermutlich bekommt das Array @div das erste Element von @a). Bestimmt aber nicht das, was Du willst. } elsif ($c > $i) { my $divi = @div; # Damit wird $divi auf die Anzahl der Elemente von @div gesetzt. Wolltest Du das? my $re1 = $t / $divi; my $zre = $divi - 1; my $re2 = $re1 * $zre; } print "Your points are $re2\n"; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
use strict; use warnings; # Zeiten und Klassen my %classes = ( 49 => '1. Klasse', 99 => '2. Klasse', 199 => '3. Klasse', 299 => '4. Klasse', 500 => '5. Klasse' ); my $t = 88; # oder von STDIN my $result = ''; foreach my $c( sort {$a <=> $b} keys %classes){ if( $t <= $c ){ $result = $classes{$c}; last; } } print $result ? $result : "Out of Range";
Guest DieZahlIst das Thema jetzt abgehackt (also in dem Forum)?