Schrift
[thread]5681[/thread]

Kleines mathe-skript

Leser: 2


<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten
SirLant
 2003-09-02 16:39
#82971 #82971
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Folgende Aufgabe:
Ein Ferrari braucht für eine Runde(Rennbahn) 8Sekunden, ein Lotus
9Sekunden, wenn beide gleichzeitig starten, wann treffen sie sich
am Start wieder?

Dachte eigentlich wäre ganz leicht und wollte es mit folgendem
Skript schnell ausrechnen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@acht = ("8");
@neun = ("9");

for (0..10){
        push @acht, $acht[-1]+8;
        push @neun, $neun[-1]+9;
}

for (@neun){
        
        if ($acht[$_] == $neun[$_]){
                
                print "$_ sekunden
";
        }
}

Aber es wird für jedes Element die Sekundenzahl ausgegeben,
wo liegt denn da der Fehler?\n\n

<!--EDIT|SirLant|1062506612-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
pq
 2003-09-02 16:48
#82972 #82972
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ich weiss nicht, wofür du das skript brauchst.
ich würde das kleinste gemeinsame vielfache ausrechnen, 72.
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
 2003-09-02 16:53
#82973 #82973
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=SirLant,02.09.2003, 14:39]wo liegt denn da der Fehler?[/quote]
du iterierst über die elemente von @neun und
fragst dann $acht[$_] ab. in $_ steht ein
element von @neun.
du willst wahrscheinlich über die indizes von @neun
iterieren, wobei dir das auch nix bringen wird, denn
$acht[$_] wird niemals gleich $neun[$_]
sein.
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
SirLant
 2003-09-02 16:56
#82974 #82974
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Es geht mir hier doch nicht darum, dass ich es auch einfach im
kopf ausrechnen könnte, sondern dass ich so eine Aufgabe auch
in ein Stück code umwandeln kann.

Ich glaub ich weiß jetzt wie ich es lösen kann, sag mir dann aber
bitte ob dies effizient ist.

Edit:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
for ($neun = 0;$neun < $#neun;$neun++){

  for ($acht = 0;$acht < $#acht; $acht++){

    if($acht[$acht] == $neun[$neun]){
                                
      print "$acht[$_] sekunden";
                
    }
        
  }

}


So dachte ich es mir, jetzt hängt es aber und gibt immer "8 sekunden" aus.
Aber der Ansatz ist doch richtig oder?\n\n

<!--EDIT|SirLant|1062507851-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
snadra
 2003-09-02 17:21
#82975 #82975
User since
2003-08-11
265 Artikel
BenutzerIn
[Homepage] [default_avatar]
Genau dafür solltest Du das kleinste gemeinsame Vielfache errechnen, das ist das einfachste.
Hier mal eine Quick and Dirty, ungetestete Schmierfink Lösung:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
my ($zahl1, $zahl2) = (8,9);

my ($ergebnis,$zahl1teiler,$zahl2teiler) = (1, 0.2, 0.3);

while ($zahl1teiler !~ /^\d+$/ || $zahl2teiler !~ /^\d+$/) {
       $zahl1teiler = $ergebnis/$zahl1;
       $zahl2teiler = $ergebnis/$zahl2;
       $ergebnis++;
}

$ergebnis = $ergebnis - 1;

print "Das kleinste gemeinsame Vielfache ist: $ergebnis\n"


Edit: hatte aus Versehen Teiler statt Vielfaches im Code stehen...\n\n

<!--EDIT|snadra|1062510886-->
http://hamburg.pm.org
jeden 2. mittwoch im monat
--
#!/usr/bin/perl -w
$l=join('',map chr,(116,110,105,114,112))if$^T;
!!$$?@_=qw(Jhfg Aabgure Prey Hnpxre):$l=1;
for(@_){eval reverse($l)."'"._(_(_($_))).' \''}
sub _{$_=~y+a-z+n-za-m+and pop}
SirLant
 2003-09-02 17:45
#82976 #82976
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Snadra deine Methode versteh ich nicht :(
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
pq
 2003-09-02 17:46
#82977 #82977
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=SirLant,02.09.2003, 14:56]So dachte ich es mir, jetzt hängt es aber und gibt immer "8 sekunden" aus.
Aber der Ansatz ist doch richtig oder?[/quote]
am besten strict und warnings aktivieren. du bist doch schon lange
genug im forum dabei, um das zu wissen.
dann würdest du sehen, dass $_ nirgendwo
gesetzt wird und somit $acht[$_] zu $acht[0]
wird.
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
SirLant
 2003-09-02 17:50
#82978 #82978
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Ich mach das in den kleinen Wegwerf-Skripten nie, hab ich doch glatt übersehen *schäm*
Werde ich in Zukunft aber immer benutzen(da lässt man es einmal
weg und schon hat man nen Fehler).\n\n

<!--EDIT|SirLant|1062510696-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
pq
 2003-09-02 17:57
#82979 #82979
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my $ggt = ggt($x, $y);
print "ggt: $ggt";
my $kgv = ($x / $ggt) * $y;
print "kgv: $kgv";
sub ggt {
  my ($x,$y) = @_;
  ($x,$y) = ($y,$x) if $y > $x;
  return 1 if ($y < 2);
  return $y if ($x % $y) == 0;
  $x -= $y;
  my $ggt = ggt($x,$y);
}
\n\n

<!--EDIT|pq|1062517026-->
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
Crian
 2003-09-02 18:05
#82980 #82980
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=SirLant,02.09.2003, 14:56]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
for ($neun = 0;$neun < $#neun;$neun++){

  for ($acht = 0;$acht < $#acht; $acht++){

    if($acht[$acht] == $neun[$neun]){
                                
      print "$acht[$_] sekunden";
                
    }
        
  }

}
[/quote]
Nimm $acht statt $_.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten



View all threads created 2003-09-02 16:39.