Aprendemos el lenguaje de nuestros antepasados y escribimos nuestro primer proyecto: un juego de consola.

Si no te perdiste las clases de informática en la escuela, la palabra Pascal seguramente te produce un ligero escalofrío. Aunque en este lenguaje ya no se escribe software serio desde hace mucho tiempo, es ideal para dar los primeros pasos en la programación.

En este artículo, veremos qué es Pascal, cómo surgió, de qué está hecho y por qué a los profesores les gusta tanto. Y como extra, probaremos a escribir nuestra primera aplicación en Pascal: el juego de consola «Piedra, papel o tijeras«.

¿Qué es Pascal?

Pascal es un lenguaje de programación procedimental, llamado así en honor al matemático y físico francés Blaise Pascal. Inicialmente, el lenguaje se creó para enseñar a los estudiantes la programación estructurada, pero resultó tan bueno que a finales del siglo XX se convirtió en uno de los más populares del mundo.

El lenguaje fue creado por Niklaus Wirth, un programador e informático de renombre mundial. La idea de desarrollar Pascal se le ocurrió mientras trabajaba en Algol-60, otro lenguaje popular de la época. Wirth, junto con sus colegas, se dedicó a mejorar Algol; intentó hacerlo más simple, conciso y funcional. Así nació el dialecto Algol W, que posteriormente sirvió de base para Pascal.

Uno de los objetivos del desarrollo de Pascal fue la enseñanza de la programación a los estudiantes, por lo que se eliminó todo lo superfluo del complejo sintaxis de Algol, lo que ayudó a reducir considerablemente el umbral de entrada.

Estas son las principales características del lenguaje:

  • Sintaxis sencilla. Se eliminaron las reglas de formato de código poco claras de Algol, y las estructuras de los operadores for, if y while comenzaron a ocupar menos líneas.
  • Tipificación estricta. Algol tenía un potente sistema de trabajo con tipos de datos, pero a los principiantes les resultaba difícil de entender. Por eso, para Pascal, Wirth eligió una tipificación estricta, donde todas las variables, funciones y parámetros deben declararse con una indicación explícita del tipo.
  • Estructura de control estricta. Los programas podían crear nuevas funciones basándose en los datos obtenidos durante la ejecución del código. Esta función se eliminó de Pascal para simplificar la lógica.
  • Conjuntos. Wirth añadió a Pascal la compatibilidad con conjuntos: colecciones de símbolos únicos que pueden combinarse entre sí y buscar intersecciones. Hoy en día, los conjuntos se encuentran en muchos lenguajes de programación, pero en 1970 era una herramienta innovadora.
  • Anidamiento limitado. En Algol, era posible utilizar bloques de código profundamente anidados. Esto es conveniente para el desarrollo de proyectos grandes y complejos, pero en los scripts de formación, la función es prácticamente inútil. Por lo tanto, tampoco se incluyó en Pascal.
  • Estructuras de datos. En Pascal, surgió la posibilidad de combinar diferentes tipos de datos en una sola estructura. Para designarlos, Wirth introdujo la palabra clave record. Más tarde, este concepto se adaptó para C/C++.

En tan solo 20 años, Pascal se convirtió en uno de los lenguajes de programación algorítmica más populares. Las grandes empresas tecnológicas de la época comenzaron a lanzar sus propias versiones de compiladores e incluso implementaciones de Pascal, añadiendo al lenguaje lo que no estaba previsto en la versión original. Así nacieron Object Pascal, Turbo Pascal, Free Pascal, PascalABC.NET y Delphi.

¿Para qué sirve el lenguaje Pascal?

Wirth concibió Pascal como un lenguaje para enseñar a los estudiantes los fundamentos de la programación estructurada, y hasta ahora se utiliza ampliamente con este fin. El lenguaje se enseña en escuelas y universidades de todo el mundo, y en él se escriben ejemplos de código y problemas para los exámenes estatales. Por ejemplo, en algunos países, a los alumnos se les pide que respondan qué hace el código de un programa escrito en Pascal.

Actualmente, Pascal no se utiliza para desarrollar servicios y aplicaciones que millones de personas utilizan a diario. Los ingenieros prefieren lenguajes de programación más rápidos y versátiles, como Java, Python o JavaScript.

