Zwei Bedingungen wie gleichzeitig prüfen? Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
Autor |
Zwei Bedingungen wie gleichzeitig prüfen? |
|
|
|
|
BID = 636211
Kleinspannung Urgestein
Beiträge: 13356 Wohnort: Tal der Ahnungslosen
|
|
Hallo liebe Forenkollegen!
Ich hoffe,ihr könnt einem alten minderbemittelten Mann mal auf die Sprünge helfen.
Mein Spatzenhirn läßt mich grad fürchterlich im Stich.
(alle Bascom-Gegner brauchen nicht weiterlesen,und benutzen bitte das Kreuz oben rechts)
Also:
Ich möchte in einer If >> Then >> Else Anweisung zwei Variable gleichzeitig auf "wahr" oder "falsch" prüfen.
So in der Art:
Wenn A > B und > C,dann mache dies ,wenn nicht mache jenes.
Ich hab schon alle möglichen mir in den Sinn gekommenen Varianten durchprobiert,aber jedesmal hat mich der Compiler vollgemeckert weil ihm die Syntax nicht passte.
So,lange Rede kurzer Sinn.
Wie geht das wohl,wenn man im Gegensatz zu mir weiß was man tut?
Danke.
_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein) |
|
BID = 636216
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
|
Möchtest du das konkret mit diesen Größenvergleichen machen oder allgemein, also z.B. sowas:
If Bedingung1 And Bedingung2 Then
'tu dies
Else
'tu das
End If
Dazu kannst du die logischen Operatoren And und Or benutzen.
In C wären das && und ||, wobei man in C bei if klammert, was ich übrigens allgemein empfehlen würde: Klammern zeigt die Priorität direkt auf, ist praktisch, wenn man die Prioritäten der verwendeten Operatoren nicht kennt.
Edit:
Das ergibt keinen Sinn, denn da wird ein boolscher Ausdruck (A > B) mit einer Zahl verglichen.
Du müsstest die mathematische Schreibweise
A > B > C (also A ist größer B ist größer C) ausklammern in
(A > B) And (B > C).
In C ist das ein wenig anders, da gibt zwar explizit den boolschen Datentyp bool (bzw. eigentlich _Bool), aber dort haben auch numerische Ausdrücke wie a + b einen boolschen Charakter, nämlich wenn das Ergebnis 0 (=false) oder ungleich 0 ist (=true). In C könnte man das mathematisch schreiben, würde dadurch aber nichts erreichen .
_________________
[ Diese Nachricht wurde geändert von: DonComi am 24 Sep 2009 1:57 ] |
|
BID = 636219
Her Masters Voice Inventar
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 5308 Wohnort: irgendwo südlich von Berlin
|
ich würde die Grundaussage etwas anders interpretieren und zwar dass A sowohl grösser B als auch grösser C sein soll um die Abfrage zu erfüllen.
wie man das ins BASIC kriegt hängt vom Compiler ab. Entweder kann man schreiben
IF (A > B) and (A > C) THEN
oder wenn das der BASIC Dialekt nicht versteht kann er vielleicht mehrere IF-Ebenen verkraften, dann sähe es so (oder ähnlich) aus:
IF (A > B) THEN
IF (A > C) THEN ...
ENDIF
ENDIF
_________________
Tschüüüüüüüs
Her Masters Voice
aka
Frank
***********************************
Der optimale Arbeitspunkt stellt sich bei minimaler Rauchentwicklung ein...
***********************************
|
BID = 636220
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
Wenn ihr euch schon nicht einig seid, was der Ausdruck
Wenn A > B und > C,dann mache dies ,wenn nicht mache jenes
zu bedeuten hat, was soll dann erst der arme Compiler denken?
Kleinspannung möchte, wie er schreibt, zwei Variablen auf T|F prüfen, schreibt dann aber drei als arithmetischen Ausdruck hin.
Oder ist einer der drei Werte etwa eine Konstante ?
Imho geht das deshalb schief, weil zunächst der arithmetische Ausdruck A > B entweder T oder F ergibt,
und darauf folgt dann eine Subtraktion der Art: Wahr-5 = ?? .
Das hat DonComi schon völlig richtig gesehen.
Das Ergebnis wäre dann vom Typ "Nachts ist es kälter als draussen" und dank der Voraussicht der Compilerbauer weigert sich die Maschine solch unsinnige Befehle auszuführen.
P.S.:
Im Übrigen werden solche Berechnungen immer nacheinander durchgeführt.
Wenn die drei Werte tatsächlich gleichzeitig verarbeitet werden müssen, weil z.B. die Gefahr besteht, dass sich einer während der Berechnung ändert, muss man anders vorgehen und dabei auch die Hardware berücksichtigen.
[ Diese Nachricht wurde geändert von: perl am 24 Sep 2009 3:38 ]
|
BID = 636221
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Moin,
Stimmt, den Ausdruck kann man unterschiedlich interpretieren, aber ich glaube, darum geht es hier gar nicht.
Ich glaube eher, dass dies
>> "Anweisung zwei Variable gleichzeitig auf "wahr" oder "falsch" prüfen."
hier die Schlüsselfrage ist.
Und die Antwort darauf steht oben; dazu benutzt man logische Operatoren, in Basic halt And, Or und Not.
Das passiert übrigens in den meisten Fällen nicht gleichzeitig in Form einer atomaren Instruktion, schon gar nicht in AVRs.
Also, sollten Variablen von außen veränderbar sein (durch ISRs oder durch gemappte Speicherbereiche/IOs) muss man dafür sorgen, dass sich Parameter nicht während der Auswertung ändern können oder das Programm fehlertolerant schreiben, zumindest für diese.
Edit: Aber das kann man auch in perls Edit nachlesen
_________________
[ Diese Nachricht wurde geändert von: DonComi am 24 Sep 2009 3:46 ]
|
BID = 636295
Kleinspannung Urgestein
Beiträge: 13356 Wohnort: Tal der Ahnungslosen
|
Zitat :
Her Masters Voice hat am 24 Sep 2009 02:32 geschrieben :
|
ich würde die Grundaussage etwas anders interpretieren und zwar dass A sowohl grösser B als auch grösser C sein soll um die Abfrage zu erfüllen.
|
Genau so war es gemeint.
Sorry,hab ich mich wohl nicht ganz klar und richtig ausgedrückt.
(sah dann wohl auch der Compiler so...)
Zitat :
|
Entweder
IF (A > B) and (A > C) THEN
oder wenn das der BASIC Dialekt nicht versteht, dann
IF (A > B) THEN
IF (A > C) THEN ...
ENDIF
ENDIF
|
Danke,probiere ich heut abend mal.
_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein)
|
BID = 637484
Kleinspannung Urgestein
Beiträge: 13356 Wohnort: Tal der Ahnungslosen
|
Also das mit den Klammern rafft Bascom irgendwie nicht.
Aber das mit zweimal If >> Then + end if funktioniert.
Danke!
_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein)
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag heute wurden bisher 1 Beiträge verfasst © x sparkkelsputz Besucher : 182109758 Heute : 827 Gestern : 5426 Online : 549 2.10.2024 6:16 2 Besucher in den letzten 60 Sekunden alle 30.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0699079036713
|