PaddyMu
Anmeldungsdatum: 26. August 2007
Beiträge: 85
|
Hallo ich versuche mal mein problem zu erklären xD also ich soll für die schule einen Netzwerkbasis- und Broadcastadressenberechner in Delphi bauen So nachdem ich herausbekommen habe wie es funktionieren soll also wie man auf die netzwerkbasis und die broadcast kommt (anhand der IP adresse und der Netzmaske) stehe ich vor einem problem Ich habe zwei zahlen die vielfache von der einen soll möglichst nahe OHNE KOMMA an die andere zahl rankommen aber darunterbleiben. Beispiel Grundzahl(32) +Vielfachen 32 64 96 128 160<- 192 Meine andere Zahl beträgt 162. So nun möchte ich dass ich auf die 160 (mit dem pfeil dahinter) kommen (ich möchte diese zahl in ner variablen speichern). kann mir jemand helfen? 😕
|
sxfreak
Anmeldungsdatum: 27. Juni 2006
Beiträge: 436
|
Ist dein Problem so banal oder hab ich das bloß falsch verstanden? sonst: Vielfaches <- 0
Solange Vielfaches kleiner als DeineZahl
Vielfaches <- Vielfaches + Basiszahl
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4695
Wohnort: Berlin
|
Zwei Möglichkeiten: PROGRAM Test;
BEGIN
WriteLn((162 DIV 32) * 32);
WriteLn(162 - (162 MOD 32));
END.
|
PaddyMu
(Themenstarter)
Anmeldungsdatum: 26. August 2007
Beiträge: 85
|
gut die zweite antwort ist schon mal ok.. jatzt möchte ich das aber alles in variablen haben und mir fehlt eben das wissen wie ich dem sage "vielfaches von x welches am nächsten an y liegt" die erste antwort ging zumindist schon mal in richtung variablen\^^ einfacher: gibt es einen befehl der die vielfachen einer zahl ausgibt
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4695
Wohnort: Berlin
|
So einen "Befehl" gibt es nicht. Wie man ihn selber basteln kann habe ich Dir im Grunde gezeigt. Konkrete Zahlen durch Variablen ersetzen und das ganze in eine Funktion zu stecken ist echt Grundlagenwissen. Vielleicht solltest Du erst einmal Pascal/Delphi-Grundlagen lernen bevor Du so eine Aufgabe angehst.
|
PaddyMu
(Themenstarter)
Anmeldungsdatum: 26. August 2007
Beiträge: 85
|
xD wie gesagt das ist für die schule und mit dieser aufgabe sollen wir sie lernen
|
zummy
Anmeldungsdatum: 11. Juni 2006
Beiträge: 208
Wohnort: Hannover
|
quick and dirty, nicht getestet: uses math; //bin nicht sicher, ob man das braucht, evtl. damit "ABS" funktioniert
procedure meineprozedur;
var x,y, abstand, zahl, merke,zuvervielfachende: integer;
begin
zahl:=162;
zuvervielfachende:=32;
x:=10; //oder ne andere Zahl, je nachdem, wieviele Vielfache du haben willst.
abstand:=abs(zuvervielfachende-zahl);
merke:=zuvervielfachende;
for y:=2 to x do
begin
if (abs(y*zuvervielfachende - zahl)<abstand) then
begin
merke:=y*zuvervielfachende;
abstand:=abs(merke-zahl);
end;
end;
showmessage('Das Vielfache von '+inttostr(zuvervielfachende)+', das am nächsten an '+inttostr(zahl)+' liegt, ist '+inttostr(merke)+'.');
end;
|
zummy
Anmeldungsdatum: 11. Juni 2006
Beiträge: 208
Wohnort: Hannover
|
Aargh 😬 Geht viel einfacher: procedure vielbesser;
begin
zuvervielfachende:=32;
zahl:=162;
if ( (abs(trunc(zahl/zuvervielfachende)*zuvervielfachende)) < ((abs(trunc(zahl/zuvervielfachende)+1))*zuvervielfachende) ) then merke:=trunc(zahl/zuvervielfachende)*zuvervielfachende else merke:=(trunc(zahl/zuvervielfachende)+1)*zuvervielfachende;
end; Evtl. fehlt noch irgendwo eine Klammer → ausprobieren! 8)
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17625
Wohnort: Berlin
|
Gibt es in Delphi keine Ganzzahlarithmetik? Eine "zu Vervielfachende" nennt man "Faktor". FAKTOR=32
ZAHL=162
echo $(((ZAHL/FAKTOR)*FAKTOR)) Hat Marc aber auch schon festgestellt.
|
zummy
Anmeldungsdatum: 11. Juni 2006
Beiträge: 208
Wohnort: Hannover
|
user unknown hat geschrieben:
echo $(((ZAHL/FAKTOR)*FAKTOR))
Was bringt dieser Code?
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17625
Wohnort: Berlin
|
160 Ich kann kein Pascal, um es damit auszudrücken, aber die zwischenzeitlichen Methodenmonster scheinen mir etwas fett.
|
Blattlaus
Anmeldungsdatum: 29. März 2006
Beiträge: 1399
|
Wenn man mal von dem ganzen Code ab: Warum berechnest du die ganzen IP-Geschichten nicht über Bitarithemetik...das wäre der übliche Weg. Und vermutlich auch deutlich einfacher.
|
zummy
Anmeldungsdatum: 11. Juni 2006
Beiträge: 208
Wohnort: Hannover
|
user unknown hat geschrieben: 160
Dafür reicht dann auch
echo $160 Aber ich habe die Aufgabe so verstanden, dass es für beliebige Eingabewerte funktionieren soll.
|
audax
Anmeldungsdatum: 15. September 2006
Beiträge: 1253
|
Pascal muss nicht so doof aussehen. s/zuvervielfachende/f/g s/zahl/n/g s/merke/tmp/g #!/usr/bin/env perl
use strict;
my $f = 32;
my $n = 162;
my $tmp = $f;
while ( ($tmp += $f)<$n ){
;
}
$tmp -= $f;
print "Maximum is: $tmp\n";
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17625
Wohnort: Berlin
|
zummy hat geschrieben: user unknown hat geschrieben: 160
Dafür reicht dann auch
echo $160 Aber ich habe die Aufgabe so verstanden, dass es für beliebige Eingabewerte funktionieren soll.
??? Mein Beispiel ist Bash-Code. Da würde allenfalls echo 160 reichen, aber meine 3 Zeilen enthalten ja die Variablendeklaration, um beliebige Variablen nutzen zu können. Ich verstehe Deine Frage nicht.
|