Du kannst keine neue Antwort schreiben
Seiten (3): « 1 [2] 3 »

Autor Thema 
manfredkraft

Anzündhilfe

Registriert seit: Jul 2005

Wohnort:

Verein:

Beiträge: 45

Status: Offline

Beitrag 109391 , BASCOM : If-then - else- endif [Alter Beitrag14. Dezember 2006 um 12:03]

[Melden] Profil von manfredkraft anzeigen    manfredkraft eine private Nachricht schicken   Besuche manfredkraft's Homepage    Mehr Beiträge von manfredkraft finden

Hallo,
ich muss doch nochmals nachfragen.

Ich habe nachfolg. Beispiel aus der Bascom Doku modifiziert und
der Compiler (V 1.11.8.3) meldet weiterhin Fehler.
Kann mal bitte das Beisp. auf seinem Bascom - Compiler testen und mir das Ergebnis mitteilen?

Danke
mfg
manfred
--------------------------------------------------------------------------------------
Const B1 = 1
Dim A as Byte

If A = 1 Then
If B1 Then
Print "B1=1"
End If
Else
Print "A is not 0"
End If

' ergibt:
'---------------------------------------------------------------------------------------------------
'Error : 35 Line : 5 3 parameters expected , in File : E:\PROGRAMME\BASCOM-AVR\TEST_IF.BAS
'Error : 28 Line : 10 IF THEN expected , in File : E:\PROGRAMME\BASCOM-AVR\TEST_IF.BAS

'obwohl nach der
'Bascom Dokumentation zulässig:
'=====================
'Action
'Allows conditional execution or branching, based on the evaluation of a Boolean expression.

'Syntax
' ======
'IF expression THEN
' {ELSEIF expression THEN}
' {ELSE}
'END IF
'---------------------------------------------------
'Remarks
'Expression
'Any expression that evaluates to true or false.

'Definition EXPRESSION:
'Expressions and Operators

'An expression can be a numeric constant , a variable ,
'or a single value obtained by combining constants,
'variables, and other expressions with operators
AlexanderM

Epoxy-Meister

Registriert seit: Feb 2004

Wohnort: Düsseldorf

Verein: FAR

Beiträge: 238

Status: Offline

Beitrag 109395 [Alter Beitrag14. Dezember 2006 um 17:03]

[Melden] Profil von AlexanderM anzeigen    AlexanderM eine private Nachricht schicken   Besuche AlexanderM's Homepage    Mehr Beiträge von AlexanderM finden

Hallo manfredkraft,
momentan habe ich leider keine Zeit, es auszuprobieren. Allerdings fällt mir folgendes auf:

Const B1 = 1
Dim A as Byte

If A = 1 Then
If B1 Then
...

Wenn Ausdrücke wie "If B1 Then" verwendet werden, dann sollte die Variable als Boolean definiert sein. Manche Compiler schlucken zwar auch, wenn es sich um einen anderen (oder nicht definierten) Typen handelt, aber um auf Nummer sicher zu gehen, ist es besser, entweder eine explizite Bedingung zu schreiben (also z.B.: If B1 = 1 Then) oder die Variable als Boolean zu definieren und entsprechend auch zuzuweisen (B1 = true)

Nur so mein 2-Cent-Vorschlag dazu wink

Mit besten Grüssen,
Alexander
manfredkraft

Anzündhilfe

Registriert seit: Jul 2005

Wohnort:

Verein:

Beiträge: 45

Status: Offline

Beitrag 109396 , BASCOM : If-then - else- endif [Alter Beitrag14. Dezember 2006 um 17:34]

[Melden] Profil von manfredkraft anzeigen    manfredkraft eine private Nachricht schicken   Besuche manfredkraft's Homepage    Mehr Beiträge von manfredkraft finden

Hallo AlexanderM,

Const B1 = &B1
Dim A as Boolean
A = 1

If A = 1 Then
If B1 Then Print "B1=1"
Else
Print "A is 0"
End If

ergibt

