hallo habe folgendes Problem mit meinem Pic 16F877 wie kann ich die Differenz zwischen zwei Binären Zahlen herausfinden. Also egal ob zahl a oder zahl b größer ist, jediglich die differenz interessiert? gibt es da einen eingenen Befehl? wie kann es sonst realisiert werden? (wenn möglich ohne if schleifen ) bitte helft mir Bernhard
if-Schleifen gibt es nicht. if ist eine Verzweigung. Und die Differenz zweier Zahlen a und b ist a-b... Vielleicht erzählst Du ja mal, in welcher Programmiersprache Du arbeitest (if lässt mich mal C vermuten). Oder willst Du etwa den Betrag der Differenz haben? Das geht nur mit einer Verzweigung oder einer Funktion.
Für C: http://www2.hs-fulda.de/~klingebiel/c-stdlib/stdlib.htm x = abs(y); Für ASM: Schauen welche Zahl größer ist bzw ob das Ergebnis negativ ist (wenn du mit negativen Zahlen arbeiten kannst).
Bernhard wrote: > wie kann ich die Differenz zwischen zwei Binären Zahlen herausfinden. > Also egal ob zahl a oder zahl b größer ist, jediglich die differenz > interessiert? Der Absolutbetrag der Differenz? Und wieso binäre Zahlen? Was soll an denen anders sein ;-> > gibt es da einen eingenen Befehl? wie kann es sonst realisiert werden? > (wenn möglich ohne if schleifen ) Woher sollen wir das in Unkenntnis der Programmiersprache wissen?
hier noch eine kleine Besswerwisserei am Abend: if ist aus sicht der Theoretischen Informatik eine Schleife. siehe z.B. Schöning: Theoretische Informatik - kurzgefasst, S. 102
ich arbeite mit BASIC und möchte den betrag der Differenz (binär --> vorzeichenlos) allso geht es nicht ohne if funktion? danke!
Dieses Basic wird doch ein ABS haben oder wenigstens ne Anleitung, vielleicht sogar ne Befehlsübersicht? "Binär" und "Vorzeichenlos" haben im Übrigen nicht das geringste miteinander zu tun.
Hallo Bernhard, schau doch einfach mal nach, ob der von Deinem Compiler verstandene BASIC Dialekt eine abs() Funktion (könnte auch anders heißen) hat! Gruß Fred
Hans wrote: > hier noch eine kleine Besswerwisserei am Abend: > > if ist aus sicht der Theoretischen Informatik eine Schleife. > siehe z.B. Schöning: Theoretische Informatik - kurzgefasst, S. 102 Das kann sich jetzt aber nur um ein Missverständnis deiner seits handeln. Einem if fehlt zur Schleife die Eigenschaft der potentiell wiederholten Ausführung von Code. Ein if ist nichts anderes als eine bedingte Verzweigung. Damit kann man eine Schleife bauen (mit einem weiteren Konstrukt) aber ein if an sich ist noch lange keine Schleife.
Bernhard wrote:
> (binär --> vorzeichenlos)
ätsch, falsch =)
schau dir doch mal an, wie in der binärform negative zahlen
dargestellt werden. ein bisschen komplement-bildung und maskierung
sollten eigentlich reichen.
warum willst du eigentlich das if vermeiden?
grüße, holli
Michael H* wrote:
> warum willst du eigentlich das if vermeiden?
Das frag ich mich auch.
Ob es jetzt ein ABS gibt oder nicht, ein Vergleich muss sein.
Ob er jetzt im ABS steckt oder explizit ausgeschrieben wird,
ohne geht es nicht.
ja, stimmt. war grade dabei, eine korrektur zu tippen. man kann dem if - oder eher dem compiler - die arbeit abnehmen, das komplement und differenz und shift und usw auszuführen (und schafft es vielleicht ein bisschen eleganter und kürzer), aber zum schluss braucht es doch den vergleich.
Eigentlich müsste man noch wissen, in welchem Format die Zahlen binär dargestellt werden. Ich kenne da: - Einerkomplement - Zweierkomplement - Betrag und Vorzeichen - Offset Binary Siehe auch http://www.intersil.com/data/an/an9657.pdf
HildeK wrote: > Eigentlich müsste man noch wissen, in welchem Format die Zahlen binär > dargestellt werden. Ich kenne da: > - Einerkomplement > - Zweierkomplement > - Betrag und Vorzeichen > - Offset Binary > Wozu willst du das wissen? if a > b diff = a - b else diff = b - a
Karl heinz Buchegger wrote: > Hans wrote: >> hier noch eine kleine Besswerwisserei am Abend: >> >> if ist aus sicht der Theoretischen Informatik eine Schleife. >> siehe z.B. Schöning: Theoretische Informatik - kurzgefasst, S. 102 > > > Das kann sich jetzt aber nur um ein Missverständnis deiner seits > handeln. > Einem if fehlt zur Schleife die Eigenschaft der potentiell > wiederholten Ausführung von Code. > Ein if ist nichts anderes als eine bedingte Verzweigung. Damit > kann man eine Schleife bauen (mit einem weiteren Konstrukt) aber > ein if an sich ist noch lange keine Schleife. So ganz unrecht hat er nicht denn man könnte if als eine Spezialfall(Wiederholungen=0) der Schleife definieren. Oder man kann die Schleife als Wiederholung der Verzweigung definieren. Also ist if entweder ein Spezialform und die Schleife die Verallgemeinerung oder ist if die Grundform und die Schleife wäre dann die Wiederholung der Grundform. Hab allerdings kA wie das formal korrekt definiert ist, war nur eine Gedankenspiel von mir ;-)
Mr K. wrote: > So ganz unrecht hat er nicht denn man könnte if als eine > Spezialfall(Wiederholungen=0) der Schleife definieren. Dann ist also eine normale Sequenz eiegentlich auch nichts anderes als eine Schleife die 0 mal wiederholt wird. Eigentlich ist dann alles eine Schleife! Da frag ich mich doch, warum in all den Entwurfswerkzeugen zwischen diesen 3 Grundbausteinen unterschieden wird, wenn sowieso alles eine Schleife ist.
>Wozu willst du das wissen? > if a > b > diff = a - b > else > diff = b - a Klar - aber er wollte kein 'if'. Bei einigen Formaten reicht eine Maske.
HildeK wrote: >>Wozu willst du das wissen? > >> if a > b >> diff = a - b >> else >> diff = b - a > > Klar - aber er wollte kein 'if'. > Bei einigen Formaten reicht eine Maske. :-) Schon klar. Aber seien wir realistisch. Wieviele Systeme kennst du, die etwas anderes als 2-er Komplement benutzen?
>Wieviele Systeme kennst du, die >etwas anderes als 2-er Komplement benutzen? Da müsste ich jetzt schon etwas nachdenken ... ;-) Nein - bei µC eher nicht, bei AD-Wandlern und DSPs schon eher.
Karl heinz Buchegger wrote: > Mr K. wrote: > >> So ganz unrecht hat er nicht denn man könnte if als eine >> Spezialfall(Wiederholungen=0) der Schleife definieren. > > > Dann ist also eine normale Sequenz eiegentlich auch nichts > anderes als eine Schleife die 0 mal wiederholt wird. > Eigentlich ist dann alles eine Schleife! Führt jede Sequenz eine Prüfung/Vergleich durch? > Da frag ich mich doch, warum in all den Entwurfswerkzeugen > zwischen diesen 3 Grundbausteinen unterschieden wird, wenn > sowieso alles eine Schleife ist. Meinst du AND, OR und NOT?
Mr K. wrote: > Karl heinz Buchegger wrote: >> Mr K. wrote: >> >>> So ganz unrecht hat er nicht denn man könnte if als eine >>> Spezialfall(Wiederholungen=0) der Schleife definieren. >> >> >> Dann ist also eine normale Sequenz eiegentlich auch nichts >> anderes als eine Schleife die 0 mal wiederholt wird. >> Eigentlich ist dann alles eine Schleife! > > Führt jede Sequenz eine Prüfung/Vergleich durch? :-) Jetzt wirds aber lächerlich. >> Da frag ich mich doch, warum in all den Entwurfswerkzeugen >> zwischen diesen 3 Grundbausteinen unterschieden wird, wenn >> sowieso alles eine Schleife ist. > > Meinst du AND, OR und NOT? Sequenz bedingte Verzweigung Schleife
>>if ist aus sicht der Theoretischen Informatik eine Schleife. >>siehe z.B. Schöning: Theoretische Informatik - kurzgefasst, S. 102 Ja, der hat auch ausser dem o.g. noch sehr, sehr viel Unsinn geschrieben... Ausserordentlich viel Unsinn. Das muss man wirklich mal sagen. Gruss Jochen Müller
Eine Schleife ist ein Band, eine Schnur, ein Signalfluss (in der Elektronik oder Regelungstechnik) oder eben ein Programmfluss, das/die/der in sich geschlossen ist. Da Programme normalerweise immer nur in eine Richtung (bei höheren Programmiersprachen von oben nach unten, bei Maschinencode nach aufsteigenden Adressen) ausgeführt wird, kann das Schließen der Schleife nur durch einen Rückwärtssprung erfolgen, entweder explizit (Goto, JMP) oder implizit (am Ende eines For- oder While-Konstrukts). Dieser Rückwärtssprung wird entwder bedingt oder unbedingt ausgeführt. Die zweite Alternative ermöglicht Endlosschleifen. Ein If- oder If-Else-Konstrukt allein realisiert aber nur Vorwärts- sprünge und damit eben gerade keine Schleife. "Verzweigung" ist deswegen der treffendere und allgemein gebräuchliche Begriff dafür.
Das ganze Leben ist eine einzige Schleife. Irgendwann fängt alles wieder von vorne an ;-)
yalu wrote: > Ein If- oder If-Else-Konstrukt allein realisiert aber nur Vorwärts- > sprünge und damit eben gerade keine Schleife. "Verzweigung" ist > deswegen der treffendere und allgemein gebräuchliche Begriff dafür. und > Sequenz > bedingte Verzweigung > Schleife AFAIR hätte ich das zwar auch so ähnlich definiert: if-then, wie auch while etc, sind Kontrollstrukturen, die wiederum in Verzweigungen und Schleifen unterteilt werden. Aber: Auch nur mit if lassen sich Schleifen erzeugen (Rekursion).
1 | void x(int n) { |
2 | if (n > 0) { |
3 | // do something
|
4 | x(n - 1); |
5 | }
|
6 | }
|
p.s. www.if-schleife.de p.p.s. 1 = 2 oder so ähnlich http://de.wikipedia.org/wiki/Banach-Tarski-Paradoxon
Arc Net wrote:
> Aber: Auch nur mit if lassen sich Schleifen erzeugen (Rekursion).
Es ist aber nicht das if alleine, welches die Schleife erzeugt.
Genausowenig wie es in einer Programmiersprache eine
Schach-Spielen-Anweisung gibt, nur weil man aus einer
Kombination von Konstrukten ein Schachprogramm bauen kann.
> Aber: Auch nur mit if lassen sich Schleifen erzeugen (Rekursion).
Die in meinem letzten Post angegebenen Möglichkeiten, einen Rückwärts-
sprung zu realisieren, waren Beispiele. Eine weitere Möglichkeit sind
CALLs bzw. Unterprogrammaufrufe. Genau diese wird in deinem Beispiel
genutzt, um eine Schleife zu erzeugen. Mit dem If hat das überhaupt
nichts zu tun. Das dient lediglich dazu, die Schleife irgendwann
wieder abzubrechen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.