INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti.
PROGRAMANDO EN PASCAL. Cuando se piensa en escribir un programa en Pascal, deben tenerse en cuenta dos puntos principales:
La codificación en sí del programa. El “entorno” de trabajo de Pascal. La codificación en sí implica un conjunto de reglas sintácticas e instrucciones permitidas, y el entorno, las herramientas para Editar y almacenar códigos, compilarlos, ejecutarlos, obtener ayuda sobre comandos, depurar programas, opciones de configuración del propio entorno, etc. Tal vez lo conveniente sea comenzar con una descripción somera del entorno. Llamamos entorno integrado de trabajo a una ventana compuesta por un cuerpo central y dos barras de menús: una en la parte superior y otra en la parte inferior:
En la ventana mostrada aún no se halla editado ningún programa. Para hacerlo activaremos el menú File
La primera opción: New, permite abrir una sesión de edición en la carpeta por defecto y con el nombre genérico NONAME00.PAS
Clase Teórica Nro 7
Pág. 1/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti.
Escribamos una línea cualquiera, por ejemplo la indicada más arriba. Ahora queremos salvar esta línea (o todo un programa si lo hubiere). Tenemos varias opciones: En la parte inferior se dispone de comandos directos como F2 que permite salvar inmediatamente con el nombre que figura en la ventana del Editor y en la carpeta por defecto:
Sin embargo si es la primera vez que estamos guardando algo, aparecerá POR UNICA VEZ el cuadro:
que nos solicitará un nombre para nuestro archivo (puede incluir también una dirección de carpeta). De ahí en más cada vez que volvamos a pulsar F2 ya no solicitará nada. Si por alguna causa deseamos salvar en otra parte y con otro nombre, podemos hacer uso del menú File descripto más arriba y elegir Save as… Esto abrirá un cuadro de diálogo similar al mostrado recién. Con estos pocos y sencillos elementos del entorno ya podemos arriesgarnos a escribir nuestro primer programa en Pascal. “Copiemos” a mano el siguiente código y luego analizaremos cada una de sus partes. (Este código en realidad ya fue analizado en clase con instrucciones de pseudocódigo)
Clase Teórica Nro 7
Pág. 2/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti.
La primera línea se denomina cabecera y en realidad no es imprescindible: puede omitirse, pero es una buena práctica colocarla. Indica el nombre del programa (no en el disco, sino en el texto en sí). Lo que se halla encerrado entre (* …….. *) tiene el carácter de comentarios. Es la forma de indicarle al compilador que no se trata de códigos ejecutables, sino de texto de orientación para el programador. Es muy buena práctica colocar comentarios para indicar cosas no triviales, en este caso, una breve descripción de lo que hace el programa. La línea que dice uses tiene el siguiente significado: Pascal propiamente dicho contiene un número limitado de instrucciones y un conjunto más o menos grande de comandos adicionales, pero por separado, y que comúnmente se denominan funciones de librería. Si vamos a hacer uso de algunos de estos comandos, por ejemplo deseamos trabajar con comandos gráficos, debemos indicarle al compilador dónde buscarlos. La directiva uses significa que lo que viene a continuación son las librerías que proveerán los comandos que no son parte del lenguaje en sí. En el ejemplo se indicó la librería crt (cathodic ray tube) que proporciona todos los comandos para manejo de pantalla. Si hubiésemos necesitado otras librerías, las colocaríamos a continuación separadas por comas. Luego aparece la palabra reservada var que indica la existencia de un bloque declarativo, en este caso de variables, y aquí nos detendremos un momento. En primer lugar las variables son elementos del programa que pueden tomar distintos valores durante la ejecución de un programa. Peden asignarse y reasignarse tantas veces como fuera necesario mientras el programa se halla corriendo (recuerde este concepto con lo visto en Planillas Electrónicas).
Clase Teórica Nro 7
Pág. 3/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. En cambio una constante es un identificador que toma su valor UNA SOLA VEZ al asignársele una magnitud y jamás puede modificarse a lo largo de toda la ejecución. También aquí vale lo visto al respecto en EXCEL.
Cómo escribir nombre de variables y constantes. Los nombres de todas las variables (y de las constantes si las hubiere), se denominan identificadores y están sujetos a las siguientes reglas sintácticas:
Deben comenzar siempre con una letra. Las mayúsculas y minúsculas son indistinguibles. Pueden contener hasta 128 caracteres. Pueden incluir guiones bajos ( _ ) y números. No puede haber más de un identificador con el mismo nombre. No deben contener espacios en blanco entre caracteres. No deben tener acentos ni símbolos que no sean ASCII puros. No deben tener nombres de palabras reservadas del lenguaje Los siguientes ejemplos corresponden a identificadores válidos:
Velocidad Dig0 Dig1 Aceleracion_inicial DivisiblePor2 etc. Los identificadores Dig0 y dig0 son indistinguibles para el compilador que dará el mensaje de error: Duplicate identifier. Los siguientes son ejemplos no-válidos:
DíaHábil aceleración inicial 7moMes Orden# etc.
(posee acentos). (tiene blancos intermedios). (comienza con un dígito). (utiliza un carácter no permitido).
Resulta muy útil combinar mayúsculas con minúsculas (si bien para Pascal son indistinguibles) a fin de dar mayor claridad al texto. Suelen utilizarse dos estilos:
ImpulsoInicial impulso_inicial que facilitan igualmente la legibilidad. Nótese que a la par de cada identificador y separado por dos puntos verticales ( : ) se halla la palabra integer (entero). Esto especifica que la variable pertenece a ese tipo.
Clase Teórica Nro 7
Pág. 4/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. La declaración de tipo es fundamental porque permite determinar qué valores y qué operaciones podemos asignarle. He aquí varios tipos de enteros permitidos en Pascal:
También se indica la ocupación de memoria necesaria para cada uno de ellos. Así por ejemplo un dato de tipo byte sólo ocupa 1 posición de memoria, mientras que un longint requiere de 4 posiciones (bytes). También las magnitudes que pueden manejar varían sustancialmente de un tipo a otro. IMPORTANTE: En realidad los identificadores son traducidos por el compilador como una dirección de memoria donde se almacenará o leerá el dato. Obviamente para el usuario es muchísimo más cómodo referirse a la variable por un nombre mnemotécnico que por su dirección en el mapa de memoria. Otro detalle importante es que al ser declarado un indentificador (por ej. a : byte) el mismo no ha sido aún inicializado con ningún valor. Este tipo de detalle es muy valioso si luego de la declaración de la variable se ejecuta por ejemplo la acción: a = a +1 ¿Qué valor posee a en ese momento? Tal vez cero si el compilador inicializa en ese valor por defecto al declarar una variable, o la basura que había en esa posición de memoria. Luego del bloque declarativo (variables y constantes) comienzan los códigos ejecutables. Ello se debe indicar con los delimitadores begin – end. Como puede haber muchos begin – end dentro de este bloque, al primero de ellos le anexamos el comentario (* main *) para indicar que allí comienza el bloque principal del programa. La última instrucción de cualquier programa Pascal es end. (con un punto final) y esto hace que cualquier código adicional que se hallare después de ese indicador, no será tomado en cuenta por el compilador. Sólo puede haber UN end con punto final. Las palabras claves:
clrscr; highvideo;
(clear screen limpieza de pantalla) (video intenso)
pertenecen a la librería crt declarada en la línea uses. Las notaciones:
Clase Teórica Nro 7
Pág. 5/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. n:=1; Suma:=0; se denominan asignaciones. Los dos puntos verticales (:) son parte obligatoria de la sintaxis al igual que el ( ; ) final. La ausencia de estos dos puntos indica una condición lógica, por ejemplo:
if(Suma=0) then …… ó bien una asignación de constantes:
const g = 9.81; Son los dos casos donde el ( = ) va solo. En cuanto al ( ; ) se denomina finalizador e indica que allí termina la instrucción que le precede. Esto permite escribir muchas instrucciones en una misma línea. El bloque repeat – until ya lo conocíamos de clase por medio de los pseudocódigos repetir – hasta, de manera que no añadiremos nada al respecto. Lo que sí conviene aclara es la instrucción writeln( ). Este comando se utiliza para mostrar mensajes por pantalla y al final de los mismos bajar una línea y llevar el cursor de impresión al primer carácter de dicha línea. En otras palabras: aplicar un retorno de carro como en las viejas máquinas de escribir. Normalmente writeln lleva dos tipos de argumentos: cadenas de caracteres entre comillas simples ( „ ), o variables cuyo contenido se vuelca en pantalla. De esta suerte, la orden:
writeln(„Suma = „, Suma); realiza lo siguiente: muestra el literal Suma =, y a continuación extrae de memoria el contenido de la variable Suma y lo coloca a la par del símbolo =. Por último la instrucción readkey (que también pertenece a la librería crt) “lee” un caracter de teclado (se queda esperando que el usuario “toque” cualquier tecla). Es un truco para lograr una “detención” o congelamiento de pantalla y darle tiempo al usuario para que inspeccione lo que está mostrando en el monitor. Al pulsar una tecla el programa finaliza y se vuelve al entorno integrado. NOTA: las palabras claves begin – end se llaman delimitadores en indican dónde comienza y dónde finaliza un bloque dado de instrucciones.
Código Fuente y Códigos Ejecutables. La codificación en instrucciones de Pascal que acabamos de escribir se denomina Código Fuente, y es un texto en ASCII puro. Sin embargo todavía está lejos de ser un programa ejecutable. Para ello necesitamos recurrir a otro menú del entorno: Compile:
Clase Teórica Nro 7
Pág. 6/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti.
Del cual tomaremos solamente la primera opción, la que está resaltada en la figura. El compilador realiza una serie de trabajos en forma completamente transparente para el usuario:
Verifica la sintaxis (instrucciones correctamente escritas). Verifica que no haya duplicidad de identificadores. Realiza los enlaces con las funciones de librerías (las propias y las declaradas en la sección Uses). Convierte todo a lenguaje máquina (instrucciones del micro) y crea un archivo .EXE que deja almacenado en memoria transitoria. Si quisiéramos modificar la ubicación de este ejecutable, tendríamos que activar la opción que dice: Destination Memory, que cambiará automáticamente a:
El resto de las opciones no son de la incumbencia de este curso.
¡¡ Correr nuestro primer programa!! Si todo anduvo bien y no salió ningún error de compilación o ya fueron corregidos, llegó el momento de ejecutar (correr) nuestro código ejecutable:
En pantalla deberán aparecer nuestros mensajes y quedar detenida momentáneamente la ejecución hasta tanto pulsemos una tecla, lo cual retornará al editor y al entorno integrado.
Clase Teórica Nro 7
Pág. 7/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. NOTA: Habrá notado que para las etapas de Compilación y Corrida existen combinaciones de tecla que hacen más ágil el proceso.
Conclusión. Con este breve programa hemos aprendido un montón de cosas:
La conformación de un programa Pascal. Declaración de librerías adicionales. Introducción de comentarios. Bloques declarativos de identificadores. Los datos de tipo “enteros” que maneja el lenguaje. Qué son los finalizadores de instrucción. Qué son los delimitadores. Operaciones de asignación. Notación de condiciones lógicas. Notación de constantes. Limpieza de pantalla. Salida de mensajes hacia el monitor. Congelamiento de pantalla. Finalización de códigos ejecutables. Compilación del programa fuente. Ejecución y verificación de funcionamiento.
De vuelta a los tipos de datos. Pascal admite los siguientes tipos de datos:
Numéricos. Lógicos. Cadenas de caracteres. Definidos por usuario. De todos estos, por el momento sólo nos interesan los numéricos. Anteriormente hicimos una descripción de los datos de tipo entero, tanto en su notación como en su rango y cantidad de bytes que requieren para su almacenamiento. Sin embargo no dijimos nada sobre las operaciones propias para enteros:
Operación
Descripción
---------------------------------------------------------------------------DIV División entera. MOD Resto de una división entera. SUCC Sucesor (siguiente). PRED Antecesor.
Clase Teórica Nro 7
Pág. 8/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. Los enteros pertenecen a lo que se denomina datos ordinales (ordenados), o sea que poseen un único antecesor y un único sucesor. Precisamente los comandos Succ y Pred obtienen esos valores sobre el argumento al que se aplican. La división entera DIV directamente trunca la parte decimal y se queda con la entera. Mod realiza la división entera y retorna el Resto. En el próximo material incluiremos otros tipos de datos, como los de punto flotante y los de tipo char (carácter)l
Algo más sobre el bloque declarativo. Imaginemos que estamos declarando variables:
Var
Nomb1 : ; Nomb2 : ; Nomb3 : ; Etc.
(* velocidad del móvil 1 *) (* velocidad del móvil 2 *) (* ................................... )
Resulta conveniente no poner muchas variables en una misma línea aún cuando éstas pertenezcan al mismo tipo: suele resultar problemático encontrarlas cuando estamos modificando o depurando el programa. En cambio todas encolumnadas hacen muy fácil su visualización, permitiendo además la inserción de comentarios que aclaren para qué se las utiliza en el programa. Otra: La palabra reservada Var implicará que TODOS los identificadores que le sucedan (no importa si aparecen en 20 ó en 100 líneas adicionales), continuarán siendo variables, hasta tanto aparezca otra palabra reservada, por ejemplo const.
Var
Vo : double; H : integer; m : double; const g = 9.81; PI = 3.1415; Lo dicho para el bloque Var también vale para el bloque const: todos los identificadores declarados a continuación de esta palabra serán constantes hasta tanto aparezca otra palabra reservada. Si por ejemplo necesitásemos otras variables a continuación de const, las mismas pueden agregarse insertando líneas en el bloque Var original, o bien crear un nueva declarativa Var:
Clase Teórica Nro 7
Pág. 9/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. Var
Vo : double; H : integer; m : double;
const g = 9.81; PI = 3.1415; Var
Vf : double; Vi : double; Etc.
El estilo de programación. Siempre resulta aconsejable seguir algunos lineamientos de escritura para que los códigos sean claros y fáciles de seguir: recuerde que algunas veces otras personas deberán leerlos, continuarlos o modificarlos, o Ud. mismo dentro de algún tiempo y seguramente habrá olvidado muchos detalles.
La Cabecera. Puede contener diversa información de referencia. Por ejemplo: Autor. Fecha. Breve descripción del programa. Algunos datos relevantes. Por ejemplo:
(* ---------------------------------------------------------------------------------------------------Autor : Juan Pérez. Fecha: 14/10/2007 Programa para ordenar matrices numéricas de n filas por m columnas. Se utilizó el método de la burbuja por razones de sencillez. ------------------------------------------------------------------------------------------------------ *)
Bloques Declarativos. Como dijimos anteriormente, conviene escribirlos en forma perfectamente encolumnada, a lo sumo con uno o dos identificadores por línea, agregando sólo aquellos comentarios que fuesen estrictamente necesarios. Utilizar nombres mnemotécnicos que sugieran su uso, por ejemplo:
Vel_ini Vel_fin
para velocidad inicial. para velocidad final.
Clase Teórica Nro 7
Pág. 10/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. PesoEspPb DensH2SO4 Etc.
Para peso específico del Plomo. Para densidad del ácido Sulfúrico.
Utilizar sangrías. Ayudan sobremanera a visualizar el orden jerárquico de las estructuras: dónde se hallan las cabeceras de cada una y dónde el bloque de instrucciones ejecutables. Considere por ejemplo los siguientes casos:
For x:=1 to 10 do begin write(„Ingrese a : „); readln(a); write(„ingrese b :‟); readln(b); c:=a+b; writeln(„Suma a+b = „,c); end; For x:=1 to 10 do begin write(„Ingrese valor de a : ‟); readln(a); write(„Ingrese valor de b : ‟); readln(b); c:=a+b; writeln(„SUMA a+b = „,c); end; Para el Compilador es exactamente lo mismo tanto el primero como el segundo código, pero para el usuario no: la segunda versión es muchísimo más clara y fácil de seguir.
Salvar periódicamente. Es común que, llevados por el entusiasmo o la concentración puestas al resolver un problema, nos olvidemos de ir salvando de tanto en tanto. ¡¡Un pequeño bajón de la tensión de línea y perdemos todo!! Conviene por lo tanto cada tanto líneas realizar un salvado preventivo.
Hacer un respaldo. Por lo general siempre arribamos a una primera versión que luego modificamos para optimizarla o hacerla más genera. Siempre conviene salvar la versión que YE ESTÁ FUNCIONANDO BIEN y trabajar sobre una copia de la misma: esta precaución evita muchos dolores de cabeza.
Clase Teórica Nro 7
Pág. 11/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti.
ESTRUCTURAS DE CONTROL EN PASCAL. Estructuras repetitivas. Son aquellas que “repiten”, como su nombre lo indica, un bloque de instrucciones ejecutables que puede ser tan simple como UNA SOLA INSTRUCCIÓN o bien UN CONJUNTO GRANDE DE INSTRUCCIONES.
La estructura FOR. Se utiliza cuando el número de iteraciones es conocido EN EL MOMENTO DE EJECUTARSE. La variable que gobierna las iteraciones se denomina “variable de control” y DEBE SER un identificador de tipo ORDINAL (recordando que este tipo de dato posee la característica que tiene UN SOLO ANTECESOR y UN SOLO SUCESOR). Desde este punto de vista, Pascal admite 3 tipos de datos como variable de control: ENTEROS. CHAR. BOOLEAN. DEFINIDOS POR USUARIO. Por el momento nos quedaremos con los enteros. La sintaxis de un lazo for es la siguiente: Lazo creciente:
FOR VarControl:=ValorInicial TO ValorFinal DO Begin Instrucciones ejecutables. End; Lazo decreciente:
FOR VarControl:=ValorMayor DOWNTO ValorMenor DO Begin Instrucciones ejecutables. End; Los incrementos o decrementos de la variable de control se realizan en forma completamente automática y de UNO EN UNO. Pascal no admite alteraciones del paso puesto que el lazo tiene un sentido específico: sólo realizar un número definido de repeticiones. La variable de control normalmente se utiliza en procesos de cálculo dentro del bloque ejecutable, pero teniendo la prudencia DE NO MODIFICARLA para no alterar el normal funcionamiento de la estructura. Imaginemos algo tan elemental como generar una tabla de funciones senoidales dentro de un cierto rango: por ejemplo entre 30 y 60 grados.
Clase Teórica Nro 7
Pág. 12/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. const Krad var Fi Seno Ampl
= PI/180; : integer; : double; : double;
begin Ampl:=10; For Fi:=30 to 60 do begin Seno:=Ampl*sin(Fi*Krad); writeln(„Seno(„,Fi,‟)=‟,Seno:2:3); end; end. Aquí Fi forma parte del cálculo de los valores senoidales, pero su valor en sí no es modificado en ningún momento. Dentro del bloque ejecutable se admite cualquier estructura o instrucción válida en Pascal, incluyendo anidamientos del propio for, por ejemplo: For n:=10 to 20 do For i:=2 to 5 do if(n MOD I =0)then writeln(„n=‟,n,‟ es divisible por „,i); NOTA: En este caso como cada bloque ejecutable está constituído por una sola instrucción, no es necesario colocar los delimitadores Begin – End, pero tampoco existe ningún impedimento para utilizarlo:
For n:=10 to 20 do begin For i:=2 to 5 do begin if(n MOD I =0)then writeln(„n=‟,n,‟ es divisible por „,i); end; end; El compilador “optimiza” el código fuente y elimina todo aquello que le resulta innecesario. Los valores iniciales y finales de cada lazo pueden también provenir a través de variables o constantes:
For n:=ValorInicial to ValorFinal do donde ValorInicial y ValorFinal son identificadores ordinales previamente declarados y asignados.
La estructura Repeat Until. Util cuando el número de iteraciones NO SE CONOCE de antemano y se sabe que AL MENOS UNA VEZ debe ejecutarse el bloque de instrucciones. Su sintaxis es:
Clase Teórica Nro 7
Pág. 13/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. Repeat Bloque ejecutable Until (CondLogica) Al igual que en el for, su bloque ejecutable puede contener anidamientos de ella misma y/o cualquier otra estructura permitida en Pascal. No debe perderse de vista que dentro del bloque ejecutable debe existir alguna instrucción que modifique la condición lógica permitiendo un valor de salida. Ejemplo: realizar una suma de enteros aleatorios de magnitud entre 10 y 20 y cuando el valor de esta acumulada sea mayor o igual que 250, finalizar. Mostrar además cuántas iteraciones se realizaron en una corrida.
Suma:=0; Cuenta:=0; repeat n:=10+random(11); Suma:=Suma+n; Cuenta:=Cuenta+1; until(Suma>=250); writeln(„Suma=‟,Suma); writeln(„Iteraciones=‟,Cuenta); Aquí no podíamos saber a priori cuántas iteraciones son necesarias puesto que dependen de las magnitudes aleatorias generadas. Observe cómo la instrucción de acumulación de valores generados, Suma, va modificando la condición de salida. Podríamos agregarle cosas como por ejemplo: cuántas cifras mayores de 15 se generaron. O cuántos valores pares, etc. Otros detalles destacables, aunque ya vistos en pseudocódigo son: La evaluación de la condición de salida se realiza AL FINAL. El lazo se ejecuta AL MENOS UNA VEZ. No requiere de los delimitadores Begin – End. Las iteraciones se realizan por CONDICIÓN NEGADA.
Generación de números aleatorios. Pascal posee un generador de números aleatorios bastante aceptable y que facilita enormemente la prueba de programas que requieren de muchos ingresos numéricos ya que nos evitan el tener que tipear estos valores. Su sintaxis es la siguiente:
n:=random(Valor) donde “n” puede ser tanto entero como de punto flotante. En cambio “Valor” DEBE SER un entero por exigencia sintáctica. El valor aleatorio que se genera está comprendido entre 0 y Valor – 1. Ejemplo: random(20) produciría un número aleatorio en-
Clase Teórica Nro 7
Pág. 14/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. tre 0 y 19. Es posible realizar muchas combinaciones y rangos con esta herramienta aleatoria:
n:=100 + random(101) n:=500 – random(51)
Números entre 100 y 200 Números entre 500 y 450.
etc. Esta instrucción normalmente va precedida de la siguiente:
randomize; que REINICIALIZA el secuenciador para que siempre arranque de valores diferentes y NO REPITA la misma serie aleatoria. La instrucción random( ) también puede utilizarse en procesamientos más complicados como el siguiente:
repeat n:=random(200); until(n MOD 3 = 0); El lazo hace que la generación aleatoria se repita hasta tanto se haya logrado un número divisible por 3. Además este ejemplo muestra otra aplicación de repeat until.
La estructura while( ) do. Otra utilidad muy conveniente cuando no conocemos el número de iteraciones. Su sintaxis es la siguiente:
While(CondLogica) do begin Bloque ejecutable; end; Resulta el complemento perfecto de la anterior: repeat until : La evaluación de la condición de salida se realiza AL COMIENZO del bloque. Repite por CONDICION VERDADERA. Puede NO EJECUTARSE NUNCA si la condición resulta falsa. Lleva delimitadores Begin End cuando engloba más de una instrucción. Ejemplo: Hallar los “n” pares consecutivos que se obtiene dividiendo sucesivamente un entero dado en 2. La ejecución finaliza en el momento en que encuentra el primer impar.
Clase Teórica Nro 7
Pág. 15/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. program EnterosConsecutivas; (* ------------------------------------------------------Ingresada una magnitud entera N, mientras sea par, divi dir consecutivamente por 2 e ir mostrando por pantalla. ----------------------------------------------------- *) uses crt; var
N
: word;
begin (* main *) clrscr; highvideo; N:=12000; while(N MOD 2 =0) do begin writeln(' N=',N); N:=N DIV 2; end; readkey; end. Si N hubiese sido impar desde el momento de su asignación el lazo while( ) no se hubiese ejecutado jamás. ¿Qué hubiese pasado si hubiéramos empleado repeat ? Este otro ejemplo es sumamente interesante porque engloba la estructura repeat con un par de while do:
program FiboEntreLimites; (* ----------------------------------------------------------------------------------------------------------------Generar dos números enteros aleatorios N1 y N2 que serán los limites de un rango dentro del cual se buscaran números de Fibonacci. Cuando los números hallados dentro de este rango sea mayor o igual a 5, el programa finalizara. Ir mostrando por pantalla los Fibos hallados. ------------------------------------------------------------------------------------------------------------- *) uses crt; const TOT_FIBOS = 5; var N1 : integer; (* limite inferior del rango para Fibos *) N2 : integer; (* limite superior del rango para Fibos *) Prim : integer; Seg : integer; Fibo : integer; Cuenta : integer;
Clase Teórica Nro 7
Pág. 16/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. begin (* main *) clrscr; highvideo; randomize; repeat N1:=random(101); N2:=N1+random(201); writeln(' N1=',N1,' N2=',N2); writeln(' ------------------------'); Prim:=0; Seg:=1; Fibo:=Prim+Seg; Cuenta:=0; while(Fibo0)then if(Re=0)then Fi:=90 else if(Re 153 Con esto tenemos la base para repetir los pasos hasta aislar el dígito de más a la izquierda.
En la próxima implementaremos un pseudo código que nos lleve a la solución del problema.
Clase Teórica Nro 7
Pág. 22/25
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2011 Departamento de Ciencias de la Computación – FACET / UNT Grupo II – Dictado: Ing. Juan Manuel Conti. Algoritmo: Descomponer un entero en sus dígitos individuales. N