ZitatBerechnung.X = (Reihe-1)* x_verschiebung1 * rNeg=1
Wieso =1?
Berechnung.X = (Reihe-1)* x_verschiebung1 * rNeg=1
ZitatBerechnung.X = (Reihe-1)* x_verschiebung1 * rNeg=1
Wieso =1?
Berechnung.X = (Reihe-1)* x_verschiebung1 * rNeg=1
Ja danke habe ich falsch gemacht
Die Definition der Function ist an der Richtigen stelle oder gehört die unterhalb der Zeile:
DEF KukaMatrixTest1 ( ) ???
bzw. wo gehört diese hin im programm ??
MFG
Daniel
Die Function EVEN gehört entweder an das Ende der Datei:
DEF HAUPTPROGRAMM()
...
...
...
END
DEF Unterproggi1()
...
...
END
DEFFCT EVEN(iVALUE:IN)
...
...
ENDFCT
Alles anzeigen
Ausserdem habe ich noch was vergessen. In der Funktion fehlt noch gleich nach der DEFFCT-Zeile:
DEFFCT BOOL EVEN(iValue:IN)
INT iVALUE
IF ((IValue / 2)*2)<>iValue THEN
RETURN FALSE
ELSE
RETURN TRUE
ENDFCT
DEFFCT BOOL EVEN(iValue:IN)
INT iVALUE
IF ((IValue / 2)*2)<>iValue THEN
RETURN FALSE
ELSE
RETURN TRUE
ENDFCT
kann es sein dass das IValue das I klein gehört also: iValue ?
Hi,
normalerweise ist Groß-/Kleinschreibung egal, ist wegen der Lesbarkeit aber oft sinnvoll.
Ich weis nicht ob es dir schon aufgefallen ist, aber das Ende einer FOR-Schleife muss ENDFOR heissen und nicht END FOR.
Gruß
Ich weis nicht ob es dir schon aufgefallen ist, aber das Ende einer FOR-Schleife muss ENDFOR heissen und nicht END FOR.
Das kommt davon, wenn man die verschiedensten Programmiersprachen durcheinanderwürfelt...
Die Function EVEN gehört entweder an das Ende der Datei:
Da habe ich wohl noch was vergessen, also:
...entweder an das Ende der Datei...
....oder in ein externen SRC.
Hej,
greife das Thema noch mal kurz auf, weil mir eine Sache dabei nicht klar ist.
Kann auch sein, dass ich mich jetzt hier als Mathe-Stümper hinstelle, aber was bewirkt die Berechnung:
((iVALUE / 2) *2)
((1/2)*2) = (0,5)*2 = 1
((2/2)*2) = (1)*2 = 2
((3/2)*2) = (1,5)*2 = 3
((4/2)*2) = (2)*2 = 4
((5/2)*2) = (2,5)*2 = 5
Es kommt dabei doch immer ivalue als Ergebnis heraus!
Wie kann ich darüber eine entscheidung über gerade/ungerade treffen???
Seit aber bitte nicht so hart mit mir
Gruß
Robotiker
Hallo Robotiker,
ein Integer ist eine Ganzzahl, kann also keine Kommastellen haben.
Die Kommastellen der Berechnung werden abgeschnitten.
Deshalb sehen die Ergebnisse der Berechnung so aus:
((1/2)*2) = (0)*2 = 0 (FALSE)
((2/2)*2) = (1)*2 = 2 (TRUE)
((3/2)*2) = (1)*2 = 4 (FALSE)
((4/2)*2) = (2)*2 = 4 (TRUE)
((5/2)*2) = (2)*2 = 4 (FALSE)
usw.
Gruß Georg
iVALUE ist mit dem Datentyp INT deklariert, die Division (iVALUE / 2) wird deshalb als Ganzzahldivision ausgeführt
und es ergibt sich:
((1/2)*2) = (0)*2 = 0
((2/2)*2) = (1)*2 = 2
((3/2)*2) = (1)*2 = 2
((4/2)*2) = (2)*2 = 4
((5/2)*2) = (2)*2 = 4
Gruß
Hinky
Oh, da hat sich wohl meine Antwort zeitlich mit der von GeorgS überschnitten...
Hallo,
für die Unterscheidung gerade oder ungerade bietet sich die Modulo-Funktion an. Diese ist leider nicht bestandteil der Standartfunktionen.
Hier mal kurz die Funktion zum integrieten.
GLOBAL DEFFCT INT Modulo (N:IN,M:IN)
DECL INT N,M
IF (N==0) OR (M==0) THEN
RETURN 0
ENDIF
RETURN N-(N/M)*M
ENDFCT
Gruß
notime
Hej,
kleiner Trost für mich. Dann lag ich mathematisch doch nicht falsch . Hatte nur nicht an den Variablentyp gedacht.
Asche auf mein Haupt!!!!
Aber danke für die Korrektur!
Schönen Gruß
Robotiker
Kann sein das ich jetzt falsch liege, aber müsste "Reihe" und "Spalte" nicht auch irgendwo als INT deklariert werden?
Liege ich so falsch?
Hej,
die müssten eigenltlich irgendwo deklariert werden. Ist wahrscheinlich etwas untergegangen.
SG
Robotiker
Kann es sein, das die Modulo Funktion manchmal spinnt, wenn N=0 ist?
das kann nicht nur sein, dass ist so.
Durch Null teilen ergibt Rest Fehlermeldung, null durch etwas teilen ergibt Rest null.
Dachte ich mir schon. Vielen Dank
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können