KAREL Programm Verbesserung

  • Hallo,


    ich setze mal unser KAREL Programm in das Forum, unsere Frage ist nun
    kann man dieses Programm effektiver schreiben und die sechs koordinaten auf einmal übergeben ???


    PROGRAM XYZ
    VAR
    com_dummy : INTEGER
    comport IN CMOS : STRING[3]
    serial : FILE
    Eingang: REAL
    P: XYZWPR
    status: Integer
    i: INTEGER
    j: INTEGER
    c: CONFIG


    BEGIN
    comport = 'P2:'
    com_dummy = SET_PORT_ATR(PORT_2, ATR_BAUD, BAUD_38400)
    com_dummy = SET_PORT_ATR(PORT_2, ATR_DBITS, DBITS_8)
    com_dummy = SET_PORT_ATR(PORT_2, ATR_PARITY, PARITY_NONE)
    com_dummy = SET_PORT_ATR(PORT_2, ATR_SBITS, SBITS_1)
    com_dummy = SET_PORT_ATR(PORT_2, ATR_XONOFF, XF_NOT_USED)
    com_dummy = SET_PORT_ATR(PORT_2, ATR_MODEM, MD_NOT_USED)
    com_dummy = SET_PORT_ATR(PORT_2, ATR_READAHD, 1)


    OPEN FILE serial ('RW' , comport)


    --OPEN FILE Eingang ('AP','Eingang.dt')
    WRITE SERIAL ('blubb', CR)
    P=curpos(0,0)
    FOR j=1 to 1 DO
    FOR i = 1 to 6 DO
    READ serial (Eingang)
    SELECT i OF
    CASE(1):
    P.X=Eingang
    CASE(2):
    P.Y=Eingang
    CASE(3):
    P.Z=Eingang
    CASE(4):
    P.W=Eingang
    CASE(5):
    P.P=Eingang
    CASE(6):
    P.R=Eingang
    ENDSELECT
    ENDFOR
    --Position=POS(Eingang, 0,0,0,0,0,c)
    --WRITE TPDISPLAY (Eingang)
    --WRITE serial (Eingang)
    --WRITE serial (Eingang)
    WRITE TPDISPLAY (P)
    SET_POS_REG(j,P,status)
    ENDFOR
    CLOSE FILE serial
    --CLOSE FILE Eingang
    END XYZ


    :hilfe:

  • ANZEIGE
  • Guten Morgen Emma82,


    nein es geht leider nicht die 6 Werte auf einmal in die "XYZWPR" zu speichern.
    Der "XYZWPR"-Datentyp ist ist ja nur KAREL bekannt und besteht auch nicht nur aus den 6 Koordinaten...


    Du könntest lediglich die 6 Werte auf einmal einlesen, getrennt durch ein vorher bestimmtes Trennzeichen (z.B. # oder | ), die Nachricht dann aufteilen (sozusagen "parsen") und die daraus "gewonnenen" Werte dann in "P" abspeichern (z.B. bekommst als Nachricht "375.0#422.5#-127.3#180.0#0.0#180.0#", holst Dir dann die einzelnen Werte und speicherst sie dann ab).


    Damit musst zwar immer noch eine Schleife über den ganzen "String" programmieren, aber Du musst nicht jedesmal den Port öffnen / schließen (ist manchmal empfehlenswert... genauso den Port zu leeren) und das Trennzeichen hilft Dir eben die einzelnen Werte zu "erkennen".


    Trotzdem musst die Koordinaten wie gesagt immer noch einzeln in die XYZWPR speichern.


    Gruß
    Fred

    Hoffnung ist der erste Schritt auf dem Pfad der Enttäuschung.<br /><br />Java programmers wear glasses, because they can&#039;t C#.

  • Vielen Dank Fred,


    es hat so funktioniert :ylsuper:!!!


    Weisst du viellíecht wie man Funktionen in Karel Programmiert und einen Rückgabewert erhält??


    Gruß

  • Guten Morgen Emma82,


    in KAREL gibts dafür die "ROUTINE"n.
    Denen kannst einerseits Werte übergeben und andererseits auch Werte mit einem "RETURN" zurückgeben.
    z.B.:


    ROUTINE Test (übergabewert1 : INTEGER; übergabewert2 : STRING) : REAL (<-- Rückgabewert)
    VAR
    BEGIN
    (...)
    RETURN 5.2
    END Test


    Viel Spass damit. =)


    Gruß
    Fred

    Hoffnung ist der erste Schritt auf dem Pfad der Enttäuschung.<br /><br />Java programmers wear glasses, because they can&#039;t C#.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden