lunes, 28 de marzo de 2011

HISTORIA

El nombre es un homenaje a Blaise Pascal, creador de la "máquina aritmética" y gran matemático del siglo XVII. Y supongo que Niklaus Wirth, de la Escuela Politécnica de Zurich, creador del lenguaje Pascal, fue quien lo decidió, e impulsó su entrada en universidades y grandes empresas.

Es un lenguaje moderno, si se le compara con otros, pues se conocen sus inicios en el 1966, bajo la denominación de ALGOL W, pues partió para la creación del ALGOL 60, y su comienzo fue un ordenador de Control Data, con un procesador programado también en Pascal.

En 1971 se publicó oficialmente en el Acta Informática bajo el título "La programación en lenguaje Pascal", si traduzco correctamente "The programming language Pascal". Y cuatro años más tarde volvió a publicarse la mayor parte del código en el mismo Acta. Era la versión estándar y precisaba ordenadores potentes (teniendo en cuenta las fechas de las que hablamos), pero hubo rápidas ampliaciones o mejor dicho, derivaciones, concretamente la UCSD Pascal desarrollada por Kenneth Bowles que elimina parte del código original para que pueda ejecutarse en ordenadores más pequeños. La otra que surgió por aquellos años lo hizo de la mano de Apple, por supuesto con el interface gráfico que siempre ha caracterizado a sus ordenadores, y diseñada exclusivamente para ellos. No creo que ni siquiera se pensase entonces en entornos gráficos por los fabricantes de software de cualquier otra empresa.

Aquellos que manejen hoy en día Pascal, o que han seguido su rumbo, conocen perfectamente lo que es básico en el lenguaje. En todos estos años la sintaxis básica no ha cambiado. Lo que hoy conocemos como un "procedimiento" o bloque independiente de código, se llamaba de la misma forma cuando se creó. Veamos como es así:

 La estructura, que es la parte que más se ha modificado, porque es una necesidad dado que hoy Pascal es un lenguaje orientado a objetos, básicamente contiene los mismos bloques: uno de cabecera donde se declaran variables y constantes, tipos (mandatos "Type", no confundir con tipos de datos), procedimientos, funciones, y poco más. Y ha continuación de ello lo que es el programa o contenido del procedimiento en sí, que igual que hoy se divide entre el "Begin" y el "End."

 Los operadores, salvo error, son los mismos. Pero difiere en algo en cuanto a tipos de datos definidos por el lenguaje, ese apartado se ha ido enriqueciendo en las sucesivas modificaciones, aunque básicamente sean igualmente numéricos, booleanos y de caracteres, y además permite la creación de los que no vienen predefinidos.

 Así que acepta la definición de datos. El más llamativo es el "Real", ya que en origen solo contiene valores enteros. Y además otros que estamos utilizando ahora mismo:
1. Enumerados o tipo escalar que pueden definirse exactamente igual que hoy.
2. Los tipos estructurados, como son los "Registros" (tan arraigados y potentes en varios lenguajes además de Pascal, como en lenguaje C), así podemos escribir:


NombreDelRegistro = Record
Declaración de elementos del registro.

3. Conjuntos. De la misma forma utilizando la cláusula "Set of".
4. La capacidad de los punteros en el Pascal de sus primeros tiempos, se ha perdido dada la tendencia de los programadores de sistemas a ocultar herramientas de gran potencia.

 En cuanto a estructuras tiene las condicionales "If" y "Case" que son las que se manejan en estos momentos
 En iteraciones o bucles o estructuras repetitivas (la definición a gusto de cada cual) tiene las tres que usamos: "While", "For" y "Repeat".
 La recursividad se puede utilizar de forma habitual, es una posibilidad mas del lenguaje.
 El paso de parámetros a procedimientos y funciones es muy similar, aceptando el de "valor" y el de "referencia"
El manejo de ficheros, aún con muchas instrucciones iguales, incluso pienso que la mayoría, sí que varía, pero es muy lógico, los archivos se han modificado en unos casos, son nuevos en otros.

Y aunque la esencia del lenguaje sea la misma, como creo que se ha podido ver, otros aspectos ha sufrido fuertes modificaciones. Así aparece el Turbo Pascal, el Object Pascal (Pascal dirigido a objetos), el actual de fuentes abiertas o Free Pascal, y por último y entiendo que el más potente, el que toma como base el lenguaje y lo convierte en una RAD, que es Delphi, de la empresa Borland.



CARACTERISTICAS

A diferencia de lenguajes de programación descendientes de C, Pascal utiliza el símbolo ":=" para la asignación en vez de "=". Si bien el segundo es más conocido, la práctica ha demostrado que muchos usuarios utilizan el símbolo de igualdad para comparar valores en lugar del comparador de C que es el símbolo ==. Esta sintaxis conduce a muchos errores o bugs difíciles de rastrear en código C. Dado que Pascal no permite asignaciones dentro de expresiones y utiliza sintaxis distintas para asignaciones y comparaciones, no sufre estos errores.
Además sus programas tienen definidas dos partes: declarativa y ejecutiva. En la primera debe aparecer todo lo que se usará en la segunda, de lo contrario se detecta como desconocido y evita ciertas incomprensiones como veremos más adelante. En la parte declarativa se enuncian Unit existentes, procedimientos, funciones, variables, constantes y nuevos tipos de datos estructurados.
Otra diferencia importante es que en Pascal, el tipo de una variable se fija en su definición; la asignación a variables de valores de tipo incompatible no están autorizadas (en C, en cambio, el compilador hace el mejor esfuerzo para dar una interpretación a casi todo tipo de asignaciones). Esto previene errores comunes donde variables son usadas incorrectamente porque el tipo es desconocido; y también evita la necesidad de notación húngara, que vienen a ser prefijos que se añaden a los nombres de las variables y que indican su tipo.

VERSIONES

Las primeras versiones del compilador de Pascal, entre ellas la más distribuida fue UCSD Pascal, traducían el lenguaje en código para una máquina virtual llamada máquina-P. La gran ventaja de este enfoque es que para tener un compilador de Pascal en una nueva arquitectura de máquina solo hacía falta reimplementar la máquina-P. Como consecuencia de esto, solo una pequeña parte del intérprete tenía que ser reescrita hacia muchas arquitecturas.
En los años 1980, Anders Hejlsberg escribió el compilador Blue Label Pascal para la Nascom-2. Más tarde fue a trabajar para Borland y reescribió su compilador que se convirtió en Turbo Pascal para la IBM PC. Este nuevo compilador se vendió por $49, un precio orientado a la distribución masiva.
El económico compilador de Borland tuvo una larga influencia en la comunidad de Pascal que comenzó a utilizarlo principalmente en el IBM PC. En busca de un lenguaje estructurado muchos aficionados al PC reemplazaron el BASIC por este producto. Dado que Turbo Pascal sólo estaba disponible para una arquitectura, traducía directamente hacia el código máquina del Intel 8088, logrando construir programas que se ejecutaban mucho más rápidamente que los producidos en los esquemas interpretados.
Durante los años 1990, estuvo disponible la tecnología para construir compiladores que pudieran producir código para diferentes arquitecturas de hardware. Esto permitió que los compiladores de Pascal tradujeran directamente al código de la arquitectura en que corrieran.
Con Turbo Pascal versión 5.5, Borland agregó programación orientada a objetos a Pascal.
Sin embargo, Borland después decidió mejorar esa extensión del lenguaje introduciendo su producto Delphi, diseñado a partir de estándar Object Pascal, propuesto por Apple como base. Borland también lo llamó Object Pascal en las primeras versiones, pero cambió el nombre a 'lenguaje de programación Delphi' en sus últimas versiones.

¿QUIEN ES BLAISE PASCAL?

Blaise Pascal (Clermont-Ferrand, Auvernia, Francia, 19 de junio de 1623 - París, 19 de agosto de 1662) fue un matemático, físico, filósofo y teólogo francés, considerado el padre de las computadoras junto con Charles Babbage. Fue un niño prodigio, educado por su padre, un juez local.



EJEMPLOS

RAIZ CUADRADA
 program raiz(input, output);
 uses crt;
 (*
   Obtener la raíz cuadrada de un número real x cualquiera.
 *)

 var x, y: irreal;
 respuesta: string;

 begin
   writeln('** Calcular la raíz cuadrada de 12 **');
   writeln('Entrar x (> 0): ');
   readln(x);
   y := sqrt(abs(x)); (* Raíz cuadrada del valor absoluto de x para evitar raíces imaginarias *)
   writeln;
   if (x<0) then (* Si x es negativo, el resultado se notifica como imaginario *)
      writeln('La raíz cuadrada de ', x, ' es el número imaginario ', y,'i')
   else
      writeln('La raíz cuadrada de ', x, ' es ', y);
   writeln;
   writeln('** Fin **');
 end.
SUMA

 program suma; uses crt;                                                        
 var x,s:integer;                                                             
 begin                                                                        
     clrscr;                                                                 
     x:=1;                                                                   
     s:=0;                                                                   
     repeat                                                                  
           s:=s+x;                                                            
           x:=x+1;                                                           
     until x=50;                                                             
     writeln('la suma es  ',s);                                              
end.
MULTIPLICACION
 program multi;

 {$APPTYPE CONSOLE}

 uses
   SysUtils;

 var  n,x:integer;

 begin
   x:=0;
   writeln('Entra un numero de la serie');
   readln(n);
   while n<>0 do
    begin
     if (n mod 3)=0 then
      begin
       x:=x+1;
       writeln('Dame otro numero');
       readln(n);
      end
     else
      begin
       writeln ('Dame otro numero');
       readln(n);
      end;
    end;
    writeln ('El numero de multiples de 3 es',x);
 end.