sábado, 26 de septiembre de 2009

FUNDAMENTOS DE PROGRAMACION

1. FUNDAMENTOS DE ALGORITMO

La palabra "algoritmo" proviene del gran matemático árabe Mohamed Al Kho Warizmi, quien escribió entre los años 800 y 825 la obra Quitab Al Jabr Al Mugabala, donde se recogía el sistema de numeración hindú y el concepto del cero, alcanzó gran reputación por el enunciado de las reglas paso a paso para sumar, restar, multiplicar y dividir números decimales; la traducción al latín del apellido en la palabra algorismus derivó posteriormente en algoritmo.
Según, Brassard y Bratley(2000), algoritmo, “es sencillamente un conjunto de reglas para efectuar algún cálculo, bien sea a mano o, más frecuentemente, en una máquina”, según Joyanes(2003), “es un método para resolver problemas” y según Torrealba(2004), “Un algoritmo es una descripción de los pasos básicos a seguir para cumplir determinada tarea”,….., “Para que una computadora realice una tarea es necesario definir previamente un algoritmo”.

?Ejercicio: Según los conceptos arriba mencionados, defina con sus propias palabras el concepto de algoritmo


Del estudio anterior de los autores descritos podemos decir, que un algoritmo es un conjunto de pasos precisos, definidos y finitos que conducen a la solución de un problema. Por ejemplo, el desarrollo de las actividades diarias en nuestra vida cotidiana, corresponde a un algoritmo, así como también la realización del cálculo de la ecuación de segundo grado, la emisión de una nómina de pago de empleados, entre otros.


J Ejemplo. Algoritmo para comprar los boleto de entrada al cine.
1. Inicio
2. Seleccionar la película
3. Llegar al lugar de proyección de la película
4. Revisar la cartelera
5. Hacer la cola de pago
6. Esperar el turno
7. Solicitar la película.
Si la hay
8. Entregar el dinero
9. Esperar por los boletos y la diferencia de pago
10. Retirarse
Si no hay la película
11. Escoger otra película o retirarse
12. Fin

?Ampliación. Algoritmo computacional y no computacional.
Toda actividad que realiza el ser humano, responde a un algoritmo, existen dos tipos, los que se realizan para ser ejecutados por una computadora, llamados algoritmos computacionales, y los que son ejecutados por el ser humano, algoritmos no computacionales, como el ejemplo de la compra de boletos del cine.

Cuando un algoritmo deba ser ejecutado por una computadora, se necesita expresar el algoritmo en instrucciones comprensibles por la computadora; para esto último, se utilizan los lenguajes de programación. Al algoritmo expresado en un determinado lenguaje de programación, se le denomina programa. Esto índica que de un determinado problema o situación dada, se elabora un algoritmo con los pasos necesarios para su solución, y si se requiere sea ejecutado por un computador, se traduce el algoritmo a instrucciones editadas en un lenguaje de programación. Veámoslo a través del presente ejemplo: Algoritmo para resolver la sumatoria de dos números.








1.1. PARTES DE UN ALGORITMO

Todo algoritmo debe obedecer a la estructura básica de un sistema, es decir: entrada, proceso y salida.




Donde:
ENTRADA
Corresponde al insumo, a los datos necesarios que requiere el proceso para ofrecer los resultados esperados.

PROCESO
Pasos necesarios para obtener la solución del problema o la situación planteada.

SALIDA
Resultados arrojados por el proceso como solución.


En el ejemplo del algoritmo de la sumatoria de los dos números, tenemos:


ENTRADA
Valores de de las variables A y B.




PROCESO
Asignar a la variable Suma, el valor de A mas el valor de B.




SALIDA
Impresión del valor de la variable Suma, que contiene la sumatoria de los valores de A y B.



1.2. CARACTERÍSTICAS DE LOS ALGORITMOS

Las características fundamentales que debe cumplir un algoritmo son:

PRECISIÓN
Indica el orden de realización de cada paso dentro del proceso.

DEFINICION
Indica la exactitud y consistencia de los pasos descritos en el proceso, si el algoritmo se prueba dos veces, en estas dos pruebas, se debe obtener el mismo resultado.

FINITUD
Indica el número razonable de pasos, los cuales deben conllevar a la finalización del proceso y producir un resultado en un tiempo finito.

Al diseñar un algoritmo se debe tener presente las características de precisión, definición y finitud.

Visualicemos estas características a través del siguiente ejemplo:

Ejemplo: Algoritmo para hacer una torta

Entrada:
Harina de trigo, mantequilla, huevos, sal, azúcar

Proceso:
1.- Unir la mantequilla con el azúcar
2.- Batir hasta lograr consistencia cremosa
3.- Agregar harina de trigo, huevos, sal y azúcar
4.- Batir hasta que esponje
5.- Precalentar el horno, en 250 °, y enmantequillar tortera
6.- Una vez logre la consistencia de esponjado, colocar en la tortera
7.- Introducir en el horno por espacio de 45 minutos

Salida:

Torta




?Ejercicio: Realice un algoritmo para la elaboración de pan


Siguiendo el ejemplo recuerde determinar las instrucciones de Entrada, Proceso y Salida.


Según el ejercicio anterior, se puede determinar que el algoritmo para hacer torta, cumple con las características fundamentales de los algoritmos. Es decir, ¿Es preciso?, ¿Es definido?, ¿Es finito?, razona tus respuestas.

1.3. ELEMENTOS PARA LA CONSTRUCCIÓN DE UN ALGORITMO

Definíamos algoritmo como un conjunto de pasos conducentes a resolver un problema, cada uno de esos pasos, corresponde a lo que se denomina en el programa, una instrucción, aunque pudiera darse que, en una instrucción se junten dos o más pasos. Aprender a realizar un algoritmo se fundamenta en lo que se persigue lograr con su desarrollo; debido a que no existe un método único para resolver problemas se estudian diferentes métodos de resolución o modelos de construcción para lograr la generación del resultado deseado.

Esto nos lleva a reestructurar el concepto de algoritmo, como un conjunto de instrucciones o pasos en los que se describe su inicio, desarrollo o proceso y salida o resultado del algoritmo; elaborados para lograr resolver un problema.

Dado que un algoritmo es un conjunto de instrucciones elaboradas con la finalidad de resolver un problema, a continuación se describen los elementos que se utilizan en la construcción de una instrucción.

Instrucción o sentencia
Dependiendo del origen del material instruccional se habla de instrucción o sentencia; ésta, define una acción o un mandato que se debe realizar, esa acción o mandato se representa a través de un comando o lo que es lo mismo palabras reservadas de un lenguaje de programación en particular. Una instrucción esta compuesta por uno o más comandos (acción), datos, símbolos, variables o constantes y expresiones, que en conjunto representan una instrucción o sentencia.


Ejemplo de instrucción: En la construcción de los programas se estila utilizar una instrucción por línea. Así mismo, se utiliza la identación, que no es más que la alineación de aquellas instrucciones dentro de las estructuras que las contienen de manera ordenada que permita visualizar el inicio y fin de cada bloque de instrucciones.

Si ASISTIO =”SI” Entonces
Leer Sueldo,
Asignar Sueldo = Sueldo + HoraExtra

Fin Si

Donde:

SI


Representa una estructura condicional utilizada para establecer preguntas o programar ciertas condiciones
ASISTIO

Nombre de una Variable lógica que puede obtener sólo dos valores “SI” o “NO”. En el ejemplo se programa la condición de la variables cuando es “SI”

ENTONCES


Parte de la instrucción o estructura condicional

LEER SUELDO

Instrucción utilizando el comando cuya acción es la lectura de un campo o dato

Asignar SUELDO= SUELDO+HORAEXTRA
Instrucción de asignación, permite asignar o calcular el valor que adquirirá una variable


Fin SI


Cierra la estructura condicional Si –Entonces –Fin Si


Comandos o palabras reservadas
Todos los lenguajes, naturales o computacionales, tienen palabras que denotan una acción. Los comandos no son más que acciones que debe interpretar y ejecutar el computador. Cada comando conserva una sintaxis determinada, es decir la forma de utilizarlo. Los lenguajes computacionales tienen en su repertorio comandos dirigidos al procesamiento de archivos y datos, entre ellos: Leer, Calcular, Asignar, Clasificar, Imprimir.


Datos
Los datos son símbolos que se convierten en condiciones, hechos, situaciones o valores. Un dato puede significar un número, una letra, un signo ortográfico o cualquier símbolo que represente una cantidad, una medida, una palabra o una descripción. La importancia de los datos está en su capacidad de asociarse dentro de un contexto para convertirse en información. Es decir, por si mismos los datos no tienen capacidad de comunicar un significado y por tanto no pueden afectar el comportamiento de quien los recibe. Para ser útiles, los datos deben convertirse en información que ofrezca un significado, conocimiento, ideas o conclusiones.