Sin embargo, en el pasado, Pascal también fue elegido por grandes empresas. Por ejemplo, en él se escribió el código del sistema operativo para el ordenador Apple Lisa. Para ello, en la década de 1980, los ingenieros de Apple desarrollaron Object Pascal, una versión orientada a objetos del lenguaje de programación, que utilizaron en casi todos sus proyectos hasta mediados de la década de 1990.

Imagen de un ordenador Apple Lisa, mostrando su diseño beige y la interfaz gráfica de usuario.
El icónico Apple Lisa: un hito en la informática. Foto: Wikimedia Commons

Si te consideras un usuario avanzado de Windows, seguramente habrás utilizado alguna vez el gestor de archivos Total Commander. Muchos de sus componentes siguen escritos en Pascal.

El informático Donald Knuth eligió Pascal para la base del sistema de composición tipográfica TeX. Una de las implementaciones de este sistema, LaTeX, sigue utilizándose activamente. Por ejemplo, para representar fórmulas matemáticas en artículos de Wikipedia o para componer textos de trabajos científicos.

Aún más software está escrito en el lenguaje de programación Delphi, que se basa en la versión orientada a objetos del lenguaje, Object Pascal. Por ejemplo, se utilizó para Skype, las primeras versiones del motor de juego Unreal Engine, el archivador WinRAR, la estación de música digital FL Studio y algunos módulos de macOS.

Implementaciones de Pascal

La creación de Wirth no solo gustó a los estudiantes, sino también a la comunidad. Por lo tanto, las empresas comenzaron a crear sus propias implementaciones de Pascal, añadiendo las funciones necesarias. Veamos los dialectos y lenguajes de programación populares desarrollados sobre la base de Pascal.

Object Pascal

En 1986, un grupo de ingenieros dirigidos por Larry Tesler desarrolló para Apple una versión orientada a objetos del lenguaje Pascal: Object Pascal. En el lenguaje de programación aparecieron clases, objetos y herencia, y se abrieron nuevas posibilidades a los desarrolladores. Por ejemplo, se hizo posible reutilizar el código para no tener que reescribir las funciones cada vez.

Gracias a esto, el lenguaje se hizo adecuado para su uso en proyectos de gran envergadura. Más tarde, diferentes empresas lo siguieron mejorando en numerosas ocasiones. Por ejemplo, los ingenieros de Borland le añadieron la tipificación dinámica: esto significa que una misma variable puede tener diferentes tipos en diferentes partes del programa.

Turbo Pascal

Turbo Pascal es un entorno de desarrollo y un dialecto del lenguaje Pascal que se utilizaba para trabajar en él. Recibió el prefijo Turbo por su alta velocidad de compilación del código. Normalmente, los compiladores recorrían el código varias veces, creando primero archivos intermedios y luego uniéndolos. Turbo Pascal sólo necesitaba recorrer una vez el código del proyecto para compilar inmediatamente el archivo ejecutable. Además, el dialecto se creó para sistemas con recursos limitados, por lo que el compilador no sobrecargaba la memoria ni el procesador del ordenador.

El desarrollo de la implementación corrió a cargo de los ingenieros de la empresa Borland, y como base tomaron UCSD Pascal, que se utilizaba en los ordenadores Apple II.

Free Pascal

En 1997 apareció Free Pascal, una implementación de código abierto que combinaba la sencillez de la versión clásica de Pascal con las posibilidades de la OOP. Para la comunidad, la apertura fue una característica importante del lenguaje, ya que surgió la posibilidad de trasladar Pascal a cualquier plataforma y sistema operativo. Actualmente, la implementación de Free Pascal es compatible con más de 30 plataformas, incluidas Windows, Linux, macOS, Android, MS-DOS, FreeBSD, Game Boy Advance y Nintendo DS.

Delphi

Delphi es un lenguaje de programación de la empresa Borland, que surgió de Object Pascal. Se creó para facilitar el desarrollo de programas completos para PC; por ejemplo, se añadió una biblioteca para el desarrollo de interfaces gráficas y herramientas para trabajar con bases de datos.

