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.
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
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.
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.
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).
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.