Programeer opdrachtenOpdracht : opdr7a_robert.txt

Terug naar de inzendingen
Opdracht 7a,Robert Speelpenning
17 Dec 2009
 Mijn recht toe rechtaan oplossing. Niet echt efficiĆ« wat sommige dingen
 betreft, maar daar ging het blijkbaar niet om.
 1 
*****iworteltrekken.pl****
  
 2#!/usr/bin/perl -w
 3
 4use strict;
 5use warnings;
 6
 7my ($prime,$tmp); 
 8my (@factors,@roots,@rtsq); #array to hold the factors, the roots, and the roots squared
 9
 10sub find_factors{
 11my $i=$_[0];
 12my $p;
 13my @ret;
 14
 15for($p=$i-1;$p>1;$p--)
 16  {
 17  if (($i/$p)==int($i/$p))
 18    {
 19    #print "$p fits $i\n";
 20    if (find_factors($p)==0)
 21      {
 22      #print "$p is prime\n";
 23      push (@ret,$p);
 24      }
 25    }
 26    else
 27    {
 28    }
 29
 30  }
 31return @ret;
 32}
 33
 34
 35$prime="299999"; #default number
 36if ($ARGV[0] ne ""){
 37  $prime=$ARGV[0]; # read first argument
 38}
 39
 40@factors = find_factors($prime);
 41print "all factors:\n";
 42print "@factors\n";
 43if(scalar(@factors)==0){push(@factors,$prime)}
 44
 45$tmp=$prime;
 46for(my $i=0;$i
 47  {
 48  if ($tmp/($factors[$i]*$factors[$i])==int($tmp/($factors[$i]*$factors[$i])))
 49    {
 50    push(@rtsq,$factors[$i]);
 51    $tmp/=($factors[$i]*$factors[$i]);
 52    $i--;
 53    }
 54    elsif($tmp/$factors[$i]==int($tmp/$factors[$i]))
 55
 56    {
 57    $tmp/=$factors[$i];
 58    push(@roots,$factors[$i]);
 59    }
 60    
 61
 62  }
 63if(scalar(@rtsq)==0){push(@rtsq,1)}
 64print "sqrt($prime)=\n";
 65print join("*",@rtsq) ."*sqrt(" . join("*",@roots).")\n";
 
 
Mijn commentaar
 
 Je code is idd niet echt geoptimaliseerd en zelfs wat spartaans maar zeer zeker ook inovatief te noemen.
 Documentatie had wel iets uitgebreider gemogen.
 Je foutafhandeling bij verkeerde input had het programma gewoon met een exit
 kunnen verlaten.
 
 Dank voor het meedoen.