A diferencia de Pascal, Delphi puede compilarse en aplicaciones multiplataforma: para Windows, macOS, Linux, Android e iOS. El lenguaje también es compatible con muchas más bibliotecas, por ejemplo, para trabajar con redes y gráficos.

PascalABC.NET

En 2007, la Universidad Federal del Sur (SFU) de Rostov del Don lanzó PascalABC.NET, una implementación propia que incorporó las capacidades de Delphi, recibió sus propios módulos y la compatibilidad con la plataforma .NET.

¿Por qué Pascal sigue utilizándose para la formación de los escolares?

Han pasado más de 50 años desde el lanzamiento de Pascal, y el lenguaje ha formado a varias generaciones de desarrolladores. A pesar de la aparición de lenguajes de programación más modernos, Pascal sigue utilizándose en las escuelas y en los primeros cursos de las universidades. Hay varias razones para ello:

  • Sintaxis sencilla. El código en Pascal es fácil de escribir y leer, por lo que los desarrolladores principiantes pueden concentrarse en la resolución del problema y no en las dificultades del lenguaje.
  • Estructurada. Los programas en Pascal constan de bloques de código, por lo que los alumnos se acostumbran a seguir una estructura estricta. En el siguiente ejemplo, el programa consta de dos bloques de código: el programa principal y el procedimiento PrintNumbers.
program StructuredProgram;  { Declaración del programa con el nombre StructuredProgram }
var
  i: integer;  { Declaración de la variable i de tipo integer }

procedure PrintNumbers;  { Declaración del procedimiento PrintNumbers }
begin
  for i := 1 to 10 do  { Bucle de 1 a 10 }
    writeln(i);  { Salida del valor i a la pantalla }
end;

begin
  PrintNumbers;  { Llamada al procedimiento PrintNumbers }
end.
  • Seguridad. La tipificación estricta de Pascal evita la aparición de errores durante el funcionamiento del programa. Si los tipos de variables no coinciden con los valores especificados, el compilador detectará el error y no permitirá que el desarrollador «se dispare en el pie».
program TypeSafety;
var
  a: integer;
  b: real;
begin
  a := 10;
  b := 5.5;
  { La siguiente línea provocará un error de compilación, ya que los tipos de variables no coinciden }
  { a := b; }
end.
  • Transición sencilla. Pascal tiene todo lo que se utiliza en los lenguajes de programación modernos, por lo que los desarrolladores pueden cambiar sin problemas a Python, Java o C++. Para la transición, sólo hay que familiarizarse con las peculiaridades del nuevo lenguaje, pero no hay que volver a sumergirse en los conceptos básicos.

Por ejemplo, así es como se ve un programa sencillo para mostrar números en pantalla, escrito en Pascal y Java. Se puede ver inmediatamente que la sintaxis de los lenguajes es diferente, pero los principios básicos siguen siendo los mismos: variables, bucles, salida a pantalla y el propio modelo de construcción del programa.

{ Pascal }
program PascalExample;
var
  i: integer;
begin
  for i := 1 to 5 do
    writeln('Pascal: ', i);
end.
# Java
public class JavaExample {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println("Java: " + i);
        }
    }
}
  • Tradición. En los sistemas educativos de muchos países del mundo, Pascal se ha utilizado durante décadas para la enseñanza de la programación. Durante este tiempo se han acumulado numerosos libros de texto y manuales, y han aparecido profesores con experiencia en Pascal. Por lo tanto, los centros educativos siguen utilizando la experiencia acumulada y, paralelamente, desarrollan programas de formación basados en otros lenguajes de programación, como Python.

Sintaxis de Pascal

Ahora veamos la sintaxis de Pascal con más detalle. Para experimentar con los ejemplos del artículo, puedes utilizar compiladores online, como GDB y JDoodle.

Estructura del programa

El código de cualquier programa en Pascal debe ajustarse a una estructura clara. Si se ignora, el código simplemente no se ejecutará. Así es como se ve en general la plantilla de un programa:

program ProgramName;
const
  ConstantName = value;
var
  VariableName: type;

procedure ProcedureName;
begin

end;

function FunctionName: returnType;
begin

end;

begin

end.

Línea por línea, lo analizamos:

  • program MyFirstProgram: encabezado del programa, donde se indica el nombre. Este bloque es opcional y puede coincidir con el nombre del archivo.
  • const: bloque con la declaración de valores constantes que no cambian durante la ejecución del programa.
