Thread starten zwei Subs - Eingabe / Ausgabe (4 answers)
Opened by Mara at 2011-12-29 11:45

Mara
 2011-12-29 12:46
#155166 #155166
User since
2011-12-29
3 Artikel
BenutzerIn
[default_avatar]
Das mit dem kompilieren kannte ich noch gar nicht. Vielen dank für den Tipp! Das ist wirklich hilfreich. *freu*


Das hab ich mal gemacht, zu Beginn kam dann:

Can't locate interger.pm in

--- war also der erste Fehler use interger - rausgenommen, dann diesen Fehler auch bei den Subs behoben, dann gin die Matchersub soweit - aber die Präfix - Sub nicht, die hab ich dann einzeln überarbeitet und geprüft und jetzt sagt er das die Syntax soweit ok ist. und es kommen keine weiteren Fehlermeldungen wie vorher.


So hab ich folgenden Code für die Subs nun *grübel*


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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/perl -w
use strict;
use warnings;


#   Berechnung des Präfix  ######                                         

sub ermorde_Knuth_next{              
        my($P)=@_;                        # das Muster

        use integer;
        
        my$m=(0..lenght($P)-1); 
        my$i=0;
        my$j=-1;
        
        my @next;                         # Array 


        for ($next[0] = -1; $i < $m; ) {
        while ( $j > -1 &&
                substr( $P, $i, 1 ) ne substr( $P, $j, 1 ) ) {
            $j = $next[ $j ];
        }
        $i++;
        $j++;
        $next[ $i ] =
            substr( $P, $j, 1 ) eq substr( $P, $i, 1 ) ?
                $next[ $j ] : $j;
     }
        return ($m,@next);     # Länge des Musters und der Prefix Funktion
}


##############################################

#               ########                                                                        Matcher                                                

    
        sub ermorde_Knuth  {         
         my ( $T, $P ) = @_;            # Text und Muster.
    
    use integer;
    
    my $m = ermorde_Knuth_next( $P );   #knuth_morris_pratt_next
    my ( $n, $i, $j ) = (length($T), 0, 0 );
    my @next;
        
        while ( $i < $n ) {
          while ( $j > -1 &&
                substr( $P, $j, 1 ) ne substr( $T, $i, 1 ) ) {
            $j = $next[ $j ];
        }
        $i++;
        $j++;
        return $i - $j if $j >= $m; # Match - Hurra wir haben einen Treffer.
    }
    return -1;}

View full thread starten zwei Subs - Eingabe / Ausgabe