TIPOS DE DATOS
Como se describió anteriormente, un dato es un campo que puede convertirse en información. Existen datos simples (sin estructura) y compuestos (estructurados).

Los datos simples son los siguientes
- Numéricos (Reales, Enteros)
- Lógicos
- Carácter (Char, String) Los tipos de datos simples son:



Tipos de datos






J Ejemplo. Ejemplos de tipos de datos simples

Tipo de datos
Características

Ejemplos
Numéricos Enteros

Los números enteros son los números naturales positivos y negativos que conocemos.
1
2
25
146
-456

Numéricos Reales


Los números reales, son los números que tienen parte decimal.


0.56
1.00
25.13
148.45
-456.23
Lógicos o boléanos

Son aquellos datos cuyos únicos valores sólo pueden ser: Verdadero (V) o Falso (F), puede encontrarse, Verdadero (True) o Falso (False). Se utiliza para representar las opciones (si/no) a determinadas condiciones.
Nacionalidad = “Venezolano” (S/N)?

Carácter o Char

Su valor lo comprenden todos los caracteres alfabéticos, mayúsculas y minúsculas (A – Z), numéricos (0 – 9) y símbolos especiales (#,@,%,&).


Carácter String o cadena

Su valor esta representado por un conjunto de caracteres.

“Abril”
“Reporte Anual de Fallas Técnicas”
“1º de mayo, Día del Trabajador”



? Ejercicio. Identifique en la tabla a continuación los tipos de datos simples (numéricos, lógicos y carácter)

Dato Respuesta
V
3,147114
2005
0,50
-4.25
10.000.000,00
%
3
MIL5008
“Venezuela”
“Estado Bolívar”
F
DXLVII
1038
“VENEZUELA”
CAR/$$22
A
@
SUCRE1826
-39,78


VARIABLES Y CONSTANTES

Son espacios de memoria creados para contener valores que de acuerdo a su naturaleza deseen mantenerse (Constantes) o que puedan variar (Variables).


Constante

Es un dato que permanece con un valor, sin cambios, es decir constante, a lo largo del desarrollo del algoritmo o a lo largo de la ejecución del programa.

Se utiliza cuando necesitamos que el valor de determinada variable se mantenga durante la ejecución del programa o hasta tanto se requiera su cambio.

Variable

Es un dato cuyo valor puede variar a lo largo del desarrollo del algoritmo o en el transcurso de la ejecución del programa.

Una variable descrita o declarada de un tipo determinado, sólo podrá contener, valores de ese tipo.

Una variable declarada numérica entera, no podrá contener números reales.

Se utiliza cuando el dato que contiene sufrirá cambios o variará en la medida que cambien los valores que maneje.



Las variables y constantes tienen básicamente, dos atributos:


Nombre

Se le asigna un nombre, en principio, para determinar que existe la variable. Este nombre debe obedecer a la naturaleza del contenido que se almacenará en ella. Por lo tanto debe orientar en relación a su contenido. Los nombres de las variables en especificaciones generales deben ser de ocho caracteres, no deben iniciarse con números ni símbolos, ni espacios en blanco.

Ejemplo de nombres de variables:

NOMBRE, EDAD, TOTAL, SUELDO, NACIONALIDAD

Ejemplo de nombres para constantes:

ISR=16.5, AÑOFISCAL=2005, PAIS=”VENEZUELA”, PI = 3,1416



Tipo
Es la naturaleza del dato: alfabéticos o caracteres; numéricos: enteros o reales; alfanuméricos y Lógicos.




Siguiendo el ejemplo, se determina la naturaleza de las variables arriba mencionadas.

NOMBRE CHARACTER (30)
EDAD ALFANUMERICO
TOTAL NUMERICO REAL
SUELDO NUMERICO REAL
NACIONALIDAD LÓGICO

Descritos los conceptos de instrucción o sentencia, datos, tipos de datos, constantes y variables como parte de los elementos que intervienen en la construcción del conjunto de instrucciones que contiene un algoritmo, seguidamente estudiaremos las expresiones y operadores: aritméticos, relacionales y lógicos; contadores y acumuladores como elementos que también son utilizados en la conformación de las instrucciones o sentencias. Es decir, una instrucción o sentencia se construye con: comandos (acciones), datos, constantes, variables, contadores, acumuladores y expresiones y operadores aritméticos, relacionales y lógicos.




EXPRESIONES Y OPERADORES
Las expresiones son combinaciones de constantes, variables, símbolos de operación (matemáticos, lógicos y relacionales) y nombres de funciones que se utilizan en el cuerpo del algoritmo. Las expresiones pueden ser simples o compuestas,
Las expresiones simples, son asignaciones directas a una variable o constante de un valor numérico o carácter, véase el siguiente ejemplo:

Ejemplos de expresiones simples
Nombre de la Expresión
Valor asignado
Explicación o análisis
A
= 6
A la variable A se le asigna el valor de 6
B
= “DEFINITIVO”
A la variable B se le asigna por valor “DEFINITIVO”
FECHA
= dd/mm/aa
A la variable FECHA se le asigna una fecha dada.
DÓLAR
=2120
A la constante DÓLAR se le asigna el valor de 2120
PAIS
=”VENEZUELA”
A la constante PAIS se le asigna por valor “VENEZUELA”

Una expresión compuesta es la asignación a una variable o constante que surge de la unión de valores numéricos, operadores aritméticos, de comparación o lógicos. Por ejemplo:
Ejemplos de expresiones compuestas
Nombre de la Expresión
Valor asignado
Explicación o análisis
A
= 6 * 2
A la variable A se le asigna el valor 12, que resulta de multiplicar 6 por 2.
C
= A + B
A la variable C se le asigna el valor de sumar A + B
EDAD
= AÑOACTUAL - AÑONAC
La variable EDAD obtendrá el resultado de restarle a la constante AÑOACTUAL el valor de la variable AÑONAC
SUELDO
= DIASTRAB * SDIARIO
La variable SUELDO tomará el valor de multiplicar los días trabajados contenidos en la variable DIASTRAB por el valor de salario diario contenido en SDIARIO.

?Ampliación. Las asignaciones se utilizan cuando:
a) Se requiere que una variable contenga un valor específico
Dólar = 4.30
b) Se requiere asignar a una variable el valor de otra variable
Antes= 10
Ahora = Antes

c) Obtenemos el resultado de una expresión
Salario = Sueldo_Diario * Numero_Dias
La forma de escribir una asignación, es:
A = 20
Donde la variable que esta a la izquierda toma el valor que se le asigna.
Esto también indica que pierde el valor que hasta ahora tenía.

Expresiones Aritméticas

Son utilizadas para construir formulas matemáticas. Las variables y constantes utilizadas son de naturaleza numérica, es decir números enteros o reales, y las operaciones a efectuar son de orden aritmético.


Operadores aritméticos

Operadores
Significado
Ejemplo
Interpretación
+
Sumar
Si A =10 y B = 13
A + B
El Resultado es: 23
23
-
Restar
A - B
- 3
*
Multiplicar
A * B
130
**
Exponenciación
A ** B
100.000.000.000.000
/
División
A / B
0,76

A los operadores aritméticos podemos darles características de autoincremento (++) y autodecremento (--). El operador de incremento o decremento puede ir delante o detrás de la variable, teniendo diferente significado. Si el operador ++ se coloca después de la variable se denomina postincremento, haciendo que primero se tome el valor y después se incremente la variable.

Ejemplo: NT=T2++, donde NT toma el valor de T2 y luego se incrementa. Cuando el operador ++ se sitúa después de la variable, sucede lo contrario, primero se incremente la variable y después se toma el valor, y se denomina preincremento.
Ejemplo: NT = ++T2, donde NT primero se incrementa y luego se asigna a NT.
Existe el operador de predecremento y postdecremento, el cual actúa de forma análoga.
Por ejemplo, supongamos que en una empresa requieren diseñar un programa de incentivo a los jóvenes empleados, entre los que se encuentran los aprendices que tienen una edad por debajo de los 18 años y los empleados que tienen 18 y más años; de acuerdo a su edad se les brinda la oportunidad de un bono, para los empleados fijos equivale al 50 % de su salario y para los aprendices el 40 %. El algoritmo se desarrolla realizando la lectura de los datos hasta que sea fin de archivo, calcular el incentivo correspondiente e imprimir cédula, nombre, sueldo anterior, incentivo y sueldo nuevo.

J Ejemplo. Cálculo de bonificación.
Inicio

Declaración de variables

Leer Datos hasta fin_ archivo Cédula, Nombre, Edad

Si Edad >= 18
INCENTIVO = SUELDO * 0,50

