viernes, 25 de marzo de 2011
INDICE
INDTRODUCCION PASCAL
Aun mas el pleno potencial del hardware no es aprovechado plenamente y existe un considerable retraso con el software y sus aplicaciones, generando lo que se conoce como “crisis del software”.
En programacion tradicional, modular o estructurada un programa describe una serie de pasos a ser realizados para la solucion de un problema, es decir es un algoritmo, en particular este modelo de programacion se uso mucho para generar programas o aplicaciones en ambientes pc's y con consolas, es decir el programa se ejecutaba en una consola de msdos por ejemplo, y el programa o aplicacion se tenia que portar fisicamente a otras pc's, al final de su ciclo de vida de este modelo se habia mejorado y ya era posible que se ejecutara en alguna ventana-consola de ambientes windows, con mejor interfase como fonts, colores, background, etc.
En programacion orientada a objetos ( OOP ) un programa es considerado como un sistema de objetos interactuando entre si, ambientes de desarrollo visuales facilitan aun mas la construccion de programas y solucion de problemas, porque permiten abstraer al ingeniero de software de todo el GUI (interfase grafica) del problema, que constituye mas del 60% del codigo normal de un programa, en general este ambiente permitio una mejora en la interfase del programa con el usuario de la aplicacion ya que en este caso solo se manejaban formas o ventanes llenas de componentes o controles especializados en alguna tarea especifica.
A este modelo de programacion o construccion de programas los compiladores modernos se adaptaron rapidamente y tenemos aplicaciones fantasticas, en donde alguna forma o ventana esta llena de controles visibles e invisibles que realizan muchas tareas donde ademas de los componentes o controles que proporciona directamente el compilador cuando se instala, existen miles de controles o componentes extras en muchas partes del mundo realizados por programadores talentosos y que enriquecen el contenido de nuestros programas y aplicaciones visuales.
Al principio estas aplicaciones, se construian pensando en que se ejecutaban en una pc con ambiente grafico o en una serie de pc's proximas fisicamente sin embargo el rapido avance de las redes dentro de las empresas u organizaciones conllevan a que los fabricantes de compiladores cada vez incluyeran mas y mas controles o componentes que permitan ejecutar el programa o aplicacion simultaneamente en una red de pc's.
Sin embargo cuando se habla de redes actuales estamos hablando de la red de redes (internet) y si en redes internas o intranets el retraso en el tiempo de comunicacion entre sus pc's internas y la cantidad de informacion a trasmitir entre las mismas no es algo muy importante o inmanejable, este problema de tiempo de trasmision y cantidad de informacion, si es un factor muy importante cuando se pretende construir programas o aplicaciones que deban compartirse o usarse por muchas pc's conectadas a internet, desgraciadamente como factor externo que es, no esta bajo control de la empresa o del programador.
PASCAL, es un compilador que permite usar cualquiera de los tres enfoques en la solucion de problemas de informacion que puedan y deban ser resueltos empleando el computador y el lenguaje aunque se repite este curso esta enfocado al primer modelo.
MODELO DE SOLUCION
Una herramienta rapida que nos permite descomponer en partes un problema para su solucion, es el llamado modelo de solucion, este consiste de una pequena caja que contiene los tres elementos mas basicos en que se puede descomponer cualquier problema sencillo de informacion, estas tres partes son:
LA PRIMERA PARTE son todos los datos que el computador ocupa para resolver el problema, estos datos son almacenados internamente en la memoria del computador en las llamadas variables de entrada.
LA SEGUNDA PARTE son todas las operaciones generalmente algebraicas necesarias para solucionar el problema, generalmente esta parte del modelo es una formula (o igualdad matematica, ej. X= y + 5).
LA TERCERA PARTE es el resultado o solucion del problema que generalmente se obtiene de la parte de operaciones del modelo y dichos datos estan almacenados en las llamadas variables de salida.
En resumen para todo problema sencillo de informacion es necesario plantearse las siguientes preguntas:
Que datos ocupa conocer el computador para resolver el problema y en cuales variables de entrada se van a almacenar ?
Que procesos u operaciones debe realizar el computador para resolver el problema planteado.
Que informacion o variables de salida se van a desplegar en pantalla para responder al problema planteado originalmente?
Como nota importante no confundir los terminos datos, variables e informacion;
Datos se refiere a informacion en bruto, no procesada ni catalogada, por ejemplo “Tijuana”, “calle primera # 213”,”15 anos”, ” $2,520.00”, etc.
Variables es el nombre de una localidad o direccion interna en la memoria del computador donde se almacenan los datos, ejemplo de variables para los casos del inciso anterior, CIUDAD, DIRECCION, EDAD, SUELDO, ETC.
Informacion son datos ya procesados que resuelven un problema planteado.
EJEMPLO DE MODELO DE SOLUCION
Construir un modelo de solucion que resuelva el problema de calcular el area de un triangulo con la formula area igual a base por altura sobre dos.
Variable(s) de Entrada Proceso u Operacion Variable(s) de Salida
BASE ALTURA AREA= BASE * ALTURA / 2 AREA
PROBLEMA 2.- CONVERTIR LA EDAD EN ANOS DE UNA PERSONA A MESES.
PROBLEMA 3.- CONVERTIR PESOS A DOLARES.
PROBLEMA 4.- CALCULAR EL AREA DE UN CIRCULO CON LA FORMULA
PROBLEMA 5.- EVALUAR LA FUNCION PARA CUALQUIER VALOR DE X.
Observar para el caso de constantes fijas o conocidas (PI) no se debe dar como dato de entrada su valor, en cambio colocar directamente su valor dentro de la formula, en la parte de operaciones del problema.
Pero recordar tambien que existiran problemas sencillos donde:
No se ocupan entradas o no se ocupan operaciones, pero todos ocupan salida.
Una formula grande o muy compleja puede ser mas segura y facil de resolver, si es descompuesta y resuelta en partes, juntando al final los parciales para obtener el resultado final.
Un problema puede tener mas de una solucion correcta.
El problema no esta suficientemente explicado o enunciado, entonces, estudiarlo, analizarlo y construirlo de manera generica.
VARIABLES
En PASCAL un identificador es una palabra compuesta de letras y/o numeros de hasta 32 caracteres significativos, empezando siempre con una letra.
Una variable se define como un identificador que se utiliza para almacenar todos los datos generados durante la ejecucion de un programa.
Existen ciertas reglas en cuanto a variables:
Claras y con referencia directa al problema.
No espacios en blanco, ni simbolos extranos en ellas.
Se pueden usar abreviaturas, pero solo de caracter general.
No deben ser palabras reservadas del lenguaje.
Ejemplos de buenas variables:
Nombre, Edad, SdoDiario, IngMensual, Perimetro, Calif1, etc.
TIPOS DE DATOS
Un tipo de dato define todo el posible rango de valores que una variable puede tomar al momento de ejecucion del programa y a lo largo de toda la vida util del propio programa.
Los tipos de datos mas comunes en pascal son:
TIPO DATO RANGO
char Caracter ASCII
byte 0 a 255
integer -32,768 a 32,767
Real 1E-38 a 1E+38
Boolean TRUE o FALSE
shortint -128 a 127
word 0 a 65535
longint -2147483648 a 214748364
String Cadena 255 caracteres
Para el caso de strings se prodra usar cualquiera de los dos siguientes formatos:
Var
Nombre:string;
Carrera:string[30];
Para el primer caso pascal reserva 255 bytes de memoria, para el caso de carrera pscal solo reservara 30 bytes, es obvio cual de los dos casos es mas eficiente.
OPERADORES ARITMETICOS
Pascal reconoce los siguientes operadores aritmeticos:
Operador Operacion
+ SUMA
- RESTA
* MULTIPLICACION
/ DIVISION
Div DIVISION ENTERA
Mod MODULO O RESIDUO
Como nota importante a recordar siempre;
Si se usa el operador DIV en problemas de division entre enteros, pascal trunca la parte residual, es decir;
// area de declaracion de variables
real a;
// area de operaciones
a := 10 div 4;
// area de despliegue de resultados
desplegar a; s --- En pantalla sale ( 2.000000 )
El problema no es el tipo real, sino que por definicion de la division entre enteros pascal trunca la parte residual.
El operador (%) devuelve el residuo entero de una division entre enteros, ejemplo;
// area de declaracion
integer alfa;
// area de operaciones
alfa := 23 mod 4;
// area de despliegue
desplegar alfa; <- El resultado en pantalla es 3
Otro ejemplo;
alfa := 108 mod 10;
desplegar alfa; ← El resultado en pantalla es 8
Para resolver los problemas de potencias y raices, se usan ciertas instrucciones especiales que proporciona el lenguaje, llamadas funciones matematicas, en pascal existe todo un conjunto de instrucciones o funciones matematicas.
Y ademas deberan recordar sus leyes de logaritmos y de potencias:
Con el uso de los logaritmos, los procesos de multiplicacion, division, elevacion a potencias y extraccion de raices entre numeros reales pueden simplificarse de la manera siguiente.
1.- El logaritmo de un producto es igual a la suma de los logaritmos de los factores.
Log ( a . m) = log a + log m
2.- El logaritmo de un cociente es igual a la diferencia de los logaritmos de los terminos
Log(a:m) = log a - log m
3.-El logaritmo de una potencia es igual al exponente por el logaritmo de la base.
Log am = m * Log a
4.- El logaritmo de una raiz es igual al logaritmo del radicando dividido por el indice de la raiz
log = m/n log a
Las dos funciones que se usan para resolver este problema son:
Ln(x) ←- Nos regresa el logaritmo natural del numero x.
EXP(x) ←- nos regresa eX es decir el antilogaritmo de un numero.
Otra vez si se ocupa resolver la multiplicacion de 5 * 20, la regla de logaritmos nos dice que el resultado es = log(5) + log(20) aunque en pascal se usa Ln(5) + Ln(20) pro en estos casos lo que se tiene de resultado no es 100 sino el logaritmo de 100, porque estamos sumando los logaritmos, es decir al resultado de la suma de logaritmos le tenemos que sacar su antilogaritmo, para conocer el resultado final(100) de la mulptiplicacion.
JERARQUIA DE OPERACIONES
Ejemplos:
2+ 3* 4 := 20(incorrecto)
:= 14 (correcto)
b) si calif1=60 y calif2=80 y si entonces en programa se usa
promedio := calif1 + calif2/2
la pc daria como resultado promedio = 100
Recordar siempre, que antes de plantear una formula en un programa se debera evaluar contra el siguiente:
Orden de operaciones:
1.- Parentesis
2.- Potencias y raices
3.- Multiplicaciones y divisiones
4.- Sumas y restas
5.- Dos o mas de la misma jerarquia u orden, entonces resolver de izquierda a derecha
Nota: Si se quiere alterar el orden normal de operaciones, entonces usar parentesis.
Nota: Tampoco es bueno usar parentesis de mas en una operacion, esto solo indica que no se evaluo bien la formula, como en el siguiente ejemplo;
aqui los parentesis estan de mas, porque por orden de operaciones, multiplicacion y division tienen la misma jerarquia y entonces se resuelven de izquierda a derecha, en otras palabras ni que falten parentesis ni que sobren parentesis.
PROGRAMACION ENTRADA/SALIDA
PROGRAM NOMPROG;
CONST
VAR
BEGIN
INSTRUCCIONES;
END.
EJEMPLO Prog1.pas
program prog1;
var
area,base,altura :real;
begin
(* area de captura *)
write('Dame Base :');
readln(base);
write('Dame Altura:');
readln(altura);
(* area de operaciones *)
area := base * altura / 2;
(* area de despliegue *)
writeln('El Area es =',area:0:2);
readln;
end.
Corrida:
Reglas para escribir un programa en PASCAL :
a) Se sigue la estructura del programa, escrita al principio del tema.
b) Primero declarar la variables.
c) El cuerpo de instrucciones del programa debera encerrarse entre el begin —- end.
d) Todas las instrucciones ejecutables terminan con punto y coma.
e) Los comentarios se ponen encerrados entre (* comentario *)
f La declaracion de variables ocupa la primera posicion.
g) Se utiliza una instruccion llamada write() o writeln() para desplegar mensajes u otros elementos en el dispositivo de salida standar(pantalla).
h.- Se utiliza una instruccion llamada read() o readln() para capturar datos desde el dispositivo de entrada standar (teclado).
i.- Se usa una instruccion readln; al final para detener la pantalla hasta que el usuario pulse la tecla “any key” para continuar o el programa responde tan aprisa que no se alcanza a ver y se regresa al editor.
Ya creadas y cargadas las variables normales se efectuan los procesos u operaciones normales con ellas.
Este programa se debera crear usando el editor del turbo pascal y grabarlo como prog1.pas en el folder de su preferencia, para ejecutarlo usar la opcion RUN del propio editor.
RECORDAR nunca grabarlo con un nombre que contenga mas de 8 letras o caracteres, recordar que estamos hablando de los tiempos de msdos
INSTRUCCION WRITE() y WRITELN()
Es una de las mas poderosas herramientas de despliegue de datos que posee el lenguaje.
Su formato completo es:
WRITE(lista de parametros);
* Donde lista de parametros pueden ser:
a).- Mensaje o texto
b).- variables
c).- Combinacion de los dos
ejemplos;
write('el area es')'
write('el area es=',area);
write('base=',base,'altura='altura');
Ademas cada argumento ya sea texto o variable puede incluir el sguiente modificador;
Texto o variable:tamanocampo:tamanodecimal
Ejemplo
Write('mama':10); ←- se desplegara centrado en los 10 primeros espacios de los 80 espacios que tiene una pantalla de msdos.
Si el texto es mayor que el tamano asignado, TP ignora el tamano asignado y despliega todo el texto.
Ejemplo
Pi:real;
Begin
Pi:=3.1416;
Write(pi:10:2);
End.
Estamos pidiendo desplegar todo el numero en 10 espacios, en este caso TP centra y redondea al entero mas cercano, es decir la slida es 3.14.
La diferencia entre WRITE y WRITELN, es que el segundo incluye un cambio de renglon al final del despligue.
RECORDAR que en este compilador, cuando esten capturando una string y luego un dato numerico con read(), el compilador se va a saltar la captura del dato numerico, esto es un bug del compilador, para resolver este problema, solo agregar uno o varios readln; sin nada despues del read de captura de string o mejor aun solo usar readln() para captura.
INSTRUCCION READ() Y READLN();
Esta instruccion permite que el dato entrado desde el teclado sea capturado y almacenado en la variable correspondiente su formato completo es:
read(lista de variables);
ejemplo
read(base,altura,nombre,edad);
Aqui se pretende capturar cuatro variables en una sola pasada.
Lo mas sensato es usar un read(variable) por cada variable que se ocupe capturar en el programa.
Recordar tambien que en el caso de captura de reales es preferible agregar un cero (0) para decimales que no lo contengan, es decir no capturar .234 sino 0.234
La diferencia entre read() y readln(), es que el primero deja el cursor en el renglon de captura y readln() lo avanza un renglon.
FORMATO DE PANTALLA
Esta libreria se pone despues del program prog; y antes de CONST o VAR o BEGIN dependiendo del problema.
1.- ClrScr(); Limpia pantalla
ESTA INSTRUCCION NO OCUPA ACLARACION
2.- Gotoy(#de col,#de ren); posiciona cursor en lugar indicado
RECORDAR QUE UNA CONSOLA NORMAL TIENE 24 RENGLONES Y 80 COLUMNAS
En particular poner un gotoxy(); antes de cada write() en el programa.
Recordar ademas que en el folder TP esta tambien el programa THELP que les da un miniprograma residente con ayuda para pascal.
ISNTRUCCIONES DE CONTROL DE PROGRAMA
Estas instrucciones se dividen en tres grandes categorias:
Instrucciones Condicionales que en pascal se implementan con las instrucciones if y case.
Instrucciones de ciclos con, for, while, repeat until.
Instruccion de salto incondicional goto.
INSTRUCCIONES CONDICIONALES
Es decir al comparar dos alternativas diferentes el computador puede tomar una decision, basandose en la evaluacion que hace de alguna condicion.
ejemplo de instrucciones condicionales ;
a)
si sueldo > 3000
desplegar “rico”
si no
desplegar “pobre”
fin-si
b)
si sexo = 'm'
imprime mujer
si no
imprime hombre
fin-si
De los ejemplos observar que los caminos por el computador dependeran de la evaluacion que el computador hace con y de la condicion.
Todo lenguaje de programacion debe tener instrucciones que permitan formar condiciones e instrucciones que pueden evaluar esas condiciones.
El formato general de una instruccion condicional es:

