kostenloser Webspace werbefrei: lima-city


Ist die Zahl n durch d teilbar?

lima-cityForumProgrammiersprachenBasic

  1. Autor dieses Themas

    toolz

    Kostenloser Webspace von toolz

    toolz hat kostenlosen Webspace.

    Ich brauche für Blitz Basic eine kleine Hilfe, ist allerdings auch lösbar, für Nicht-Basicer.

    Für n∈N und d∈N gilt:
    Formel: e=n/d
    e∈R.

    Wie kann ich nun überprüfen, ob e eine natürliche Zahl ist? Wichtig ist, dass die Überlegung Basic- kompatibel ist. Eine Aussage, wie:
    "Guck, ob da ein Komma ist!" ist hier fehl am Platz. Ich muss das mit Code überprüfen können...

    Beitrag zuletzt geändert: 5.10.2009 18:18:09 von toolz
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. benutzernaemelchen

    Kostenloser Webspace von benutzernaemelchen

    benutzernaemelchen hat kostenlosen Webspace.

    Gibts unter basic kein Modulo-Operator? Das wäre die Standard-Variante um zu prüfen, ob a durch b ohne Rest teilbar ist.
  4. Autor dieses Themas

    toolz

    Kostenloser Webspace von toolz

    toolz hat kostenlosen Webspace.

    Ja, das wars!

    n MOD d = wahrOderFalsch


    Danke.
  5. Gibt Modulo nicht den Rest wieder?
    Da müsstest du eigentlich erstmal ne Zahl erhalten und dann überprüfen, ob die 0 ist, wenn ich mich nicht irre.
  6. c****s

    MOD liefert nicht Wahr oder Flasch zurück, sondern den Modulo.

    n ist durch d integer teilbar, dann und genau dann wenn n mod d = 0.

    Kurzer Exkurs:
    Division und Modulo sind wie folgt definiert:

    Formel: \forall a, b \in Z, b \neq 0
    Formel: \exists_1 q \in Z
    Formel: \exists_1 m \in N, 0 \leq m < b :
    Formel: a = qb + m

    Hierbei ist a der Dividend, b der Divisor, q = a / b und m = a mod b.

    Beitrag zuletzt geändert: 5.10.2009 19:14:04 von census
  7. aldistammkunde

    Kostenloser Webspace von aldistammkunde, auf Homepage erstellen warten

    aldistammkunde hat kostenlosen Webspace.

    census schrieb:
    MOD liefert nicht Wahr oder Flasch zurück, sondern den Modulo.

    n ist durch d integer teilbar, dann und genau dann wenn n mod d = 0.

    Kurzer Exkurs:
    Division und Modulo sind wie folgt definiert:

    Formel: \forall a, b \in Z, b \neq 0
    Formel: \exists_1 q \in Z
    Formel: \exists_1 m \in N, 0 \leq m < b :
    Formel: a = qb + m

    Hierbei ist a der Dividend, b der Divisor, q = a / b und m = a mod b.

    hi,

    mathematisch gesehen nicht; aus Sicht von PHP und manch anderer Programmiersprache schon:

    denn php interpretiert eine 0 als false und jede andere Zahl als true:
    "n durch d teilbar" entspricht "n mod d = 0" entspricht "n mod d = false"

    Gruß,

    Beitrag zuletzt geändert: 5.10.2009 20:56:24 von aldistammkunde
  8. c****s

    Wie C und Konsorten einen Integer auf Bool casten ist ja wohl ein anderes Thema. Dennoch liefert mod oder % oder wie der Operator in der jeweiligen Sprache heißen mag, den Modulo von a durch b zurück.

    Insbesondere, wie du schon völlig richtig erkannt hast, ist (bei den Sprachen die false als 0 und true als nicht-false definieren) "a % b" genau dann wahr, wenn a NICHT durch b teilbar ist.

    Die Ersetzung
    n % d == 0

    durch
    n % d == false

    ist schlicht und ergreifend Textersetzung, die bei C durch die Präprozessoranweisung
    #define false 0

    und bei anderen Sprache durch ähnliche Prämissen realisiert wird.

    aldistammkunde schrieb:
    "n durch d teilbar" entspricht "n mod d = 0"

    Ich glaube, genau das habe ich in meinem Post vor dir auch geschrieben.

    Beitrag zuletzt geändert: 6.10.2009 0:59:47 von census
  9. Solange es noch um Basic geht, ist
    n mod d
    wahrscheinlich die einfachste Variante. Alternative wäre denkbar:
    n / d = int(n / d)
    Bei Basic fällt mir aber nichts einfacheres ein als beispielsweise
    if n mod d = 0 then
    	// ist ohne Rest teilbar
    else
    	// ist nicht ohne Rest teilbar
    end if
    oder alternativ halt:
    result = n mod d
    select case result
    	case 0:		// ohne rest teilbar
    	case else:	// nicht ohne rest teilber
    End select
    Letztere Variante macht halt mehr Sinn, wenn mehrere Möglichkeiten überprüft werden sollen. Alternativ kann man das ganze praktisch "per Hand" machen, (Wenn ich mir das jetzt zu so später Stunde noch richtig konstruiere):
    if ((n / d) - int(n / d)) * n / d = 0 then
    	// ist ohne Rest teilbar
    else
    	// ist nicht ohne Rest teilbar
    End if
    usw. Das letzte * n / d kann mann sich eigentlich sparen, es ging nur darum, das selbe ergebnis wie MOD zu erzielen ;)

    PS: Keine Ahnung, wie das bei BLITZ-Basic mit Kommentaren aussieht - ich habe mich nun an jene von c/c++ gewöhnt. Dementsprechend natürlich zu ersetzen ;)

    EDIT: Basic unterstützt soweit ich weiss den Boolean-Datentyp (im gegensatz zu c, wie ich heute lesen musste. oO) Demnach macht es schon einen Unterschied, ob result = false, oder result = 0, bzw result = true oder result <> 0. (Allein Speicher- und Zugriffszeitentechnisch.) Ich weiss aber nicht, ob <> 0 da in einigen Varianten nicht auch als true interpretiert wird und ob Blitzbasic als spezieller Fall nun den Boolean-Datentyp unterstützt.

    Beitrag zuletzt geändert: 6.10.2009 4:08:49 von nerdinator
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!