De lo contrario
INCENTIVO = SUELDO * 0,40

Fin si

MONTOTOTAL = SUELDO + INCENTIVO
IMPRIMIR RESULTADOS

Fin
Inicio

Declaración de variables que se requieren

Lectura de los datos de entrada

Evalúa el tipo de empleado, Si ya cumplió 18 años, pertenece a los empleados fijos, y se calcula el monto del incentivo en base al 50%. De ser ese el caso, se ejecutan las dos instrucciones que se encuentran dentro del primer bloque.

De lo contrario, no se cumple la condición anterior, se trata de un aprendiz. Se calcula lo previsto para estos (40%).
Se cierra la estructura
Se calcula el monto total y se imprimen los resultados es decir cédula, nombre, sueldo anterior, incentivo, sueldo nuevo.
Fin del algoritmo




En este algoritmo se utiliza la denominada estructura de control selectivas: Si(If), Entonces(Then), Si no(Else). Esta estructura responde a la necesidad de contar con una instrucción que permita evaluar dada una condición, se realice una serie de actividades, de no cumplirse, es decir, de lo contrario (Else), se desarrollarán otra serie de actividades. Este proceso deberá incluirse dentro de un ciclo de repetición para que se ejecute tantas veces como registros de empleados tenga. Estas estructuras se explicarán mas adelante.

Expresiones Relacionales

Se construyen a partir de los operadores relacionales (de relación o comparación, = , > , < , >=, <=, <>. Los operadores relacionales sirven para expresar las condiciones en los algoritmos. Las variables y constantes utilizadas son de distinta naturaleza, el resultado de una expresión lógica y relacional es de tipo lógico. El conjunto de operaciones relacionales se muestran en la siguiente tabla

Operadores de relación
Se utilizan para expresar condiciones y describen una relación entre 2 variables.
Operadores
Significado
Ejemplo
Interpretación
>
Mayor que
Si A =10 y B = 13
A > B
El Resultado es:
FALSO
<>=
Mayor igual
A> = B
FALSO
<= Menor igual A <= B VERDADERO = Igual A = B FALSO <>
Diferente
A <> B
VERDADERO
Expresiones Lógicas
Las expresiones lógicas se utilizan en los programas cuando se requiere conocer o evaluar si los valores de variables o constantes determinadas cumplen con ciertas condiciones. De cumplirse o no, permiten un conjunto de instrucciones que pueden o no ejecutarse. Una expresión lógica puede ser verdadera o falsa.
Ejemplo de expresión lógica.
Parte del Algoritmo diseñado para preseleccionar a posibles candidatos presidenciales, tomando como requisito de selección sólo aquellos que, simultáneamente, sean venezolanos y mayores de treinta años.
Una expresión lógica “Y” (AND) es verdadera, si y sólo sí, se cumplen las dos condiciones simples. Como se describe más adelante.

Lectura de datos
Si Nacionalidad = “V” y Edad > 30 Entonces
Status = “Aspirante”
Grabar en archivo de Aspirantes
Fin Si

?Ampliación.
Expresiones lógicas, son expresiones que sólo pueden tomar uno de dos valores posibles: Verdadero o Falso. Estas expresiones se forman combinando constantes lógicas, variables lógicas y otras expresiones utilizando los operadores “Y” (AND), “O” (OR) y “NO” (NOT). El resultado de una expresión lógica es también un valor de tipo lógico: verdadero o falso.

EVALUACIÓN DE EXPRESIONES
Cuando en una expresión concurre más de una operación, los paréntesis indicarán prioridad, es decir, la operación encerrada entre paréntesis se realizará en primer lugar. Asimismo, algunos operadores tendrán prioridad sobre otros.
Las operaciones aritméticas son efectuadas en el siguiente orden:
1. Menos unario o negación
2. Exponenciación
3. Multiplicación, división y división entera
4. Suma y resta
?Ampliación.
En la expresión:
a + b / c,

Primero se realiza b/c, y luego al resultado de esto, se le sumará el valor de a
Si se requiere que se sume a + b y el resultado dividirlo entre c,
se deberá escribir la fórmula, como sigue:
(a + b) / c,
En una expresión donde los operadores tienen la misma prioridad, la operación se hará de izquierda a derecha.
Si la operación tiene exponenciales el orden será de derecha a izquierda



¿Qué es un contador?, ¿Qué es un acumulador?
Antes de iniciar con los tipos de representación de un algoritmo y de las estructuras básicas utilizadas en el diseño de instrucciones, se requiere conocer ¿Qué es un contador? y ¿Qué es un acumulador? Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante, cada vez que se produce un determinado suceso, acción o iteración. Los contadores se utilizan con la finalidad de contar sucesos, acciones o iteraciones internas en un bucle, proceso, subrutina o donde se requiera cuantificar; deben ser inicializados antes del ciclo o proceso, e incrementados o decrementados dentro del ciclo. La inicialización consiste en asignarle al contador un valor inicial, es decir el número desde el cual necesitamos se inicie el conteo.
En conclusión un contador representa: ¿Cuántas veces se realiza el proceso como tal?, ¿Cuántas veces sucede la aparición de un dato o un evento?, cuantifica tratamientos determinados de información. En su conformación se utiliza, por lo general, una constante como incremento.
?Ampliación.
Para incluir un contador en un proceso deberá seguirse los siguientes pasos:
Inicializar antes del ciclo
Incrementar dentro del ciclo
Si se requiere puede imprimirse el valor con el cual finaliza el contador.
Un contador se construye colocando el nombre del contador = nombre del contador + el valor del incremento.
Se lee de la siguiente manera: A la variable Cuentaprimo (el contador en este caso) se le asigna el valor que trae y se incrementa en uno, en la primera iteración o lectura de datos, el valor que trae, es 0, al ejecutarse la instrucción del contador se incrementa en uno, y así sucesivamente hasta que se finalice el ciclo. Este contador se incrementará cada vez que la formula determine que el número en proceso es primo.
Ejemplo: Se requiere obtener cuantos números primos existen del número 1 hasta el 100.
Inicio
Cuentaprimo= 0
Numero = 1

Leer Numero

Mientras Número <= 100 Aplicar fórmula primo Si es primo Entonces Cuentaprimo = Cuentaprimo + 1 Imprimir Número Fin Si Numero = Numero + 1 Fin Mientras Imprimir Cuentaprimo Fin Un acumulador es una variable que como su nombre lo indica, suma sobre sí misma un conjunto de valores, al finalizar con el ciclo contendrá, en una sola variable, la sumatoria de todos los valores, que cumplen una determinada condición,. La diferencia entre un contador y un acumulador es que mientras el primero va aumentando en una cantidad fija preestablecida, el acumulador va aumentando en una cantidad o valor variable. Representación: = + .
?Ampliación.
Para incluir un acumulador en un proceso se deben seguir los siguientes pasos:
Inicializar antes del ciclo
Incrementar dentro del ciclo
Por lo general se requiere la impresión de su valor.
Un acumulador se construye colocando el nombre del acumulador = nombre del acumulador + el valor variable. Ej: Sumaprimo
Se lee de la siguiente manera: A la variable Sumaprimo se le asigna el valor que trae, que en su inicio es cero, más el valor que contiene la variable Número. De esta manera Sumaprimo contiene el valor del primer número. Cuando ocurre el encuentro del siguiente número primo y deba incrementarse el acumulador Sumaprimo, la instrucción dice que Sumaprimo, es igual al valor que trae o tiene actualmente, que en esta segunda iteración corresponde al primer número primo, más el valor del siguiente número primo encontrado, este proceso se realizará cada vez que se encuentre un número primo, acumulando la sumatoria de todos los números primos hasta llegar al número 100.
Ejemplo: Se requiere obtener cuantos números primos existen del 1 hasta el 100, pero además se requiere su sumatoria.
Inicio
Cuentaprimo= 0, Sumaprimo = 0
Numero = 1

Leer Numero

Mientras Número <= 100 Aplicar fórmula primo Si es primo Entonces Cuentaprimo = Cuentaprimo + 1 Sumaprimo = Sumaprimo + Número Fin Si Imprimir Numero Numero = Numero + 1 Fin Mientras Imprimir Cuentaprimo, Sumaprimo Fin ? Ejercicios. Utilizando las expresiones numéricas, relacionales y lógicas, contadores y acumuladores escribe el conjunto de instrucciones que son necesarias para las situaciones dadas: a) De un archivo de datos cuantificar los hombres y mujeres, según los siguientes datos de entrada. CI, Nombre, Sexo b) Calcular la sumatoria de los múltiplos de 5 hasta el 1000. c) De un archivo de datos sólo se seleccionen: Menores de edad (<18),>= 18 puntos), Altos (1.70 cm), Deportistas (Si). Los nombre de las variables son: CI, Nombre, Sexo, Promedio-calificaciones, Edad, Estatura, Deportista, Nacionalidad.

