AnteriorPosterior

5. Condiciones (3: case), comentarios

Por: Nacho Cabanes
Actualizado: 19-01-2022 12:12
Tiempo de lectura estimado: 6 min.

 

Versión en video (9:27 min):

Pascal

5. Condiciones (3: case), comentarios

5.1. Comentarios

Podemos añadir comentarios para explicar qué hace un cierto fragmento de un programa. Lo haremos escribiendo un texto entre "(" y ")". El texto que haya entre esos símbolos será una aclaración para nosotros, que no afecta al funcionamiento real del programa. La mayoría de versiones de Pascal permiten también usar llaves: "{" y "}". En ambos casos, el comentario podrá extenderse a lo largo de varias líneas.

Una versión mejorada del programa anterior podría ser:

(*
Programa para comprobar si un número introducido
por el usuario es positivo, negativo o cero
*)

program mayorQueCero8;

var
  n: integer;

begin
    write('Dime un numero: ');
    readln(n);
    if n < 0 then
        writeln('Es negativo')
    else if n > 0 then
        writeLn('Es positivo')
    else
        writeLn('Es cero.')
end.

5.2. Acentos en los textos y las variables

El programa anterior tiene un acento en el comentario ("comprobar si un número") pero en cambio no lo tiene en la escritura en pantalla ("Dime un numero"). Esto se debe a que la "codificación" (el juego de caracteres) que se usa para escribir un texto en el editor en ocasiones no coincidirá con la de la consola, de modo que la palabra "número" en consola se vería distorsionada. Por eso, en general no escribiremos acentos (ni eñe y otros caracteres internacionales) en los textos que vayamos a mostrar en consola.

Con los nombres de las variables también podremos tener problemas: deben estar formados por letras del alfabeto inglés (y quizá algún dígito numérico, a partir de la segunda posición). Si incluimos vocales acentuadas o eñe, como en "var número: integer;", lo más habitual será que obtengamos un mensaje de error diciendo que ese identificador contiene caracteres no aceptables.

5.3. La orden "case"

Cuando queremos comprobar entre varios posibles valores, podemos hacerlo con muchos "if" seguidos, pero puede resultar pesado y hacer que el programa sea poco legible. Como ejemplo, vamos a mostrar los días de la semana:

(* Nombre de un día de la semana a partir
del número de día (1 = lunes, 7 = domingo) 
Primera versión, con "if" *)

program DiasDeLaSemana1;

var
    dia: integer;

begin
    write('Dime el numero de dia: ');
    readln(dia);
    if dia = 1 then
        writeln('Lunes')
    else if dia = 2 then
        writeln('Martes')
    else if dia = 3 then
        writeln('Miercoles')
    else if dia = 4 then
        writeln('Jueves')
    else if dia = 5 then
        writeln('Viernes')
    else if dia = 6 then
        writeln('Sabado')
    else if dia = 7 then
        writeln('Domingo')
    else 
        writeln('Dia no valido');
end.

Hay una alternativa que resulta más compacta y más legible en esas ocasiones: la orden case. Su sintaxis es

case expresion of 
  caso1: sentencia1; 
  caso2: sentencia2; 
  ... 
  casoN: sentenciaN; 
end;

o bien, si queremos indicar también lo que se debe hacer si no coincide con ninguno de los valores que hemos enumerado, añadimos la cláusula opcional else:

case expresion of 
  caso1: sentencia1; 
  caso2: sentencia2; 
  ... 
  casoN: sentenciaN; 
  else
    otraSentencia; 
end;

(Nota: Esta es la sintaxis empleada por Turbo Pascal y Free Pascal. En Pascal estándar, esta construcción se empleaba con otherwise en lugar de "else" para expresar "en caso contrario").

Así, una versión alternativa del programa anterior sería:

(* Nombre de un día de la semana a partir
del número de día (1 = lunes, 7 = domingo) 
Segunda versión, con "case" *)

program DiasDeLaSemana2;

var
    dia: integer;

begin
    write('Dime el numero de dia: ');
    readln(dia);
    case dia of
        1: writeln('Lunes');
        2: writeln('Martes');
        3: writeln('Miercoles');
        4: writeln('Jueves');
        5: writeln('Viernes');
        6: writeln('Sabado');
        7: writeln('Domingo');
    else 
        writeln('Dia no valido');
    end;
end.

Ejercicios propuestos

Ej.05.01: Crea un programa que pida al usuario un número entero del 1 al 3, y escriba en pantalla "Uno", "Dos", "Tres" o "Número incorrecto" según corresponda. En esta primera versión usa la orden "if".

Ej.05.02: Haz un programa que pida al usuario un número entero del 1 al 3, y escriba "Uno", "Dos", "Tres" o "Número incorrecto" según corresponda. En esta segunda versión usa la orden "case".

Ej.05.03: Pide al usuario el número de un mes (1 al 12) y escribe su nombre en pantalla.

19229 visitas desde el 14-05-2019

AnteriorPosterior