Zugriff auf einen UDT / Array mit Variablen?

Zuviel Werbung?
-> Hier kostenlos registrieren
... nun wollte ich noch fragen ob man ein Array auch Löschen kann...

Löschen im Sinne von entfernen - Nein ...
Löschen im Sinne von "auf 0 setzen" - kein Problem :
Code:
FOR I := 1 to 50 BY 1 DO   // Beispiel-Schleife für Löschen eines Beispiel-ARRAY's
   Array_Variable[i] := 0 ;
END_FOR ;

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
um aus einer positiven Zahl eine negative Zahl des gleichen Betrags zu machen(+255*(-1)= 1111111100000001 = -255),so wird doch in der Informationstechnik subtrahiert (in Wirklichkeit addiert), achso die negative Zahl wird automatisch erzeugt,ich habe da ein bischen rumprobiert weil ich dachte da würde der Fehler liegen.
 
... das mit den positiven und negativen Zahlen selbst ist mir schon klar. Mich hat interessiert, warum du das in deinem Programm ausmaskierst ...?
 
Hallo ich bins schon wieder, ich habe jetzt ein Programm geschrieben, welches
die Periodenlänge des Kongruenz Zufallgenerators bestimmt(ab wieviel Zyklen
sich die Folge wiederholt) es werden die ersten 10 Zahlen gespeichert in
Merker 1, und jeweils die Anzahl der Zyklen in Period geschrieben, es hat schon einmal funktioniert (Zyklenanzahl 313) aber ich habe ein wenig verändert und jetzt funktioniert es nicht mehr,es zeigt immer schon bei 12
Zyklen Wiederholung an,
Code:
[INDENT][SIZE=2]FUNCTION_BLOCK fb10
[/SIZE] [SIZE=2]VAR_INPUT
[/SIZE] [SIZE=2]    zahl:DINT;
[/SIZE] [SIZE=2]END_VAR
[/SIZE] [SIZE=2]VAR_OUTPUT
[/SIZE] [SIZE=2]    zyklus:BOOL;
[/SIZE] [SIZE=2]END_VAR    
[/SIZE] [SIZE=2]VAR
[/SIZE] [SIZE=2]    merker1:ARRAY[1..10]OF INT;
[/SIZE] [SIZE=2]    merker2:ARRAY[1..10]OF INT;
[/SIZE] [SIZE=2]    period:ARRAY[1..10]OF INT;
[/SIZE] [SIZE=2]    zaehler1:INT:=1;
[/SIZE] [SIZE=2]    zaehler2:INT:=0;
[/SIZE] [SIZE=2]    break:BOOL:=false;  
[/SIZE] [SIZE=2]END_VAR
[/SIZE] [SIZE=2]VAR_TEMP
[/SIZE] [SIZE=2]    index:INT;
[/SIZE] [SIZE=2]    index1:INT;
[/SIZE] [SIZE=2]    index2:INT;
[/SIZE] [SIZE=2]END_VAR
[/SIZE] [SIZE=2]///////////////////////////////////////////////////////////////////////////////////////////////    
[/SIZE] [SIZE=2]BEGIN
[/SIZE] [SIZE=2]index:=DINT_TO_INT(zahl);
[/SIZE] [SIZE=2]IF break=true AND zaehler2<11 THEN
[/SIZE] [SIZE=2]   zaehler2:=zaehler2+1; 
[/SIZE] [SIZE=2]   period[zaehler2]:=zaehler1;
[/SIZE] [SIZE=2]   zaehler1:=1;
[/SIZE] [SIZE=2]   break:=false;
[/SIZE] [SIZE=2]END_IF;
[/SIZE] [SIZE=2]zaehler1:=zaehler1+1;
[/SIZE] [SIZE=2]IF zaehler1 <=11 THEN
[/SIZE] [SIZE=2]merker1[zaehler1-1]:=index;
[/SIZE] [SIZE=2]merker2[zaehler1-1]:=index;
[/SIZE] [SIZE=2]ELSE 
[/SIZE] [SIZE=2]   FOR index2:= 2 TO 10 BY +1 DO
[/SIZE] [SIZE=2]   merker2[index2-1]:=merker2[index2];  
[/SIZE] [SIZE=2]   END_FOR;
[/SIZE] [SIZE=2]merker2[10]:=index;
[/SIZE] [SIZE=2]END_IF;   
[/SIZE] [SIZE=2]  IF zaehler1> 11 THEN
[/SIZE] [SIZE=2]    FOR index1:=1 TO 10 BY +1 DO
[/SIZE] [SIZE=2]            IF merker1[index1] = merker2[index1] THEN
[/SIZE] [SIZE=2]               break:=true;
[/SIZE] [SIZE=2]               zyklus:=true;
[/SIZE] [SIZE=2]            ELSE break:=false;
[/SIZE] [SIZE=2]               zyklus:=false;
[/SIZE] [SIZE=2]               EXIT;
[/SIZE] [SIZE=2]            END_IF;
[/SIZE] [SIZE=2]     END_FOR;       
[/SIZE] [SIZE=2]  END_IF;
[/SIZE] [SIZE=2]END_FUNCTION_BLOCK[/SIZE]
[/INDENT]

 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
1. die code-tags sind immer noch nicht bei dir angekommen - das nervt!
2. dann mach die änderungen rückgängig - dann funktioniert es wieder!
3. vergleiche die funktionierende version mit der, die nicht funktioniert ... das kannst nur du, weil uns die andere nicht vorliegt!
 
Danke für die schnelle Antwort, jetzt habe ich endlich kapiert wie das mit dem Code geht, leider habe ich vor dem Ändern nicht gespeichert, zaehler1 hat doch den Anfangswert 1 also wird nie niedriger als 2 , das habe ich so gemacht weil die erste zahl noch nicht belegt war,
 
Zurück
Oben