viernes, 25 de marzo de 2011

UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO

COLEGIO DE CIENCIAS Y HUMANIDADES


PLANTEL SUR


PEREZ PADILLA GISELA AIDEE


CIBERNETICA Y COMPUTACION II


"LENGUAJE DE PASCAL"


GRUPO:668


CICLO ESCOLAR: 2010.-2011

INDICE

ºHISTORIA DEL LENGUAJE DE PASCAL


ºCARACTERISTICAS


º IMPLEMENTACION


ºCOMPILADORES DISPONIBLES


ºPLATAFORMAS DISPONIBLES


ºCARACTERES VALIDOS


ºPALABRAS RESERVADAS


º IDENTIFICADORES


ºVALIDES DE LOS IDENTIFICADORES 


ºVARIABLES


ºSENTENCIAS


º PROCEDIMIENTOS Y FUNCIONES


º ASIGNACION DE VALORES A VARIABLES


ºASIGNACION DE VARIABLES TIPO CHAR


º ASIGNACION DE VARIABLES TIPO BOOLENA


º INCREMENTO DE VARIABLES TIPO INTEGER O REAL


ºINGRESO DE DATOS USANDO READ


ºINGRESO DE DATOS USANDO READLN


º ESCRITURA DE DATOS USANDO WRITE


ºESCRITURA DE DATOS USANDO WRITELN


ºMODIFICACION DE LOS CAMPOS DE ESCRITURA


ºPSEUDOCODIGO DE PROGRAMA DE PASCAL


ºREGLAS BASICAS


ºCONSTRUCCION DE UN PROGRAMA DE PASCAL


ºESTRUCTURAS DE CONTROL


ºBIBLIOGRAFIA

HISTORIA DEL LENGUAJE DE PASCAL

Diseñado por Niklaus Wirth, como una herramienta deenseñanza de la programación. Sus desarrolladores se concentraron en desarrollar buenas herramientas que contribuyeran ala enseñanza, tal como un buen debugger, y un buen editor.Además tuvieron como meta el tener soporte para la mayoríade los microprocesadores populares en esa época en lasinstituciones de enseñanza.
Fue diseñado de una manera muy ordenada, reflejando laexperiencia de su diseñador, tomo las mejores características de los lenguajes de su tiempo, COBOL, ALGOL, y FORTRAN, al mismotiempo que busco evitar sus deficiencias, y hacerlo lo mas claroposible. La combinación de sus características deentrada/salida, y sus solidas características matemáticaspronto lo convirtieron en un lenguaje muy exitoso. Tambiénimplemento el tipo apuntador y agrego el CASE, e hizo uso devariables dinámicas. Sin embargo no implemento arreglosdinámicos ni agrupamiento de variables lo cual contribuyo a superdida de popularidad frente a nuevos lenguajes.
Delphi es una versión moderna y orientada a objetos de Pascal.

CARACTERISTICAS

Pascal se caracteriza por ser un lenguaje de programación estructurado fuertemente tipificado.
Esto implica que:
El código está dividido en porciones fácilmente legibles llamadas funciones o procedimientos. De esta forma Pascal facilita la utilización de la programación estructurada en oposición al antiguo estilo de programación monolítica.
El tipo de dato de todas las variables debe ser declarado previamente para que su uso que de habilitado.
A diferencia de lenguajes de programación descendientes de, Pascal utiliza el símbolo":=" para asignación en vez de "=".
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
En la parte declarativa se enuncian Unit existentes, procedimientos, funciones, variables, constantes y nuevos tipos de datos estructurados.
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.
En los años 1980,
Anders Hejlsberg escribió el compilador Blue Label Pascal para laNascom-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.
Durante losañ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.

IMPLEMENTACION

El ser un Pascal lenguaje estructurado, sirve de base para cualquier otro lenguaje de alto nivel, por estas características es utilizado en las universidades e institutos de educación para inicializar a los futuros ingenieros en sistemas o informática.

El nombre de Pascal fue escogido en honor al matemático Blaise Pascal.

