Concepto de problema.
Entendemos por problema una situación en la que las cosas que tenemos son diferentes de las que deseamos.
Veamos el personaje de la figura 8.1 quien desea tener una nueva; Sin embargo, el solo dispone de los maderos, las pinturas y las herramientas. En síntesis, desea una casa pero solo tiene los materiales.
Para enfrentar las situaciones problemáticas proponemos un método para “desenredar” el problema y paulatinamente construir la solución.
Fase 1: identificación del problema
Fase 2: identificación de posibles soluciones.
Fase 3: diseño del método de resolución.
Fase 4: ejecución del método.
Antes de realizar cada fase conviene hacer notas que mientras más problemas se resuelven, menor es el esfuerzo requerido para enfrentar otros nuevos.
Identificación del problema.
Un problema siempre surge en una situación más o menos compleja. Esto provoca que muchas veces no se aprecie el verdadero problema.
Para identificar un problema es necesario encontrar dentro de la situación todos los elementos importantes: aquellos que están ausentes (lo que deseamos).
Pero veamos la situación de la figura 8.2a donde nuestro personaje está sentado en su casa viendo la televisión.
Afuera está lloviendo y como su techo esta en mal estado el agua se introduce a la habitación.
¿Cuál es su problema? La figura 8.2b nos muestra algunos posibles problemas (t odas las propuestas se obtuvieron observando la situación):
1°. El problema es que la televisión no se ve bien.
2°. El problema es que el sillón no es cómodo.
3°. El problema es que las gotas hacen ruido.
4°. El problema es que se está metiendo el agua a su casa.
Un análisis profundo de la situación (y con un poco de sentido común) podemos determinar que en realidad el problema consiste en que se está metiendo el agua en la casa: nuestro personaje tiene una gotera, pero no quiere esa gotera.
Encontrar posibles soluciones.
La solución a un problema es la acción que permite eliminar la diferencia entre lo que tenemos y lo que queremos.
Para un mismo problema se puede tener varias soluciones, y la elección de la mejor dependerá de las circunstancias específicas.
En el ejemplo de la gotera mostraremos cuatro posibles de solución (figura 8.2c):
a) Esperar con resignación a que se acabe la lluvia (mientras se moja el piso).
b) Colocar un paraguas en el techo.
c) Reparar el techo.
d) Colocar una cubeta bajo la gotera.
Cualquiera de estas soluciones se posible llevarla a la práctica; Sin embargo, resulta casi obvio que las dos primeras son risibles: la resignación provocara que se dañe el piso y los muebles, y colocar un paraguas “le da vuelta” al problema. La tercera solución es mejor, pero considerando que está lloviendo, la solución inmediata es colocar la cubeta (y cuando no llueva reparar el techo).
En algunos otros casos las soluciones propuestas son poco factibles, otras fantásticas, y algunas otras falsas, pero no resuelven el problema si no lo evitan o crean otro. Por ejemplo, un problema de nutrición se soluciona (falsamente) con comida “chatarra).
Diseño del método de resolución.
En la sección anterior aprendimos como encontrar la solución de un problema en particular, sin embargo, saber cuál es la solución no significa que sepamos como haremos para obtenerla. En esta sección estudiaremos como se alcanzan las soluciones.
El método de resolución es una estrategia que sirve para alcanzar la solución de un problema. Dicha estrategia consta de un conjunto de transformaciones que convierten los elementos disponibles en los objetos deseados.
La figura 8.3 nos ilustra estas ideas por medio de una caja negra, cuyo funcionamiento es el siguiente: los objetos entran a la caja, algo ocurre dentro de ella (una transformación), y otros objetos diferentes salen de la caja. Pero la caja negra no es mágica, el interior tiene un mecanismo que hace el trabajo y, lo más importante, alguien diseño ese mecanismo capaz de solucionar ciertos problemas.
Considerando lo anterior, diseñar el método de resolución consiste en definir cada uno de los pasos que nos llevaran a obtener la solución, es decir, explicar claramente cuál es nuestro plan de de acción para alcanzar la meta. Podemos verlo en el primer ejemplo, las personas que desean una casa debe seguir cuatro pasos de la figura 8.4 para lograr su propósito:
a) Elaborar los planos de la casa.
b) Cortar los maderos al tamaño adecuado.
c) Construir puertas y techos.
d) Pintar la casa.
Si nuestro personaje sigue estos cuatro pasos es seguro que podrá disfrutar de una casa.
En general a la serie de pasos que permiten resolver un problema se le conoce como algoritmo1, y es un tema en el que profundizaremos a lo largo del texto.
La ultima parte, de la ejecución del método, ya no es un trabajo intelectual de análisis, sino “poner manos a la obra” y puede efectuarse por nosotros mismos o por otras personas que sigan cuidadosamente las instrucciones que hemos diseñado.
Soluciones de problemas con la computadora.
La técnica propuesta para resolución de problemas es aplicable a muchos campos: económicos, médicos, sentimentales, científicos, agrícolas, etcétera.
No obstante, la finalidad de esta obra es que el lector tenga algunas bases para resolver problemas mediante la computadora. Ya que hemos llegado a este punto es importante preguntarnos
Porque deseamos que la computadora resuelva problemas y qué tipo de problemas si puede resolver.
En primer lugar, la computadora solo maneja datos precisos con instrucciones objetivas, sin ambigüedad. Esta limitación descarta problemas sentimentales o filosóficos.
En segundo término, la computadora sabe hacer una cantidad muy limitada de tareas (pero las hace muy bien y con mucha rapidez). Es necesaria una combinación adecuada de dichas tareas para producir algo útil. En cierta forma es similar a un albañil, que sabe ensamblar ladrillos, cemento varilla, pero que requiere de la dirección del ingeniero para construir un buen edificio.
El concepto de problema en computación
Dentro del campo de la computación un problema consiste en la necesidad de transformar un grupo de datos iniciales en un grupo diferente de datos finales (resultados).
De este modo una computadora podrá resolver un problema si alguien desarrolla un programa que contenga las instrucciones adecuadas que permiten transformar los datos.
Etapas del desarrollo de programas
La figura 8.5 muestra las etapas del ciclo de vida del software. Son las fases que debe seguir un programador para desarrollar un programa.
Durante la fase de definición del programa el programador debe reconocer cual es el problema, estableciendo con claridad cuáles son los datos disponibles y a que resultado se desea llegar.
El análisis de problema es un estudio profundo de problema y de la situación que lo rodea. El programador deberá entenderlo por completo y proponer una solución para poder transformar los datos disponibles en resultados.
Durante la fase de diseño del algoritmo se planea la estrategia que permitirá alcanzar la solución del problema.
La programación consiste en traducir el algoritmo diseñado a un lenguaje de programación y aplicarlo en una computadora. Las pruebas verifican su funcionamiento para corregir posibles errores.
En la última etapa, el mantenimiento, el programador se encarga de modificar el programa según vayan apareciendo necesidades adicionales.
El programa terminara su vida útil cuando deja de servir para el propósito para el que fue creado y ya no es posible seguirle dando mantenimiento.
Si observa con cuidado podrá percatarse que el ciclo que el ciclo de vida del software es muy similar a la técnica de solución de problemas que propusimos. En este punto es importante mencionar que las fases, del desarrollo de programas son efectuadas por seres humanos, y solo la ejecución de los gramas es realizada por la computadora.
INTRODUCCIÓN.
Pascal es un lenguaje para la programación de computadoras. Por sus características está clasificado como lenguaje de alto nivel. Fue desarrollado hacia 1970 por Niklaus Wirth en Zurich con el propósito de enseñar los principios de la programación estructurada a estudiantes universitarios. Wirth tomo como modelo al lenguaje ALGOL para diseñar un lenguaje al que nombro en honor del científico filosofo francés Blaise Pascal (1623-1662).
Pascal posee varias características que lo hace muy apto para la enseñanza y muy útil para solucionar problemas diversos. Sus principales características son:
· Pascal es un lenguaje que requiere de compilador.
· Estructuración: el lenguaje incorpora las estructuras de control requeridas por la programación estructurada (bloque, selección e interacción).
· Modularidad: Pascal permite desarrollar pequeñas rutinas independientes e integrarlas para construir un programa más grande.
· Propósito general: pascal es útil en una gran cantidad de aplicaciones. Los programas desarrollados en pascal son fácilmente transportables y, en general, los algoritmos son sencillos de implementar.
· Recursividad: pascal permite la recursividad, es decir, la capacidad para definir un modulo en términos de sí mismo.
La universidad de California en San Diego (UCSD) realizó algunas mejoras al lenguaje. La compañía Borland desarrollo una versión del lenguaje para computadoras personales (llamada Turbo Pascal), que ha adquirido gran popularidad y el cual utilizaremos.
ESTRUCTURA DE UN PROGRAMA EN PASCAL.
Un programa en lenguaje Pascal es en realidad un documento (escrito) que contiene una serie de instrucciones y especificaciones que le indican a una computadora como resolver un problema.
Sin embargo, dichas instrucciones y especificaciones deben ser colocadas en lugares adecuados del texto siguiendo esta estructura:
a) Zona de encabezado.
b) Zona de declaraciones.
c) Cuerpo del módulo.
En el siguiente ejemplo mostraremos las tres zonas de un programa:
Program Sumar_Numeros; (Este programa pide al usuario dos números, Los suma e imprime el resultado) | encabezado |
Var A,B,C:Integer; | Declaraciones |
Begin Write(‘Escriba dos números:’); Read(A,B); C:=A+B; Write(‘La suma es:’C); End. | Cuerpo Del Modulo |
La zona de encabezado es la primera línea del programa y en ella se indica el nombre o el título del programa; la primera palabra debe ser PROGRAM seguida de un espacio y un identificador1 (nombre del programa) que ni contenga espacios ni acentos. La línea debe de terminar con ; (punto y coma).
La zona de declaraciones es la sección del programa donde se especifican los requerimientos globales del programa: variables que se usarán, valores constantes, nuevos tipos de datos y módulos.
Todo lo que se declare en esta zona será posible usarlo en cualquier parte del programa. Esta zona la explicaremos con detalle en el siguiente tema.
El cuerpo del modulo es la sección del programa donde se encuentran las instrucciones que permiten resolver un problema. Esta parte siempre empieza con la palabra BEGIN y termina con la palabra END, seguida de punto (.).
Lo que aparece entre {y} es conocido como comentario y no forma parte del programa, solo es indicación útil para el programador que no altera el funcionamiento del programa.
Los comentarios sirven para indicar el propósito del programa, el autor, la fecha de creación, los requerimientos, aclarar instrucciones, etcétera.
En Pascal también es posible poner comentarios usando los símbolos (*y*).
A continuación mostraremos un programa con comentarios:
Program Saludo;
Begin
{ Esto es un comentario }
Write ('HOLA');
(* Esto tambien es un comentario *)
End.
Begin
{ Esto es un comentario }
Write ('HOLA');
(* Esto tambien es un comentario *)
End.
Este programa solo imprimirá HOLA. Las líneas que dicen ser comentarios serán ignoradas.
PARTES DE LA ZONA DE DECLARACIONES.
Antes de estudiar las variables y constantes que se deben declarar en esta zona es necesario abordar el tema de tipo de datos que es fundamental en el lenguaje Pascal.
Tipos básicos datos
Se conoce como tipo al conjunto de características que posee un dato y se requiere para qué la computadora pueda manejar correctamente los datos.
En Pascal encontramos cinco tipos de datos básicos (también llamados tipos primitivos, estándares o elementales): INTEGER, REAL, BOOLEAN, CHAR y STRING.
El tipo INTEGER permite manejar números enteros positivos y negativos, como 5, 1512, -18, 76, 0, etcétera. Este tipo resulta útil para edades, fechas, números de repeticiones y otras similares.
El tipo REAL permite manejar números reales, es decir, números con fracciones decimales, por ejemplo: 3.333, 12.53, -16.12, 39156.18, 3.6E12, -1.54E10, 9.9E-102. Este tipo es utilizado para sueldos, resultados de formulas, operaciones matemáticas en general, división de números y otras situaciones similares donde las cantidades no son necesariamente enteras.
El tipo BOOLEAN solo permite dos valores: TRUE y FALSE (verdadero y falso respectivamente). Es útil para los resultados de una condición; Por ejemplo ¿5> 6? Da un valor de FALSE (falso), mientras que ¿5=2+3? Da un valor de TRUE (verdadero).
El tipo CHAR es utilizado para manejar una letra, un símbolo o un número. En Pascal siempre se encierran los caracteres entre comillas sencillas. Por ejemplo: ‘A’, ‘m’, ‘9’, ‘?’, ‘!’, ‘#’, ‘é’, y todos los demás.
El tipo STRING se utiliza para cadenas de caracteres, es decir mensajes o nombres. En Pascal siempre se encierran las cadenas entre comillas sencillas. Algunos ejemplos son: ‘Juan López’, ‘Hola’, ‘¿Cómo estas?’, ‘COMMAND.COM’.
Los datos de tipo STRING pueden tener un máximo de 255 caracteres y un mínimo de cero. Una cadena con cero caracteres se llama cadena vacía y se representa con dos comillas seguidas (‘’).
Para concluir cabe mencionar que los programas en Pascal no hacen diferencia entre mayúsculas y minúsculas; Por ejemplo, la palabra PROGRAM es equivalente a program , y también equivalente a proGRAm. Sin embargo, en las cadenas si existe diferencia entre mayúsculas y minúsculas, por ejemplo ‘Hola’ es diferente a ‘HOLA’.
· Rango de los tipos
Debido a que las computadoras tienen sus limitaciones no es posible almacenar números de cualquier tamaño, por ello, todos los tipos tienen un rango de valores validos; es decir, si se trata de guardar un número fuera de ese rango se producirá un error. En la siguiente tabla se muestra el rango de los tipos básicos según la versión 6.0 de Turbo Pascal3.
Tipo | Valor mínimo | Valor máximo |
INTEGER REAL BOOLEAN CHAR STRING | -32768 2.9e-39 FALSE Carácter Ascii 0 0 caracteres | +32767 1.7e38 TRUE Carácter Ascii 255 255 caracteres |
Variables
Una variable es un espacio en la memoria de la computadora donde es posible almacenar un dato. En Pascal es necesario especificar con claridad que variables se usaran en el programa (antes de usarlas) y que tipo de información se guardara en esos espacios.
Las variables requeridas se especifican dentro de la zona de declaraciones, en la sección identificada por VAR. A continuación vemos algunos ejemplos:
Contador: Integer;
Precio: Real;
esta_lloviendo: Boolean;
OPCION: Char;
nombre: String;
A,B,C: Integer;
El valor que le corresponda a una variable será asignado del cuerpo del modulo (figura 11.1):
Begin
Contador:= 0; { Contador guardara un 0 }
Precio:= 1520.12; { Precio guardara 1,520.12 }
esta_lloviendo:= FALSE; {esta_lloviendo es falso }
OPCION:= ‘A’; { OPCION guardara la letra A }
nombre:= ‘Pedro Lopez’;
Read (A,B); { Leer el valor desde el teclado }
C:= A+B; { El valor de C será de A+B }
End.
El tipo STRING puede guardar hasta 255 caracteres, sin embargo algunas variables necesitan menos caracteres (un nombre de persona no suele requerir mas de 10). Para evitar el desperdicio de memoria podemos limitar el máximo de caracteres que se puedan almacenar en una variable de tipo STRING como vemos en este ejemplo:
Var
Nombre: String[10]; { Máximo 10 caracteres }
Teléfono: String[7]; { Máximo 7 caracteres }
st: String[4]; { Máximo 4 caracteres }
Si se intenta almacenar un mensaje cuyo tamaño sea mayor al permitido por la variable, los caracteres sobrantes se perderán. Por ejemplo, st4 := ‘CADENA’; solo guardara ‘CADE’.
Es muy importante que al asignar valor a una variable este corresponda al tipo de la misma. A continuación mostramos una serie de asignaciones con errores y aciertos.
Var
A,B: Integer;
C: Real;
D: Boolean;
E: String[30];
Z: Char;
Begin
Z:= ‘3’;
End.
La línea {1} es errónea porque el resultado de la suma C+B es un real (porque C es de tipo REAL y la variable A es de tipo INTEGER.
La línea {2} es errónea porque el resultado de la suma A+B es un entero y la variable Z es de tipo CHAR.
La línea {3} es correcta porque Z es un carácter que se concatena con una cadena.
La línea {4} es errónea porque el resultado de la suma A+B es un entero y la variable D es de tipo BOOLEAN.
La línea {5} es correcta porque el resultado de la operación B*2+ A continua como entero y se asigna una variable de tipo INTEGER.
La línea {6} es errónea porque se trata de guardar toda una cadena con el espacio de un solo carácter.
La línea {7} es correcta porque el resultado de comprar A > B es booleano (cierto o falso) y la variable D es de tipo BOOLEAN.
Constantes
Es un identificador que sustituye a un valor que no varia con el tiempo.
En Pascal es necesario especificar claramente que constantes se usaran en el programa (antes de usarlas) y cual será su equivalencia.
Las constantes requeridas se especifican dentro de la zona de declaraciones, en la sección identificada con CONST. A continuación vemos algunos ejemplos:
Const
INSTITUCION= ‘ESCUELA NACIONAL PREPARATORIA’;
COSTO_PERIODICO= 1500.00;
VERDADERO= TRUE;
ADMIRACION= ‘!’;
LONGUITUD= 100;
El valor de las constantes se utilizara dentro del cuerpo del modulo.
Begin
WriteLn (INSTITUCION);
WriteLn (LONGITUD * LONGITUD);
End.
El ejemplo anterior imprimirá:
ESCUELA NACIONAL PREPARATORIA 10000 |
El siguiente ejemplo mostrara un error pues dentro del cuerpo de modulo no se puede cambiar el valor a una constante.
Begin
VERDADERO:= FALSE;
End.
· Otras declaraciones
Dentro de la zona de declaraciones también se puede declarar los siguientes elementos:
a) Tipos de datos definidos por el usuario dentro de la sección TYPE.
b) Módulos dentro de la sección PROCEDURE.
c) Funciones definidas por el usuario dentro de la sección FUCTION.
Respecto a estas declaraciones profundizaremos mas adelante dentro del texto.
RUTINAS DE ENTRADA O DE SALIDA.
Las rutinas de entrada o de salida de datos son instrucciones que le permiten al programa comunicarse con el usuario mediante la introducción de información o el envió de resultados.
Rutina de salida
Las instrucciones que permiten escribir datos y mensajes en la pantalla es WRITE con su variante WRITELN.
Para utilizar WRITE tenga en cuenta los siguientes puntos:
a) Los textos (o mensajes) deberán ir entrecomillados.
b) Para escribir el valor almacenado en una variable basta con colocar el identificador correspondiente (sin comillas).
c) Para imprimir, con una misma instrucción WRITE, mensajes y variables, o varias variables, separar con comas (,).
d) Para imprimir un dato y bajar el cursor a la siguiente línea use WRITELN.
A continuación mostraremos el uso del WRITE y WRITELN.
Program EjemplosDeImpresion;
Var
A: Integer;
Begin
A:= 10;
Write (‘Hola’);
Write (6*5);
Write (A);
Write (‘Resultado:’,2*A);
End.
El programa anterior imprimirá
Hola3010Resultado: 20 |
Para evitar que todas las impresiones aparezcan juntas podemos modificar el programa de la siguiente forma:
Program EjemplosDeImpresion_II;
Var
A: Integer;
Begin
A:= 10;
WriteLn (‘Hola’);
WriteLn (6*5);
WriteLn (A);
WriteLn (‘Resultado:’,2*A);
End.
El programa se imprimirá:
Hola 30 10 Resultado: 20 |
Salida formateada
Se conoce como formato de salida al aspecto que presentaran los datos una vez impresos. En Pascal hay dos posibilidades de modificación: alterar la calidad de decimales de un numero real o la cantidad de espacio mínimo para escribir todas las cifras de un numero o los símbolos de una cadena. Este control se logra agregando el modificador dos puntos (:) a los datos que imprimirá la instrucción WRITE.
· Formateo de campos decimales.
Este formateo permite controlar la cantidad de cifras decimales con las que un numero será desplegado en pantalla.
A continuación ejemplificamos mediante un programa:
Program FormateoDecimal;
Var
r: Real;
Begin
r:= 5.715;
writeln (r:0:2); --------------> 5.71
End.
A continuación mostramos un caso común donde apreciamos la necesidad de formatear la impresión de números.
Program AreaDelCirculo;
{ Este programa calcula el área de un circulo de radio 34 }
Var
Area,
Radio: Real;
Begin
Radio:= 35;
Area:= PI*Radio*Radio; { PI es una constante predefinida cuyo valor es de 3.14159… }
Write (Area);
End.
El programa anterior escribirá:
3.848451001E03 |
Este mismo programa imprimirá algo más legible si lo modificamos:
Program AreaDelCirculo_II;
Var
Area,
Radio: Real;
Begin
Radio:= 35;
Area:= PI*Radio*Radio
Write (Area:0:2);
End.
El programa anterior escribirá:
3848.45 |
· Formateo de campos enteros.
Este formateo permite controlar el espacio necesario para las cifras enteras de un número que será desplegado en la pantalla.
A continuación ejemplificamos mediante un programa:
Program FormateoEntero;
Var
r: Real;
Begin
R:= 5.715;
End.
Este formato es muy útil para impresión de tablas de datos.
· Formateo de campos para cadenas.
Este formato permite controlar el espacio mínimo para desplegar en la pantalla los caracteres de una cadena.
A continuación ejemplificamos mediante un programa:
Program FormateoCadena;
Var
st: String;
Begin
st:=’HOLA’;
writeln (st:3); ----------> HOLAEnd.
Rutina de entrada
La instrucción que permite recibir datos desde el teclado es READ con su variante READLN.
La instrucción READ suspenderá la ejecución del programa y esperara a que el usuario teclee un valor y luego oprima la tecla ENTER. El valor que introduzca será almacenado en una variable. Por ejemplo: READ (numero);
Para utilizar READ tenga en cuenta los siguientes puntos:
a) El valor introducido y la variable deberán ser el mismo tipo.
b) No pueden ir comillas (mensajes) en el interior de los paréntesis.
c) Ocupe READLN siempre que la variable sea de tipo STRING.
d) Se recomienda solo leer una variable por cada READ, aunque es posible leer varias variables separadas por comas.
e) Es muy conveniente enviar un mensaje (con WRITE) antes de hacer un READ, esto sirve para indicar que tipo de información se solicita.
A continuación mostraremos el uso del READ con dos programas.
Program AreaDelCirculo;
{ Este programa calcula el área de un circulo de radio variable }
Var
Area,
Radio: Real;
Begin
Write (‘Escriba el radio del circulo:’);
Read (Radio);
Area:= PI*Radio*Radio;
Write (‘El área es’,Area:0:2);
End.
Al ejecutarse este programa (figura 11.2) deberemos introducir algún número. Para este ejemplo hemos elegido un radio de 35, por lo que en la pantalla observara lo siguiente:
Escriba el radio del circulo:35 El área es 3848.45 |
Program Saludo;
Var
Nombre: String;
Begin
WriteLn (‘Escriba su nombre:’);
ReadLn (Nombre);
WriteLn (‘Hola’,Nombre);
End.
AL Ejecutarse este programa (figura 11.2b) deberemos introducir algún nombre. Para este ejemplo elegimos ‘Pedro’. En la pantalla se observara lo siguiente:
Escriba su nombre Pedro Hola Pedro |
OPERADORES.
Son símbolos o palabras que sirven para obtener un resultado a partir de uno o dos datos llamados operandos.
En Pascal hay cuatro categorías de operadores:
a) Operador de asignación.
b) Operadores aritméticos.
c) Operaciones de comparación.
d) Operadores lógicos.
A la construcción formada por operadores y operandos se le conoce como expresión.
Operación de asignación
El símbolo := es el operador de asignación y sirve para darle valor a una variable.
Hemos usado este operador en ejemplos anteriores pero, a continuación, mostraremos un ejemplo especifico (figura 11.3).
Program Asignacion;
A, b, c: integer;
Begin
a:= 15; {en a se almacenará 15}
b:= 20; {en b se almacenará 20}
c:=a+b; {en c se almacenará 35}
End.
Si usted prueba este ejemplo en la computadora no observara nada porque todo el proceso se efectúa internamente.
Operadores aritméticos
Los operadores aritméticos son los que permiten realizar las siguientes operaciones aritméticas:
Operadores | Descripción |
+ - * / Div Mod | Suma Resta Multiplicación División División entera Módulo (residuo) |
A continuación mostramos un ejemplo específico. Al final se encuentran algunas instrucciones con WRITE, que permiten ver que ocurrió internamente con las variables.
Program Aritmeticos;
Var
a, b, c: integer;
d, e, f: real;
Begin
a:= 15+26; { en a se almacenara 26 }
b:= 21 mod 4; { en b se almacenara 1 }
c:= a-b; { en c se almacenara 40 }
d:= 15.0; { en d se almacenara 15.0 }
e:= d*b; { en e se almacenara 15.0 }
f:= d/e; { en f se almacenara 1.0 }
WriteLn (a);
WriteLn (b);
WriteLn (c);
WriteLn (d);
WriteLn (e);
WriteLn (f);
End.
Del ejemplo anterior se observara lo siguiente:
El operador / efectúa una división y entrega como resultado un cociente que incluye cifras decimales.
El operador DIV efectúa una división y entrega como resultado un cociente que no incluyen cifras decimales.
El operador MOD efectúa una división y entrega como resultado el residuo obtenido. Veamos otros ejemplos:
5 / 2= 2.5
5 DIV 2=2
5 MOD 2=1
10 / 2 =5.0
10 DIV 2=5
10 MOD 2=0
bserve que el operador / entrega un numero de tipo REAL, aunque la división sea exacta. Es decir
10 / 2 = 5.0, que es diferente de 10 DIV 2 = 5.
Un aspecto importante sobre el operador + es que sirve también para enlazar (concatenar) cadenas, como se ve en el siguiente programa:
Program ConcatenarCadenas;
Var
primero,
segundo,
saludo: String;
Begin
primero:= ‘Hola’;
segundo:= ‘¿Cómo estás?’;
saludo:= primero + ‘,’ + segundo;
WriteLn (saludo);
End.
Este programa imprimirá:
Hola, ¿Cómo estás? |
Operaciones de comparación
Los operadores de comparación o relacionales permiten verificar la relación existente entre dos datos y entregan un resultado de cierto o falso (llamado booleano).
En Pascal se tienen los siguientes operadores de comparación:
Operador | Descripción | Símbolo matemático |
= < > <= >= <> | Igual que Menor que Mayor que Menor o igual que Mayor o igual que Diferente de | = < > ≤ ≥ ≠ |
A continuación mostramos un ejemplo específico.
Program Relacionales;
Var
a,c: integer;
b,d: boolean;
Begin
a:= 15;
c:= 20;
b:= a > b; { en b se almacenara FALSE }
d:= a<> b; { en d se almacenara TRUE }
End.
Estos operadores son utilizados en la estructuras de programación, como se verá en el tema correspondiente.
Operadores lógicos
Son los que permiten realizar operaciones descritas por la lógica matemática y actúan únicamente con valores de falso y verdadero.
En Pascal se tienen los siguientes operadores lógicos:
Operador | Significado |
AND OR NOT | y o no |
El operador AND produce un resultado verdadero solo cuando sus dos operandos son verdaderos.
El operador OR produce un resultado falso solo cuando sus dos operandos son falsos.
El operador NOT produce un resultado contrario al del operando.
A continuación se muestran las tablas de verdad de cada operador:
Op1 | Op2 | Op1 AND Op2 |
FALSE FALSE TRUE TRUE | FALSE TRUE FALSE TRUE | FALSE FALSE FALSE TRUE |
Op1 | Op2 | Op1 OR Op2 |
FALSE_ FALSE_ TRUE_ TRUE_ | FALSE_ TRUE_ FALSE_ TRUE_ | FALSE TRUE TRUE TRUE |
Op1 | NOT Op2 |
FALSE_ TRUE_ | TRUE FALSE |
Este tipo de operadores son utilizados al efectuar comparaciones, los ejemplos los veremos mas adelante.
Jerarquía de operadores
Se conoce como jerarquía o procedencia de los operadores al orden en que se efectuaran las operaciones indicadas en una expresión, es similar a la jerarquía algebraica.
La jerarquía de operadores en Pascal es la siguiente:
1₀. NOT
2₀.*, / , Div, Mod, And
3₀. +, -, Or
4₀.=,<>,<,>,<=,>=
Esta jerarquía se altera mediante el uso de paréntesis.
A continuación mostraremos algunos ejemplos:
•5 + 10 * 2 / 5 + 1 = 10
•5 + (10*2) /5 + 1 = 10
•5 + 10*(2 / 5)+ 1 = 10
• (5 + 10)*2 / 5+ 1 = 7
•5 + 10*2 / (5 + 1) = 8.33
• (5+ 10)*2 / (5 + 1) = 5
FUNCIONES INTERNAS.
Una función es una instrucción para transformar un dato en otro según cierta regla. Por ejemplo, la función valor absoluto le quita el signo al número.
El lenguaje Pascal dispone de un grupo de funciones predefinidas, conocidas como funciones internas o intrínsecas.
A continuación presentamos una lista de las principales funciones:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. | ASB (X) SQR (X) SQRT (X) ODD (X) INT (X) FRAC (X) TRUNC (X) ROUND (X) SIN (X) COS (X) ARCATAN (X) LN (X) EXP (X) CHR (X) ORD (X) LENGTH (X) RANDOM | Valor absoluto de x Cuadrado de x Raíz cuadrada de x Devuelve TRUE si x es número impar Parte entera de x Parte fraccionaria de x Truncar la parte fraccionaria de x Redondeo de x Seno de x Coseno de x Tangente inversa de x Logaritmo natural de x Exponencial de x Carácter equivalente de x Código numérico equivalente de x Longitud de la cadena x Numero aleatorio |
El valor x que se encierra entre los paréntesis es llamado argumento de la función.
A continuación detallamos una de estas funciones.
Función | Descripción | Ejemplo |
ABS | La función ABS recibe como argumento un número, real o entero, y devuelve ese mismo numero pero sin considerar su signo. | ABS (12) = 12 ABS (-12) = 12 |
SQR | La función SQR recibe como argumento un número, real o entero, y devuelve el cuadrado de ese número. | SQR (5.1) = 26.01 SQR (-5.1) = 26.01 |
SQRT | La función SQRT recibe como argumento un número positivo, real o entero, y devuelve la raíz cuadrada de ese número. Si se trata de evaluar esta función con un argumento negativo se producirá un error. | SQRT (100) = 10 |
ODD | La función ODD recibe como argumento un número entero y devuelve el valor de TRUE (verdadero) si el número es impar y el valor de FALSE (falso) si el numero es par. | ODD (23) = TRUE ODD (2) = FALSE |
INT | La función INT recibe como argumento un número real y devuelve solamente la parte entera de ese número. | INT (3.33333) = 3.0 INT (-0.12) = 0.0 |
FRAC | La función FRAC recibe como argumento un número real y devuelve solamente la fracción decimal de ese número. | FRAC (3.33333) = 0.33333 FRAC (-0.12) = -0.12 |
TRUNC | La función TRUNC recibe como argumento un número real y le trunca la parte decimal convirtiéndolo en entero. | TRUNC (3.33333) = 3 TRUNC (-0.12) = 0 TRUNC (5.0) = 5 |
ROUND | La función ROUND recibe como argumento un número real y lo redondea al número entero más próximo. La función SIN calcula la función trigonométrica seno. Recibe como argumento un ángulo medido en radianes4 (por lo que debe ser número real o entero. | ROUND (6.3) = 6 ROUND (6.8) = 7 |
SIN | La función SIN calcula la función trigonométrica seno. Recibe como argumento un ángulo medido en radianes4 (por lo que debe ser un número real o entero). | SIN (0.7854) = 0.7071 |
COS | La función COS calcula la función trigonométrica coseno. Recibe como argumento un ángulo medido en radianes (por lo que debe ser un número real o entero). | COS (0) = 1.0 |
ARCTAN | La función ARCTAN calcula la inversa de la función trigonométrica tangente. Recibe como argumento un número real o entero y devuelve el ángulo correspondiente medido en radianes. | ARCTAN (1.7321) = 1.0472 |
LN | La función LN recibe como argumento un número positivo, real o entero, y devuelve el logaritmo natural de ese número. Si se trata de evaluar esta función como un argumento negativo o cero se producirá un error. | LN (1) = 0 LN (2) =0.6931 |
EXP | La función EXP se llama exponencial y es la función inversa al logaritmo. Recibe como argumento un número real o entero. | EXP (0) = 1.0 EXP (0.6931) = 2.0 EXP (-3) = 0.04979 |
CHR | La función CHR recibe como argumento un número entero, entre 0 y 255, y devuelve el carácter ASCII equivalente. | CHR (65) =’A’ CHR (88) =’X’ CHR (122) = ‘Z’ |
ORD | La función ORD recibe como el argumento un carácter y devuelve el valor ASCII equivalente. | ORD (‘A’) = 65 ORD (‘X’) = 88 ORD (‘Z’) = 122 |
LENGTH | La función LENGTH recibe como argumento una cadena de caracteres y devuelve la longitud (número de caracteres) de esa cadena. | LENGTH (‘HOLA’) = 4 LENGTH (`Hungría’) = 7 LENGTH (‘’) = 0 |
RANDOM | La función de RANDOM genera un número al azar (aleatorio). Si no recibe argumentos, el número que se obtenga estará entre 0 y 1. Si recibe algún número x como argumento, el valor que se obtenga estará comprendido entre 0 y x-1. Es muy importante que antes de utilizar esta función coloque la instrucción RANDOMIZE al inicio de programa para asegurarse que si se obtendrá número aleatorios. | RANDOM RANDOM (12) |
A continuación mostraremos un programa que calcula las raíces de una ecuación cuadrática ocupando algunas de las funciones.
Program RaicesCuadraticas;
Var
A, B, C
X1, X2: Real;
Begin
Write (‘Escriba el coeficiente cuadrático (A):’)
Read (A);
Write (‘Escriba el coeficiente lineal (B):’)
Read (B);
Write (‘Escriba el termino independiente (C):’)
Read (C);
X1:= (-B + SQRT (SQR (B)-4*A*C)) / (2*A);
X2:= (-B- SQRT (SQR (B)- 4*A*C)) / (2*A);
Write (‘Las raíces son:’,X1:0:2,’y’,X2:0:2);
End.
Este es otro ejemplo, un programa para tabular la función seno. Utilizamos la sentencia WHILE que no hemos visto aun, pero que se encarga de repetir el calculo de la función para varios valores.
Pragram Tabular_Seno;
Var
x,y : Real;
begin
WriteLn (‘Tabulación de la función seno’);
WriteLn (‘xy’);
x:= 0.0; { 0.0 valor inicial }
While x <= 2*PI Do { 6.28 es el limite de la tabulación }
Begin
y:= Sin(x); { calcular seno de x }
Write (x:0:2,y:6:2); { mostrar x, y }
x:= x + 0.1; { incrementar x en 0.1 }
End;
End.