Perl :: Aufgabe #3
5 Lösungen

Schnittmenge von 2 Arrays
Anfänger - Perl
von Gustl
- 06.08.2012 um 22:46 Uhr
Schreiben Sie ein Skript, das Sie auffordert 2 Integer-Arrays einzugeben. Aus diesen 2 Arrays soll dann ein drittes Array erzeugt werden, das nur die Elemente enthält, die in beiden Arrays vorkommen. Also die Schnittlänge dieser beiden Arrays.
Lösungen:

#!/usr/bin/perl use strict ; use warnings ; sub intersection { my ( $firstarray , $secondarray ) = @_ ; my %firsthash ; my %secondhash ; foreach my $element ( @{$firstarray} ) { $firsthash{ $element }++ ; } foreach my $element ( @{$secondarray} ) { $secondhash{ $element }++ ; } my @intersection ; foreach my $element ( keys %firsthash ) { if ( exists $secondhash{ $element } ) { my $minimum = $firsthash{ $element } < $secondhash{ $element } ? $firsthash{ $element } : $secondhash{ $element } ; for ( 1..$minimum ) { push ( @intersection , $element ) ; } } } return @intersection ; } my @array = qw ( Berlin Athen Amsterdam Moskau Berlin Berlin ) ; my @array2 = qw ( Berlin Warschau Paris Berlin ) ; foreach my $city ( intersection ( \@array , \@array2 ) ) { print "$city\n" ; }

use strict; print "Bitte 1.Array eingeben (Zahlen durch Komma getrennt)"; my $eingabe1 = <STDIN>; print "Bitte 2.Array eingeben (Zahlen durch Komma getrennt)"; my $eingabe2 = <STDIN>; $eingabe1 =~ s/\s//; $eingabe2 =~ s/\s//; my @array1 = split(",",$eingabe1); my @array2 = split(",",$eingabe2); my (@sarray, @larray,@result) =(); if (length(@array1) >= length(@array2)) { @sarray = @array1; @larray = @array2; } else { @sarray = @array2; @larray = @array1; } my $i = 0; foreach my $zahl (@sarray) { foreach(@larray) { if($_ == $zahl) { $result[$i] = $zahl; $i++; $_ = "X"; last; } } } my %seen; my @filtered = grep {!$seen{$_}++} @result; print "\Schnittmenge: "; foreach(@filtered) { print "$_, "; } print "\nHäufigkeit: "; my @final= (); my $i; foreach my $zahl(@filtered) { my $count = 0; foreach(@result) { if($_ == $zahl) { $count++; } } @final[$i] = $count."x ".$zahl."; "; $i++; } foreach(@final) { print "$_\t"; }

#!/usr/bin/perl use strict; use warnings; my @array_one; my @array_two; my @array_three; my $fill_one = 'j'; my $fill_two = 'j'; print "Bitte Zahlen fuer das erste Array eingeben:\nBeenden mit 'e'\n"; while(1){ chomp($fill_one = <STDIN>); if($fill_one eq 'e'){ last; }else{ push(@array_one, $fill_one); } } print "Bitte Zahlen fuer das zweite Array eingeben:\nBeenden mit 'e'\n"; while(1){ chomp($fill_two = <STDIN>); if($fill_two eq 'e'){ last; }else{ push(@array_two, $fill_two); } } foreach my $numbers_one(@array_one){ foreach my $numbers_two(@array_two){ if($numbers_one == $numbers_two){ push(@array_three, $numbers_two); } } } print "Die Schnittlaenge der beiden Arrays ist: "; print "@array_three\n";

print "Bitte geben Sie das erste Integer-Array ein (Leerzeichen-getrennt):\n"; $integer1 = <STDIN>; @array1 = split(/ /, $integer1); print "Bitte geben Sie das zweite Integer-Array ein (Leerzeichen-getrennt):\n"; $integer2 = <STDIN>; @array2 = split(/ /, $integer2); @array1 =sort(@array1); @array2 =sort(@array2); foreach $zahl(@array1){ foreach $compare(@array2){ if ($zahl == $compare){ push(@arrayresult, $zahl); } } } print "Gleiche Zahlen: \n"; foreach (@arrayresult){print "$_\n";}

use strict; use warnings; use feature qw(say); say "Geben Sie für die erste Zeile (durch Leerzeichen getrennt) mehrere Zahlen ein:"; chomp (my $ersteZeile = <STDIN>); say "Geben Sie für die zweite Zeile (durch Leerzeichen getrennt mehrere Zahlen ein:"; chomp (my $zweiteZeile = <STDIN>); my @array1 = split (' ', $ersteZeile); my @array2 = split (' ', $zweiteZeile); my @array3; foreach my $a (@array1) { foreach my $b (@array2) { if ($a eq $b) { push @array3, $a; } } } print "Folgende Zahlen kommen in BEIDEN Zeilen vor: "; foreach (@array3) { print "$_ "; }