El lenguaje de programación en Pascal, es un lenguaje de alto nivel, y de propósito general, lo cual quiere decir que se puede utilizar para cualquier tipo de propósitos.
El lenguaje de programación en Pascal se considera un lenguaje estructurado, sencillo y práctico para todos aquellos usuarios que se inician en el mundo de la programación, ya que fue creado con fines de aprendizaje

COMPILADORES DISPONIBLES

Free Pascal está escrito en Pascal (el compilador está creado usando Free Pascal), es un compilador estable y potente. Este sistema permite mezclar los códigos de mas utilidad en el mercado de la programación, y soporta muchas plataformas y sistemas operativos.

Turbo Pascal fue el compilador Pascal dominante para PC durante los años 1980y hasta principios de los años 1990, muy popular debido a sus magníficas extensiones y tiempos de compilación sumamente cortos. Actualmente, versiones viejas de Turbo Pascal (hasta la 7.0) están disponibles para descargarlo gratuito desde el sitio de Borland.

 Delphi es un producto tipo RAD (Rapid Application Development) de Borland. Utiliza el lenguaje de programación Delphi, descendiente de Pascal, para crear aplicaciones para la plataforma Windows. Las últimas versiones soportan compilación en la plataforma .NET.

Kylix es la versión más nueva de Borland reiterando la rama de Pascal de sus productos.
Es descendiente de Delphi, con soporte para el sistema operativo Linux y una librería de objetos mejorada (CLX). El compilador y el IDE están disponibles para uso no comercial.
Actualmente este proyecto está descontinuado.

Lazarus es un clon de Delphi, basado en Free Pascal es software libre.

Midlet Pascal para la plataforma J2ME

PLATAFORMAS DISPONIBLES

*Linux
*Mac OS X
*OS/2
*Win32andWindows CE(Windows 98,Windows ME, Windows NT, Windows 2000,Windows XP, Windows Vista)

CARACTERES VALIDOS

+ . < (
: <= )
* ; > [
/ , <= ]
:= ' <> {
= ^ .. }
Dentro de un programa en Pascal, son válidas las letras desde la A a la Z (incluso en minúsculas), los dígitos del 0 al 9 y algunos símbolos especiales, como bloques de construcción. Los símbolos especiales son:

PALABRAS RESERVADAS


En Pascal hay ciertas palabras reservadas que tienen un significado como ordenes dentro del lenguaje. Son:
AND DO FUNTION NUL PROGRAM TYPE
ARRAY DOWNTO GOTO NOT RECORD UNTIL
BEGIN ELSE IF OF REPEAT VAR
CASE END IN OR SET WHILE
CONST FILE LABEL PACKED THEN WITH
DIV FOR MOD PROCEDURE TO

IDENTIFICADORES


Un procedimiento o un programa. Los identificadores están formados por letras o dígitos en cualquier, excepto que primer carácter indistinguibles
Un identificador puede ser deliberadamente largo pero en algunas versiones de Pascal, sólo reconocen losprimeros ocho caracteres. Igualmente, el uso de identificadores extremadamente largos, resulta impráctico.identificador es un nombre dado a un elemento de programa, ya sea una constante, una variable uneldebe ser siempre una letra. Se permiten tanto letras mayúsculas como minúsculas, que se consideranCase-Sensitive).

VALIDES DE LOS IDENTIFICADORES


Los siguientes nombres son identificadores válidos: inválidos: No se permite iniciar un identificador con un dígito Se trata de una palabra reservadaF DER No se pueden dejar espacios en blanco.
D F15 SUMA CALOR
DIA AREA SUPERFICIE TABLA2
Los siguientes nombres son identificadores

4TO

Array

VARIABLES


Un identificador cuyo valor se permite que cambie durante la ejecución del programa se dice que es una variable  variable establece el hecho de que el identificador es una variable (en lugar de una constante, u otro tipo) y especifica el tipo de la variable. A diferencia de una definición de constante en su declaración no se asocia un dato concreto, por ejemplo, un valor numérico o una constante a la variable.