const
  Pi = 3.14;
  • var: bloque con la declaración de variables. En esta etapa, no es necesario asignarles valores, basta con indicar el tipo.
var
  x, y: integer;
  count: integer;
  name: string;
  • procedure ProcedureName;: bloque de declaración de procedimientos. Es importante que el código del propio procedimiento se encuentre entre las palabras clave begin y end.
  • function FunctionName: returnType;: bloque de declaración de funciones. Aquí es lo mismo que con los procedimientos, sólo que hay que indicar el tipo de valor que devuelve la función.
💪
¡Importante! Los procedimientos y las funciones en Pascal son muy similares entre sí, pero hay que recordar que una función debe devolver necesariamente un valor al final de su trabajo. En los lenguajes de programación modernos no hay diferencia entre estos conceptos, por lo que si nunca has trabajado con Pascal, esto puede resultar confuso.
  • Código principal del programa: el código que va al final, después de declarar todo lo que se va a utilizar. También debe estar estrictamente entre las palabras clave begin y end. Al final del programa hay que poner un punto.
    De los ejemplos anteriores se puede observar que como separador al final de la línea hay que poner un punto y coma (;). Esta regla es válida para todos los casos, excepto para los operadores else y until. Antes de su declaración, no es necesario poner un punto y coma.

Variables y tipos de datos

Pascal es un lenguaje con tipificación estricta. Esto significa que debemos indicar explícitamente el tipo de datos de cada variable. Los desarrolladores pueden utilizar los siguientes tipos de datos simples:

TipoPalabra claveEjemplo
Números enterosinteger345
Números de punto flotantereal3,14
Tipo booleanobooleantrue (verdadero) o false (falso)
Caractereschar‘F’

Además de los tipos simples, en Pascal se utilizan los tipos estructurados, que combinan varios elementos en una estructura más compleja:

  • Matriz: es una estructura de datos que almacena varios elementos del mismo tipo. Al declararla, hay que indicar obligatoriamente el nombre, el tamaño de la matriz y el tipo de datos utilizado. En el código del programa, se puede acceder a los elementos de la matriz mediante el índice.
var
  numbers: array[1..5] of integer;
begin
  numbers[1] := 5;
  numbers[2] := 10;
end.
  • Conjunto: tipo de datos estructurado que almacena una colección de elementos únicos del mismo tipo. Con los conjuntos se pueden realizar operaciones como unión, intersección y comprobación de la pertenencia de un elemento al conjunto.
var
  numbers: set of 1..10;
  vowels: set of char;
begin
  numbers := [1, 2, 3, 4, 5];
  vowels := ['a', 'e', 'i', 'o', 'u'];
end.

Operadores

Los operadores son pequeñas órdenes que indican al ordenador qué hacer con las variables. Por ejemplo, ya hemos visto el operador de asignación :=. Indica que el valor de la derecha debe escribirse en la variable de la izquierda. Veamos otros operadores de Pascal.

Los desarrolladores utilizan con más frecuencia los operadores aritméticos. Se ven y funcionan igual que en matemáticas, pero hay excepciones:

OperadorSignificadoEjemplo
+Sumaa + b
Restaa – b
*Multiplicacióna * b
/Divisióna / b
divDivisión enteraa div b
modResto de la divisióna mod b

A continuación, se encuentran las operaciones de comparación. Comparan el valor de la izquierda con el valor de la derecha y devuelven true (verdadero) o false (falso):

OperadorSignificadoEjemplo
=Iguala = b
<>Distintoa <> b
>Mayor quea > b
<Menor quea < b
>=Mayor o igual quea >= b
<=Menor o igual quea <= b

Los operadores lógicos realizan operaciones sobre valores lógicos:

  • and: Y lógico
  • or: O lógico
  • not: NO lógico

Los conjuntos también tienen sus propios operadores. Son necesarios para trabajar cómodamente con la estructura de datos, para que el desarrollador no tenga que implementarlo todo desde cero:

  • +: unión de conjuntos
  • *: intersección de conjuntos
  • -: diferencia de conjuntos
  • in: comprobación de la pertenencia de un elemento al conjunto

