Les sentències condicionals són una part fonamental de qualsevol llenguatge de programació, incloent-hi el Llenguatge de Control (CL). Aquestes sentències permeten que el programa prengui decisions basades en certes condicions, executant diferents blocs de codi segons si les condicions es compleixen o no.

Conceptes Clau

  1. Condicions: Expressions que avaluen a cert o fals.
  2. Sentències IF: Executen un bloc de codi si una condició és certa.
  3. Sentències ELSE: Executen un bloc de codi si la condició de l'IF és falsa.
  4. Sentències ELSEIF: Permeten avaluar múltiples condicions en seqüència.
  5. Sentències SELECT: Utilitzades per avaluar una variable contra múltiples valors possibles.

Sintaxi Bàsica

Sentència IF

La sentència IF és la més bàsica de les sentències condicionals. La seva sintaxi és la següent:

IF (condició) THEN(DO)
    // Bloc de codi a executar si la condició és certa
ENDDO

Sentència ELSE

La sentència ELSE s'utilitza conjuntament amb IF per executar un bloc de codi alternatiu si la condició de l'IF és falsa:

IF (condició) THEN(DO)
    // Bloc de codi a executar si la condició és certa
ELSE(DO)
    // Bloc de codi a executar si la condició és falsa
ENDDO

Sentència ELSEIF

La sentència ELSEIF permet avaluar múltiples condicions en seqüència:

IF (condició1) THEN(DO)
    // Bloc de codi a executar si la condició1 és certa
ELSEIF (condició2) THEN(DO)
    // Bloc de codi a executar si la condició2 és certa
ELSE(DO)
    // Bloc de codi a executar si cap de les condicions anteriors és certa
ENDDO

Sentència SELECT

La sentència SELECT és útil quan es vol avaluar una variable contra múltiples valors possibles:

SELECT
    WHEN (condició1) THEN(DO)
        // Bloc de codi a executar si la condició1 és certa
    ENDDO
    WHEN (condició2) THEN(DO)
        // Bloc de codi a executar si la condició2 és certa
    ENDDO
    OTHERWISE (DO)
        // Bloc de codi a executar si cap de les condicions anteriors és certa
    ENDDO
ENDSELECT

Exemples Pràctics

Exemple 1: Sentència IF

DCL VAR(&AGE) TYPE(*DEC) LEN(3 0)
CHGVAR VAR(&AGE) VALUE(25)

IF (&AGE >= 18) THEN(DO)
    SNDPGMMSG MSG('Ets major d’edat.')
ENDDO

Explicació: Aquest programa declara una variable &AGE i li assigna el valor 25. Si l'edat és 18 o més, envia un missatge indicant que la persona és major d’edat.

Exemple 2: Sentència IF-ELSE

DCL VAR(&AGE) TYPE(*DEC) LEN(3 0)
CHGVAR VAR(&AGE) VALUE(16)

IF (&AGE >= 18) THEN(DO)
    SNDPGMMSG MSG('Ets major d’edat.')
ELSE(DO)
    SNDPGMMSG MSG('Ets menor d’edat.')
ENDDO

Explicació: Aquest programa declara una variable &AGE i li assigna el valor 16. Si l'edat és 18 o més, envia un missatge indicant que la persona és major d’edat. Si no, envia un missatge indicant que la persona és menor d’edat.

Exemple 3: Sentència ELSEIF

DCL VAR(&SCORE) TYPE(*DEC) LEN(3 0)
CHGVAR VAR(&SCORE) VALUE(85)

IF (&SCORE >= 90) THEN(DO)
    SNDPGMMSG MSG('Excel·lent')
ELSEIF (&SCORE >= 75) THEN(DO)
    SNDPGMMSG MSG('Bé')
ELSEIF (&SCORE >= 50) THEN(DO)
    SNDPGMMSG MSG('Suficient')
ELSE(DO)
    SNDPGMMSG MSG('Insuficient')
ENDDO

Explicació: Aquest programa declara una variable &SCORE i li assigna el valor 85. Avaluarà la puntuació i enviarà un missatge corresponent a la categoria de la puntuació.

Exemple 4: Sentència SELECT

DCL VAR(&DAY) TYPE(*CHAR) LEN(10)
CHGVAR VAR(&DAY) VALUE('Dilluns')

SELECT
    WHEN (&DAY = 'Dilluns') THEN(DO)
        SNDPGMMSG MSG('Avui és Dilluns')
    ENDDO
    WHEN (&DAY = 'Dimarts') THEN(DO)
        SNDPGMMSG MSG('Avui és Dimarts')
    ENDDO
    OTHERWISE (DO)
        SNDPGMMSG MSG('Avui no és Dilluns ni Dimarts')
    ENDDO
ENDSELECT

Explicació: Aquest programa declara una variable &DAY i li assigna el valor 'Dilluns'. Avaluarà el dia i enviarà un missatge corresponent al dia de la setmana.

Exercicis Pràctics

Exercici 1

Escriu un programa CL que declari una variable &TEMP per a la temperatura. Si la temperatura és superior a 30 graus, envia un missatge que digui "Fa calor". Si és inferior a 10 graus, envia un missatge que digui "Fa fred". En cas contrari, envia un missatge que digui "Temperatura agradable".

Solució:

DCL VAR(&TEMP) TYPE(*DEC) LEN(3 0)
CHGVAR VAR(&TEMP) VALUE(25)

IF (&TEMP > 30) THEN(DO)
    SNDPGMMSG MSG('Fa calor')
ELSEIF (&TEMP < 10) THEN(DO)
    SNDPGMMSG MSG('Fa fred')
ELSE(DO)
    SNDPGMMSG MSG('Temperatura agradable')
ENDDO

Exercici 2

Escriu un programa CL que declari una variable &GRADE per a una nota. Si la nota és 90 o més, envia un missatge que digui "A". Si és 80 o més però menys de 90, envia un missatge que digui "B". Si és 70 o més però menys de 80, envia un missatge que digui "C". Si és 60 o més però menys de 70, envia un missatge que digui "D". En cas contrari, envia un missatge que digui "F".

Solució:

DCL VAR(&GRADE) TYPE(*DEC) LEN(3 0)
CHGVAR VAR(&GRADE) VALUE(85)

IF (&GRADE >= 90) THEN(DO)
    SNDPGMMSG MSG('A')
ELSEIF (&GRADE >= 80) THEN(DO)
    SNDPGMMSG MSG('B')
ELSEIF (&GRADE >= 70) THEN(DO)
    SNDPGMMSG MSG('C')
ELSEIF (&GRADE >= 60) THEN(DO)
    SNDPGMMSG MSG('D')
ELSE(DO)
    SNDPGMMSG MSG('F')
ENDDO

Errors Comuns i Consells

  1. Oblidar l'ENDDO: Cada bloc DO ha de tancar-se amb un ENDDO.
  2. Condicions Incorrectes: Assegura't que les condicions estan correctament formulades i que les variables tenen els valors esperats.
  3. Missatges Clarificadors: Utilitza missatges clars i descriptius per facilitar la depuració i la comprensió del codi.

Conclusió

Les sentències condicionals són essencials per a la presa de decisions en els programes CL. Amb les sentències IF, ELSE, ELSEIF i SELECT, pots controlar el flux del teu programa de manera efectiva. Practica amb els exemples i exercicis proporcionats per dominar l'ús de les sentències condicionals en CL.

© Copyright 2024. Tots els drets reservats