La forma general de declaración de una variable es:
VAR nombre : tipo  o, en caso de haber más de una variable del mismo tipo,
VAR nombre1, nombre2, nombre3,..., nombren : tipo donde nombre1, nombre2, nombre3, etc., son identificadores que representan nombres de variables individuales y tipo se refiere al tipo de dato de las variables.

Por ejemplo, suponiendo dos variables, fila y columna, cuyos valores serán números enteros, la variable valor,con valores reales, y la variable marca con valor booleano.
VAR fila,columna : integer;
valor : real;
marca : boolean;
Si además, se declara la constante kilouni,

CONST kilouni = 'Kg';
VAR fila,columna : integer;
valor : real;
marca : boolean;
debe ser declarada (definida) individualmente antes de que aparezca en el programa.

SENTENCIAS


Una  acciones. En este lenguaje hay dos tipos de sentencias: Simples y estructuradas. Las sentencias
esencialmente instrucciones únicas e incondicionales que afectan a una de las siguientes tareas:
1.- Asignar un dato a una variable. (Se llama sentencia de
2.- Acceder a un módulo de cálculo autónomo, llamado
3.- Transferir el control del programa incondicionalmente a otra parte del mismo (Sentencia
Las sentencias las palabras claves la sentencia compuesta, pueden ser simples o estructuradas.sentencia es una instrucción o un grupo de instrucciones que hacen que la computadora lleve a cabo ciertassimples sonasignación).procedimiento.goto).estructuradas consiste en una secuencia de dos o más sentencias consecutivas encerradas entreBEGIN y END, y separadas por punto y coma [;].

PROCEDIMIENTOS Y FUNCIONES


Los procedimientos y las funciones son elementos autónomos de programa, a los que a veces se llama módulos y que realizan acciones señaladas. Estos módulos pueden ser invocados desde distintas partes de un programa y pueden recibir en cada invocación distintos datos y por lo tanto, generar cada vez que se los use, distintos resultados.

Los datos que se transfieren a un procedimiento, ya sean constantes o variables, se llaman
transferencia de la lista de parámetros se hace indicando entre paréntesis y separados por coma, inmediatamente después del nombre del procedimiento.

Algunos de los parámetros pueden ser utilizados para representar la nueva información que el procedimientogenere, por lo tanto, los parámetros pueden ser información que se pasa al procedimiento o, información que se pasadesde el procedimiento al programa.

En el lenguaje Pascal, se pueden definir procedimientos propios como así también usar los procedimientos que el lenguaje provee. Aun así, ambos tipos de procedimientos deben ser invocados por una sentencia simple, que consiste en el nombre del procedimiento y la lista de parámetros opcionales.parámetros.

ASIGNACION DE VALORES A VARIABLES


Asignar es dar a una variable un determinado valor. Se puede asignar a una variable una constante o el valor deotra variable. Los tipos de datos que se asignen deben corresponder con el tipo de variable, salvo el caso de los datos enteros que pueden ser asignados a variables reales.
variable:=dato
Ejemplo:
area:=3.14159*SQR(radio);
Suponiendo que  radio=4 la variable area tomará el valor 6.2831
Por otro lado, el (;) que figura al final de la instrucción, es un separador que se usa en todas las sentencias dellenguaje Pascal.

ASIGNACION DE VARIABLES TIPO CHAR


Supongamos que nombre es una variable tipo char Esta instrucción hará que nombre tome el valor de esa cadena.
nombre:='Margarita';

ASIGNACION DE VARIABLES TIPO BOOLENA


Supongamos que hab es una variable tipo boolena y que x e y son dos variables enteras, la sentencia: Esta instrucción hará que hab tome el valor verdadero o falso, según el resultado de esa expresión lógica.
hab:=(x>134) or (y=543);

INCREMENTO DE VARIABLES TIPO INTEGER O REAL


El determinado.
incremento de una variable, es el proceso por el cual, al valor actual de la variable se le suma un valor
Ejemplos:
contar:=contar + 1;
contar:=succ (cuenta);
En este caso, ambas sentencias tienen como resultado que el valor final de la variable anterior de contar es el valorcontar más 1

INGRESO DE DATOS USANDO READ