2. FORMAS DE REPRESENTAR UN ALGORITMO
Un algoritmo se puede representar por medio de dos formas, a través de Pseudocódigo o de Diagramas de Flujo. Para la presentación de los algoritmos que hasta ahora se han utilizado en el texto se han representado a través de pseudocódigos.
2.1 Pseudocódigo, significa escribir las instrucciones del algoritmo en lenguaje natural, tal y como lo expresamos de manera cotidiana, este procedimiento facilita su escritura en los lenguajes de programación. Según Joyanes (2003): “El pseudocódigo es un lenguaje de especificación (descripción) de algoritmos”, pág 68.
?Ampliación.
Ejemplo:
Algoritmo diseñado para el cálculo de la hipotenusa de un triángulo, utilizando pseudocódigo,
Nota: Como se observa se utiliza el método Entrada-Proceso-Salida
La escritura del algoritmo consta de:
-Identificación o cabecera
-Declaración de variables
-Cuerpo o sección de acciones


Inicio
Declaración de variables
Lectura de los datos A, B y C
Aplicar formula
Imprimir resultado
Fin

2.2. Diagramas de flujo o flujogramas: son representaciones gráficas de los pasos necesarios que conllevan a la solución algorítmica de un problema. Para diseñarlos se utilizan determinados símbolos o figuras que representan una acción dentro del procedimiento. Estos símbolos se han normalizado o estandarizado para representar los pasos del algoritmo. Cada paso se representa a través del símbolo adecuado, que se van uniendo con flechas, denominadas líneas de flujo, que a su vez indican el orden en que los pasos deben ser ejecutados.
?Ampliación.
Ejemplo:
Algoritmo diseñado para el cálculo de la hipotenusa de un triangulo utilizando la técnica del diagrama de flujo





Inicio
A, B, C
Aplicar formula
Resultado
Fin

Para su elaboración se deben seguir ciertas reglas:
1. Se escribe de arriba hacia abajo y de izquierda a derecha.
2. Siempre se usan flechas verticales u horizontales, jamás curvas, se debe evitar el cruce de flujos.
3. Cada paso expresa una acción concreta.
Para su secuencia de flujo normal se debe cumplir con:
1. Un inicio
2. Una lectura o entrada de datos
3. Procesamiento de datos
4. Una salida de información
5. Un final
Simbología para diseñar flujogramas.
Salida a pantalla
Inicio/Fin

Proceso

Dirección del
flujo de datos
Decisión
Conector
Salida por Impresor
Conector
Fuera de página


Ventajas de usar flujogramas
1. Rápida comprensión de las relaciones.
2. Análisis de las diferentes secciones del programa
3. Pueden usarse como modelos de trabajo en el diseño de nuevos programas o sistemas.
4. Enriquece la comunicación con el usuario.
5. Permite la documentación adecuada de los programas.
6. Mejor codificación de los programas.
7. Depuración y pruebas ordenadas de programas


Desventajas de los flujogramas
Cuando estamos en presencia de diagramas complejos y detallados pueden resultar laboriosos en su planteamiento y diseño.
Las acciones a seguir tras la salida de un símbolo de decisión, pueden ser difíciles de seguir si existen más caminos de los contemplados.
No existen normas fijas para su elaboración, por lo tanto incluir todos los detalles que se deseen considerar queda a criterio del diseñador. Su diseño al igual que el algoritmo en pseudocodificación debe estar centrado en el cumplimiento de los pasos necesarios para obtener el resultado que se quiere.
?Ampliación. Representación en Diagrama Nassi Schneiderman
Esta forma de representar un Algoritmo se caracteriza por representar los pasos como cajas, es simple, siempre y cuando ya se tenga la experiencia del desarrollo de algoritmos.
Joyanes (2003): “Es como un diagrama de flujo en el que se omiten las flechas de unión y las cajas son contiguas.”, pág 69.





2.3. Traza de un algoritmo
Llamada también “corrida” o simplemente probar un algoritmo en papel, significa razonar cómo lo haría un computador, ejecutando cado uno de los pasos o instrucciones, asignándole valores a las variables, registrar el comportamiento de los valores y comprobar que efectivamente cumple el tratamiento o proceso al cual se someten los datos según el objetivo del algoritmo.


3. ESTRUCTURAS BASICAS O DE CONTROL UTILIZADAS EN EL DISEÑO DE INSTRUCCIONES
En la elaboración de algoritmos nos vamos a encontrar con estructuras básicas o de control ya prediseñadas para el tratamiento de información, estas estructuras básicas traducen acciones que se realizan de acuerdo al requerimiento o al proceso necesario al cual deba someterse la información. Estas estructuras son:
a) Secuenciales: cuando se requiere que una instrucción siga después de otra.
b) Selección o decisión: se utiliza cuando se requiere tomar decisiones lógicas, la ejecución de las instrucciones dependerá de que se cumplan o no, una o varias condiciones.
c) Repetición o Iteración: se utiliza cuando un proceso debe repetirse un número determinado o no de veces, una vez se haya establecido cierta condición para finalizar el proceso de repetición.
Asimismo dentro de las estructuras básicas existen acciones o procesos a los cuales son sometidos los datos, entre ellos, tenemos:
a. Asignación
b. Condicionado (a través de las expresiones lógicas)
c. Alternativas (estructura condicional)
d. Iterativas
e. De entrada y salida
3.1. Estructuras Secuenciales.
En esta estructura una acción o instrucción se ejecuta detrás de otra en orden y secuencia. Las tareas se realizan de tal manera que debe cumplirse en estricto orden secuencial, porque la salida de una, es la entrada de la siguiente y así sucesivamente hasta el fin del proceso.

ESTRUCTURA SECUENCIAL


Contiene operaciones de:
ASIGNACIÓN
CÁLCULO
SUMARIZACIÓN


Posee una entrada y una salida, la representación de una estructura secuencial en Pseudocódigo, se realiza, de la siguiente manera:

Entrada
Instrucciones de declaración inicialización de variables (Asignación) y de lectura de los datos de entrada
Proceso
Instrucciones de Cálculo / Sumarización Asignación

Salida
Instrucciones de totalización e Impresión


Esta estructura obedece a operaciones dadas en el siguiente orden:
a) Inicio
b) Definición e Inicialización de variables
c) Lectura de Datos
d) Operaciones de asignación
e) Cálculo
f) Sumarización o totalización
g) Fin

Sigamos con el ejemplo de realizar la suma de dos números:

Entrada
SUMA = 0, A = 0, B = O
Leer A y B
Proceso (Asignar a SUMA el valor de A más el valor de B)
SUMA = A + B

Salida
Imprimir valor de SUMA



Decisiones en secuencia

Se utiliza cuando se deben realizar preguntas sin que se tome en cuenta lo contrario a la condición, es decir las demás condiciones no son importantes para el objetivo de la decisión.


Ejemplo: Realizar un algoritmo que permita seleccionar sólo aquellas participantes del concurso Miss Venezuela que cumplan ciertas condiciones en una primera ronda de selección.




Estructura

“Sólo si cumplen estas cuatro primeras condiciones pasaran a la segunda ronda”.
Si Condición 1 se cumple Entonces
Instrucciones a ejecutar en caso de que la condición1 sea verdadera
Si Rostro = “HERMOSO” Entonces
Sumar 1 a Puntaje
Si Condición 2 se cumple Entonces
Instrucciones a ejecutar en caso de que la condición2 sea verdadera
Si Estatura >= 1.80 Entonces
Sumar 1 a Puntaje
Si Condición 3 se cumple Entonces
Instrucciones a ejecutar en caso de que la condición3 sea verdadera
Si Medidas = “90-60-90” Entonces
Sumar 1 a Puntaje
Si Condición 4 se cumple Entonces
Instrucciones a ejecutar en caso de que la condición4 sea verdadera
Fin Si
Fin Si
Fin Si
Fin Si
Si EstudiosUniversitarios = “SI” Entonces
Sumar 1 a Puntaje
Fin Si
Fin Si
Fin Si
Fin Si
Imprimir resultados
Fin

Imprimir sólo las que Puntaje = 4
Fin


La estructura secuencial es útil para aquellos procesos en los que se requiere que se cumplan con estricto orden un número determinado de instrucciones, siempre y cuando se cumpla la anterior, por lo general, la primera decisión corresponde al aspecto más determinante o general. En el caso de las postuladas la más general o determinante debería ser, la nacionalidad, si la participante es venezolana, entra a la primera selección, de lo contrario, no entra al concurso.




3.2. Estructura de selección o decisión.

