Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5681[/thread]

Kleines mathe-skript (page 2)

Readers: 2


<< |< 1 2 3 4 >| >> 32 entries, 4 pages
snadra
 2003-09-02 18:10
#82981 #82981
User since
2003-08-11
265 articles
BenutzerIn
[Homepage] [default_avatar]
[quote=SirLant,02.09.2003, 15:45]Snadra deine Methode versteh ich nicht :([/quote]
Ok, noachmal kommentiert. Es ist zwar peinlich diesen lausigen Code noch mal zu erwähnen, aber es geht ja ums Prinzip. Ich dachte zwar dieses Gekritzel wäre die Erklärung... Also nochmal kommentiert:
Code: (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
# Deine beiden Zahlen, 
# von denen Du das kleinste gemeinsame Vielfache suchst
# kgV ist die kleinste Zahl, durch die beide teilbar sind
my ($zahl1, $zahl2) = (8,9);

# Ergebnis soll inkrementiert (immer plus 1) werden
# bis das kgV erreicht ist
# die beiden $zahlteiler brauche ich, um zu vergleichen
# ob ich beim teilen durch meine beiden Zahlen integer Werte
# (integer = ganze Zahl, ohne Nachkommastellen) erhalte
# Ich habe sie jetzt mit Nachkommastellen gesetzt, um
# eine Zeile Code zu sparen, ist lausig, und macht nicht viel
# Sinn
my ($ergebnis,$zahl1teiler,$zahl2teiler) = (1, 0.2, 0.3);

# Da Perl keine Typüberprüfung hat, sondern Variableninhalte
# einfach als Skalare behandelt, benutze ich regexes um
# selbst die Typüberprüfung vorzunehmen. /^\d+$/ bedeutet,
# daß nur Zahlen in der variable vorkommen dürfen.
# Ein Punkt (Komma) würde also nicht passen.
# Wenn beide $zahlteiler integers sind habe ich den
# kgv erreicht
while ($zahl1teiler !~ /^\d+$/ || $zahl2teiler !~ /^\d+$/) {
$zahl1teiler = $ergebnis/$zahl1;
$zahl2teiler = $ergebnis/$zahl2;
# ergebnis wird solange inkrementiert, bis es groß genug
# ist, so daß beide Zahlen teilbar sind, in diesem Fall: 72
$ergebnis++;
}

# Da ich durch die while Schleife einmal zu oft inkrementiert
# habe, ziehe ich $ergebnis das wieder ab.
# ein repeat ... until, wie in Pascal wäre eleganter für so
# etwas.
$ergebnis = $ergebnis - 1;

# Damit Du das Ergebnis kennst, printe ich es:
print "Das kleinste gemeinsame Vielfache ist: $ergebnis\n"


Wie gesagt, man kann es auch in Perl schicker lösen, aber ich war in Eile und wollte Dir nur kurz erklären worum es geht...
Wenn Du es schicker machen willst, schreibe eine hübschere Schleife, so daß das $ergebnis - 1 wegfällt und werde die Kommazahlen auf die ich die $zahlteiler gesetzt habe los...
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}
Crian
 2003-09-02 18:16
#82982 #82982
User since
2003-08-04
5840 articles
ModeratorIn
[Homepage]
user image
ups... ich hatte gerade Forumprobleme...

Außerdem ist der Weg mit den beiden ARaays nicht so schön, da braucht man ja erstmal eine obere Schranke für den KGV. Also wäre Primfaktorbildung etc. angesagt. Vielleicht denk ich mir dazu noch was aus mal sehen... erstmal in Snadras Code vertiefen :D :)  ( :p )


[color=blue]Als obere Schranke hat man immer das Produkt der beiden Zahlen[/color]\n\n

<!--EDIT|Crian|1062521223-->
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
SirLant
 2003-09-02 18:18
#82983 #82983
User since
2003-08-04
516 articles
BenutzerIn
[default_avatar]
Crian's Skript ist meine Methode (s.o.) und er hat den Fehler
gefunden, den pq oben auch schon gefunden hat.
Jetzt verstehe ich dein Skript auch :)

PQs Skript (s.o.), tut doch eigentlich das gleiche wie deines, oder?


Code (perl): (dl )
  ($x,$y) = ($y,$x) if $y > $x;


Diese zeile verwirrt mich irgendwie, du vertauscht 8 und 9,
wenn 9 größer 8 ist(was ja der Fall ist).Nun ist 8 = 9 und 9 = 8.
Aber wozu ist dieser Schritt den wichtig?
Ich denke mal, dass die größere Zahl durch die kleinere geteilt wird, oder?


Diese Zeile:
Code (perl): (dl )
$y -= ($x % $y);

versteh ich nicht so ganz, du berechnest $x % $y, soweit ist das
auch klar, wäre bei 9 % 8 , ja 1 , nun rechnest du $y(8) - 1,
das entspricht ja 7, aber wie kommst du so auf den ggT?\n\n

<!--EDIT|SirLant|1062512659-->
--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 18:19
#82984 #82984
User since
2003-08-11
265 articles
BenutzerIn
[Homepage] [default_avatar]
Habe eben nur Blödsinn geschrieben:
Crians veränderter Weg ist der beste, also bitte den lesen, und ich sollte meinen Mund halten, wenn ich nicht wirklich weiß wovon ich spreche...
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}
snadra
 2003-09-02 18:21
#82985 #82985
User since
2003-08-11
265 articles
BenutzerIn
[Homepage] [default_avatar]
Ja, pq's Script tut das gleiche wie meins, ich hatte nur mal wieder zu lange was anderes gemacht, wärend ich geantwortet habe, weswegen ich nciht wußte, daß pq schon eine Lösung gepostet hat, und dann auch schöner...
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}
snadra
 2003-09-02 18:23
#82986 #82986
User since
2003-08-11
265 articles
BenutzerIn
[Homepage] [default_avatar]
Oh, pq hat ja nach mir gepostet... :blush:
Ich fahr jetzt nach Hause und gehe ins Bett. Das mit mir und meinem Hirn wird heute nichts mehr...
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 18:25
#82987 #82987
User since
2003-08-04
516 articles
BenutzerIn
[default_avatar]
Schlaf schön :)

Habe mein Posting(über den 3 von Snadra *g*) editiert, kann
mir das jemand erklären?
--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!
Crian
 2003-09-02 18:38
#82988 #82988
User since
2003-08-04
5840 articles
ModeratorIn
[Homepage]
user image
@Snadra: nimm doch eine do {} while-Schleife
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
snadra
 2003-09-02 18:42
#82989 #82989
User since
2003-08-11
265 articles
BenutzerIn
[Homepage] [default_avatar]
Stimmt, die vergesse ich immer...
Jetzt aber ab nach Hus!
Muß mal ausschlafen...
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}
Crian
 2003-09-02 18:53
#82990 #82990
User since
2003-08-04
5840 articles
ModeratorIn
[Homepage]
user image
etwa so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl
use diagnostics;
use strict;
use warnings;

my ($zahl1, $zahl2) = (8,9);

my $ergebnis = 0;
my $zahl1teiler;
my $zahl2teiler;

do {
    ++$ergebnis;
    $zahl1teiler = $ergebnis / $zahl1;
    $zahl2teiler = $ergebnis / $zahl2;
} until ($zahl1teiler == int($zahl1teiler) and
         $zahl2teiler == int($zahl2teiler)   );


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


Edit: Leerzeichen, die immernoch geklaut werden wieder eingefügt

[color=red]Edit2: Schlaf gut[/color]

[color=blue]Edit3: Ich finde Deinen Ansatz gut. Allerdings finde ich es schöner, direkt die Zahleigenschaft zu prüfen, als mit RE's zu arbeiten, obwohl ich eigentlich ein großer Fan der RE's bin. Aber int() und Vergleich müsste schneller sein als RE. (Ja könnte ich jetzt testen, hab aber auch noch anderes zu tun ;-) Und mit do .. until ist das ganze auch noch etwas hübscher geworden :-)[/color]\n\n

<!--EDIT|Crian|1062514767-->
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 entries, 4 pages



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