- Beiträge
- 22.183
- Reaktionspunkte
- 7.371
https://www.sps-forum.de/threads/bereichslängenehler-1215c-tia-v13.88932/#post-667897Was ist eigentlich ein "Flüchtiger DB-Bereich"?
Alles, was nicht remanent ist, ist flüchtig.
Ja genau richtig. In wiefern ändert dein Code etwas?Also ich glaube du verrennst dich ein bisschen mit den Schleifen..
Du hast eine Zeichenfolge von 2 bis 17, in dieser sollst du suchen wie viele Zahlen zwischen 0 bis 5 sich in dieser befinden und dann addieren wie oft welche Zahl vor kommt? Ist die Annahme richtig?
Ich hab das zB jetzt mit diesem Aufbau gelöst:
Code:IF Start THEN FOR .. DO // Hier darf dein Code stehen IF .. THEN // Hier darf dein Code stehen END_IF; END_FOR; Start:= FALSE; END_IF;
Ach, das hatte ich vor Jahren schon mal gefragt .... ohne befriedigende Antwort...https://www.sps-forum.de/threads/bereichslängenehler-1215c-tia-v13.88932/#post-667897Was ist eigentlich ein "Flüchtiger DB-Bereich"?
Also "flüchtiger DB-Bereich" meint "DB im Arbeitsspeicher"?
Kann man im Programm auch auf "nicht flüchtige DB-Bereiche" zugreifen (...)
Nein sondern "=" hier mal eine Übersicht der Operatoren. TIA unterringelt dir das zweite = aber normalerweise.Muss ich nicht eigentlich wenn ich etwas vergleichen will = = verwenden?
** | Potenz | Arithmetisch |
+ | unäres Plus (Vorzeichen) | Arithmetisch |
- | unäres Minus (Vorzeichen) | Arithmetisch |
NOT | Negation | Logisch |
* | Multiplikation | Arithmetisch |
/ | Division | Arithmetisch |
MOD | Modulo-Funktion | Arithmetisch |
DIV | Ganzzahlige Division | Arithmetisch |
+ | Addition | Arithmetisch |
- | Subtraktion | Arithmetisch |
< | kleiner als | Vergleicher |
> | größer als | Vergleicher |
<= | kleiner gleich | Vergleicher |
>= | größer gleich | Vergleicher |
= | Gleichheit | Vergleicher |
<> | Ungleichheit | Vergleicher |
AND; & | UND | Logisch |
XOR | Exklusiv-ODER | Logisch |
OR | ODER | Logisch |
: = | Zuweisung | Zuweisung |
BEGIN
//Array of Byte nach Array of Char
FOR #i := 0 TO 17 DO
"SpielDB".gewandelt[#i] := BYTE_TO_CHAR("SpielDB".Ergebniss[#i]);
END_FOR;
IF #Start THEN
//Zähler nullen
#"Zähler"[0] := 0;
#"Zähler"[1] := 0;
#"Zähler"[2] := 0;
#"Zähler"[3] := 0;
#"Zähler"[4] := 0;
#"Zähler"[5] := 0;
// Auswerten des Arrays
FOR #j := 0 TO 17 DO
IF "SpielDB".gewandelt[#j] = '0' THEN
#"Zähler"[0] := #"Zähler"[0] + 1;
ELSIF "SpielDB".gewandelt[#j] = '1' THEN
#"Zähler"[1] := #"Zähler"[1] + 1;
ELSIF "SpielDB".gewandelt[#j] = '2' THEN
#"Zähler"[2] := #"Zähler"[2] + 1;
ELSIF "SpielDB".gewandelt[#j] = '3' THEN
#"Zähler"[3] := #"Zähler"[3] + 1;
ELSIF "SpielDB".gewandelt[#j] = #CHAR_4 THEN
#"Zähler"[4] := #"Zähler"[4] + 1;
ELSIF "SpielDB".gewandelt[#j] = #CHAR_5 THEN
#"Zähler"[5] := #"Zähler"[5] + 1;
END_IF;
END_FOR;
#Start := FALSE;
END_IF;
END_FUNCTION_BLOCK
ich mach das jetzt nach und melde mich dann. Wieso schreibst du hier Char und bei denen zuvor nicht?ELSIF "SpielDB".gewandelt[#j] = #CHAR_4 THEN #"Zähler"[4] := #"Zähler"[4] + 1; ELSIF "SpielDB".gewandelt[#j] = #CHAR_5 THEN #"Zähler"[5] := #"Zähler"[5] + 1;
Ich hab nur eine Schleife verwendet wie du siehst, das war ja der Hinweis an dich durchzudenken wie du es einfach(er) lösen könntest.Ja genau richtig. In wiefern ändert dein Code etwas?
Hallo Ricardos,
vielleicht hilft es mal das ganze einfach runterzuschreiben und wenn das tut schauen wie der Code sich eleganter bewerkstelligen lässt.
Gruss
Code:BEGIN //Array of Byte nach Array of Char FOR #i := 0 TO 17 DO "SpielDB".gewandelt[#i] := BYTE_TO_CHAR("SpielDB".Ergebniss[#i]); END_FOR; IF #Start THEN //Zähler nullen #"Zähler"[0] := 0; #"Zähler"[1] := 0; #"Zähler"[2] := 0; #"Zähler"[3] := 0; #"Zähler"[4] := 0; #"Zähler"[5] := 0; // Auswerten des Arrays FOR #j := 0 TO 17 DO IF "SpielDB".gewandelt[#j] = '0' THEN #"Zähler"[0] := #"Zähler"[0] + 1; ELSIF "SpielDB".gewandelt[#j] = '1' THEN #"Zähler"[1] := #"Zähler"[1] + 1; ELSIF "SpielDB".gewandelt[#j] = '2' THEN #"Zähler"[2] := #"Zähler"[2] + 1; ELSIF "SpielDB".gewandelt[#j] = '3' THEN #"Zähler"[3] := #"Zähler"[3] + 1; ELSIF "SpielDB".gewandelt[#j] = #CHAR_4 THEN #"Zähler"[4] := #"Zähler"[4] + 1; ELSIF "SpielDB".gewandelt[#j] = #CHAR_5 THEN #"Zähler"[5] := #"Zähler"[5] + 1; END_IF; END_FOR; #Start := FALSE; END_IF; END_FUNCTION_BLOCK
IF #StartEval THEN
FOR #i := 2 TO 17 DO
IF #DAT[#i] = #QR_CODE_0 THEN
#CNT[0] := #CNT[0] + 1;
ELSIF #DAT[#i] = #QR_CODE_1 THEN
#CNT[1] := #CNT[1] + 1;
ELSIF #DAT[#i] = #QR_CODE_2 THEN
#CNT[2] := #CNT[2] + 1;
ELSIF #DAT[#i] = #QR_CODE_3 THEN
#CNT[3] := #CNT[3] + 1;
ELSIF #DAT[#i] = #QR_CODE_4 THEN
#CNT[4] := #CNT[4] + 1;
ELSIF #DAT[#i] = #QR_CODE_5 THEN
#CNT[5] := #CNT[5] + 1;
END_IF;
END_FOR;
#StartEval := false;
END_IF;
IF #StartClear THEN
#CNT := #tempCntEmpty;
#StartClear := 0;
END_IF;
Weil er eben als Beispiel wohl dir den Weg über Konstanten oder ohne Konstanten zeigen wollte.ich mach das jetzt nach und melde mich dann. Wieso schreibst du hier Char und bei denen zuvor nicht?
Hallo Ricardos,
vielleicht hilft es mal das ganze einfach runterzuschreiben und wenn das tut schauen wie der Code sich eleganter bewerkstelligen lässt.
Gruss
Code:BEGIN //Array of Byte nach Array of Char FOR #i := 0 TO 17 DO "SpielDB".gewandelt[#i] := BYTE_TO_CHAR("SpielDB".Ergebniss[#i]); END_FOR; IF #Start THEN //Zähler nullen #"Zähler"[0] := 0; #"Zähler"[1] := 0; #"Zähler"[2] := 0; #"Zähler"[3] := 0; #"Zähler"[4] := 0; #"Zähler"[5] := 0; // Auswerten des Arrays FOR #j := 0 TO 17 DO IF "SpielDB".gewandelt[#j] = '0' THEN #"Zähler"[0] := #"Zähler"[0] + 1; ELSIF "SpielDB".gewandelt[#j] = '1' THEN #"Zähler"[1] := #"Zähler"[1] + 1; ELSIF "SpielDB".gewandelt[#j] = '2' THEN #"Zähler"[2] := #"Zähler"[2] + 1; ELSIF "SpielDB".gewandelt[#j] = '3' THEN #"Zähler"[3] := #"Zähler"[3] + 1; ELSIF "SpielDB".gewandelt[#j] = #CHAR_4 THEN #"Zähler"[4] := #"Zähler"[4] + 1; ELSIF "SpielDB".gewandelt[#j] = #CHAR_5 THEN #"Zähler"[5] := #"Zähler"[5] + 1; END_IF; END_FOR; #Start := FALSE; END_IF; END_FUNCTION_BLOCK
Ich habe in meinem Beispiel ein Array of Byte ("SpielDB".Ergebniss[#i]) dieses konvertiere ich in ein Array of Char ("SpielDB".gewandelt[#i]) da im späteren Code auf Char verglichen wird. Auf was vergleichst du? Wenn du auf Charakter vergleichst dann musst du auch in Charakter konvertieren.Nur weils mir gerade auffällt unter Berücksichtigung meiner array's is diese convertierung ja falsch oder. Ich verwende ja den DAT_INT net. aber wie soll ich das dann schreiben das es richtig wäre? Anhang anzeigen 74914
Ich weiß nicht wieso du an deinem Integer so festhältst wenn es hier nicht um reale Zahlen sondern Zeichen geht.Nur weils mir gerade auffällt unter Berücksichtigung meiner array's is diese convertierung ja falsch oder. Ich verwende ja den DAT_INT net. aber wie soll ich das dann schreiben das es richtig wäre? Anhang anzeigen 74914
tempArray := FC_WandleCharInputToInt(InputArray);
for each element do
if tempArray[i] is validInt then
Cnt[tempArray[i]]++;
else
CntError++;
end_for;
Ja eh so wie ichs reingesendet habe oder?Hallo,
sag du es mir...
Ich habe in meinem Beispiel ein Array of Byte ("SpielDB".Ergebniss[#i]) dieses konvertiere ich in ein Array of Char ("SpielDB".gewandelt[#i]) da im späteren Code auf Char verglichen wird. Auf was vergleichst du? Wenn du auf Charakter vergleichst dann musst du auch in Charakter konvertieren.
Gruß
Wusste gar nicht, dass so SCL aussiehtIch habe das Gefühl, dass es sich wesentlich eleganter lösen lassen würde, wenn der Code erst prüft, ob es sich bei dem INPUT um reine Chars zwischen 30h und 35h handelt, daraus dann die korrespondierenden Integer-Werte bildet, und dann Zähler in einem Array inkrementiert.
Code:tempArray := FC_WandleCharInputToInt(InputArray); for each element do if tempArray[i] is validInt then Cnt[tempArray[i]]++; else CntError++; end_for;
Also, so sinngemäßg
Natürlich nicht, aber die Strategie des Forums ist ja auch "Hilfe zur Selbsthilfe". Der Satz am Ende deutet ja auch darauf hin, dass es eine grobe Struktur ist und kein fertiger CodeWusste gar nicht, dass so SCL aussieht
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?