Un algoritmo se realiza para resolver un problema. Por ello, al elaborar la solución de un problema se trazan ciertas condiciones. Estas condiciones se describen a través de una estructura selectiva, también llamada de decisión o condición. Una estructura selectiva esta compuesta por una expresión lógica, si al evaluar esta expresión lógica, el resultado es “Verdadero”, es decir se cumple la condición, se realizará una secuencia de instrucciones; pero si el resultado es falso, se ejecutará otra secuencia de instrucciones.

Las estructuras selectivas, de decisión o condicionales, pueden ser: Simples, Dobles y Anidadas o Múltiples.
Estructura condicional simple (Si-Entonces / If-Then)
La estructura condicional simple, Si-Entonces (o IF-THEN, en inglés), permite evaluar una condición determinada y si se cumple la condición ejecuta una o varias instrucciones.
Si la condición es falsa, entonces no se realizará ninguna acción.
Pseudocódigo en Español
Pseudocódigo en Inglés

Diagrama N-S



Si Entonces

Fin_si

If then

end_if




ESTRUCTURAS DE DECISIÓN
Se utiliza cuando se requiere tomar decisiones lógicas

Pueden ser de instrucciones:
SIMPLES
DOBLES
COMPUESTAS
MULTIPLES (Case)
La estructura simple obedece a evaluar una condición, si se cumple se realizará una o un conjunto de instrucciones, y finalizará la ejecución del programa.
If Then
Endif



Ejemplo: De acuerdo al ejercicio de la asignación del bono a empleados y aprendices, utilizando la estructura simple, tenemos:
Bono: 0
Si Edad >= 18 Entonces
(Calcular Bono de empleado)
Bono = Salario * 0.50
Fin_si
Total Salario = Salario + Bono


Condición?
Acción
Falso
Verdadero

Si la instrucción se diseña sólo para evaluar la condición de verdadero cuando se cumpla que el empleado es “fijo”, se estaría realizando el cálculo sólo para el personal fijo, si se requiere realizar el cálculo incluyendo a los aprendices se debe utilizar la estructura doble.


Estructura condicional doble o Alternativa (Si-Entonces-Si no / If-Then-Else)
La estructura condicional simple es limitada porque permite la evaluación de una sola condición a la vez, la estructura condicional doble o alternativa permite evaluar una condición, la cual puede tener dos acciones, cuando se cumple, y cuando no se cumple. Si se cumple, se realizará una o un conjunto de instrucciones A, si no se cumple, se realizará una o un conjunto de instrucciones B.



ESTRUCTURA CONDICIONAL DOBLE O ALTERNATIVA
Esta estructura obedece a evaluar una condición y en función del resultado, se realiza un conjunto de instrucciones u otras.
(Pseudocódigo Inglés)
If Condición Then

Else

Endif
Nota: En la data sólo están registrados empleados y aprendices

Su Diagrama de Flujo se representaría de la forma siguiente:


Ejemplo: De acuerdo al ejercicio de la asignación del bono a empleados y aprendices, tenemos:
(Pseudocódigo Español)
Si Edad >= 18 Entonces
(Calcular Bono de empleado)
Bono = Salario * 0.50
Si no
(Calcular Bono de aprendiz)
Bono = Salario * 0.40
Fin_si
Total Salario = Salario + Bono

Edad>=18
NO SI
Bono Aprendiz
Bono Empleado



Condiciones compuestas
Las estructuras de condiciones compuestas, algunos autores las refieren como dobles, permiten diseñar las instrucciones utilizando dos y más estructuras simples unidas por los conectores lógicos “Y” (AND), “O” (OR) y “NO” (NOT).
Ejemplo de Condiciones Compuestas o Dobles, utilizando la unión de dos expresiones simples a través de los conectores lógicos: “Y” (And), “O” (OR) y “NO” (NOT).
A. Se requiere determinar el número de empleados de sexo femenino mayores de 40 años.
(Pseudocódigo Inglés)
If Sexo =”F” And Edad >=40 Then

End If


(Pseudocódigo Español)
Si Sexo= “F” y Edad >= 40 Entonces

Fin Si

B. Se requiere escribir las instrucciones que permitan elegir profesionales del área de sistemas.
IF PROFESION = “Ingeniero en Sistemas” OR PROFESION=”Licenciado en Computación” Then
Imprimir Datos
Incrementar contador
End If



Si PROFESION = “Ingeniero en Sistemas” O PROFESION=”Licenciado en Computación” Entonces
Imprimir Datos
Incrementar contador
Fin Si
C. Se requiere seleccionar sólo las personas que no estén casadas.
CASADO = “SI”
IF NOT CASADO Then
Imprimir datos
End If

CASADO = “SI”
Si NOT CASADO Entonces
Imprimir datos
Fin Si
El uso y significado de los operadores lógicos “Y” (And), “0” (Or), “No” (Not) los describiremos a través de tablas de la verdad:
Tabla de verdad de “Y” (And)
Valor de X
Valor de X
X And Y
Falso
Falso
Falso
Falso
Verdadero
Falso
Verdadero
Falso
Falso
Verdadero
Verdadero
Verdadero
Tabla de verdad de “O” (OR)
Valor de X
Valor de X
X OR Y
Falso
Falso
Falso
Falso
Verdadero
Verdadero
Verdadero
Falso
Verdadero
Verdadero
Verdadero
Verdadero
Tabla de verdad de NOT
X
NOT X
Falso
Verdadero
Verdadero
Falso

Al evaluar la tabla de la verdad, para el conector And, en la elaboración de una instrucción en la cual deben cumplirse dos condiciones mínimas, como por ejemplo, en el caso del Miss Venezuela, se exige que la participante sea venezolana y mayor de edad como requisitos de inscripción, suponiendo sea el caso de manera estricta, la instrucción sería:

If Nacionalidad = ”Venezolana” And Edad>=18 Then
Inscribir
End If

El conector And se utiliza cuando se requiere que se cumplan las dos expresiones simples que se establecen.
Por lo tanto en las opciones, donde:

Es extranjera y menor de edad à es decir: falso y falso, el resultado será falso
Es extranjera y mayor de edad à es decir: falso y verdadero, el resultado será falso
Es venezolana y menor de edad àes decir: verdadero y falso, el resultado es falso
Es venezolana y mayor de edad àes decir: verdadero y verdadero, el resultado es verdadero


? Ejercicios. Construye un ejemplo para los conectores “O” (OR) y “NO” (NOT), según las situaciones dadas:
a) De un archivo de datos se requiere seleccionar sólo empresas que se encuentren ubicadas en los estados Trujillo y Mérida.

b) De un archivo de datos seleccionar mobiliario que no sea amarillo.



Ejemplo: Leer tres números e imprimir el más grande de ellos
Utilicemos el pensamiento sistémico para resolver el problema:
1. ¿Cuál es el resultado que se desea obtener?
2. ¿Cuáles deberían ser los datos de entrada?
3. ¿Cuál es el proceso al que debe someter los datos?
4. ¿Qué resultado se espera obtener?
Algoritmo

Inicio

Entrada:

Proceso

Se determina el mayor valor


Salida

Se imprime al valor más grande

Fin
Respondiendo a las preguntas que se encuentran a la derecha, tenemos:
1. El mayor de tres números distintos dados
2. Los tres números: A, B y C
3. Comparación
4. El mayor de los tres números

Inicio

Leer A, B, C

If A > B And A > C Then
MAX = A
End If


If B > A And B > C Then
MAX = B
End If


If C > A And C > B Then
MAX = C
End If

Imprimir “El valor más grande es: “, MAX

Fin



?Ampliación.
La unidad aritmética y lógica, uno de los componentes de una computadora, se encarga del manejo de las operaciones aritméticas y a la porción lógica de la computadora le corresponde procesar la capacidad de tomar decisiones. La estructura de construcción algorítmica if-then-else (si-entonces-de lo contrario) permitirá la selección de acciones alternativas permitiendo realizar procesos lógicos.





3.3. Estructuras de Repetición o Iteración.

Esta estructura se utiliza cuando se debe ejecutar un conjunto de instrucciones un número repetido de veces. Al conjunto de instrucciones que se ejecutan repetidamente, un número de veces, se le llama también ciclo, bucle o lazo. El número de veces que se ejecuta se denomina Iteraciones; por consiguiente, una iteración, es una de las veces en las cuales se efectúan todas las instrucciones contenidas en el ciclo.
Pasos de una estructura anidada o cíclica:
1. Entrada de datos e instrucciones previas2. Lazo o bucle3. Instrucciones finales o resto del proceso4. Salida de resultado
Las repeticiones deben ser finitas, no obstante puede ser que en momentos determinados no nos demos cuenta y construimos un ciclo o bucle infinito, esto lo explicaremos más adelante, en principio estudiaremos los ciclos finitos:







Estructura de ciclos finitos:

Se requiere calcular bono vacacional para todos los empleados, de acuerdo a su salario. La empresa tiene un total de 75 empleados.
Desde su inicio se define el número de iteraciones o se crea la condición necesaria para darle fin al ciclo.
Inicio
NoEmpleados= 0

Si NoEmpleados <76 noempleados="0" noempleados =" NoEmpleados" semana =" “Lunes”" semana =" “Martes”" semana =" “Miércoles”" semana =" “Jueves”" semana =" “Viernes”" semana =" “Sábado”" semana =" “Domingo”" existendatos =" “Si”" existendatos =" “Si”"> 0


Wend
Mientras Número <> 0


Fin Mientras
Mientras el número que se ingrese sea distinto de cero, se realizará el conjunto de instrucciones que contiene la estructura Mientras. El ciclo culmina al introducir un 0.

?Ampliación.
La estructura repetitiva Mientras se realizará si y sólo si se cumple la condición evaluada, de lo contrario el programa no entra en el ciclo, y continua en la siguiente instrucción fuera del bucle. La condición evaluada debe programarse efectivamente fuera del ciclo, si se requiere realizar el bloque de instrucciones y luego cambiar su condición dentro del bucle, cuando sea necesario finalizar el proceso, de lo contrario se estaría programando un ciclo infinito.


ESTRUCTURA WHILE
(Inglés)


(Español)


(Diagrama de Flujo)

While do

Acciones
Wend



Ejemplo: Realizar un algoritmo que sume los primeros números hasta encontrar un número negativo.

Mientras hacer

Acciones
Fin Mientras

Inicio

Contador = 0
Suma = 0

Leer (Número)

Mientras Número > 0 hacer

Contador = Contador + 1
Suma = Suma + Número
Leer (Número)

Fin_Mientras

Escribir
'El número de enteros positivos es :” Contador

“La sumatoria es: ”
Suma

Fin



Diagrama N-S







? Ejercicios. Construya utilizando la estructura Mientras (While) el segmento del algoritmo que permita resolver situaciones dadas:
a) Se requiere realizar sumatoria de números pares positivos hasta llegar a 1000.

b) De un archivo de datos realizar distintos procesos hasta que no existan más datos.




Estructura “Repetir” (REPEAT)
Esta estructura permite realizar una o mas instrucciones, un número de veces hasta que se cumpla con una condición programada para que finalice el ciclo; es decir, hasta que el resultado de la expresión lógica evaluada sea “Verdadero”. Utilizar esta estructura permite que el ciclo se realice al menos una vez, debido a que la expresión lógica que debe evaluar su finalización se encuentra después del conjunto de instrucciones que contiene el ciclo.

ESTRUCTURA REPETIR (REPEAT)

(Inglés)
Repeat



To expresión lógica


(Español)
Repetir

Hasta expresión lógica
(Diagrama de Flujo)

Hasta expresión lógica

Repetir
Instrucciones



La palabra “Repetir” indica el inicio de la secuencia de acciones que se repetirán, con la “expresión lógica; indica, el fin del ciclo y hasta cuando se repetirá la secuencia.

?Ampliación.
La diferencia entre la estructura repetitiva Mientras y la estructura Repeat es que la estructura Mientras termina cuando la condición se hace falsa, por el contrario la estructura Repeat finaliza cuando la condición es verdadera. La estructura Mientras puede ser que no se ejecute, pero la estructura Repeat se realiza al menos una vez.



Estructura “Para” (FOR)
Al diseñar algoritmos se presentan oportunidades donde es necesario repetir un conjunto de instrucciones un número predeterminado de veces, para esto se utiliza la estructura Para (For), donde la secuencia se repite bajo el control de un elemento variable que se incrementará o disminuirá cada vez que se ejecute el ciclo completo.

ESTRUCTURA PARA (FOR)

Representaciones Gráficas
(Inglés)
For variable_contador = inic inc fin

instrucciones

End

For i = 1 to 20



End


(Español)
Para := valor inicial hasta valor final hacer

FinPara

Cuenta=1
Para Cuenta =1 hasta 20 hacer

Fin Para







? Ejercicios.

a. Realice la traza del algoritmo siguiente. Determine su resultado según los datos proporcionados y escriba su enunciado.

Pseudocódigo

Corrida de datos

1. Inicio

2. Declaración de variables: M = 0

3. Leer N

4. Asignar a M el valor de N

5. Mientras N <> 0 hacer

6. Si M<=N Entonces 7. M=N 8. Fin_Si 9. Leer siguiente N 10. Retorno del Mientras 11. Imprime valor de M 12. Fin Lectura No. Para N = M toma el valor? 1 4 2 5 3 20 4 11 5 3 - ¿Cuál es el resultado de M? - Realice una siguiente corrida con los siguientes datos: 8, 1, 0, 3, 4 - Diseñe el diagrama de flujo. b) ¿Qué valores obtienen las variables A, B y C después de finalizar la ejecución de las siguientes instrucciones? 1. A= 5 B= 18 C= A + B B= A + B A= B - C 2. A = 30 B = 15 A = B B = A 3. A = 3 B = A + 15 A = A + 1 B = A - 5 4. A = 30 B = A B = A - 3

lunes, 21 de septiembre de 2009

PASCAL ORIENTACIONES

1 Pascal y Turbo Pascal
1.1 Características
El PASCAL es un lenguaje relativamente moderno, desarrollado por Niklaus Wirth y su grupo de Zurich en 1971. Se trata de un lenguaje de propósito general, esto quiere decir que se puede emplear para construir todo tipo de aplicaciones. En la práctica también quiere decir que se trata de un lenguaje no diseñado para desarrollar ningún tipo específico de aplicaciones. Pero el PASCAL es especialmente útil para algo: para la enseñanza de buenos modos de programación. El PASCAL es hoy en día el lenguaje más usado para la enseñanza de la programación por varios motivos:
• Posee unas reglas sencillas de sintaxis.
• Es un lenguaje muy estructurado.
• Realiza una comprobación exhaustiva de tipos de datos.
El hecho de que tenga una estructuración muy marcada permite que los pro¬gramas sean fáciles de leer e interpretar, y facilita la escritura de programas del modo que hoy en día se estima correcto.
El compilador de PASCAL es relativamente sencillo de realizar, por lo que se ha extendido a muchos tipos de plataformas, desde los ordenadores personales a los grandes ordenadores corporativos. Cuando una aplicación se escribe en PASCAL estandard puede compilarse en cualquier máquina en la que exista compilador de PASCAL, que son la mayoría.
Existen varios dialectos locales del PASCAL, entre los que se encuentra el TURBO PASCAL, que admiten todas las instrucciones del PASCAL estan¬dard más un subconjunto específico de instrucciones normalmente pensadas para aumentar las capacidades del lenguaje en un ordenador particular.
El TURBO PASCAL, de la compañía Borland (Scotts Valley, Califor¬nia) es un dialecto del PASCAL que incluye además de las instrucciones del PASCAL estandard una serie de instrucciones que permiten desarrollar apli¬caciones específicas para ordenadores IBM PC o IBM PS y compatibles. N o es la única de las versiones de PASCAL existente para estos ordenadores, pero sin duda la más extendida y probada. En la actualidad la versión 6.0 de este lenguaje incluye además del compilador un entorno integrado de desa¬rrollo (IDE) que permite compilar, visualizar errores y depurar los programas desde un mismo entorno.
1.2 El programa Pascal
Un programa PASCAL es un conjunto de instrucciones que siguen la sintaxis y la estructura del PASCAL. La estructura genérica es:
Program nombre (ficheros);
declaraciones
Begin
sentencias
End.
Todo programa Pascal empieza con la palabra Program seguida de un nombre que elige el programador para identificar el programa. A continuación entre paréntesis se pueden indicar los ficheros que contienen los datos de entrada y salida respectivamente. Estos ficheros son el input y el output para indicar entrada desde el teclado y salida al terminal. Si se quieren especificar estos ficheros la primera línea de un programa será:
Program nombre (Input , Output );

y es equivalente a:
Program nombre ;
La primera línea del programa es una instrucción PASCAL y como todas ellas termina con el signo de puntuación ";".
Después de la identificación del programa se han de situar las instrucciones declarativas del programa que sirven para especificar sin ambigüedad el significado de los términos que se utilizarán en el programa. A continuación han de aparecer las instrucciones correspondientes al procedimiento que se quiere realizar. Estas instrucciones están encabezadas por Begin y terminan con End y un punto. El programa más pequeño y más inútil que cumple las reglas de estructuración del PASCAL es:
Program nulo;
{ Programa ejemplo de la estructura más simple de un programa PASCAL}
Begin
(* N o hace falta ninguna instrucción para no hacer nada *)
End.
En la parte reservada a declaraciones no se incluye nada pues nada se necesita declarar. Todos los símbolos que se encuentren entre los paréntesis { } son comentarios que sirven para hacer más legible el programa. También los símbolos compuestos (* y *) sirven para delimitar el principio y fin de un comentario. Al existir dos tipos de delimitadores de comentarios, es posible realizar anidación de comentarios. Por ejemplo,
{ Este es un comentario (* sintácticamente *) correcto en PASCAL}

