Schrift
[thread]12961[/thread]

Problem bei Programmverständnis



<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
Gast Gast
 2009-01-06 17:08
#117629 #117629
hallo zusammen,
ich hab ein problem... ich hab folgendes programm, aber ich komm einfach nicht auf die richtige lösung

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
#!/usr/bin/perl -w
my @zeilen;
$zeilen[0] = 'Zebra';
$zeilen[1] = 'Affe';
$zeilen[2] = 'Loewe';
$zeilen[3] = 'Baer';
$zeilen[4] = 'Pinguin';
my $anzahl = 5;
my $aktion = 1;
while ($aktion){
$aktion = 0;
for (my $i = 0; $i < $anzahl - 1; $i++){
if ($zeilen[$i] ge $zeilen[$i + 1]){
($zeilen[$i], $zeilen[$i + 1]) = ($zeilen[$i + 1],
$zeilen[$i]);
$aktion = 1;
}
}
}
for (my $i = 0; $i < $anzahl; $i++){
print "$zeilen[$i]\n";
}



ich glaub mein Problem liegt in der Zeile bei $aktion = 1; da weiß ich nicht genau wohin

edit pq: code-tags hinzugefügt
edit: gwendragon: Fehlerhaften Bindestrich in Code durch Minuszeichen ersetzt
pq
 2009-01-06 17:57
#117632 #117632
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
bitte das nächste mal code-tags oder perl-tags verwenden, siehe FAQ, danke
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2009-01-06 18:02
#117633 #117633
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Gast+2009-01-06 16:08:02--

Code (perl): (dl )
1
2
3
4
5
6
my @zeilen;
$zeilen[0] = 'Zebra';
$zeilen[1] = 'Affe';
$zeilen[2] = 'Loewe';
$zeilen[3] = 'Baer';
$zeilen[4] = 'Pinguin';

nur als vorschlag für die zukunft, das kannst du etwas kürzer schreiben:
Code (perl): (dl )
my @zeilen = qw/ Zebra Affe Loewe Baer Punguin /;

ausserdem solltest du den code leserlich einrücken und strict verwenden.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Dubu
 2009-01-06 18:18
#117634 #117634
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Was ist denn das Problem? Der Code läuft doch.
Gast Gast
 2009-01-06 18:21
#117635 #117635
ja laufen tut es. mein problem ist nur ich versteh nicht wie es auf die reihenfolge kommt. Programm ist nicht von mir sondern ein Beispiel , bei dem man angeben soll, was bei dem programm am bildschirm rauskommt.
pktm
 2009-01-06 18:39
#117637 #117637
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Gast+2009-01-06 17:21:36--
ja laufen tut es. mein problem ist nur ich versteh nicht wie es auf die reihenfolge kommt. Programm ist nicht von mir sondern ein Beispiel , bei dem man angeben soll, was bei dem programm am bildschirm rauskommt.


Dann rücke es mal ordentlich ein, das hilft oft schon.
http://www.intergastro-service.de (mein erstes CMS :) )
Linuxer
 2009-01-06 18:44
#117638 #117638
User since
2006-01-27
3872 Artikel
HausmeisterIn

user image
das wollt ich auch grad schreiben, dass die Einrückung dem Verständnis entgegensteht ;o)

Hier mal mit besserer Einrückung und leicht abgewandelt und kommentiert.

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
#!/usr/bin/perl -w

my @zeilen = qw( Zebra Affe Loewe Baer Pinguin );
my $anzahl = @zeilen;
my $aktion = 1;

while ($aktion) {
        $aktion = 0;
        for (my $i = 0; $i < $anzahl - 1; $i++){

                # lexikalischer vergleich; 
                # wenn das aktuelle element groesser als das folgende ist
                if ($zeilen[$i] ge $zeilen[$i + 1]){

                        # vertausche ihre positionen
                        ( $zeilen[$i], $zeilen[$i + 1] ) = ( $zeilen[$i + 1], $zeilen[$i] );

                        # weitermachen;
                        $aktion = 1;
                }

                # irgendwann greift die if-Bedingung nicht mehr und
                # $aktion bleibt 0; dann wird die while-Schleife beendet
        }
}

for (my $i = 0; $i < $anzahl; $i++){
        print "$zeilen[$i]\n";
}
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Gast Gast
 2009-01-06 19:09
#117639 #117639
ok hat mir schon mal geholfen :).
aber noch eine frage: du schreibst bei Zeile 18 weitermachen. Des heißt, dass ich die if Bedingung abarbeite mir $i=0, $i=1 usw.. bis sie nicht mehr greift und dann erst wieder in die dor schleife spring um $i um 1 zu erhöhen oder?
Linuxer
 2009-01-06 19:56
#117640 #117640
User since
2006-01-27
3872 Artikel
HausmeisterIn

user image
[s]Genau.[/s]

edit: siehe esskars Beitrag.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
lichtkind
 2009-01-06 20:45
#117641 #117641
User since
2004-03-22
5680 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
also:

Code: (dl )
1
2
3
for (my $i = 0; $i < $anzahl; $i++){
....print "$zeilen[$i]\n";
}

schreibt man erstmal

Code: (dl )
1
2
3
for my $i (0 .. @zeilen){
....print "$zeilen[$i]\n";
}


dann brauchst schonmal $anzahl garnicht owohl hättest auch schreiben können:
Code: (dl )
my $anzahl = my @zeilen = qw( Zebra Affe Loewe Baer Pinguin );

sehen aber nicht imemr alles als sauber an. diw wirklich kurzfassung ist natürlich
Code: (dl )
print "$_\n" for @zeilen;

wobei es noch die variante gäbe:
Code: (dl )
1
2
$"="\n":
print "@zeilen";

aber das mag auch nicht jeder :)
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2009-01-06 17:08.