Error : 35 Line : 9 3 parameters expected , in File : E:\PROGRAMME\BASCOM-AVR\TEST_IF.BAS
Error : 28 Line : 14 IF THEN expected , in File : E:\PROGRAMME\BASCOM-AVR\TEST_IF.BAS

Anyway, thanks!
manfred
Gelöscht2

Epoxy-Meister

Registriert seit: Aug 2005

Wohnort:

Verein:

Beiträge: 213

Status: Offline

Beitrag 109397 [Alter Beitrag14. Dezember 2006 um 17:44]

[Melden] Profil von Gelöscht2 anzeigen    Gelöscht2 eine private Nachricht schicken   Gelöscht2 besitzt keine Homepage    Mehr Beiträge von Gelöscht2 finden

*gelöscht gem. BDSG*
manfredkraft

Anzündhilfe

Registriert seit: Jul 2005

Wohnort:

Verein:

Beiträge: 45

Status: Offline

Beitrag 109398 , BASCOM : If-then - else- endif [Alter Beitrag14. Dezember 2006 um 18:04]

[Melden] Profil von manfredkraft anzeigen    manfredkraft eine private Nachricht schicken   Besuche manfredkraft's Homepage    Mehr Beiträge von manfredkraft finden

HAllo Mathias,

habe die versch. Varianten durchprobiert,
lt. Bascom - Doku muss die Auswertung des Ausdrucks ein
True/False ergeben. Eine konstante "1" tut dies allemal.
Definiert man die Schalter als Variablen geht's, aber nicht als
Konstanten (z.B. const component_availlable = 1)

Verschachtelte If's sollten bei Bascom eigentlich gehen.

Ansonsten wundere ich über die "nicht eindeutigen" Fehler-Meldungen,
die Bascom - Doku der Free-Version könnte etwas präziser sein.

manfred
Gelöscht2

Epoxy-Meister

Registriert seit: Aug 2005

Wohnort:

Verein:

Beiträge: 213

Status: Offline

Beitrag 109415 [Alter Beitrag15. Dezember 2006 um 11:08]

[Melden] Profil von Gelöscht2 anzeigen    Gelöscht2 eine private Nachricht schicken   Gelöscht2 besitzt keine Homepage    Mehr Beiträge von Gelöscht2 finden

*gelöscht gem. BDSG*
AlexanderM

Epoxy-Meister

Registriert seit: Feb 2004

Wohnort: Düsseldorf

Verein: FAR

Beiträge: 238

Status: Offline

Beitrag 109426 [Alter Beitrag15. Dezember 2006 um 19:08]

[Melden] Profil von AlexanderM anzeigen    AlexanderM eine private Nachricht schicken   Besuche AlexanderM's Homepage    Mehr Beiträge von AlexanderM finden

Hi,
nun habe ich mir mal die Zeit genommen, es im BASCOM (Version 1.11.7.9) auszuprobieren (Zeit hat man ja nicht, die muß man sich erst nehmen wink )

Folgendes geht, d.h. der Compiler meckert nicht:
'------------------------------------------------
Dim A as Bit
Dim B as Bit
A = 1
B = 0

If A = 1 Then
If B = 1 Then
Print "B ist 1"
End If
Else
Print "A ist 0"
End If

End
'------------------------------------------------


Folgendes mosert der Compiler aber an:
'------------------------------------------------
Dim B as Boolean
B = True 'Fehlermeldung "Store Bit error..."

If B Then 'Fehlermeldung "3 parameters expected"
Print "B ist falsch" 'Fehlermeldung "If Then expected", d.h. Folgefehler aus dem vorherigen
End If

End
'------------------------------------------------