Esta sentencia se usa para leer datos y asignarlas en una variable o más variables del tipo char, integer o real. La
sintaxis general es:
read (variable1,variable2,variable3,..variableX);
Los nombres de las variables deben separarse por comas y no pueden ingresarse variables tipo boolean.
Suponiendo el siguiente bloque de programa:
VAR fila,columna : integer;
valor : real;
.
.
.
read (fila,columna,valor);
Según ésta sentencia corresponden según se declaró a dos variables enteras (integer) y se leerá un tercer valor que se asignará en la
variable
Los datos numéricos que se ingresen, deben ir separados unos de otros por espacios en blanco o por una
indicación de fin de línea. Los números reales pueden escribirse con o sin exponente. Asimismo, los números reales
que representen cantidades enteras (caso 2.0) pueden ser escritos como enteros (es decir, 2) Cualquier número puede
ir precedido por su signo, ya sea (+) o (-), pero sin un espacio entre el signo y el número.
Los datos tipo significativos. No se deben separar los datos por espacios o indicación de fin de línea, ya que se interpreta como uncarácter más dentro de la cadena.read, se leerán dos valores que se asignarán a las variables fila y columna, quevalor (Según lo declarado, real).char que se ingresen se tratan como una única cadena, por lo que todos los datos son
Ejemplo:
VAR fila,columna : integer;
nombre,apellido : char;
.
.
.
read (fila,columna,nombre,apellido);
Suponiendo que los valores a entrar son:
Variable Valor
Fila 1
Columna 3
Nombre Marcela
Apellido Molina
Los datos pueden ser ingresados de la siguiente manera:
1 3 MarcelaMolina
Si una sentencia va seguida de otra, la segunda sentencia sentencia
sentencia read, comienza donde la primera terminó. Es decir, laread, comenzará leyendo el dato siguiente al último leído por la sentencia read anterior. Una nuevaread no necesariamente tiene por qué comenzar leyendo una nueva línea de datos.
Ejemplo:
VAR fila,columna : integer;
nombre,apellido : char;
.
.
.
read (fila,columna);
read (nombre,apellido);

INGRESO DE DATOS USANDO READLN

La sentencia
sentencia readln, al igual que la sentencia, se utiliza para leer datos externos. La sintaxis es la misma que laread:readln (variable1,variable2,variable3,..variableX);
La diferencia entre ambas, radica en que ésta sentencia hace que la
leyendo una nueva línea de datos, mientras que la sentencia
próxima sentencia read o readln comienceread, permitía que la siguiente sentencia (ya sea read o ) comenzara en la misma línea.
VAR fila,columna,dia,mes : integer;
.
.
.
read (fila,columna);
read (dia,mes);

1 4 13 11
2 5 4 5
Las sentencias reemplazamos esas sentencias read, asiginarian los valores 1 4 13 11 a las variables fila,columna,dia y mes. Siread por readln:
VAR fila,columna,dia,mes : integer;
.
.
.
readln (fila,columna);
readln (dia,mes);
Las sentencias en las variables readln provocarían (suponiendo la misma entrada anterior) que los valores 1 y 4 se asignaranfila y columna pero en las variables dia y mes se asignarían los valores 2 y 5.
Ejemplo:

Suponiendo ésta entrada:

readln
Ejemplo:

ESCRITURA DE DATOS USANDO WRITE


La sentencia

write

Los datos de salida pueden ser cadenas, constantes numéricas o valores de variables o expresiones. Pueden ser datos de cualquier tipo y las cadenas, deben ir encerradas entre apóstrofos. Los datos, si son más de uno, deben estar separados por (,) comas.
write se usa para escribir datos en algún dispositivo de salida. La sintaxis de la sentencia es: datos de salida);
write ('Total=',tot);
De esa manera, suponiendo que la variable  dispositivo de salida lo siguiente:

Total=1.31179E+03

También, si tuviéramos:
tot tiene el valor 1311.79 la sentencia write escribiría en el
write ('Total=',stot+iva);
Hace que el valor de la expresión numérica

stot=3

Total= 4

Los números reales pueden visualizarse de diferentes maneras, aunque el formato por defecto es la notación científica o exponencial, como puede deducirse del primer ejemplo. Los datos booleanos, dependiendo de sus valores, podrán ser representados por los identificadores estándar

La mayoría de las versiones comerciales de Pascal, utilizan un ancho es diferente según el tipo de dato y también según la versión utilizada de Pascal. Los valores más frecuentes
son:

Dato Ancho

Real 14 (7 dígitos a la derecha del punto decimal)
Entero 8
Booleano 6
stot+iva se escriba en el dispositivo de salida. De esa manera, si e iva=1 la sentencia write, producirá: True o False. ancho de campo para representar datos. Este
Si el campo es mayor de lo necesario, el dato es colocado a la derecha, dejando los lugares vacíos, como se vio en el ejemplo anterior. Si tratamos con datos tipo char, el ancho del campo será el mismo que la longitud de la cadena. No habrá en ese caso ningún espacio en blanco, a menos que lo conformen como parte de la cadena.
Ejemplo:
write ('DALE',' UNA',' OPORTUNIDAD',' A',' LA',' PAZ');
Generaría ésta salida:
DALE UNA OPORTUNIDAD A LA PAZ
Nótese que los espacios en blanco que contienen cada una de las cadenas hacen de separadores entre cada una de ellas, si no hubieran espacios vacíos, es decir:
Ejemplo:
write ('DALE','UNA','OPORTUNIDAD','A','LA','PAZ');
Generaría ésta salida:
DALEUNAOPORTUNIDADALAPAZ
Si una sentencia write va seguida de otra, la segunda sentencia comenzará donde termine la primera. Es decir que el primer dato escrito por la segunda sentencia, estará a continuación del último dato escrito por la primer sentencia
Ejemplo:
write, por lo que una sentencia write, no necesariamente genera una nueva línea de salida.
VAR fila,columna : integer;
nombre,apellido : char;
.
.
.
read (fila,columna);
read (nombre,apellido);
.
.
.
write ('Fila=',fila,'Columna',columna);
write ('Nombre:',nombre,'Apellido:',apellido);
Suponiendo que los datos son los mismos que los del ejemplo se obtendría:
Fila= 1Columna= 3Nombre:MarcelaApellido:Molina

Ejemplo:

ESCRITURA DE DATOS USANDO WRITELN

writeln es similar a la sentencia write, con la diferencia que ésta, agrega un carácter de fin de líneawrite o writeln, comenzarán en una nueva línea de salida. La sintaxis
La sentencia al último dato, por lo que una nueva sentencia es:

writeln (
datos de salida);
Ejemplo:
VAR fila,columna : integer;
nombre,apellido : char;
.
.
.
read (fila,columna);
read (nombre,apellido);
.
.
.
writeln ('Fila=',fila,' Columna',columna);
write ('Nombre: ',nombre,' Apellido: ',apellido);
Suponiendo los mismos datos del ejemplo anterior, la salida que se obtendría sería:

Fila= 1 Columna= 3
Nombre: Marcela Apellido: Molina

MODIFICACION DE LOS CAMPOS DE ESCRITURA


La longitud de los campos de escritura de cada tipo de dato pueden ser variados utilizando las sentencias

writeln.
write ('Total=',tot :5);
Suponiendo
tot=-134, obtendríamos:
Total= -134
El espacio en blanco, está comprendido dentro del ancho del campo especificado.
Ejemplo:
write ('Total=',tot :lar+3);
Suponiendo
tot=-134 y lar=3 , obtendríamos:
Total= -134
Nótese que ahora hay dos espacios en blanco y el dato fue desplazado a la derecha. De otra manera, en caso que el ancho de campo no alcance, se agregan los espacios necesarios para que el dato no se corte.
Ejemplo:
write ('Total=',tot :5);
Suponiendo
tot=900134, obtendríamos:
Total= 900134
Ahora, se han añadido 2 espacios al ancho del campo para que el número de 6 dígitos y su signo se escriban correctamente.
Un número de tipo real puede escribirse sin exponente si se incluye un segundo término en el formato. Así, el
formato completo para un número real es (:) dos puntos seguido de un entero que indica el ancho total del campo, seguido por (:) dos puntos y un segundo entero que indica a su vez, la cantidad de lugares a la derecha del punto decimal. La parte decimal, se redondea automáticamente.
Ejemplo:
Suponiendo que
escribirá según la sentencia write usada en cada caso como sigue a continuación:
nodo es una variable real a la que se le ha asignado el número 35200.203, el número se
Sentencia Resultado
writeln ('Nodo=',nodo); Nodo= 3.5200203E+04
writeln ('Nodo=',nodo : 12); Nodo= 3.52002E+04
writeln ('Nodo=',nodo : 18); Nodo= 3.52002030000E+04
writeln ('Nodo=',nodo : 10 : 3); Nodo= 35200.203
writeln ('Nodo=',nodo : 8 : 1); Nodo= 35200.2
write y En general, cada dato puede ir seguido de (:) dos puntos y una cantidad positiva que indique el ancho de campoa usar para ese dato en particular.
Ejemplo:

PSEUDOCODIGO DE PROGRAMA DE PASCAL


Una vez que se ha formulado la estrategia general y se ha escrito el pseudocódigo del programa a desarrollar, se puede pasar a la traducción del mismo a un lenguaje de programación, en este caso, Pascal. En este punto, cada pseudoinstrucción del pseudocódigo, se cambiará por la instrucción equivalente en Pascal. Si el pseudocódigo es lo suficientemente detallado y correcto, el trabajo es mínimo. Sin embargo, cuando se escribe un programa en Pascal hay que mantener presentes el esquema fijo que deberá tener nuestro programa.
En la escritura de las sentencias ejecutables, se permite una gran libertad sintáctica. El único requerimiento fijo es que las sentencias ejecutables deben ir incluidas dentro de una sentencia compuesta general (es decir, BEGIN...END). Así todo programa debe tener una sentencia BEGIN...END. Otras sentencias compuestas pueden incluirse -si se desea- en esta secuencia compuesta general. Cada sentencia compuesta puede incluir una variedad de sentencias o grupos de sentencias ejecutables. También debe prestarse atención a la puntuación, particularmente al
uso del (;) punto y coma.

REGLAS BASICAS

Las reglas básicas se pueden resumir como:
1. El (;) punto y coma se usa como sucesivas, más que como fin de cada sentencia.
2. A BEGIN y END se les aplican reglas especiales. Son dos elementos generalmente llaves que indican el comienzo y el fin de una sentencia compuesta. Por esto BEGIN, no necesita ir seguido de (;) punto y coma, lo mismo que END no necesita ser precedido por (;) punto y coma.
3. Un (;) punto y coma innecesario (por ejemplo, precediendo a una llave END) se interpretaría como una sentencia nula. Generalmente, esto no tendrá efecto apreciable en la ejecución del programa, aunque hay situaciones en las que la lógica del programa puede ser alterada intencionalmente, por lo que deben ser evitados.
4. Todo programa completo debe terminar con un (.) punto. Así, la llave END final debe ir seguida de un punto. separador en Pascal. De aquí que se use entre sentencias y declaraciones

CONSTRUCCION DE UN PROGRAMA DE PASCAL


Retomando el ejemplo del pseudocódigo de la página 2 del apunte anterior
inicio

leer base,altura
sup=(base*altura)/2
imprimir sup
Teniendo en cuenta el tipo de variables a utilizar, todas variables reales, podemos encarar la traducción a Pascal.

PROGRAM TRIANG (input,output);
VAR base,altura,sup:real;
BEGIN
read (base,altura);
sup :=(base * altura)/2;
write('La superficie es=',sup);
END.
Si bien éste programa está completo, no presentará en la práctica algunas características deseables para
cualquier programa. Agreguemos a ese mismo programa, comentarios que den una idea a otro programador que se
encontrara con él para modificarlo. Los comentarios permitirán que se de una idea de que es lo que se está
desarrollando en cada paso. Los comentarios se encierran entre () paréntesis o entre {} llaves, según la versión de
Pascal.
PROGRAM TRIANG (input,output);
{*Calculo de la superficie de un triángulo*}
VAR base,altura,sup:real;
{*Declaración de las variables*}
BEGIN {*Comienzo de las sentencias ejecutables*}
read (base,altura);
{*Leer los valores de base y altura*}
sup :=(base * altura)/2;
{*Multiplicar base por altura y dividir por 2.
asignar ese valor a la variable sup*}
write('La superficie es=',sup);
{*Escribir el valor calculado de la superficie*}
END. {*Fin de las sentencias ejecutables y del programa*}