1.3 Palabras reservadas y estructuras
Las palabras Program, Begin, End, Input, y Output, y otras que veremos más adelante, son identificadores que permiten al compilador PASCAL interpretar el programa y no se pueden utilizar con otros fines. Estas palabras se suelen referir con el término Palabras reservadas. El compilador interpreta igual mayúsculas o minúsculas, y por tanto se pueden usar indistintamente. Esta libertad de elección debe utilizarse para aumentar la legibilidad de los programas. Por ejemplo, podemos empezar siempre con mayúscula las pa¬labras reservadas y así será más fácil detectar las estructuras del programa. También suele escribirse todo con mayúsculas el nombre de las constantes cuyo valor no puede alterarse durante el programa. La elección de un estilo u otro de escritura suele variar pero lo importante es que sea uniforme a lo largo del programa.
En la parte del programa reservada para declaraciones se incluyen diversos tipos de declaración:
{1} Program nombre ;
{2} (* Este es un ejemplo de la estructura de la
{3} parte declarativa de un programa PASCAL *)
{ 4 } Uses nombre_unidedes ;
{5} Const
{6} nombre.consiente = valor;
{7} Type
{8} nombre_tipo = deLtipo ;
{9} Var
{10} nombre: variable : tipo_dato :
{11} Begin
La palabra reservada Uses de la instrucción {4} se utiliza para especificar el nombre las unidades donde se almacenan otros trozos de código PASCAL que son necesarias para completar el código especificado en este programa. Normalmente se trata de porciones de código que forman parte de una librería de programas. En la instrucción {5} la palabra reservada Const indica que se ha acabado la parte iniciada por Uses y se empieza la parte de declaración de las constantes que aparecen en el programa. Con Type se inicia la declaración de tipos de datos definidos por el programador, y con Var la especificación del tipo de dato que corresponde a las variables que se utilizan en el programa. Finalizada esta parte declarativa, empezarían las instrucciones del procedimiento que se está programando ({11}). Las líneas de código {1} , {4} , {6} , {8} Y {10} corresponden a sentencias PASCAL y por tanto acaban con el signo de puntuación ":". Aparte de estos tipos de declaración también existen las de etiquetas, procedimientos y funciones.
1.4 Instrucciones sencillas y compuestas
El cuerpo de instrucciones del procedimiento está formado por sentencias que pueden ser sencillas o compuestas. Las sentencias sencillas acaban con ";" y las compuestas empiezan por Begin y acaban con End. Por ejemplo,
{1} If Ca > O) Then
{2} b := a * a * a ;
la sentencia {2} es sencilla y está delimitada por la palabra reservada Then de la construcción condicional iniciada por If, y por el punto y coma. Esta sentencia sencilla es completamente equivalente a la compuesta especificada entre {4} Y {7}:
{3} If (a > 0) Then
{4} Begin
{5} b := a * a;
{6} b := b * a
{7} End;
El principio de la sentencia es el Begin de {4}, y el final el End de {7}. La sentencia compuesta consta de dos sencillas. La especificada en {5} se termina con la puntuación ";" mientras que la de {6} no necesita otra finalización que el End. Así mismo, la sentencia compuesta ha de finalizarse con el ; situado después del End en {7}. En cualquier lugar de un programa PASCAL donde puede incluirse una sentencia sencilla también puede incluirse una compuesta.
1.5 Diagramas de sintaxis
La forma más escueta de representar las construcciones sintácticamente válidas del PASCAL es utilizar los diagramas de sintaxis. La especificación de las dos opciones que existen, sentencias sencillas o compuestas, sería así con un diagrama de sintaxis:












Este diagrama ha de leerse siguiendo las fechas de izquierda a derecha y siendo válido cualquier camino en toda bifurcación. Una construcción estará representada por un diagrama de sintaxis cuando empezando por la izquierda se puede salir por la derecha y cada una de las partes de la construcción co¬rresponde a las especificaciones que se encuentran en el camino. Por ejemplo, las sentencias presentadas en los ejemplos anteriores son correctas, mientras que la siguiente:
{4} Begin
{5} b := a * a;
{6} b := b * a;
{7} End;
es incorrecta. Si seguimos el diagrama nos encontramos que después del punto y coma, al final de {6}, debería haber otra sentencia sencilla mientras que existe un End.

2 Datos
2.1 Variables, datos y direcciones
En este tema vamos a ver las instrucciones necesarias en un programa PAS¬CAL para especificar los tipos de datos que se van a manejar. Los datos se almacenarán en la memoria del ordenador en una determinada posición, pero para referirnos a ellos se utilizan nombres que el programador elige libremen¬te. El lenguaje PASCAL permite utilizar cómodamente una gran variedad de tipos de datos, pero en este tema solo vamos a ver los más sencillos.






Las primeras instrucciones de un programa han de ser las que indican los tipos de datos que se van a utilizar. Cuando un nombre se utiliza para un dato que no va a modificarse se trata de un a constante. Si por el contrario se permite que el contenido de las posiciones de memoria referidas por un determinado nombre varíen durante la ejecución del programa, se trata de una variable.
Program Uno;

Const
PI = 3.14159;
UNIDADES = 'radianes ';
Var
N, M : Integer;
Z : Real;
Begin

Este es un comienzo válido de programa en el que se especifican datos y variables que se van a utilizar. La sección donde se agrupan las definiciones de constantes se encabeza con el indicativo Const, la sección de variables con Var, y ambas han de preceder el indicativo Begin que anuncia el comienzo de las instrucciones del programa que van a manipular los datos. En el apartado de constantes para asignar el valor se utiliza el operador = , en lugar del operador normal de asignación := .
2.2 Identificadores
Los nombres que se pueden utilizar para referirse tanto a las variables como a las constantes son todos aquellos que no establezcan conflicto con las pala¬bras reservadas en PASCAL para especificar datos o acciones. NO pueden utilizarse:
• Palabras reservadas
Begin, 1.23E2, 123, While, Cos
• Palabras que empiecen por números
1YA, 2ABC
• Palabras en las que se encuentre alguno de los indicadores de operadores PASCAL
x+y precio/calidad signo*valor
• Palabras separadas por blancos.

Se pueden utilizar indistintamente mayúsculas o minúsculas pero el compilador de PASCAL no las distinguirá.
Son válidos nombres como
a364b46 coco xxx2
pero se deben utilizar nombre que tengan relación con el dato que van a contener. Por ejemplo,
angula lado vertice CaraOpuesta
Algunos compiladores de PASCAL solo admiten números y letras en la composición del nombre de datos y variables. El TURBO PASCAL también admite otros caracteres. Por ejemplo, permite
Cara_Opuesta Nombre_Compuesto
En el ejemplo Uno podemos ver que el tipo de datos que van a contener las constantes se especifica por los valores que se asignan.
Program Uno;
Const
PI = 3.14159;
UNIDADES = 'radianes ';
Var
N, M : Integer;
Z : Real;
Begin
Sin embargo, el tipo de las variables ha de indicarse explícitamente con indi¬cadores PASCAL tales como Integer, o Real. Estos se refieren a dos tipos de datos numéricos entre los posibles en PASCAL.
2.3 Tipos de datos
Los tipos de datos sencillos son:
• Numéricos .
Ø Números enteros:
o Integer
o Byte
o Shortlnt
o Word
o LongInt
Ø Números reales:
o Real
o Double
o Single
o Extended
• Caracteres y alfanuméricos.
Ø Char
Ø String
• Valores de la lógica de Boole
Ø Boolean
Números Enteros
Integer
Es el tipo de variable que se usa para números enteros ( sin parte decimal ) con signo. Para una variable Integer se reservan dos bytes (16 bits) en memoria y puede almacenar números enteros en el rango entre
-32, 768( _215) y + 32, 767(215 - 1)
Es el tipo de variable utilizado normalmente para las operaciones aritméticas entre enteros .
LongInt
Para aquellos casos en los que es necesario utilizar enteros que exceden el límite aceptado por el tipo Integer, existe el tipo LongInt para el que se reservan 4 bytes en memoria. Con una variable de tipo LongInt se pueden referenciar números enteros con signo en el rango entre
-2,147,483, 648( _231) y + 2,147,483,647(231 - 1)