Por ejemplo, así es como se puede unir el conjunto [1, 2, 3] con el conjunto [3, 4, 5] y obtener el conjunto [1, 2, 3, 4, 5]:

var
  set1, set2, set3: set of 1..10;
begin
  set1 := [1, 2, 3];
  set2 := [3, 4, 5];
  set3 := set1 + set2; 
end.

Operadores condicionales

Con los operadores condicionales, puedes realizar determinadas acciones sólo si se cumplen las condiciones establecidas. La construcción if … then … else se utiliza con más frecuencia. En general, tiene este aspecto:

if condición then
  código
else
  código

La palabra clave else es necesaria para describir las operaciones que el programa debe realizar si resulta que la condición establecida es falsa. Es una palabra clave opcional, por lo que se puede omitir si no es necesaria en el programa.

Escribamos un código que compruebe que el contenido de la variable x sea mayor que 3. Si se cumple la condición, el usuario verá el mensaje x > 3 en la consola, de lo contrario, aparecerá el mensaje x <= 3. Utilizaremos la función writeln() para mostrar el texto en la consola:

var
  x: integer;
begin
  x := 2;
  if x > 3 then
    writeln('x > 3')
  else
    writeln('x <= 3');
end.

Si necesitas elegir una acción de entre varias preparadas, es mejor utilizar el operador case … of. En general, tiene este aspecto:

case expresión of
  valor1: operador1;
  valor2: operador2;
  ...
  else operador3;
end;

En el código anterior:

  • Expresión: variable o expresión cuyo resultado Pascal comprobará si coincide con los valores.
  • Valores: posibles valores de la expresión.
  • Operador: acción que debe realizarse si la expresión es igual al valor correspondiente.
  • else procesa el caso en que ninguno de los valores ha sido adecuado.

Escribamos un programa que muestre el nombre del día de la semana en función de su número ordinal:

var
  day: integer;
begin
  day := 4;
  case day of
    1: writeln('Lunes');
    2: writeln('Martes');
    3: writeln('Miércoles');
    4: writeln('Jueves');
    5: writeln('Viernes');
    else writeln('Hoy es fin de semana');
  end;
end.

La variable day es igual a 4, por lo que el código anterior mostrará Jueves en la consola.

Captura de pantalla de una consola mostrando la compilación de un programa en Pascal y la salida "Jueves".
Ejemplo de código Pascal para determinar el día de la semana.

Bucles

Con los bucles, puedes ejecutar repetidamente un bloque de código mientras sea verdadera la condición especificada. En Pascal hay tres tipos de bucles:

  • for … to … do se utiliza cuando se conoce de antemano el número de iteraciones y el valor de la variable de control aumenta o disminuye en cada paso.
var
  i: integer;
begin
  for i := 1 to 5 do
    writeln('Iteración: ', i);
end.
  • while … do se ejecuta mientras la condición del bucle sea verdadera. El número de iteraciones no se conoce de antemano.
var
  x: integer;
begin
  x := 1;
  while x <= 5 do
  begin
    writeln('Iteración: ', x);
    x := x + 1;
  end;
end.
  • repeat … until también se ejecuta mientras sea verdadera la condición establecida.
var
  x: integer;
begin
  x := 1;
  repeat
    writeln('Iteración: ', x);
    x := x + 1;
  until x > 5;
end.

Comentarios

Para comentar el código en Pascal hay dos operadores: { … } y (* … *). Con su ayuda, puedes resaltar el código y el texto que el compilador ignorará. Por ejemplo, para añadir aclaraciones a una función compleja o para explicar el funcionamiento de un algoritmo al programador que trabajará después de ti. Los operadores sólo difieren en la sintaxis, por lo que puedes utilizar cualquiera de ellos, pero es importante recordar que no puedes empezar un comentario con un operador y terminarlo con otro: { … *).

Los comentarios pueden ser de una línea y de varias líneas:

begin
  { Este es un comentario de una línea }

  {
    Este es un comentario de varias líneas.
    El compilador ignorará el texto entre corchetes.
  }
end.

Hola, Pascal: escribimos el juego «Piedra, papel o tijeras»