Como se observa son cuatro partes bien diferenciadas entre si;
La propia instruccion condicional en si
La condicion
El grupo cierto de instrucciones
El grupo falso de instrucciones
Cuando el computador evalua una condicion, el resultado de esa evaluacion solo es evaluado de dos maneras o la condicion es CIERTA o la condicion es FALSA.
Esto dependera del valor que tenga asignado o que se haya capturado para la variable que esta en la condicion, por ejemplo si se capturo 6000 en sueldo en el ejemplo a), entonces el computador indicaria que la condicion es CIERTA, pero en otro caso, si a la variable sueldo primero se le asigno un valor de 250 entonces el computador indicaria que la condicion es FALSA.
Ya dependiendo del resultado de la evaluacion, el computador ejecuta las instrucciones contenidas en la parte CIERTA o en la parte FALSA de la condicion.
Empezaremos el analisis por la CONDICION.
CONDICIONES SIMPLES
En general todas las condiciones simples se forman con:
variables operadores relacionales constante o var.
sexo = 'm'
sueldo > 300000
Una condicion simple se define como el conjunto de variables y/o constantes unidas por los llamados operadores relacionales.
Los operadores relacionales que reconoce el lenguaje pascal son:
| Operador | Significado |
| = | Igual que |
| > | Mayor que |
| < | Menor que |
| >= | Mayor o igual que |
| ⇐ | Menor o igual que |
| <> | No es igual que o es diferente que |
| IN | Pertenece A |
NOTA IMPORTANTE, Para el caso de objetos de tipo string, los operadores mencionados arriba funcionan, es decir es valido usar la siguiente condicion:
string carrera;
if (carrera=“informatica) etc, etc, etc,
INSTRUCCIONES IF
Es la instruccion condicional mas usada en los diversos lenguajes de programacion, su formato completo y de trabajo en pascal es :
cargar o asignar la variable de condicion;
if condicion Then
begin
grupo cierto de instrucciones;
end
else
brgin
grupo falso de instrucciones;
end;
Primus.- Observar donde van y donde no van los puntos y comas;
Secundus.- Si un if no ocupa un grupo falso de instrucciones, entonces no se pone el else y el end antes del else si terminaria con punto y coma.
PROG2.pas
program prog2; uses crt; var edad:integer; ciudad,nombre:string; begin clrscr; (* area captura datos *) gotoxy(20,5);write('dame nombre :'); readln(nombre); gotoxy(20,6);write('dame ciudad :'); readln(ciudad); gotoxy(20,7);write('dame edad :'); readln(edad); (* area de condicion *) if ciudad = 'tijuana' then begin edad:=edad*12; gotoxy(20,10);write(nombre,' tienes ',edad,' meses'); end else begin gotoxy(20,10);write('no cumple la condicion'); end; readln; readln; end. CORRIDA:
CONDICIONES COMPUESTAS
En muchas ocasiones es necesario presentar mas de una condicion para su evaluacion al computador.
Por ejemplo que el computador muestre la boleta de un alumno, si este estudia la carrera de medicina y su promedio de calificaciones es mayor de 70.
Una condicion compuesta se define como dos o mas condiciones simples unidas por los llamados operadores logicos.
Los operadores logicos que PASCAL reconoce son:
| OPERADOR | SIGNIFICADO |
| AND | “Y” LOGICO |
| OR | “O” LOGICO |
| NOT | “NO” NEGACION |
Ejemplo:
if (sueldo > 700 and sexo='m' then etc, etc, etc.
Notas:
Observar que cada condicion simple lleva sus propios parentesis.
Para que el computador evalue como CIERTA una condicion compuesta que contiene el operador logico “and”, las dos condiciones simples deben ser ciertas.
Para que el computador evalue como CIERTA una condicion compuesta que contiene el operador logico “or”, basta con que una de las condiciones simples sea cierta.
La cantidad total de casos posibles cuando se unen dos o mas condiciones simples esta dada por la relacion donde n = cantidad de condiciones, la primera mitad de ellos ciertos y la segunda mitad falsos.
Ejemplo, si formamos una condiciona compuesta con dos condiciones simples y el operador logico “y”, la cantidad total de casos posibles serian y se puede construir la siguiente tabla de verdad.
Tabla de verdad con “y”
| IRA COND SIMPLE | 2DA COND SIMPLE | EVALUACION |
| C | C | C |
| C | F | F |
| F | C | F |
| F | F | F |
La evaluacion final se obtiene usando la regla anteriormente descrita para una condicion compuesta que contiene el operador “and”.
Esta tabla significa lo siguiente;
1.- Cualquiera que san la cantidad de datos procesados, siempre caera en uno de estos cuatro posibles casos.
La tabla de verdad para una condicion compuesta con “or” es la siguiente;
| IRA COND SIMPLE | 2DA COND SIMPLE | EVALUACION |
| C | C | C |
| C | F | C |
| F | C | C |
| F | F | F |
Como se observa, una condicion compuesta con “O”, es menos restrictiva, o el 75% de los casos terminarian ejecutando el grupo CIERTO de instrucciones de la instruccion condicional.
Construir una tabla de verdad para una condicion compuesta de tres o mas condiciones simples, es tambien tarea sencilla, solo recordar que;
1.- La cantidad posible de casos posibles es la mitad empiezan con cierto y la otra mitad empiezan con falso.
2.- Para evaluar esta condicion triple, primero se evaluan las dos primeras incluyendo su operador bajo las reglas ya descritas y luego se evalua el resultado parcial contra la ultima condicion y el ultimo operador para obtener la evaluacion final.
Ejemplo una condicion compuesta de tres condiciones simples, donde el primer operador logico es el “y” y el segundo operador logico es el “O”, daria la siguiente tabla de verdad.
| Ira cond | 2da cond | Eval 1a Y 2a | 3ra cond | Eval eval O 3ra |
| C | C | C | C | C |
| C | C | C | F | C |
| C | F | F | C | C |
| C | F | F | F | F |
| F | C | F | C | C |
| F | C | F | F | F |
| F | F | F | C | C |
| F | F | F | F | F |