ubuntuusers.de

Schwierige delphifrage

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

PaddyMu

Avatar von 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

Avatar von 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 Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

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)
Avatar von PaddyMu

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 Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

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)
Avatar von PaddyMu

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

Avatar von 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

Avatar von 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

Avatar von 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

Avatar von zummy

Anmeldungsdatum:
11. Juni 2006

Beiträge: 208

Wohnort: Hannover

user unknown hat geschrieben:

echo $(((ZAHL/FAKTOR)*FAKTOR))

Was bringt dieser Code?

user_unknown

Avatar von 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

Avatar von 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

Avatar von 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

Avatar von 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

Avatar von 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.

Antworten |