Write, Writeln, Read, Readln y GotoXY

Antes de continuar avanzando voy a explicar estos procedimientos, así que voy a lo que te interesa: ¿Cómo se utilizan?..

Write
Su principal función es la de mostrar mensajes en pantalla para poder interactuar con en usuario, ademas de permitirnos crear la interfaz gráfica del programa, entre otras.
Su estructura es: Write ('Aquí va el texto que se mostrara en pantalla');

Writeln
Su finalidad es la misma que el anterior, solo que el próximo texto en escribirse en pantalla se escribirá en una línea inferior.
Su estructura es: Writeln ('');

Read
Se utiliza cuando pedimos al usuario que ingrese texto, números o lo que se necesite para continuar con la ejecución.
Su estructura es: Read (Aquí va una variable donde se guardará lo ingresado por el usuario);

Readln
Exactamente igual al anterior solo que lo próximo en aparecer en pantalla se escribirá en la siguiente línea.
Su estructura es: Readln ();

GotoXY
Este procedimiento sirve para mover el cursor a las coordenadas de la pantalla virtual que necesitemos, ademas si se combina con Write podemos mostrar un mensaje en cualquier parte de la pantalla. Es un procedimiento muy útil para la creación de la interfaz gráfica.
Su forma de declarar es: GotoXY (Coordenada X, Coordenada Y);
Coordenada X: número de la columna (Hasta 80, en TurboPascal)
Coordenada Y: número de la fila (Hasta 25, en TurboPascal).

Ejemplos
Integremos todo esto en un ejemplo de un menú para un programa escrito con TurboPascal.
Aquí hay otro ejemplo




Program Menu;
Uses Crt;
Var
   Sal:Char;
   Selec:Shortint;
   Esc,Tecla:Boolean;

Procedure Menu;
Var
  y:Shortint;
  Des:Char;

 Procedure Creditos;
 Begin
   Clrscr;Textcolor(15);Gotoxy(33,5);
   Writeln ('Ejemplo de "MENU"');
   Gotoxy(27,7);
   Writeln ('----------------------------');
   Gotoxy(34,9);
   Writeln ('Proyecto 2009');
   Gotoxy (19,12);
   Writeln ('Hecho en Pascal, compilado con Turbo Pascal');
   Gotoxy(25,15);
   Writeln ('Programado por:  Matias Correnti');
   Gotoxy(24,24);Textcolor(11);
   Writeln ('PULSE UNA UNA TECLA PARA REGRESAR');Readkey;
 End;

 Procedure escfondo;
 Var :Shortint;
 Begin
   clrscr;textbackground(3);textcolor(8);
   For := 1 to 12 do
    Begin
      gotoXY(21,y);
      write('°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°');
      gotoXY(21,25-y);
      write('°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°');
      gotoXY(1,13-y);
      write('°°°°°°°°°°°°°°°°°°°°');
      gotoXY(1,12+y);
      write('°°°°°°°°°°°°°°°°°°°°');
      gotoXY(63,12+y);
      write('°°°°°°°°°°°°°°°°°°');
      gotoXY(63,13-y);
      write('°°°°°°°°°°°°°°°°°°');
    End;
   For := 5 to 20 do
     Begin
       textbackground(LightGray);
       gotoXY(25,y);writeln('                                  ');
       textbackground(0);
       If y < 20
         Then
           Begin
             gotoXY(59,2+y);writeln(' ');
           End;
     End;
   gotoXY(28,21);writeln('                               ');
 End;

 Procedure escmenu;
 Begin
   textcolor(12);textbackground(lightgray);
   gotoXY(40,6);writeln('MENU');textcolor(0);
   gotoXY(33,8);writeln('          ');
   gotoXY(34,8);writeln('Opcion 1');
   gotoXY(33,10);writeln('          ');
   gotoXY(34,10);writeln('Opcion 2');
   gotoXY(33,12);writeln('          ');
   gotoXY(34,12);writeln('Opcion 3');
   gotoXY(33,14);writeln('          ');
   gotoXY(34,14);writeln('Opcion 4');
   gotoXY(33,16);writeln('          ');
   gotoXY(34,16);writeln('Creditos');
   gotoXY(33,18);writeln('       ');
   gotoXY(34,18);writeln('Salir');
 End;

 Procedure escselec;
 Begin
   textbackground(9);textcolor(0);
   Case Selec of
     1:begin
         gotoXY(33,8);writeln('          ');
         gotoXY(34,8);writeln('Opcion 1');
       end;
     2:begin
         gotoXY(33,10);writeln('          ');
         gotoXY(34,10);writeln('Opcion 2');
       end;
     3:begin
         gotoXY(33,12);writeln('          ');
         gotoXY(34,12);writeln('Opcion 3');
       end;
     4:begin
         gotoXY(33,14);writeln('          ');
         gotoXY(34,14);writeln('Opcion 4');
       end;
     5:begin
         gotoXY(33,16);writeln('          ');
         gotoXY(34,16);writeln('Creditos');
       end;
     6:begin
         gotoXY(33,18);writeln('       ');
         gotoXY(34,18);writeln('Salir');
       end;
   end; {Case}
   textcolor(2);textbackground(15);
 End;

Begin
  If Esc
    Then
      begin
        escfondo;
        escmenu;
        Esc := False;
      end;
  If Tecla
    Then escselec
    Else Tecla := True;
  gotoxy(41,51); Des := READKEY;
  textbackground(0);textcolor(15);
  If Des = #13
    Then
      Case Selec of
        1:begin
            clrscr;
            Esc := True; {No hace nada ==> Regresa a Menu}
            Selec := 1;
          end;
        2:begin
            clrscr;
            Esc := True; {No hace nada ==> Regresa a Menu}
            Selec := 1;
          end;
        3:begin
            clrscr;
            Esc := True; {No hace nada ==> Regresa a Menu}
            Selec := 1;
          end;
        4:begin
            clrscr;
            Esc := True; {No hace nada ==> Regresa a Menu}
            Selec := 1;
          end;
        5:begin
            clrscr;
            Creditos;
            Esc := True; {Muestra los Creditos ==> Regresa a Menu}
            Selec := 1;
          end;
        6:begin
            Repeat
              Clrscr; gotoXY(25,12);
              write ('Esta seguro que quiere salir? (S/N) ');
              Sal := Readkey; Esc := True; Selec := 1;
            Until (Sal = #83) or (Sal = #78);
          end;
      End {Case}
    Else
      If Des = #0
        Then Tecla := False;
      Case Des of
        #72:begin {Arriba}
              If Selec = 1
                then Selec := 6
                else Selec := Selec - 1;
              escmenu;
            end;
        #80:begin {Abajo}
              If Selec = 6
                then Selec := 1
                else Selec := Selec + 1;
              escmenu;
            end;
      End; {Case}
End;  {Menu}

Begin
  Clrscr;
   Tecla := True; Esc := True; Selec := 1;
    Repeat
      Menu;
    Until (Sal = #83);
  Clrscr;
End.



En este ejemplo hay cosas que aún no vimos, pero no hay que desesperar si no entiendes nada del código, con tiempo y práctica veras que no es muy difícil de entender ni de escribirlo.

Para aclara un poco el código he escrito algunas cosas con colores, para poder marcarlos más adelante, ya que lo usaremos como ejemplo para explicar otras estructuras que no he explicado.

Por el momento aclaremos que marca cada color.
Azul: Son las variables que he declarado para poder operar.
Rojo: Son las llamadas a los procedimientos cuyos nombres también están en rojo.
Verde agua: Son las estructuras Case, If,  Repeat y For. También está la estructura While que no aparece en este ejemplo.
Aquí hay un While

Para finalizar la única forma de aprender y de ver como se comporta cada estructura es practicando y probando diferentes formas de resolver una situación, ya que siempre hay otro modo de resolver las cosas.

Tipos de Datos, Operadores y Asignaciones

Todas las variables que uses en tus programas las debes asociar a un tipo de dato especifico.
El tipo de dato define el rango de valores que pueden tomar la variables a lo largo de su vida,  es único y no se puede cambiar durante la ejecución del programa.

Los tipos de datos son:



Operadores

Integer
     Operadores:
                        +
                        -
                        *
                        div
                        mod

Real
     Operadores:
                        +
                        -
                        *
                        /

Boolean
     Operadores:
                        True
                        False
                        >
                        <
                        >=
                        <=
                        <>
                        =
                        and
                        or
                        not

Char (admite un solo caracter)
     Ejemplos:
                    A := '1';
                    B := #13;

Ejemplos

Veamos unos ejemplos de como declarar las variables en los programas, sin estas no podríamos hacer nada por ende la importancia de saber como se declaran.


Program Ejemplo_1;
Uses Crt;
Type
     Mi_numero : Integer;
Var
     A : Integer;
     B : Mi_numero;
Begin
     Clrscr;
     A := 0;
     B := 100;
     While A <= B do
          A := A + 1; {Incrementamos en una unidad a "A" y el resultado lo volvemos a guardar en "A"}
     Write ('El resultado es: ', A);
     Repeat Until Keypressed;
End.

De este ejemplo nos importa la manera de declarar las variables "A" y "B", que como podemos ver ambas son Integer (Enteras), declaradas de diferentes formas pero obtenemos lo mismo.
Otra manera de haber declarado estas variables mucho mas simple hubiera sido de esta manera:

Program Ejemplo_1;
Uses Crt;
Var
     A,B:Integer;
Begin
.
.
.
End.

Lo mismo se cumple para los otros tipos de datos.
Por otro lado, para este ejemplo podríamos haber declarado nuestro propio tipo de dato.
Ejemplo:

Program Ejemplo_1;
Uses Crt;
Var
     A,B : 0..100;
Begin
.
.
.
End.

En este ejemplo estamos estableciendo que "A" y "B" pueden tomar valores que van desde 0 hasta 100.

Para cualquiera de las tres versiones del programa el resultado siempre es 100.

Asignaciones

En Pascal los dos puntos seguido del signo igual (:=) se utiliza para indicar que se está asignando un dato a una variable o de una variable a otra.
Ejemplo:

Program Ejemplo_2;
Uses Crt;
Var
     A1, B1, C1:Integer;
Begin
     A1 := 5; {Asigno a A1 el número 5}
     B1 := A1; {Asigno el valor de A1 (5) a B1}
     C1 := B1 + A1; {Asigno a C1 10, que es el resultado de sumar B1 y A1 (10 = 5 + 5)}
End.

Estructura de un Programa



Algo que se debe tener en cuenta antes de empezar es la estructura del programa, la cual le da sentido y orden.

La estructura para un programa escrito en Pascal es la siguiente:


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Program Identificador;

Uses Identificadores;

Const
Definiciones de constantes;

Type
Declaraciones de tipos de datos definidos por el programador;

Var
Declaración de variables;

Function
Definiciones de funciones;

Procedure
Definiciones de procedimientos;

Begin

Sentencias (Cuerpo del programa);

End.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Ahora bien, habrá veces en que tal vez no uses todas, sino algunas pocas, en un ejemplo veremos cuales siempre se deben escribir.
Un consejo, trata de seguir un mismo orden para todos tus programas, salvo con los procedimientos y funciones que pueden ubicarse de manera inversa a este orden establecido, así siempre sabrás donde esta lo que necesites encontrar para consultar y/o modificar.


Vocabulario

Podemos dividirlo en tres partes:
  • Letras: a ... z, A ... Z
  • Dígitos: 0 ... 9
  • Símbolos especiales: + - * / div and or > < >= <= <> ( ) = [ ] { } ^ ; , '

Comentarios

Por último y no menos importantes, los comentarios que escribas se deben colocar dentro de {}, esto pueden ocupar todas las líneas que quieras. Estos son muy útiles ya que en ellos puedes describir el funcionamiento de alguna función, lo cual si trabajas en equipos de trabajo resulta más cómodo y práctico que estar tratando de adivinar que es lo que hace dicha función.


Veamos un ejemplo


Programa Ejemplo_1;
Uses Crt;
Type
Letras: String[40];
Numeros: Integer;
Var
Edad: Numeros;
Nombre: Letras;
Begin
Clrscr; {Borramos la pantalla}
Write ('Ingrese su Nombre: '); {Escribimos en pantalla el mensaje}
Readln (Nombre); {Espera hasta que se ingrese un nombre}
Write ('Ingrese su Edad: ');
Readln (Edad);
Clrscr;
Writeln (' Su nombre es: ', Nombre); {Se escriben los datos ingresados}
Writeln (' Su edad es: ', Edad, ' años');
Repeat Until Keypressed; {Siempre se escribe al final del programa}
End. {Este siempre termina con punto}

En azul están marcadas las palabras que siempre se deben escribir, salvo que no las necesites como puede ser el caso de "Type" o "Repeat Until Keypressed".


Bienvenido





Próximamente estaré publicando ejemplos de códigos fuentes escritos en Pascal..



Date una vuelta más tarde!..