Word
En este tipo de datos se pueden almacenar enteros sin signo. Al igual que para el tipo Integer, para el tipo Word se reservan 2 bytes en memoria y puede admitir números enteros entre 0 y 65,535.
Byte
En PASCAL es posible utilizar un tipo de dato llamado Byte, para el que , como su nombre indica, sólo se reserva 1 byte de memoria. En las variables tipo Byte se pueden almacenar números enteros sin signo y por tanto tendrán que estar limitados entre 0 y 255 (28 - 1).
Números Reales
Real.
Para almacenar números reales ( con parte decimal ) o enteros que excedan el límite permitido por LongInt , se ha de utilizar el tipo de variable Real. A este tipo de datos también se le conoce con el nombre de coma flotante por el uso que se hace de los 6 bytes que se reservan en memoria para este tipo de datos. Con los 6 bytes y una forma de representar el número algo rebuscada que estudiaremos con los erro¬res numéricos, se pueden almacenar números entre 2,910-39 y 1, 71038 tanto positivos como negativos. Debido a la representación interna utilizada, se almacenan con igual precisión (7 u 8 cifras significativas) todos los números reales en el rango permitido.
Las operaciones con números en la representación en coma flotante son mucho más lentas que entre números enteros representados directamente con su valor en base 2. Un coprocesador matemático (como los 80X87) se dedica específicamente a estas operaciones. El TURBO PASCAL permite una colección de datos para tratar eficientemente con números reales cuando se dispone del coprocesador matemático. Cuan¬do no se dispone de él, las operaciones se pueden emular por software aunque son más lentas. Esta colección de tipos de datos son:
Single
El tipo de datos Single es un Real más corto (4 bytes) con el mismo rango de variación que el Real , pero con menos cifras significativas.
Double
Se trata de un Real largo (8 bytes) que acepta números reales entre 10-308 y 10308 y opera con 15 o 16 cifras significativas.
Extended
Esta es la elección si el tiempo de cálculo no es problema y prima la precisión. Se trata de un tipo de dato para el que se reservan 10 bytes en memoria y puede almacenar números reales desde 3.410-4932 y 1.1104932. Se pueden distinguir números que tienen 19 O 20 dígitos iguales.

Boolean
Los valores que puede tomar una variable lógica, dentro de la lógica Booleana (George Boole, Inglaterra 1815 - 1864), son Verdadero o Fal¬so. En PASCAL se suelen utilizar este tipo de variables para almacenar el resultado comparaciones o el establecimiento de condiciones. Su dos valores posibles son True y False.

Var
mayor , menor : Boolean;
{ }
begin
{ }
mayor := True;
menor := False;
{ }

Char
Para un dato del tipo Char se reserva un solo byte de memoria. En ese byte se puede almacenar información de un carácter alfanumérico. Si bien en la memoria del ordenador se está almacenando un número entero entre 0 y 255, este número no puede entrar a formar parte de operaciones aritméticas con números enteros pues se entiende que se trata de un carácter ASCII. El número almacenado es el ordinal del carácter en la tabla ASCII.
String
Cuando se quieren manipular grupos de caracteres ordenados, como por ejemplo en texto, se dispone del tipo de datos String. En una variable del tipo String se pueden almacenar entre 1 y 255 caracteres de los que se almacenan en una variable var . Por tanto el número de bytes que se reservan para este tipo de datos dependerá de caso y el programador tendrá que especificarlo.
En este ejemplo se puede ver como se realiza la especificación:
Program Dos;
Const
Lugar = 'modulo';
Var
Facultad : Char;
Modulo, clase : String[6];
Begin
{ }
Facultad := 'C';
Modulo := '-XVI';
Clase := facultad + modulo;
writeln(' Sera en el ',Lugar,' ',clase);
{ }
End;

El lugar que ocupa en memoria una variable String[N], no son N bytes, sino N + 1. Esto es debido a que en el primer byte se almacena el número actual de componentes. En el ejemplo anterior, el espacio reservado para modulo se distribuye:



Los compiladores PASCAL no inicializan las variables al principio de la ejecución del programa, por lo que en los espacios de memoria reservados y no rellenados se puede encontrar cualquier tipo de información.
Si bien se necesita un byte de almacenamiento extra por String, el procesamiento de estas cadenas de caracteres puede ser muy eficiente.
2.4 Constates con tipo
Cuando se quiere utilizar en un programa una variable pero su valor se quiere asignar antes de cualquier operación, se puede hacer uso de las Constates con tipo. Se trata más que de verdaderas constantes, de variables con asignación inicial de valor. El contenido en memoria de una constante con tipo puede modificarse con las instrucciones del programa. Su sintaxis es una mezcla de la asignación de tipo de las variables y de la definición de constantes. El programa Tres produce el mismo resultado que Dos.
Program Tres;
Const
lugar : String[13] = 'modulo' ;
begin
{ }
lugar := lugar + ´ C' + '-XVI';
writeln(' Sera en el ',lugar);
{ }
end
2.5 Inicialización de los datos
Dado que en PASCAL no se inicializan a cero, falso, o caracteres blancos, las variables cuando se define su tipo, hay que tener precaución de no utilizar el contenido de posiciones de memoria reservadas y no asignadas. Una medida tajante es inicializar todas las variables.
2.6 Asignación de las constantes
Cuando se asigna el valor a una constante no se identifica explícitamente el tipo de dato del que se trata. Esta identificación se realiza por el contenido del término a la derecha del operador =. Tanto en la asignación de constantes, como en la de variables en el cuerpo del programa, el compilador decide el espacio de memoria que ha de reservar para cada valor por el modo en que está escrito.
Const
Lugar = 'modulo';
En este caso, lugar es una constante del tipo String por que le asigna un valor que es un conjunto de caracteres separados por comas.
Const
facultad = 'C';
Cuando entre comas se sitúa un sólo carácter, se trata del valor de una constante Char . También es sencillo reconocer los datos Boolean porque se les asigna el indicador True o False . En el caso de los números, la distinción se realiza entre enteros y reales. Para las constantes asignadas con números reales, el compilador elige el tipo Real, y para los enteros el Integer. La distinción entre números enteros y reales se hace por existencia de punto decimal en el valor. Para los números reales existe también la posibilidad de notación científica.
Const
Pi = 3.14159;
PiMedios = 1570.8e-3;
PiGrados = 180 ;
El compilador PASCAL interpreta que PiGrados es una constante Integer, y las otras dos constantes del tipo Real.
2.7 Asignación de los distintos tipos de variables
En el cuerpo del programa se suelen asignar valores a variables. En este caso, a partir de las instrucciones de la sección destinada a la identificación del tipo de variables, se reserva el espacio adecuado de memoria para cada variable. Por tanto, es importante que en el lado derecho del operador de asignación (: =) se encuentre un valor correspondiente al tipo de variable de lado izquierdo.
Program Cuatro;
const
Calle = ´ Paloma Blanca ';
Direccion = 11;
Puerta 'B';
var
nombre : String[40];
numero ; Integer;
letra : Char;
begin
{ Asignaciones incorrectas }
(* Asignaciones ilegales
{1} nombre := Direccion;
{2} numero := Calle;
{3} numero := Puerta;
{4} letra := Calle;
{5} letra := Direccion
{6} nombre := 98;
{7} numero := 'Paloma Negra ';
{8} numero := 'A';
{9} letra := ' Paloma Negra ';
{10} letra := 97 ;
*)
(* Asignaciones legales *)
{11} nombre := Puerta;
{12} nombre := 'C';
{ Asignaciones correctas }
{13} nombre := Calle;
{14} nombre := ´ Paloma Negra ' ;
{15} numero := Direccion;
{16} numero := 97;
{17} letra := Puerta;
{18} letra := 'A' ;
end.
Las instrucciones {11} y {12} son incorrectas porque asignan a una variable del tipo String una constante del tipo Char. No obstante, estas instrucciones no dan lugar a error en PASCAL porque el compilador interpreta las variables Char como un subconjunto de las String (El espacio reservado en memoria para un String acomoda perfectamente un Char ).
En el caso de valores numéricos,
Program Cinco;
const
Doce = 12.0;
Once = 11;
var
i : Integer;
z : Real;
begin
{ Asignaciones incorrectas } (* Asignaciones ilegales
{1} i := Doce
{2} i := 24
*)
(* Asignaciones legales *)
{3} z := Once
{4} z := 22
{ Asignaciones correctas }
{5} I := Once;
{6} i := 24;
{7} z := Doce;
{8} z := 22;
End.

el compilador interpreta los Integer como un subconjunto de los Real.
Para los efectos sintácticos, cualquier valor numérico ( o dato alfanumérico) en el cuerpo del programa se considera igual que situado en el lado derecho en una asignación de constante del tipo correspondiente.
CONTINUARA LA PUBLICACION