fin

ESTRUCTURAS DE CONTROL

Estructuras de Control - Iteración


Tal como se explicó anteriormente esta estructura permite condicionar una acción en base a una condición
lógica. La forma simple es:
Decisiones simples (If-Then)
IF


Ejemplos:
expresión lógica THEN sentencia
If a>b then write (a);
If a<b then
BEGIN
Read m,n;
Writeln(m+n);
End;
END.
􀂾


La estructura de control vista en el apunte anterior en la página 5 se puede codificar en Pascal de la siguiente
manera:
Decisiones dobles (If-Then-Else)
IF


El ejemplo 3, de la misma página del apunte anterior, quedaría codificado en Pascal:
expresión lógica THEN sentencia1 ELSE sentencia2
PROGRAM EJEMPLO(INPUT,OUTPUT);
VAR a,b,x:=real
BEGIN
Read (a,b);
if a<b
then x:=a*b
else x:=a+b;
write (x);
END.


La estructura


CASE
selector1: sentencia1;
selector2: sentencia2;
selector3: sentencia3;
selector4: sentencia4;
:
:
:
selectorn: sentencian
END


La expresión puede ser cualquier tipo que no sea real. A menudo, se trata de una sola variable de tipo simple.
Los selectores, representan valores
presentarán valores enteros dentro de un rango determinado. Los selectores pueden o no presentarse en orden, pero
no deben repetirse. Las sentencias pueden ser simples o estructuradas. El uso de sentencias estructuradas es bastante
común. Las sentencias no tienen porque ser únicas (Una misma sentencia se puede usar con dos o más selectores.
Cada sentencia se ejecutará solamente si el selector coincide con la expresión.
El ejemplo de la pagina 7 del apunte anterior, queda codificado:


PROGRAM EJEMPLO2(INPUT,OUTPUT);
VAR nota:integer;
BEGIN
read (nota);
if (nota >= 1) and (nota <= 10) then
Begin
CASE nota OF
1,2,3: write('Aplazado');
4,5: write('Regular');
6,7,8,9,10: write('Aprobado');
end;
end;
END.
Decisiones Múltiples (Case) CASE, vista en la página 7 del apunte anterior, se codifica en pascal en forma general: expresión OF posibles de la expresión. Así si la expresión es de tipo entero, los selectores


La estructura de


WHILE


La parte de la sentencia de la estructura se ejecutará repetidamente en tanto la expresión lógica sea
La sentencia puede ser simple o estructurada, aunque generalmente, es una sentencia compuesta que puede modificar el valor de la expresión lógica.
Lazo condicional (While-Do) While-Do permite un control repetitivo condicional. La forma general de ésta estructura es: expresión lógica DO sentencia cierta.
El ejemplo de la página, queda entonces como:
PROGRAM SUMA_ITERATIVA(INPUT,OUTPUT);
VAR n,cant:integer;
VAR suma,numero:real;
BEGIN
read (n);
cant:=0;
suma:=0;
WHILE cant<n DO
BEGIN
read (numero);
suma:=suma+numero;
cant:=cant+1;
end;
write(suma);
end.


La estructura de
estrutura


REPEAT


Las sentencias se ejecutarán hasta que la expresión lógica sea cierta. Nótese que al menos una vez, las
sentencias se ejecutarán, ya que la estructura chequea la expresión lógica recién al final de la misma.
Otra diferencia entre While-Do y Repeat-Until es que mientras la primera sólo permite una sentencia (Aunque
permite que sea compuesta), la estructura Repeat-Until permite que las sentencias
Begin-End.
Utilizando esta estructura, el ejemplo de la página, queda codificado:


PROGRAM SUMA_ITERATIVA_REP(INPUT,OUTPUT);
VAR n,cant:integer;
VAR suma,numero:real;
BEGIN
read (n);
cant:=0;
suma:=0;
REPEAT
read (numero);
suma:=suma+numero;
cant:=cant+1;
UNTIL CANT=N;
write(suma);
end.
Lazo condicional (Repeat-Until) Repeat-Until permite un control repetitivo condicional similar al proporcionado por laWhile-Do. La forma general de expresar el lazo es: sentencias UNTIL expresión lógica no estén comprendidas entre


La estructura For (
estructura permite que una acción se repita una determinada cantidad de veces. La forma general de la estructura es:


FOR


La sentencia de la estructura puede ser simple o estructurada, aunque generalmente es una sentencia compuesta
que puede incluir estructuras de control. Esta sentencia se ejecutará para cada uno de los valores sucesivos asignados
Estructura repetitiva (For) ver Parte 3 Pag18) se emplea para realizar bucles incondicionales en Pascal. Es decir, esta variable de control := valor1 TO valor2 DO sentencia
a la variable de control. El número de valores asignados a la variable de control determina el número de veces que la
sentencia se ejecutará.
La variable de control debe ser una variable simple de cualquier tipo, menos real. Normalmente, será una
variable entera. Inicialmente, a ésta variable, se le asigna el
el valor siguiente cada vez que el lazo se cierra, hasta que alcanza el
incrementará en 1 cada vez que se complete el bucle, por lo que la sentencia se ejecutara (
1Usando esta estructura, el ejemplo de la página 12 del apunte anterior, queda codificado:


PROGRAM SUMA_ITERATIVA_DESDE(INPUT,OUTPUT);
VAR n,cant:Integer;
VAR suma,numero:Real;
BEGIN
read (n);
suma:=0;
FOR cant:=1 TO N DO
begin
read(numero);
suma:=suma+numero;
end;
write ('La suma de los ',N,' n£meros es ',suma);
end.
valor1. La variable de control toma automáticamentevalor2.Si la variable de control es entera, sevalor2 - valor1 +) veces.
Otra manera de usar ésta estructura permite que el incremento de la variable de control sea negativo. Eso se
logra utilizando -en lugar de TO- la palabra DownTO.
Como resultado, la expresión de la estructura quedaría de la siguiente manera:
FOR


La operación es similar a la anterior, excepto que la variable de control decrementa su valor desde


hasta llegar al
que
cierra un bucle y es de -1.
Si en el ejemplo anterior, modificamos la línea que contiene la sentencia For, el programa funcionaria de la
misma manera, salvo que la variable de control estaría tomando valores en el orden inverso al del caso anterior. Por
lo tanto, en vez de contar desde 1 hasta n, contaría desde n hasta 1, decrementando el valor de n en 1 cada vez que el
bucle se completa.
Debe entenderse que el
Finalmente, una vez que concluye el bucle, la variable de control toma un valor indefinido, que suele ser el
valor final del bucle + 1


PROGRAM SUMA_ITERATIVA_DESDE_DEC(INPUT,OUTPUT);
VAR n,cant:Integer;
VAR suma,numero:Real;
BEGIN
read (n);
suma:=0;
FOR cant:=n DOWNTO 1 DO
begin
read(numero);
suma:=suma+numero;
end;
write ('La suma de los ',N,' n£meros es ',suma);
end.variable de control := valor1 DOWNTO valor2 DO sentencia valor1 valor2. Si ambos valores son iguales, la sentencia se ejecutará sólo una vez; y si valor1 es menorvalor2 la sentencia no se ejecutará nunca. El decremento de la variable de control se hace cada vez que sevalor1 y valor2 se evalúan sólo una vez, antes del primer paso por el bucle.

De lo expuesto referente a estructuras que permitían controlar en lógicamente los algoritmos, se llega a la
codificación en Pascal de esas estructuras.
Las estructuras que fueron tratadas en particular, obtienen una codificación muy similar a lo visto, con lo cual,
no hay demasiada dificultad para obtener códigos en base a esos algoritmos con estructuras de control