Perl :: Aufgabe #3

5 Lösungen Lösungen öffentlich

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:

vote_ok
von progdoc (2220 Punkte) - 12.08.2012 um 02:35 Uhr
Quellcode ausblenden Perl-Code
#!/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" ;
}

vote_ok
von Jusy (440 Punkte) - 23.04.2014 um 13:41 Uhr
Quellcode ausblenden Perl-Code
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";
}
vote_ok
von EEK (460 Punkte) - 17.08.2016 um 09:14 Uhr
Quellcode ausblenden Perl-Code
#!/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";
vote_ok
von jamosch (170 Punkte) - 24.04.2017 um 09:17 Uhr
Quellcode ausblenden Perl-Code
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";}
vote_ok
von TooBieee (610 Punkte) - 21.09.2017 um 10:27 Uhr
Quellcode ausblenden Perl-Code
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 "$_ ";
}
2101609

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.