DMarlon Studio

Lección 8 · 8 de 20

Booleanos y comparaciones · Pascal

Compare valores en Pascal con =, <>, < y > y combine condiciones con and, or, not y xor para decidir quién sube a la montaña rusa.

Pascal · Booleanos y comparaciones en DMarlon Studio: el código del ejemplo y su salida en la terminal

Una comparación da un `Boolean`: True o False, que WriteLn escribe como TRUE y FALSE. Los operadores son =, <> (distinto), <, >, <= y >=. Recuerde: = compara y := asigna.

Las condiciones se combinan con `and` (tienen que cumplirse las dos), `or` (basta con una) y `not` (le da la vuelta). El resultado se puede guardar en una variable, como canRide o discount, y usarse después.

Lo más importante: en Pascal, and y or tienen más prioridad que las comparaciones, así que cada comparación va entre paréntesis: (height >= 140) and hasTicket. Sin ellos, age < 14 or age >= 65 se leería como age < (14 or age) >= 65 y no compilaría.

`xor` es verdadero cuando solo uno de los dos lados lo es. Además, Free Pascal evalúa and y or en cortocircuito: si con el primer lado ya sabe el resultado, no mira el segundo.

(age >= 10) and (age <= 12) comprueba que la edad está dentro de un intervalo; es el uso más típico dentro de un if.

Código · main.pas

program main;var  age, height: Integer;  hasTicket, isMember, canRide, discount: Boolean;begin  age := 12;  height := 145;  hasTicket := True;  isMember := False;  // = compares (:= assigns) and <> means "not equal".  WriteLn('Is the age 12? ', age = 12);  WriteLn('Is the age not 18? ', age <> 18);  WriteLn('Taller than 1.50 m? ', height > 150);  // With and/or, each comparison goes in its own brackets.  canRide := (height >= 140) and hasTicket;  WriteLn('Can ride the roller coaster? ', canRide);  discount := (age < 14) or (age >= 65) or isMember;  WriteLn('Gets a discount? ', discount);  WriteLn('Pays full price? ', not discount);  // xor is true when exactly one side is true.  WriteLn('Ticket or card, but not both? ', hasTicket xor isMember);  if (age >= 10) and (age <= 12) then    WriteLn('Category: junior');end.

Salida · fpc main.pas && ./main

Is the age 12? TRUE
Is the age not 18? TRUE
Taller than 1.50 m? FALSE
Can ride the roller coaster? TRUE
Gets a discount? TRUE
Pays full price? FALSE
Ticket or card, but not both? TRUE
Category: junior

Para recordar

  • Las comparaciones dan True o False.
  • <> significa «distinto de».
  • and, or, not y xor combinan booleanos.
  • Cada comparación va entre paréntesis al usar and u or.

Ejercicio

Añada una variable withAdult: Boolean y cambie canRide para que los menores de 8 años solo puedan subir acompañados: (height >= 140) and hasTicket and ((age >= 8) or withAdult).