Es scheint also zu sein, daß BASCOM den Variablentyp Bool gar nicht kennt (taucht in der Hilfe auch nirgendwo auf). Folglich kann man ihn auch nicht definieren. Stattdessen gibt's nur Bit, das ja auch nur ein Bit im Arbeitsspeicher belegt. Und um das Bit abzufragen, muß man leider die Formulierung "If A=1 Then" in voller Länge und Schönheit verwenden frown
Mit verschachtelten If-Abfragen scheint er aber problemlos zurecht zu kommen smile Bliebe zu eruieren, wieweit die Schachteltiefe gehen darf, aber das ist ein anderes Kapitel. wink
Basic ist nun mal keine so elegante Programmiersprache und der BASCOM scheint (zumindest in der freien Version) auch noch nicht soo ausgereift zu sein, zumindest die Hilfe.
Also ist oft ein bißchen Experimentieren angesagt. Das macht aber das Leben dann doch auch so interessant, nicht wahr? stick out tongue

In diesem Sinne
alles Gute und nicht den Enthusiasmus verlieren. cool

CU,
Alexander
manfredkraft

Anzündhilfe

Registriert seit: Jul 2005

Wohnort:

Verein:

Beiträge: 45

Status: Offline

Beitrag 109447 , Bascom IF-Then_else-Problem [Alter Beitrag16. Dezember 2006 um 13:00]

[Melden] Profil von manfredkraft anzeigen    manfredkraft eine private Nachricht schicken   Besuche manfredkraft's Homepage    Mehr Beiträge von manfredkraft finden

Hallo !

ausführlicher Programmcode ist schon wünschenswert.
Mein Punkt war jedoch die Behandlung von Zuständen, die während der jeweiligen Anwendung
konstant sind wie z.B. der Jumber BR7, der derzeit LCD_BL ansteuert.
Diesen Jumber wollte ich, da konstant, als Konstante definieren und im Programm verwenden.
Mein Ziel ist, über eine derartige Konstanten-Liste die für die Anwendung eingestellte
Konfiguration o h n e Speicherverbrauch zu realisieren.
In diesem Fall muß die Anweisung - If LCD_BL_AVAIL then "do something" lauten.

mfg
manfred
Stefan Wimmer

Grand Master of Rocketry


Moderator

Stefan Wimmer

Registriert seit: Aug 2000

Wohnort: Berlin

Verein: Deutsche Experimental Raketen Arbeitsgruppe (DERA)

Beiträge: 2398

Status: Offline

Beitrag 109463 [Alter Beitrag16. Dezember 2006 um 21:05]

[Melden] Profil von Stefan Wimmer anzeigen    Stefan Wimmer eine private Nachricht schicken   Besuche Stefan Wimmer's Homepage    Mehr Beiträge von Stefan Wimmer finden

..was wäre denn so schlimm daran zu schreiben "if IrgendeineHarwareAvailable = true then..."?
Dann wäre es sowohl syntaktisch richtig als auch les- und auf einen Blick erfassbar.

It's the Government - it doesn't have to make sense! (B. Kaplow in r.m.r)
manfredkraft

Anzündhilfe

Registriert seit: Jul 2005

Wohnort:

Verein:

Beiträge: 45

Status: Offline

Beitrag 109465 , IF-THEN-ELSE-ENIF [Alter Beitrag16. Dezember 2006 um 21:56]

[Melden] Profil von manfredkraft anzeigen    manfredkraft eine private Nachricht schicken   Besuche manfredkraft's Homepage    Mehr Beiträge von manfredkraft finden

HAllo Stefan,

leider kenne ich keine Lösung eine mit const BR7=1 definierte Konstante in Bascom mit
If BR7 = true zu verwenden, der Compiler übersetzt das schlicht nicht in Code!

Const B1 = &B1
Dim A as Bit
A = 1

'If A = 1 Then 'auch mit "true" getestet
If B1 = 1 Then Print "B1=1"

ergibt:
Error : 31 Line : 9 Invalid datatype , in File : E:\PROGRAMME\BASCOM-AVR\TEST_IF.BAS
Error : 28 Line : 9 IF THEN expected , in File : E:\PROGRAMME\BASCOM-AVR\TEST_IF.BAS

Bedingte Übersetzung mit #if ... ist ok!

mfg
manfred
Seiten (3): « 1 [2] 3 »
[Zurück zum Anfang]
Du kannst keine neue Antwort schreiben