Thread (Verständnis)Probleme mit verschachtelten foreach-Schleifen und If-Abfragen
(11 answers)
Opened by Wurzel at 2008-08-07 19:28
Guten Abend
Ich verzweifle ... :( Ich versuche mit Perl (5.8.8 -> Cygwin unter WinXP) ein kleines Skript zu basteln, das mir Buchstabenkombinationen erstellt, gleichzeitig aber bestimmte "nicht erlaubte" rausfiltert. Ich bin der Lösung ziemlich nahe, denn das Skript gibt mir genau diese "nicht erlaubten Kombis" aus, mehr jedoch leider nicht :( Die beiden "Kommentar"zeilen innerhalb der Schleife können als Ersatz für die einzeilige IF-Abfrage herhalten. Das Resultat ist genau das gleiche. Ach ja, und es spielt auch keine Rolle, ob ich in den geschweiften Klammern next stehen habe oder nicht. Die IF-Abfrage in Zeile 20 funktioniert wie sie soll. Nur beim "Rest" hätte ich es gerne, dass genau das Umgekehrte rauskommt. Wenn ich mich nicht verrechnet habe müssten es 348 erlaubte Kombinationen werden. Mir ist klar, warum ich bei diesem Skript eben dieses Resultat erhalte, aber ich sehe absolut nicht, wie ich das Resultat erhalte, das ich eigentlich will .... Hat mir jemand einen Tip wo mein Denkfehler liegen könnte? Besten Dank und einen schönen Abend Marc Code (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 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #!/usr/bin/perl -w @konsonants = ( "p", "b", "t", "d", "k", "g", "m", "n", "f", "v", "h", "ch", "l", "r", "s", "sch", "ts", "ds", "tsch", "dsch", "x" ); #21 @not_first = ( "p", "b", "t", "d", "k", "g" ); #6 @not_second = ( "p", "b", "t", "d", "k", "g", "m", "n", "ts", "ds", "tsch", "dsch", "x" ); #13 $j = 0; $konso1 = 0; $konso2 = 0; $len_not_first = @not_first; $len_not_second = @not_second; # CC foreach $konso1 (@konsonants) { foreach $konso2 (@konsonants) { if ($konso1 eq $konso2) { next } for ($i = 0; $i < $len_not_first; $i++) { for ($y = 0; $y < $len_not_second; $y++) { if ($konso1.$konso2 ne $not_first[$i].$not_second[$y]) { next } # if ($konso1 ne $not_first[$i]) { } # elsif ($konso2 ne $not_second[$y]) { } else { print $konso1.$konso2."\n"; $j++; } } } } } print $j; print "\n"; |