Ya sabemos lo suficiente para programar un juego real que funcione en el terminal. Escribiremos el código para «Piedra, papel o tijeras», un juego infantil sencillo. Para ello, también nos familiarizaremos con el módulo crt, que es necesario para trabajar con la consola, y con el generador de números aleatorios.

Configuración del entorno

Para el desarrollo en Pascal necesitas un compilador compatible con tu sistema operativo. Consideremos la instalación de todo lo necesario utilizando como ejemplo la implementación de PascalABC.NET para Windows:

  1. Ve al sitio web oficial del proyecto PascalABC.NET y abre la sección Download.
  2. Elige la compilación necesaria (con o sin programador) y pulsa el botón Download.
  3. En las descargas, busca el archivo PascalABCNETSetup.exe, ejecútalo y sigue los pasos de la instalación.
  4. Busca la aplicación PascalABC.NET en el menú Inicio y ejecútala.
  5. En este entorno de desarrollo puedes escribir código en Pascal y ejecutarlo.

Escribimos el código

Primero, definimos el nombre del programa, importamos el módulo crt y declaramos las variables. Los módulos externos en Pascal se importan con la palabra clave uses. En el código del juego utilizaremos sólo tres variables:

  • playerChoice, computerChoice: para almacenar los movimientos del usuario y del ordenador.
  • playAgain: para interactuar con el menú.
program RockPaperScissors;

uses crt;  { Importamos el módulo para trabajar con la consola }

{ Declaramos las variables}
var
  playerChoice, computerChoice: integer;
  playAgain: char;

Ahora escribimos un procedimiento que mostrará en la consola el menú de selección de movimientos. Lo llamaremos ShowChoices y, utilizando varias llamadas a la función writeln(), mostraremos al usuario los posibles movimientos:

{ Procedimiento para mostrar en la consola el menú}
procedure ShowChoices;
begin
  writeln('Elige:');
  writeln('1 - Piedra');
  writeln('2 - Tijeras');
  writeln('3 - Papel');
end;

También necesitamos un procedimiento que elija al ganador, en función de la elección del usuario y del ordenador. Lo llamaremos DetermineWinner y en los paréntesis indicaremos obligatoriamente los parámetros que necesita para funcionar. Para determinar correctamente al ganador, recordemos que las tijeras cortan el papel, el papel envuelve la piedra y la piedra rompe las tijeras:

procedure DetermineWinner(player, computer: integer);
begin
  { Mostramos el movimiento del usuario y del ordenador }
  writeln('Has elegido: ', playerChoice);
  writeln('El ordenador ha elegido: ', computerChoice);

  { Si la elección es igual, es un empate }
  if player = computer then
    writeln('¡Empate!')
  { Determinamos al ganador y mostramos el mensaje en la consola }
  else if ((player = 1) and (computer = 2)) or
          ((player = 2) and (computer = 3)) or
          ((player = 3) and (computer = 1)) then
    writeln('¡Has ganado!')
  else
    writeln('¡El ordenador ha ganado!');
end;

Todo está listo para empezar a desarrollar el bucle principal del juego. Se repetirá hasta que el usuario cierre el juego introduciendo el símbolo n o N en la consola. La lógica general del juego es la siguiente:

  1. Inicializamos el generador de números aleatorios.
  2. Limpiamos la pantalla con la función clrscr del módulo crt, que hemos exportado anteriormente, y mostramos el menú con el procedimiento ShowChoices.
  3. Obtenemos el movimiento del usuario y comprobamos que sólo introduzca los valores que hay en el menú (números del 1 al 3). Si introduce algo diferente, le pedimos que vuelva a elegir.
  4. Generamos un movimiento aleatorio del ordenador con la función random() y elegimos al ganador con el procedimiento DetermineWinner.
  5. Preguntamos al usuario si quiere volver a jugar.

El código del bucle principal del juego es el siguiente:

{ Código principal del juego }
begin
  { Inicializamos el generador de números aleatorios }
  randomize;

  repeat
    { Limpiamos la pantalla para una nueva ronda }
    clrscr;

    { Mostramos el menú }
    ShowChoices;

    { Obtenemos el movimiento del usuario }
    write('Tu movimiento (1-3): ');
    readln(playerChoice);

    { Comprobamos que la entrada del usuario cumpla la condición }
    if (playerChoice < 1) or (playerChoice > 3) then
    begin
      writeln('Elección incorrecta. Inténtalo de nuevo.');
      continue;  { Volvemos al principio del bucle }
    end;

    { Generamos un movimiento aleatorio del ordenador: 1 — piedra, 2 — tijeras, 3 — papel}
    computerChoice := random(3) + 1;

    { Determinamos al ganador}
    DetermineWinner(playerChoice, computerChoice);

    { Preguntamos si el usuario quiere volver a jugar}
    writeln;
    write('¿Quieres volver a jugar? (y/n): ');
    readln(playAgain);

  { El bucle del juego se repite hasta que el usuario introduce n o N }    
  until (playAgain = 'n') or (playAgain = 'N');

  { Damos las gracias al usuario y terminamos el juego }
  writeln('¡Gracias por jugar!');
end.
Captura de pantalla de una consola mostrando la ejecución de un juego de Piedra, Papel o Tijera en Pascal.
Interfaz de usuario de un juego simple en Pascal.

El código completo del juego es el siguiente:

program RockPaperScissors;

uses crt;

var
  playerChoice, computerChoice: integer;
  playAgain: char;

procedure ShowChoices;
begin
  writeln('Elige:');
  writeln('1 - Piedra');
  writeln('2 - Tijeras');
  writeln('3 - Papel');
end;

procedure DetermineWinner(player, computer: integer);
begin
  writeln('Has elegido: ', playerChoice);
  writeln('El ordenador ha elegido: ', computerChoice);

  if player = computer then
    writeln('¡Empate!')
  else if ((player = 1) and (computer = 2)) or
          ((player = 2) and (computer = 3)) or
          ((player = 3) and (computer = 1)) then
    writeln('¡Has ganado!')
  else
    writeln('¡El ordenador ha ganado!');
end;

begin
  randomize;

  repeat
    clrscr;
    ShowChoices;
    write('Tu movimiento (1-3): ');
    readln(playerChoice);

    if (playerChoice < 1) or (playerChoice > 3) then
    begin
      writeln('Elección incorrecta. Inténtalo de nuevo.');
      continue;
    end;

    computerChoice := random(3) + 1;
    DetermineWinner(playerChoice, computerChoice);

    writeln;
    write('¿Quieres volver a jugar? (y/n): ');
    readln(playAgain);
  until (playAgain = 'n') or (playAgain = 'N');

  writeln('¡Gracias por jugar!');
end.

Y ahora, ¿qué?

Libros para Empezar con Pascal

Imagen del LibroTítulo y AutorEnlace de Compra
Libro Introducción a la Programación usando Pascal como primer LenguajeIntroducción a la Programación usando Pascal como primer LenguajeComprar
Libro Ejercicios resueltos de programación en PascalEjercicios resueltos de programación en PascalComprar
Libro Programación en Pascal de Sanford LeestmaProgramación en Pascal: Sanford Leestma y Larry NyhoffComprar
Libro La Técnica De La Programación En PascalLa Técnica De La Programación En Pascal: Collado M. Et Al.Comprar
Libro Programación En Pascal LazarusProgramacion En Pascal / Lazarus: Félix Riesco Peláez, Luis Vázquez LópezComprar
Libro Programación con Lenguaje PascalProgramación con Lenguaje Pascal: Sanchis Llorca, FranciscoComprar
Mejores Libros de Programación en Pascal en Español

En este artículo sólo hemos estudiado los fundamentos del lenguaje. Si quieres profundizar en Pascal, aquí tienes una lista de materiales útiles:

  • Cursos de PascalABC.NET en Stepik: colección de cursos gratuitos tanto para escolares como para adultos. Hay cursos específicos para prepararse para la programación en el examen de acceso a la universidad.
  • Pascal – Introducción a la programación: Playlist de YouTube con lecciones de Pascal y resolución de problemas.
  • Rosetta Code: recopilación de soluciones a problemas, incluyendo en Pascal.
  • Codewars: servicio para practicar la resolución de problemas algorítmicos. En la lista de lenguajes de programación puedes elegir Pascal.

También puedes echar un vistazo a 70+ Recursos Gratuitos para Aprender Programación.

Categorizado en:

Programación,