Vai al contenuto
PLC Forum


ciclo for in scl


ottoz

Messaggi consigliati

ciao a tutti ho provato a fare questo esempio di for trovato su  un manuale si scl per s7300

FUNCTION_BLOCK FOR_BSP
VAR
    INDICE: INT ;
    PASSWORD: ARRAY [1..50] OF STRING;
END_VAR
BEGIN
FOR INDICE := 1 TO 50 BY 2 DO
    IF PASSWORD [INDICE] = 'KEY' THEN
         EXIT;
    END_IF;
END_FOR;

END_FUNCTION_BLOCK

 ma non funziona !!!!! come Mai?

un saluto a tutti  e spero che qualcuno mi aiutim sono ore che cerco di capire ma..

Link al commento
Condividi su altri siti


Cosa intendi per "non funziona"?

Hai ben presente cosa deve fare questa funzione?

In teoria dovrebbe controllare tutte le stringhe dispari dell'array chiamato password finché non trova la parola KEY quindi abbandona la ricorsione.

Quello che non mi suona è il fatto di controllare il 50 quando dovrebbe fare tutti i numeri dispari 1;3;5 ecc quindi metterei 49 o 51 e non 50

 

Link al commento
Condividi su altri siti

2 ore fa, ottoz ha scritto:

quindi devo scrivere  key nell array

Prima dovresti chiarire cosa vuoi ottenere.
Il codice, in pratica, così com'è non fa assolutamente nulla.
Se nessuna delle stringhe dispari da 1 a 49 dell'array è uguale a "KEY", il ciclo FOR termina senza fare nulla.
Se, invece, trova una stringa uguale a "KEY, esce dal ciclo FOR senza completarlo, e non fa nulla.

In entrambi i casi, non fa assolutamente nulla.

 

Link al commento
Condividi su altri siti

avete ragione  sono io che ho interpretato male la funzione ero io che sbagliavo,  la funzione e OK  pensavo che doveva scrivere KEY nell array invece è un IF

grazie per la pazienza e per la vostra presenza

ciao

Link al commento
Condividi su altri siti


VAR
    INDICE: INT ;
    PASSWORD: ARRAY [1..50] OF STRING ;
END_VAR
BEGIN
INDICE := 1 ;
WHILE INDICE <= 50 AND PASSWORD[INDICE] <> 'KEY' DO
    INDICE := INDICE + 2;
END_WHILE ;
 ditemi se sbaglio   parte da indice =1 e lui cerca  quando trova che indice è minore di 50 e  PASSWORD[INDICE] arriva a 1 vede che non ce KEY

si ferma a INDICE=3 ?

giusto??

Link al commento
Condividi su altri siti

primo giro INDICE = 1 quindi se PASSWORD[1] è diversa da 'KEY' incrementa INDICE di 2 unità e riprende il controllo.

Se incontra che PASSWORD[1] o PASSWORD[3] o PASSWORD[5] ecc. sono uguali a  'KEY' si ferma, altrimenti li spazzola fino a 49 compreso.

La ricorsione serve a capire in che posizione dell'array si trova una determinata stringa.

 

 

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...