Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Modulo manuell (https://www.delphipraxis.net/108417-modulo-manuell.html)

rawsoul 13. Feb 2008 10:05


Modulo manuell
 
Moin =)

Ich stehe vor dem Problem, einen Modulo manuell zu berechnen. Probiere seit gestern rum, mir ist leider bisher nichts funktionstüchtiges gelungen. Das Ziel ist es, herauszufinden, ob eine Zahl gerade oder ungerade ist, und abhängig davon eine andere Variable auf 1/0 zu setzen.

Es handelt sich hierbei um Brainfuck, falls es wem ein Begriff sein sollte.

Ich kann Variablen nutzen, darf allerdings nur folgende Operationen durchführen:

Code:
solange(zahl!=0){ ... };
incrementiere(zahl);
decrementiere(zahl);
Eine Division duch 2 bei geraden Zahlen gelang mir so:
Code:
Zahl2 = Ausgangszahl;
Ausgangszahl = 0;
solange(Zahl2!=0){
  Ausgangszahl++;
  Zahl2--;
  Zahl2--;
}
Der Nebeneffekt dabei wäre, dass Zahl 2 auf 0 gesetzt wird. Bei ungeraden Zahlen liegt das Problem vor, dass Zahl2==0 nie eintreffen wird, und das ganze somit in einer Endlosschleife resultiert.

Für jeden Tipp bin ich dankbar.

Gruß,
Frank.

negaH 13. Feb 2008 14:53

Re: Modulo manuell
 
Naja dann halt so

Zahl2 = Ausgangszahl;
Ausgangszahl = 0;
solange(Zahl2!=0) {
Ausgangszahl++;
Zahl2--;
if Zahl2 == 0 then break; // ungerade
Zahl2--;

}

Gruß Hagen

rawsoul 13. Feb 2008 20:15

Re: Modulo manuell
 
Danke für die Idee, allerdings hatte ich vergessen zu erwähnen, dass man nur auf 'not zero' prüfen kann. Dabei gibt es auch kein 'else', oder Vergleichbares.

//Edit: Auch 'break' existiert nicht.

deep_thought 14. Feb 2008 15:15

Re: Modulo manuell
 
break kannste aber manuell machen ... hier die komplette Modulo-2-funktion:
(* markiert die Position)

Eingabe: 0 *N 0 0 0

[->+>+<<]>

erzeugt: 0 0 *N N 0

[-<+>]>

erzeugt: 0 N 0 *N 0

[-[->]<]+<<[<]

erzeugt: *0 N NUngerade NGerade 0

fertig ...

mfg deep_thought

P.S. N sollte !=0 sein, sonst musst du als eingabe 0 1 *N 0 0 0 machen und bei dem letzten Schritt einmal mehr < machen ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz