perl programmierung. wie kann ich zwischen loops springen?

...komplette Frage anzeigen

4 Antworten

Das sieht mir nach typischem Spaghetti-Code aus.

Es wird empfohlen, auf Goto grundsätzlich zu verzichten und stattdessen Schleifenstrukturen zu nehmen. Hier würde ich so ansetzen:

Wiederhole

eingabe -> zahl1

eingabe -> zahl2

berechnung aus zahl1 und zahl2 -> ergebnis

ergebnis -> ausgabe

Wiederhole

eingabe -> antwort

bis antwort ist gültig ## d. h. "Weiter" oder"Fertig", bzw. "y" oder "n"

bis antwort ist "Fertig"

## hier folgt noch das Zählen

ydnalein 06.05.2015, 20:01

Danke für die Antwort. Ich werde es so versuchen.

Spaghetti-Code ist einfacher zu programmieren xD

Ich versuche heute das erste mal Perl zu programmieren und muss erst die ganzen Befehle usw kennenlernen. Ich habe nur wenig Erfahrung in einigen anderen Programmiersprachen... und Diese habe ich allen Anschein nach auch Spaghetti-mäßig eingesetzt :D

0
PWolff 06.05.2015, 20:04
@ydnalein

Spaghetti-Code ist nur am Anfang einfacher. Wenn man ihn sich später anschaut, braucht man lange, um da wieder durchzusteigen. Und um in Schleifenblöcke hineinzuspringen, muss man wohl ein eingefleischter Pastafarian sein.

1
CSANecromancer 08.05.2015, 08:18
@ydnalein

Spaghetti-Code ist einfacher zu programmieren xD

Mir ist einmal der gute Tipp gegeben worden:

"...Schreibe deinen Code immer so, als wäre derjenige, der den Code nach dir bearbeiten muss, ein Psychopath mit niedriger Frustrationsschwelle, der deine Privatadresse kennt..."

Spaghetti-Code = Kopfschuss :)

2

Ich komme einfach nicht weiter:

Hier der schöne Code (als Kommentar Einiges was ich versucht habe)

use 5.010;use strict;use warnings;my $yn="no";#forwhile ($yn eq "n" or "no"){ print "Nenne mir eine Zahl.\n"; my $z1=; print "Nenne mir noch eine Zahl.\n"; my $z2=; my $erg=$z1+$z2; chomp $erg; print "\nDie Summe aus den Zahlen ist $erg.\n\n"; #last if ($yn eq "y" or "yes"); #for while (not $yn eq "y" or "yes"){ print "Count to 1000000000000000000000? (y/n)\n"; my $yn=; if ($yn eq "y" or "yes"){last}; #next; #redo; } #last if ($yn eq "y" or "yes"); #next; #redo;}my $zahl="0";while ($zahl<1000000000000000000000) {print "$zahl\n"; $zahl++;}exit;

Geschachtelte Schleifen?

Danke für die Antwort.

Hier ist mein Code (hoffentlich selbsterklärend):

use 5.010;

use strict;

use warnings;

HW:

say "Hello World\n";

BEISPIEL:

print "Nenne mir eine Zahl.\n";

my $z1=;print "Nenne mir noch eine Zahl.\n";

my $z2=;my $erg=$z1+$z2;chomp $erg;

print "\n";print "Die Summe aus den Zahlen ist $erg.\n\n";

COUNT:

print "Count to 1000000000000000000000? (y/n)\n";

my $yn=;

if ($yn eq "n" or "no") {print "\n" and goto BEISPIEL}

elsif ($yn eq "y" or "yes") {print "\n" and goto UP}

else {print "\n" and redo COUNT};

UP:

my $zahl="0";

while ($zahl<1000000000000000000000) {print "$zahl"; $zahl++; redo;

if ($zahl=="1000000000000000000000") {exit};

}

Ich weiß nicht wie mir in diesem Fall verschachtelte Loops helfen sollten?

Oder verstehe ich da etwas falsch?

ydnalein 06.05.2015, 19:49

aber nichtmal das funktioniert:

my $yn=<stdin>;
if ($yn eq "n" or "no") {print "nonono\n"}
elsif ($yn eq "y" or "yes") {print "yeayeayea\n"}
else {print "\n", };

Hier liegt also das Problem, nicht beim goto.
Aber das müsste doch funktionieren, oder?

0
rico666 26.10.2015, 16:43
and goto X

macht nicht was Du denkst das es macht.

and ist ein (schwach) bindender logischer Operator, Du hast in obigem code glück, dass print allermeistens 1 als Rückgabewert hat, sonst würde es gar nicht mehr funktionieren.

Du willst statt dem and einen einfachen Strichpunkt haben.

if ($zahl=="1000000000000000000000")

hier willst Du die Zahl nicht in Anführungszeichen haben.

Überhaupt willst Du auch nicht so viele Nullen da haben. Kann doch keiner lesen 10e21 ist kürzer und besser

if ($zahl == 10e21)

Wenn Du schon say verwendest, dann lass doch das print "x\n" weg und nimm einfach say "x"

0

Was möchtest Du wissen?