- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: if then else Schleife möglich mit goto zu verlassen?

  1. #11
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    50
    Beiträge
    381
    Anzeige

    Praxistest und DIY Projekte
    nun ja...
    das ist richtig! Ich dachte mir, dass ich mir damit ein Paar Programmschritte beim Ablauf sparen könnte....

    Die Funktion in der Case Verzweigung soll die sein, dass ich ein Rolladen nur auffahren kann:
    * wenn er nicht gerade runter fährt
    * wenn er auch unten ist

    Dann soll er nur eine bestimmte Zeit zum Hochfahren haben. Weiter gibt es die Möglichkeit ihn zwischenzeitlich stoppen zu können und dann soll er die restliche Zeit hochfahren oder wieder runter. Dabei gibt es eine Konstante die eine bestimmte Fahrzeit beinhaltet.
    Soviel zu dem Programmteil.

  2. #12
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.05.2007
    Ort
    Im hohen Norden
    Beiträge
    227
    Guten orgen,
    seit 45 Jahren gibt es die Sprache Basic. Seit 45 Jahren wird über den Befehl GoTo diskutiert. Es gibt immer wieder "Programmierer bzw. Entwickler" (mit Absicht in " gesetzt) die auf diesen Befehl anspringen wie eine Rakete. Es ist einfach sehr amüsant diesen Leuten zuzuhören. Ich muss jedenfalls jedesmal bei deren Agumentationen grinsen.
    Diese GoTo-Diskutierer sollten besser einmal vernünftig gerade den Anfängern die Vor- und Nachteile des GoTo sinvoll erklären, aber das passiert auch nicht.
    Mich würde einmal interessieren, wie die GoTo-Diskutierer folgendes erklären: Warum gibt es überhaupt den GoTo-Befehl? (Den gibt es ja nicht nur in Basic)

    Peter
    _________________________________________________
    [-X Quis custodiet ipsos custodes
    Ground-Effect-Stability-Robot www.peter-holzknecht.de

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    60
    Beiträge
    1.080
    Der GoTo-Befehl ist einer der elementarten Befehle und ich könnte mir Assemblerprogrammierung schlecht ohne Jumps vorstellen
    Auch Basic verfügt über GoTo. Er stammt aber aus einer Zeit, in der Basic noch nicht so fit war, was Do..Loop, While...Wend und andere schöne Konstrukte angeht.

    Für mich ist ein Programm ein Weg, den der Computer zu gehen hat. Dieser führt von oben nach unten und auf diesem Wege manchmal in netten Schleifen.
    Schön optimiert verzweigt das Programm gelegentlich in wohlforme Unterprogramme oder ruft Funktionen auf, die auch von oben nach unten und/oder in allerschönsten Schleifen abgearbeitet werden.

    In diese Art kann auch ein GoTo wunderbar hineinpassen. Kann ... muss aber nicht. Es gibt Codes, da wird ein einem Programmteil von oben in die Mitte gesprungen, geprüft ob "Äpfel=Birnen" und ggf. in obere Drittel des Blocks gesprungen oder zum Ende, dann kommen weitere Bedingungen und Sprünge ... kurz und gut: man kann nichts mehr sauber lesen.

    Der GoTo-Befehl ist meiner Meinung nach ein guter Kumpel, der sich zum Wischiwaschi-Monster entwickelt, wenn man ihn unstrukturiert einsetzt.

    Sehr oft kann man auch auf viele GoTos verzichten, wenn man die Logik des umzusetzenden Problems genauer studiert.

    Gruß MeckPommER

    P.S.: Hurra ... das war im web genau der 100milliardste Beitrag zum Thema Basic und Goto
    Mein Hexapod im Detail auf www.vreal.de

  4. #14
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    GOTO gibt's, weil jedesmal, wenn einer den Befehl abschaffen wollte, die o.a. Diskussion ausgebrochen ist.
    Ein anständiges "confuse-the-russian" Flussdiagramm läßt sich ohne dem auch schwer umsetzen.

    Richtig Pfui-gack ist GOTO auch erst geworden, als die Ideen der strukurierten Programmierung (nassi-shneiderman, haa-haa) versuchten, gegen nicht mehr wartbare Softeware vorzugehen.
    Aber auch die kommt ohne goto nicht aus, es hat bestenfalls nur andere Namen.

    However, "GOTO" ist eine gute Möglichkeit, aneinader vorbeizuargumentieren, sowas sollte man sich nie entgehen lassen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #15
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    GOTO ist nicht das personifizierte Übel, so ists nicht,
    es kann aber zu mächtig fies zu debuggenden Fehlern
    führen, daher rate ich von der Verwendung absolut ab.
    In dem vorliegenden Fall hat sich nach Durchsicht des
    kompletten Codes ergeben, dass es hier durchaus sinnvoll
    verwendet werden kann, aber auch nicht zwingend
    gebraucht wird.
    Ich für meinen Teil bin mir auch nicht sicher
    was der Compiler produziert wenn man mit Goto
    aus ner IF-THEN innerhalb Select-Case raus springt ... daher würd ich eher die
    Version von Dir, PicNick, favorisieren.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  6. #16
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Vielleicht mag wer gucken, was Bascom aus so einem "Select + GOTO" macht
    Code:
     
    Do
          Select Case Varia1
             Case 23:
                If Varia2 <> 5 Then
                      Result = 44
                Else
                      Goto Ende
                End If
             Case 24:
                If Varia2 = 66 Then
                      Result = 22
                Else
                      Goto Ende
                End If
             Case Else
                Result = 0
          End Select
    Ende:
    	  Loop
    End
    Was macht der Bascom draus ?
    Code:
     
    //-----------------------------
    DO:				
    // Case 23:
    	LDS	r16,0x0060		// load varia1
    	CPI	r16,0x17		// <> 23 ? 
    	BREQ	L_0x0092	// next
    	JMP	L_0x00B0		// --> goto next case
    L_0x0092:				// 
    	LDS	r16,0x0061		// load varia1
    	CPI	r16,0x05		// <> 5 ? 
    	BRNE	L_0x009E	
    	JMP	L_0x00A8		
    L_0x009E:
    	LDI	r24,0x2C		// load '44'
    	STS	0x0062,r24		// store Result 
    	JMP	L_0x00AC		
    L_0x00A8:				
    	JMP	ENDE		
    L_0x00AC:
    	JMP	ENDE
    //-----------------------------
    L_0x00B0:				
    // Case 24
    	CPI	r16,0x18		// load varia1
    	BREQ	L_0x00B8	// <> 24 ? 
    	JMP	L_0x00D6
    L_0x00B8:
    	LDS	r16,0x0061
    	CPI	r16,0x42
    	BREQ	L_0x00C4
    	JMP	L_0x00CE
    L_0x00C4:
    	LDI	r24,0x16
    	STS	0x0062,r24
    	JMP	L_0x00D2
    L_0x00CE:
    	JMP	ENDE
    L_0x00D2:
    	JMP	ENDE
    L_0x00D6:				// Case ELSE
    	LDI	r24,0x00		
    	STS	0x0062,r24		// result = 0
    
    ENDE:				// 				
    	JMP	DO			// "LOOP"
    	
    .DB	0xF8, 0x94	;..
    
    L_0x00E2:				// "END" 
    	RJMP	L_0x00E2	// forever
    Da hüpft er rum wie Rumpelstilzchen.

    In "C" hätte man statt GOTO eben "break;" geschrieben.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #17
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Sorry, dass ich die Leiche nochmal aus dem Keller hole,
    aber ich hab hier gerade n Programm in der Mache,
    bei dem der Programmierer fast wahllos Goto und Gosub
    gemischt hat ... natürlich hängt sich die Geschichte
    weg.
    Ich würde die Gotobeführworter gern zwangsverpflichten
    das Debuggen zu müssen ... brrrrrrrrrrrr
    Naja, jeder fängt mal an

    so gehts schon los:
    If xy = 10 Then
    Goto Start
    Else
    If xy = 20 Then
    Goto Start
    Else
    Goto Sensor
    End If
    End If
    Start:

    <-- viele Programmschritte später -->

    Sensor:
    ...
    Do
    Debounce Pinc.2 , 0 , Key1 , Sub 'Taster unten 1 (links)
    Debounce Pinc.3 , 0 , Key2 , Sub 'Taster unten 2
    Loop

    <-- viele Programmschritte später -->

    Key1:
    Portc.0 = 1
    If Man = 1 Then
    Else
    Goto Menue
    End If
    Return

    <-- viele Programmschritte später -->
    Menue:
    Do
    Debounce Pinc.2 , 0 , Key1a , Sub 'Taster unten 1 (links)
    Debounce Pinc.3 , 0 , Key2a , Sub 'Taster unten 2
    Debounce Pinc.4 , 0 , Key3a , Sub 'Taster unten 3
    Debounce Pinc.5 , 0 , Key4a , Sub 'Taster unten 4
    Lcd " Programm Menue "
    Loop

    Key1a:
    Goto Schwellwert



    Um nicht falsch verstanden zu werden, ich will mich nicht lustig
    machen über den Urheber, den auch nicht verteufeln, aber
    das Programm ist lausig zu debuggen
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  8. #18
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Zitat Zitat von Vitis
    .....ich will mich nicht lustig machen über den Urheber, den auch nicht verteufeln,.....
    Ich wette, du hast dich im ersten Überschwang weniger moderat ausgedrückt
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #19
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.693
    Zitat Zitat von PicNick
    ... Da hüpft er rum wie Rumpelstilzchen ...
    Zitat Zitat von Vitis
    ... nicht lustig machen über den Urheber, den auch nicht verteufeln ...
    Ach wie gut, dass niemand weiß, dass er Rumpelstilzchen heißt.

    Zitat Zitat von PicNick
    ... im ersten Überschwang weniger moderat ausgedrückt ...
    Was sagte Rumpelstilzchen zum Schluss ?
    Ciao sagt der JoeamBerg

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    Wenn es ein "Goto" gibt in "Bascom", dann hat man sich darüber auch gedanken gemacht, das es auch funktioniert wenn es eingesetzt wird und es der Anwender einsetzen kann.

    Wenn sich die Hersteller von "Bascom" darüber keine Gedanken gemacht haben und es nur reingenommen haben weil es so etwas in "Basic" gibt, dann sind die Bascom-Hersteller für mich alle "Idioten", ich wiederhole "Idioten".

    Nehme aber an, das der erste Absatz zutrifft.

    mfg

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress