Módulo - ProgramaciónI - 2008

download Módulo - ProgramaciónI - 2008

of 122

Transcript of Módulo - ProgramaciónI - 2008

ASIGNATURA: PROGRAMACIN I NDICEMdulo I: Algoritmos y programacin estructurada. 3 1.1. 1.2. 1.2.1. 1.2.2. 1.2.3. 1.3. 1.3.1. 1.3.2. 1.3.2.1. Definiciones de programa y algoritmo. Programas en Pascal Asignacin Delimitador Instrucciones bsicas en Pascal Estructuras de datos Introduccin Definicin de tipo de datos Tipos predefinidos 3 6 7 8 8 27 27 28 29 30 30 31 34 36 40 40 40 42 42 44 44 44 45 45 46 52

1.3.2.1.1. Tipos ordinales 1.3.2.1.2. Tipos reales 1.3.2.2. 1.3.3. 1.4. 1.5 1.5.1. 1.5.2. 1.6. 1.6.1. 1.6.2. 1.6.2.1. 1.6.2.2. 1.7. 1.8. 1.9. 1.10. Tipos definidos por el programador Declaracin de tipos en un programa Declaracin de constantes Operaciones con enteros. Operacin DIV Operacin MOD Funciones bsicas con enteros Funcin ODD Funciones SQR y SQRT Funcin SQR Funcin SQRT Operandos algebraicos ms usuales Comparaciones Vectores Matrices

Mdulo II: Estructuras de datos compuestas. 2.1. 2.1.1. Registros Vectores con registros

58 58 641

IRSO Programacin I

2.2. 2.2.1. 2.2.1.1. 2.2.1.2. 2.2.1.3. 2.3.

Utilizacin de subprogramas Funciones y procedimientos Introduccin Funciones Procedimientos Archivos

69 69 69 70 77 87

Mdulo III: Recursividad y conjuntos. 3.1. 3.2. 3.3. 3.4. Procedimiento recursivo Funcin recursiva Nocin de conjunto Funciones estndar

111 111 116 119 120

IRSO Programacin I

2

MDULO I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADACules son nuestros objetivos para este mdulo? La idea es que esta primera parte permita al alumno interiorizarse de la forma de las instrucciones bsicas y de la estructura de un programa. O sea: Definir correctamente la estructura de un programa en Pascal. Identificar las distintas formas de definir tipos. Diferenciar constante y variable. Escribir correctamente las instrucciones bsicas.

Comenzamos el estudio focalizando nuestros esfuerzos en la comprensin de algunos conceptos que nos acompaarn no slo a lo largo del presente curso, sino que deben ser el punto de partida para poder ampliar nuestros conocimientos en todo el campo del saber asociado a la programacin.

1.1.- DEFINICIONES DE PROGRAMA Y ALGORITMOLas preguntas iniciales que debemos hacernos son: qu es un programa?, para qu programar?, por qu programamos?. Para poder encontrar una base de respuesta a alguna de estas preguntas, podramos tomar un diccionario de los que tenemos en nuestros hogares y escribir en los renglones que tenemos disponibles a continuacin, la definicin de programa.

programa:_____________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________

IRSO Programacin I

3

_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ __________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________

Seguramente leyendo la presente definicin encontraremos muchas acepciones que tienen relacin directa con lo que es un programa computacional y otras que no tienen nada que ver con la misma. El siguiente ejercicio consiste en seleccionar dentro de las distintas acepciones a la palabra programa, aquellas que pueden tener relacin con un

programa computacional, de modo que la definicin seguramente se reducir a:

programa:_____________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________

IRSO Programacin I

4

Sin conocer lo que han escrito como definicin de programa podra creer que la misma se aproxima mucho a la que vamos a utilizar para homogeneizar criterios en nuestro curso. Vamos a definir programa como una secuencia de instrucciones ordenadas que nos permiten resolver un problema. La resolucin del problema obviamente necesita de datos de partida que sern procesados por el programa y devueltos como datos de salida del mismo. Esto indica que todo programa est asociado a un proceso. Este proceso no es ni ms ni menos que el algoritmo que resuelve el problema planteado. Una vez ms tenemos una palabra que no hemos usado nunca antes, la misma es algoritmo. Nuevamente vamos a recurrir a nuestro diccionario de cabecera para definir la palabra algoritmo:

algoritmo:_____________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________

Seguramente tendr mucho de parecido con la presente definicin: un algoritmo es una secuencia de instrucciones ordenadas de manera lineal (esto indica que se ejecutan una detrs de la otra siguiendo un orden

IRSO Programacin I

5

establecido) y pudiendo repetirse el mismo cdigo en reiteradas oportunidades. Basndonos en estas definiciones que an no estn completas y slo encierran una idea de lo que queremos hacer, es que podemos comenzar a trabajar sobre los programas en Pascal, desarrollando algoritmos que nos permitan solucionar determinados problemas.

1.2.-PROGRAMAS EN PASCALUn programa en Pascal tiene una forma dada a grandes rasgos - por: un encabezado; una declaracin de constantes, tipos y variables; y un desarrollo de programa.

El encabezado est iniciado por la palabra reservada program seguida de un nombre que puede generar el programador tal como se indica a continuacin:

program ; type {declaracin de tipos} var {declaracin de variables}

begin {programa principal} end.

Puede verse que luego del encabezado est la declaracin de tipos y de variables sobre las que avanzaremos en breve, y el bloque de programa principal donde se genera la secuencia de proceso que soluciona nuestro problema. Vemos que luego del nombre del programa hay que definir un ; que delimita el fin del encabezado y que, luego del end del programa principal se coloca siempre un ., indicando el fin del programa.IRSO Programacin I 6

La forma del encabezado es:

program ;

1.2.1.-ASIGNACINLa asignacin es la accin de cargarle un valor a una variable (definimos variable como aquel elemento en el cual es posible almacenar datos en forma transitoria, es decir que el valor contenido en la misma puede variar a travs del tiempo). La misma se denota a travs de :=, del lado izquierdo del signo se coloca la variable destino a la cual se le carga el valor mientras que del lado derecho se coloca el valor que le queremos cargar a la variable destino. Podemos utilizar los siguientes ejemplos para comprenderlo:

z:=8 p:=2.11 k:=m

donde z es una variable entera (integer) donde p es una variable real (real) donde m es una variable caracter (char)

La asignacin se realiza a travs de

:=

IRSO Programacin I

7

1.2.2.-DELIMITADORPara indicar el final de una instruccin se utiliza el delimitador punto y coma. De esta forma, cada vez que una instruccin est completa deber colocarse este ; indicando el final de la misma, y que a partir de ah comienza una nueva instruccin. Por ejemplo, si se asigna el valor 7 a la variable y, la instruccin completa incluyendo el delimitador ser: y:=7;

El punto y coma al final de la lnea indica que esa instruccin est completa y, que a partir de all comienza una nueva instruccin.

El delimitador es el

;1.2.3.-INSTRUCCIONES BASICAS EN PASCALa.- IF ... THEN ... ELSE ... Esta instruccin especifica condiciones para que una accin sea ejecutada. La forma bsica que tiene esta instruccin es la siguiente:

if then else

Si la condicin despus del if es verdadera, las acciones que estn despus del then se ejecutarn. Si en cambio la condicin despus del

IRSO Programacin I

8

if es falsa, las acciones que se ejecutarn son las que estn despus del else. La parte asociada al else puede no existir, haciendo que la instruccin se reduzca a la forma ms usualmente utilizada:

if then

En esta, si la condicin es verdadera las acciones despus del then se ejecutarn. Si la condicin es falsa, no ejecutar ninguna accin.

Ejemplo: Para poder visualizar ms concretamente esta instruccin, podemos utilizar el siguiente ejemplo,

if (p=3) then z:=8; La condicin es: p=3. La condicin ser verdadera si la variable p vale 3. La accin es: z:=8. La accin que se ejecutar es asignarle 8 a la variable z.

Por lo tanto, lo que aqu dice es que si el valor de la variable p es igual a 3 entonces asigna el valor 8 a la variable z. Debemos con estas instrucciones comenzar a trabajar escuchando lo que nuestro interlocutor quiere, cada vez que nos solicita una solucin de un problema utilizando un programa. En este caso l nos dir si el valor de p es 3 entonces quiero que se le asigne el valor 8 a la variable z.

Esto es lo que nosotros expresamos coloquialmente cada vez que queremos hacer algo. De esta forma es ms que importante que comencemos a saber escuchar qu es lo que nuestros interlocutores desean que realice un programa, para utilizar especficamente la instruccin que corresponde. Este, es quizs el punto clave sobre el que todo programador debe poner especial nfasis. La tarea de comprensin de la inquietud de nuestro interlocutor ser lo que a travs de nuestro trabajo, garantice el correctoIRSO Programacin I 9

funcionamiento de nuestro programa, y que el mismo alcance el fin para el cual est siendo creado.

!

Debemos comprender cul es nuestro problema para encontrarle una solucin y luego programar. La programacin debe ser la ltima tarea en nuestro esquema de trabajo.

Ejemplo: Si utilizamos la siguiente instruccin,

if (p=3) then z:=8 else z:=11;

La condicin es: p=3. La condicin ser verdadera si la variable p vale 3. La accin es: z:=8. La accin que se ejecutar es asignarle 8 a la variable z si la condicin p=3 es verdadera. La accin es: z:=11. La accin que se ejecutar es asignarle 11 a la variable z si la condicin p=3 es falsa.

Por lo tanto, resumiendo y volviendo al lenguaje coloquial, tenemos que si p es igual a 3 entonces z quedar cargado con el valor 8; si en cambio p tiene cualquier otro valor, z quedar cargado con el valor 11. Esto es lo que dice nuestra instruccin if precedente.

Obviamente, es posible colocar ms de una accin a cada condicin. En el caso que esto suceda, debern utilizarse los delimitadores begin y end para indicar las acciones que tiene comprendidas esa condicin.

IRSO Programacin I

10

Ejemplo: Si p es igual a 3 quiero asignarle el valor 8 a la variable z y el valor 1 a la variable m, en cambio si p es distinto de 3 quiero asignarle el valor 11 a z y 2 a m. Ntese que este enunciado debe escribirse de la siguiente manera siguiendo las reglas que hemos ido definiendo en la presente unidad:

if (p=3) then begin z:=8; m:=1 end else begin z:=11; m:=2 end;

Veamos que las acciones estn comprendidas entre los begin y end correspondientes a la rama del then y a la rama del else. En cada una hay dos acciones. Al final de cada accin de las que se encuentran en la primera posicin tenemos un delimitador que indica que la instruccin termin y que luego viene otra instruccin. Al final de la segunda instruccin no tenemos ; indicando que termin la instruccin pero si tenemos la palabra reservada end que acta por s sola como delimitador. De esta manera acostumbremos a no escribir ; antes de un delimitador end. Luego del end asociado al else se observa que hemos colocado un ;, el mismo indica que la instruccin if termina en ese ;.

IRSO Programacin I

11

La forma de la instruccin if es la siguiente:

If then else

Con esto completamos bsicamente los primeros conceptos asociados a la instruccin if. De esta manera podremos muy pronto comenzar a escribir nuestros primeros programas utilizando este lenguaje.

b.- WRITE y WRITELN Estas dos instrucciones permiten escribir una cadena de caracteres sobre un dispositivo determinado. El dispositivo podra ser por ejemplo una pantalla, una impresora, un archivo o cualquier otro de los que conocemos como de salida.

El parmetro que tiene esta instruccin es justamente la cadena de caracteres que nosotros deseamos sea enviada al dispositivo considerado. Por ejemplo, si escribimos write (hola); , lo que aparecer en pantalla (que es el dispositivo tomado por defecto cuando no se nombra ningn otro) ser lo siguiente:

hola

IRSO Programacin I

12

Sobre el margen izquierdo aparecer la palabra hola que es justamente lo que nosotros enviamos a escribir sobre la pantalla. En este caso, la utilizacin del write hace que el cursor se quede preparado en la ltima posicin vlida una vez que escribi sobre la pantalla. De este modo si enviamos otra palabra a pantalla utilizando la instruccin write, lo que conseguimos es que la segunda palabra aparezca al lado de la primera. Esto es, si la secuencia de instrucciones es la siguiente: write (hola); write (chau); lo que aparecer en la pantalla es lo que se ve a continuacin:

holachau

Lo que vemos es que la palabra chau se escribi a continuacin de la palabra hola. Si escribiramos una tercer palabra a continuacin: write (hola); write (chau); write (jaja); lo que lograramos sera:

holachaujaja

IRSO Programacin I

13

Aqu se ve muy claramente que el write va permitiendo la escritura sobre el dispositivo seleccionado (en este caso la pantalla) sin ningn tipo de control y carcter por carcter uno a continuacin del otro. Muchsimas veces a nosotros nos interesa mostrar la informacin de una manera ms ordenada. Para ello podemos recurrir a otra instruccin que es el writeln. Con el writeln lo que logramos es escribir la cadena de caracteres correspondiente que tiene asociada y, automticamente pasar a la primera posicin de la siguiente lnea. De esta manera, cuando volvamos a escribir, estaremos escribiendo sobre la siguiente lnea.

Por ejemplo, si la secuencia de instrucciones que tenemos es: writeln (hola); writeln (chau); writeln (jaja);

Esto se ver representado en la pantalla como:

hola chau jaja

Podemos llegar tambin a combinar estas instrucciones como por ejemplo: write (hola); writeln (chau); writeln (jaja);

IRSO Programacin I

14

Esto generar lo siguiente en la pantalla:

holachau jaja

Conociendo las instrucciones if, write y writeln es posible comenzar a desarrollar aplicaciones. Para ello debemos trabajar sobre la forma de un programa en principio muy bsico, para que con el transcurso del tiempo vayamos agregando estructuras ms complicadas. Nuestro objetivo es lograr generar un programa a partir de un pensamiento lgico muy profundo por ms sencillo que sea de resolver el problema de modo de poder ir creciendo en cuanto a aplicaciones y cantidad de instrucciones.

Estructura bsica de un programa:La estructura bsica de un programa est formada por un encabezado, una definicin de constantes, tipos de datos y variables, y la parte de lgica y algoritmo del programa propiamente dicha donde se desarrolla la solucin a la aplicacin. El formato estndar de un programa es el siguiente:

IRSO Programacin I

15

program ; var ... ... begin ... ... end.

Luego de la palabra reservada program, se coloca el nombre del programa. El mismo es definido por el programador. Despus del nombre del programa se coloca un delimitador ;. A continuacin se declaran las variables a ser utilizadas por el programa (luego de la palabra reservada var que indica el comienzo de esta seccin) y, entre el begin y el end se escribe la secuencia de programa. Ntese que luego del end de fin de programa, se coloca un . como delimitador. Con esto es posible comenzar a trabajar en la generacin de algunos programas sencillos utilizando las estructuras que hemos ido describiendo a lo largo del curso.

Ejemplo: Generar un programa que permita imprimir Programacin I en la pantalla. Para ello vamos a utilizar la instruccin write o writeln de manera de escribir sobre el dispositivo de salida.

NOTA: Usted est en condiciones de realizarlo slo. Para ello recurra a los conceptos desarrollados con anterioridad y, utilizando la estructura bsica de un programa trate de hacer este ejemplo a continuacin. Luego coteje con el texto.

IRSO Programacin I

16

_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________

El programa ser el siguiente:

program escribir; begin writeln (Programacin I) end.

En este programa, podemos observar lo siguiente: a) El nombre del programa es escribir. b) Luego del writeln no hay un delimitador ; porque luego del writeln tenemos un delimitador end. Ya dijimos en su oportunidad que no necesitbamos utilizar delimitadores ; antes de un delimitador end. c) Este sencillo programa realiza la escritura sobre pantalla de la palabra Programacin I. Si tuvo dificultades para realizar el ejemplo, le sugiero que relea el texto desde el comienzo del mdulo.IRSO Programacin I 17

c.-READLN Esta instruccin permite leer de teclado un valor que es inmediatamente cargado a una variable. Por ejemplo, si utilizamos la instruccin readln(p) donde p es una variable de tipo entera, la manera en la que esta instruccin acta es la siguiente: al ejecutarse la instruccin readln, se activa papadeante en pantalla el cursor esperando el ingreso de un valor entero por parte del operador. Este tipea el valor entero y luego presiona la tecla enter con lo cual se genera inmediatamente la carga del valor tipeado a la variable que tiene como parmetro entre parntesis la instruccin readln. Con esta instruccin completamos el conjunto de instrucciones elementales que nos permiten interactuar con el operador. Ya hemos visto las instrucciones write y writeln que nos permiten escribir sobre un dispositivo (por ejemplo, la pantalla), y ahora hemos dicho que la instruccin readln nos permite leer valores ingresados, por ejemplo desde el teclado.

Ejemplo: Generar un programa que imprima la palabra uno si se ingresa el valor 1 desde teclado. Si se ingresa cualquier otro valor que imprima la palabra otro. program ingreso; var x: integer; begin writeln (Ingrese un valor); readln (x); if (x=1) then writeln (uno) else writeln (otro) end.

IRSO Programacin I

18

En este programa podemos observar lo siguiente: a) El nombre del programa es ingreso. b) Las variables se definen utilizando los : para indicar su tipo. De esta forma, la variable x definida en el presente programa es de tipo entera (integer). Al final de la lnea se coloca el delimitador ;. c) Ntese que antes del else no hay delimitador ;. Debemos tener muy en cuenta esto y NUNCA escribir un ; antes de un else, ya que el else acta por s slo como delimitador. d) Obsrvese que antes del end no hay delimitador ; dado que el end acta por s slo como delimitador. e) La instruccin readln realiza la lectura desde teclado del valor de la variable x. f) La instruccin writeln (Ingrese un valor) nos permite darle aviso al operador de que el programa est esperando que se ingrese un valor desde teclado. Estos comentarios por ms reiterativos que parezcan hacen especficamente a un correcto desenvolvimiento en lo relacionado con la escritura de los programas lo que nos permitir trabajar con la menor cantidad de errores de edicin de los mismos. Esto redundar en una mejor calidad de nuestro producto (programa).

La definicin de las variables se realiza utilizando

:

IRSO Programacin I

19

!

Antes de un else y antes de un end NO se colocan delimitadores ;.

Ejemplo: Generar un programa que imprima la palabra uno si se ingresa el valor 1 desde teclado. Si se ingresa cualquier otro valor que imprima el valor ingresado.

program ingreso; var x: integer; begin writeln (Ingrese un valor); readln (x); if (x=1) then writeln (uno) else writeln (x) end.

En este programa podemos observar lo siguiente: a) Lo nico que se ha modificado respecto del programa anterior es que en el segundo writeln donde antes escribamos la palabra otro en pantalla, ahora directamente se escribe el valor diferente de 1 que ingrese el operador. Ese valor est guardado en la variable x.IRSO Programacin I 20

Ejemplo: Generar un programa que imprima la palabra uno si se ingresa el valor 1 desde teclado. Si se ingresa cualquier otro valor que imprima la leyenda Valor ingresado diferente de 1 y el valor ledo de teclado.

NOTA: Usted est en condiciones de realizarlo slo. Para ello recurra a los conceptos desarrollados con anterioridad y, utilizando la estructura bsica de un programa trate de hacer este ejemplo a continuacin. Luego coteje con el texto.

_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________IRSO Programacin I 21

_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________

program ingreso; var x: integer; begin writeln (Ingrese un valor); readln (x); if (x=1) then writeln (uno) else begin writeln (Valor ingresado diferente de 1); writeln (x) end end.

IRSO Programacin I

22

En este programa podemos observar lo siguiente: a) Lo nico que se ha modificado respecto del programa anterior es que en la rama del else tenemos dos instrucciones. Esa es la causa por la que hubo que agregar en la misma el begin y el end. b) Ntese que antes del end del else no tenemos ; como as tampoco antes del end del programa principal. c) Las instrucciones asociadas al else estn separadas por ;. Si tuvo dificultades para realizar el ejemplo, le sugiero que relea el texto desde Estructura bsica de un programa.

d.- FOR ... TO, FOR ... DOWNTO La forma que tiene la instruccin for es la siguiente:

for := to do for := downto do

La instruccin for hace que las instrucciones despus del do sean ejecutadas una vez para cada valor en el rango [valor inicial al valor final]. La variable de control y los valores inicial y final deben ser de un tipo ordinal (discretos con orden) . Cuando utilizo la estructura del for que contiene el to, el valor de la variable de control es incrementado de a 1 por cada lazo que realiza. Cuando utilizo la estructura del for que contiene el downto, el valor de la variable de control es decrementado de a 1 por cada lazo que realiza. Ejemplo: Dado el siguiente for, for i:=1 to 4 do writeln (Hoy); lo que se genera sobre la pantalla es lo que a continuacin se muestra

IRSO Programacin I

23

Hoy Hoy Hoy Hoy

De esta manera se ha ejecutado tal como se prevea, cuatro veces el lazo que contiene el for, en este caso constitudo slo por una instruccin writeln que escribe en pantalla la palabra Hoy.

La forma de la instruccin for es la siguiente:

for := to do

e.- WHILE La instruccin while tiene la siguiente forma: while do Esta estructura tiene una condicin que controla la ejecucin repetida de las acciones. En la misma, las acciones se ejecutan mientras que la condicin sea verdadera. En el caso que la condicin es falsa, la ejecucin del cicloIRSO Programacin I 24

finaliza. La condicin es evaluada siempre antes de que la accin se ejecute, de modo que si la condicin al inicio del ciclo es falsa, la accin no ser ejecutada nunca. Desde el punto de vista coloquial, la instruccin while puede ser pensada como: mientras se cumpla la condicin ejecuto las acciones.

La forma de la instruccin while es la siguiente:

while do

f.- REPEAT ... UNTIL La instruccin repeat tiene la siguiente forma: repeat until

Esta estructura tiene una condicin que controla la ejecucin de las acciones hasta que se cumpla la condicin. Esto es, las acciones se ejecutarn mientras la condicin no sea verdadera. Cuando la condicin sea verdadera, el ciclo finalizar. La condicin es evaluada siempre despus de que la accin se ejecute de modo que las acciones se ejecutarn al menos una vez. Desde el punto de vista coloquial, la instruccin repeat puede ser pensada como: repetir la ejecucin de las acciones hasta que se cumpla la condicin.

IRSO Programacin I

25

La forma de la instruccin repeat es la siguiente:

repeat

until ;

g.- case ... of La instruccin case...of permite a travs del valor que puede tomar una variable, realizar distintas acciones. La forma de la misma es la siguiente: case of : ; : ; : ; .......... : end; Entonces, en funcin del valor que tome la variable definida en el encabezado de la instruccin, se ejecutarn las acciones que correspondan.

Ejemplo: case x of 1: readln(t); 2: writeln(Ingrese otro valor); 3: z:=z+4; end;

IRSO Programacin I

26

h.- Comentario { } Para denotar un comentario, se utilizan las llaves { } Ejemplo: {Esto es un comentario}

1.3.ESTRUCTURAS DE DATOS 1.3.1.INTRODUCCIN:Espero que hayan comprendido los conceptos fundamentales tratados en la unidad anterior como qu es un algoritmo?, cmo se estructura un programa en Pascal?, cules son las instrucciones ms importantes?.

Si alguna de estas preguntas no tiene respuesta en este momento, por favor releer la unidad temtica anterior nuevamente de modo de fijar concretamente estos conceptos porque sin ellos, es imposible continuar con el desarrollo de la presente unidad.

Si todo fue comprendido, continuamos.

Aqu vamos a tratar de comprender bsicamente cules son los tipos de datos que permite manejar este lenguaje, la forma de definirlos y el rango que cada uno de ellos abarca. Para ello vamos a presentarlos uno por uno y, luego hacer unas ejercitaciones de modo que se comprenda cada uno, pudiendo luego utilizarlos para la generacin de programas.

Vayamos ahora entonces a desarrollar la presente unidad sin olvidar cul es el objetivo de la misma: Identificar los tipos de datos bsicos que maneja Pascal, tanto aquellos que vienen predefinidos como los que define en funcin de su necesidad el programador.

IRSO Programacin I

27

1.3.2.DEFINICIN DE TIPO DE DATOS:Un tipo de datos, es el conjunto de valores que puede tomar una variable. Me gustara ahora que nos concentremos un poco en esta definicin de modo de ampliarla y comentarla.

Como hemos comentado en la unidad anterior, dentro de la estructura de nuestro programa hay diferentes elementos que coexisten de modo de satisfacer nuestra necesidad bsica de procesamiento; slo podremos procesar si tenemos qu procesar. Eso que vamos a procesar no son ni ms ni menos que datos que seguramente manejaremos con una variable que los aloja. Esos datos podrn ser por ejemplo: enteros, reales, caracteres, etc. Cada uno de estos posibles conjuntos de valores que puede tomar una variable es lo que nosotros denominamos tipo. Como vemos algunos de estos conjuntos tienen una cantidad limitada de posibles valores, tal es el caso de los caracteres, de los que slo existen 256 valores diferentes. Otros tienen una cantidad casi ilimitada como por ejemplo los reales. Las comillas en este caso indican algo que por ms lgico que sea vale la pena aclarar: el conjunto de los reales en una computadora no es un conjunto infinito de datos como lo es en la matemtica. Aqu las limitaciones fsicas en cuanto a hardware se refiere, hacen imposible que la cantidad de datos con los que se trabaje sea infinito. De este modo siempre que trabajamos con un sistema estamos trabajando con una cantidad finita de datos aunque en la mayora de las aplicaciones es muchsimo ms que suficiente.

Existe una clasificacin que permite identificar dos formas diferentes en las que se presentan los tipos: Tipos de datos predefinidos por Pascal Tipos de datos definidos por el programador

IRSO Programacin I

28

1.3.2.1.TIPOS PREDEFINIDOSQu son los tipos predefinidos? Son aquellos que son propios del lenguaje y ya vienen definidos implcitamente en el mismo.

Cules son los tipos predefinidos? Estos tipos de datos son principalmente los que se enumeran a continuacin:

integer: enteros, son valores discretos entre 32568 y +32567 (llamados MAXINT y +MAXINT, donde MAXINT es la constante que contiene el valor 32567 haciendo que muchas veces se considere el integer como que puede variar entre 32767 y +32767). Por ejemplo, son valores enteros el 3, 1, 5, -12603 y 4502.

char: caracter, son los 256 posibles valores de los caracteres considerados en la tabla ASCii. Por ejemplo, son valores carcter a, l, T, M, 1, 5, +. En todos los casos, un valor caracter va indicado entre apstrofos.

boolean: valor lgico verdadero o falso (TRUE o FALSE). Estos son los nicos dos valores que puede tener asociados una variable de este tipo.

real: real, son valores reales comprendidos entre X y +X. Es el tipo de datos ms extenso con los que trabaja Pascal. Se puede considerar a este intervalo como un continuo de valores entre X y +X aunque como nosotros sabemos esto est limitado por una capacidad fsica de hardware. La parte entera y la parte decimal en los reales estn separadas por un punto. Por ejemplo, son valores reales el 1.23; 2.3156; 6.214 y 123.33333.

IRSO Programacin I

29

Existen muchos otros tipos de datos predefinidos por Pascal que iremos ampliando con el correr de este curso, pero para profundizar necesitamos conocer muchas estructuras de datos que an no manejamos.

Ahora que hemos comprendido bsicamente cules son los tipos de datos predefinidos en Pascal, podemos abrir un poco ms nuestra definicin y decir que dentro de los tipos predefinidos encontramos dos grandes grupos: los tipos ordinales y los reales. A continuacin vamos a hablar un poco ms sobre ellos:

1.3.2.1.1. TIPOS ORDINALESLos tipos ordinales son los siguientes: Shortint, Integer, Longint, Byte, Word, Boolean y Char. El rango que cada uno de ellos abarca y la cantidad de bits que ocupa a nivel de manejo, es el que puede verse en la siguiente tabla:

TIPO DE DATO Shortint Integer Longint Byte Word

RANGO -128 .. 127 -32768 .. 32767 -2147483648 .. 2147483647 0 .. 255 0 .. 65535

TAMAO 8 bits 16 bits 32 bits 8 bits 16 bits

Otras dos clases de tipos ordinales pero definidos por el programador son los tipos por enumeracin y por rango sobre los que vamos a comenzar a trabajar a continuacin.

1.3.2.1.2. TIPOS REALESPascal provee cinco tipos reales predefinidos, los que enumeramos a continuacin:

IRSO Programacin I

30

TIPO Real Single Double Extended Comp

RANGO 2.9e-39 .. 1.7e38 1.5e-45 .. 3.4e38 5.0e-324 .. 1.7e308 3.4e-4932 .. 1.1e4932 -9.2e18 .. 9.2e18

DIGITOS 11-12 7-8 15-16 19-20 19-20

BYTES 6 4 8 10 8

Aqu tal vez encontramos una notacin que puede ser nueva para muchos, la misma es la notacin exponencial representada por la letra e seguida de un valor positivo o negativo. El valor positivo indica ceros a agregar a la derecha del nmero precedente, por ejemplo si tenemos la siguiente notacin exponencial 2.3e4, indica que debemos multiplicar al nmero 2.3 por el valor 10000 (un 1 y 4 ceros), ese 4 es el indicado en la notacin exponencial de modo que el valor representado es el siguiente: 2.3x10000=23000. En el caso de que el nmero que siga a la letra e sea negativo, como por ejemplo 2.3e-3, debemos dividir el nmero indicado antes de la e por el valor 1000, es decir 2.3/1000=0.0023 se corre de esta forma 3 lugares hacia la izquierda la coma. De este modo cuando el nmero que sigue a la e es positivo, multiplicamos al que precede a la e por un 1 seguido de la cantidad de ceros indicados luego de la e. Si el nmero que sigue a la e es negativo, debemos dividir el nmero que precede a la e por un 1 seguido de la cantidad de ceros que indica el nmero luego del signo menos que est a la derecha de la e.

1.3.2.2.TIPOS DEFINIDOS POR EL PROGRAMADORQu son los tipos definidos por el programador? Son aquellos generados por el programador en funcin de las necesidades que pueda tener en un programa determinado.

IRSO Programacin I

31

Cmo se definen estos tipos de datos? Hay dos formas de definir estos tipos de datos: Por enumeracin Por rango

Cuando defino un tipo por enumeracin, debo identificar unvocamente cada uno de los valores que puede tomar una variable de ese tipo. Esto es, debo enunciar cada uno de los posibles valores utilizando comas para separarlos y parntesis para indicar dnde comienza y dnde termina el conjunto de datos enumerados. Por ejemplo si quiero declarar un tipo de datos que contenga slo los cinco primeros valores pares, debera declarar: (0, 2, 4, 6, 8). Si quiero declarar el tipo de datos que contenga los colores rojo, azul y violeta, la definicin sera: (rojo, azul, violeta). El color rojo para esta definicin tiene una ordinalidad de cero porque es el primer elemento declarado en este tipo, el azul un orden de 1 y el violeta un orden de 2. Evidentemente este tipo de declaracin es sumamente precisa pero muy engorrosa al momento de generarla.

Cuando defino un tipo por rango, lo que hago es definir los extremos del intervalo que contendr el conjunto de datos considerado. Slo puedo definir por rango cuando trabajo sobre conjuntos considerados discretos. Es decir que no puedo definir por rango sobre el conjunto de los reales. Por ejemplo, una definicin por rango, podra ser los nmeros entre 0 y 10, cuando defino por rango los extremos van cerrados entre corchetes y separados por dos puntos de la siguiente manera: [0..10]. Si tuviera que definir un tipo que contenga las letras del abecedario hasta la e, la definicin sera: [a..e]. Evidentemente este tipo de declaracin es sumamente sencilla de llevar adelante si tengo los datos acotados en un intervalo determinado. La definicin de un tipo rango, especifica el menor y el mayor valor dentro del rango.

IRSO Programacin I

32

TIPO STRINGUna variable de tipo string es una secuencia de caracteres con una longitud dinmica y un tamao mximo constante entre 1 y 255. La sintaxis para la definicin del tipo es: string [constante] o string. La constante entre corchetes define el mximo tamao que puede tomar una cadena de caracteres del tipo definido. Si se declara un tipo string sin un mximo tamao, el mismo es considerado como de tamao 255. Las constantes string son escritas entre apstrofos, por ejemplo: Hoy,Maana. Los operadores que pueden ser utilizados con valores de tipo string son los siguientes: +, =, , , =. Existe una funcin llamada length que retorna la longitud dinmica de un string. La longitud dinmica es la longitud que tiene una variable del tipo string definido en el momento que es evaluada por la funcin length. La funcin copy devuelve un substring de un string. Tiene tres parmetros, un string y dos enteros positivos. El string que se pasa como parmetro es la cadena de caracteres a partir de la cual se desea extraer el substring. Tiene como segundo parmetro un ndice que denota cul es el carcter a partir del cual se quiere obtener el substring y, el tercer parmetro es la cantidad de caracteres que se quieren tomar del string a partir de la posicin dada por el ndice. Pasemos a un ejemplo que nos muestre cmo trabajan estas dos funciones. var S,T:string; Q:integer; begin S:=ABCDEF; Q:= length(S); writeln (Q); T:= copy (s,2,3); writeln (T) end.IRSO Programacin I 33

{imprime el valor 6}

{imprime BCD}

1.3.3. DECLARACION DE TIPOS EN UN PROGRAMAComo ya hemos visto anteriormente, la forma de declarar un encabezado de programa en Pascal es utilizando la palabra reservada program y a continuacin un nombre definido por el programador, colocando al final de la lnea como ya sabemos- el delimitador ;. De este modo, el programa ejemplo, tendr un encabezado como sigue:

program ejemplo;Para definir los tipos dentro del programa (del mismo modo que usamos la palabra reservada program para definir el programa), utilizaremos la palabra reservada type. Escribiendo esta palabra a continuacin del encabezado, es posible definir aquellos tipos que desee el programador para ser utilizados en el entorno del programa donde se definen. Cada tipo definido por el programador lleva tambin un nombre definido por l, si defino el tipo colores con verde, rojo y naranja, la definicin del mismo sera:

type colores = (verde, rojo, naranja);Si deseara definir ms de un tipo dentro del mismo programa, no debo repetir la palabra reservada type para identificarlo como tal. La palabra type debe estar una sola vez, definiendo el espacio donde comienzan las declaraciones de tipos. Es as que si deseo agregar el tipo enteros1, que contenga los valores entre 1 y 15, debo tan solo declarar lo siguiente:

type colores = (verde, rojo, naranja);IRSO Programacin I 34

enteros1 = [1..15];Siempre separando cada tipo por el delimitador ;.

Est claro pues, que la forma que tendr la declaracin de tipos ser la siguiente:

type = ; = ; = ;. . .

= ;Por lo tanto, dentro de la estructura del programa tendramos hasta el momento la siguiente forma:

program ; type = ; = ;

IRSO Programacin I

35

= ;. . .

= ;En esta nueva etapa es importante que comencemos a fijar los conceptos bsicos de las estructuras profundamente, de modo que nuestro estudio vaya permitiendo acrecentar ms rpidamente nociones fundamentales de programacin. Es para esto, que encontrarn una gran cantidad de ejercicios, ya no ms con las respuestas directamente sobre el apunte, sino que los debern resolver de la mejor manera posible segn vuestro mejor criterio, y si lo consideran necesario realizar todas las consultas que crean conveniente.

1.4. DECLARACIN DE CONSTANTES (CONST):Una declaracin de constantes (const) define un identificador que denota un valor no modificable en el tiempo.

const =valor; ... ... =valor;

Siempre la declaracin se realiza partiendo de un nombre definido por el programador y luego, el valor que la constante toma. Las constantes no pueden ser modificadas (son invariables) a lo largo de la corrida del programa.IRSO Programacin I 36

Ejemplos: const verde=verde; rojo=rojo; pi=3.14159; e=2.71; z=z; cero=0; maximo=2122;

La declaracin de constantes tambin puede realizarse combinada con un tipo, esto hace que se tome al valor declarado como una inicializacin para una variable. De este modo, cuando se declara una constante con tipo, la misma no es en realidad una constante sino que es una variable con un valor inicial definido. A lo largo de la corrida del programa, su valor puede ser modificado como si fuera una variable. Por ejemplo, la siguiente declaracin

const x: integer = 8;

indica que la variable x de tipo entero est cargada inicialmente con el valor 8. En la corrida del programa, la variable x podr tomar valor distinto de 8.

En cambio si se declara la constante x con el valor 8 sin indicar el tipo, como sigue:

const x=8;

La constante x no podr tomar otro valor a lo largo de la corrida, y su valor es inmodificable.

IRSO Programacin I

37

Nota aclaratoria: En funcin de la presentacin del tema asociado con la declaracin de tipos por enumeracin, es muy til combinar el uso de la declaracin de estos tipos con la declaracin de constantes. Es as que, si tomamos varios de los ejemplos desarrollados en las unidades temticas precedentes podemos ver que los colores los definamos de la siguiente forma: colores=(verde,azul,rojo); El verde, azul y rojo definidos aqu, no son ni ms ni menos que constantes del tipo cadena de caracteres, donde esas cadenas son los valores verde, azul y rojo respectivamente. De este modo, para definir correctamente el tipo por enumeracin de los colores, deberamos hacer lo siguiente:

const verde=verde; azul=azul; rojo=rojo;

type colores=(verde, azul, rojo);

De esta forma, se evita trabajar con cadena de caracteres cada vez que se hace referencia a los colores (no utilizamos los apstrofos cada vez que hablamos de un color). Los colores para ese programa con esta declaracin son ahora constantes llamadas verde, azul y rojo . Esto hace mucho ms dinmica la programacin facilitando la edicin del cdigo fuente, sin hacer mencin a cadena de caracteres sino a constantes.

IRSO Programacin I

38

const =valor;

La declaracin de constantes en la estructura de un programa se hace directamente a continuacin del encabezado del programa y antes de la declaracin de tipos.

Por lo tanto, la secuencia de declaraciones es como sigue:

program ; const =; ... =; type ... ... var ... ... begin ... ... end.

IRSO Programacin I

39

1.5. OPERACIONES CON ENTEROS 1.5.1. DIV:Este operador es utilizado para realizar la divisin entera entre dos valores enteros. Por lo tanto, el resultado es un nmero entero. Por ejemplo, si hacemos la operacin

4 DIV 2 el resultado ser 2 10 DIV 2 el resultado ser 5 18 DIV 3 el resultado ser 6 etc.

En todos estos casos considerados, la divisin entera ha sido siempre con resto 0. Para el caso que deseemos saber cul es el resto de dividir dos nmeros enteros, podemos apelar a otra operacin.

1.5.2. MOD:Este operador devuelve el resto de una divisin entera. Por ejemplo si hacemos la operacin

4 MOD 2 el resultado ser 0 3 MOD 2 el resultado ser 1 18 MOD 4 el resultado ser 2 etc.

Es evidente que con estos operadores podemos realizar variadas operaciones con nmeros enteros que nos permitan, por ejemplo, conocer si un nmero es par o impar.

A propsito de esto, vamos a realizar un programa que lea de teclado valores enteros y luego nos indique por pantalla si el mismo es par o impar.

IRSO Programacin I

40

La lectura de los valores se realiza hasta que se ingrese un valor 0, momento en el que se termina la ejecucin del programa.

Mejor an, realcelo usted mismo en las lneas subsiguientes y luego comprelo con el resultado propuesto que se encuentra a continuacin: _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________IRSO Programacin I 41

program par_o_impar; var t:integer; begin repeat readln(t); if (t MOD 2 = 0) then writeln (Nmero par) else writeln (Nmero impar) until t=0 end.

DIV: permite generar la divisin entera. MOD: retorna el resto de una divisin entera.

1.6. FUNCIONES BSICAS CON ENTEROS 1.6.1. FUNCIN ODDEsta funcin permite determinar si un nmero es impar. La misma devuelve el valor verdadero cuando el nmero sobre el que se la interroga es impar y, falso si es par. Por lo tanto, utilizando esta funcin tambin podramos determinar si un valor es par o impar. Realice el mismo ejercicio planteado anteriormente utilizando la funcin ODD.

IRSO Programacin I

42

_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ Compare su programa con el que se propone a continuacin:

program par_o_impar_2; var t:integer; begin repeat readln(t); if odd(t) then writeln (Nmero impar) else writeln (Nmero par) until t=0 end.

IRSO Programacin I

43

La funcin ODD retorna TRUE si el nmero que se evala es impar, mientras que retorna FALSE si el mismo es par.

1.6.2. FUNCIONES SQR y SQRT 1.6.2.1. SQREsta funcin devuelve el cuadrado del nmero que se pasa como argumento. El valor puede ser de cualquier tipo numrico. x:=sqr(7); en este caso, la variable x quedar cargada con el valor 49 una vez que la instruccin sea ejecutada.

1.6.2.2. SQRTEsta funcin retorna la raz cuadrada del nmero que se pasa como argumento. El valor puede ser de cualquier tipo numrico. y:=sqrt(100); en este caso, la variable y quedar cargada con el valor 10 una vez que la instruccin sea ejecutada.

IRSO Programacin I

44

SQR: devuelve el cuadrado de un nmero. SQRT: devuelve la raz cuadrada de un nmero.

1.7. OPERANDOS MS USUALESLos operandos algebraicos ms utilizados en Pascal son los que se detallan a continuacin: +: suma -:resta /:divisin *:multiplicacin

Ejemplos: x:=a+4; A la variable x le asigno el contenido de la variable a ms 4 c:=c*3; A la variable c le asigno lo que tiene la variable c multiplicado por 3 q:=7/5; A la variable q le asigno el resultado 7 dividido 5 z:=9-k; A la variable z le asigno el resultado de la resta entre 9 y k

1.8. COMPARACIONES:Las comparaciones ms usuales son las que se detallan a continuacin: :mayor =:igual =:mayor o igual :distinto

Ejemplos: a6 t=y El contenido de la variable a menor que el contenido de la variable b El contenido de la variable f mayor que el valor 6 El contenido de la variable t igual al contenido de la variable yb=s El contenido de la variable d mayor o igual que el contenido de la variable s ax El contenido de la variable a distinto al contenido de la variable xCon los conceptos tericos reunidos hasta el momento, comenzaremos a realizar una ejercitacin completa que permita fijar los mismos y acrecentar nuestra habilidad para resolver problemas utilizando el lenguaje Pascal. Una vez resueltos los ejercicios pueden remitirlos al instituto para su evaluacin y posterior retorno de modo que ustedes puedan contar con los mismos corregidos.Preste mucha atencin al desarrollo del siguiente tema (VECTORES) dado que este es de vital importancia en el desarrollo integrado de la asignatura.1.9.VECTORESUn vector es una estructura donde cada uno de los elementos que la componen son del mismo tipo de datos. Esta estructura tiene un tamao fijoIRSO Programacin I46(es decir, una cantidad finita y determinada de elementos esto es llamado muchas veces estructura esttica --). Cada elemento puede ser identificado por su posicin en la estructura. Esta posicin es una posicin relativa al primer elemento de la estructura. Si ejemplificamos la estructura con un grfico, el mismo sera como se ve a continuacin:V1114243334051164577El vector es un nuevo tipo de datos que comenzaremos a utilizar desde ahora.IRSO Programacin I47En la definicin de tipos, el tipo vector se declara de la siguiente manera:type=array [q..p] of ;donde, el nombre del tipo es elegido por el programador; el tipo_base es el tipo de los elementos del vector (en el vector que antecede el tipo de los elementos del vector es entero dado que los nmeros que contiene el vector son todos enteros); mientras que el rango [q..p] son los ndices del vector, estos son valores discretos que especifican la posicin de los elementos en la estructura (para el caso del vector que nos antecede el rango de ndices corresponde a los valores 1 a 7 de modo que la definicin queda: [1..7]). Conociendo esto, podemos declarar el tipo que corresponda al vector mencionado precedentemente, de la siguiente manera:type vectores=array [1..7] of integer;y podramos declarar al vector V1 como variable de programa de la siguiente forma:var V1:vectores;donde se especifica que la variable V1 es del tipo vectores definido previamente.De esta forma hemos definido el vector.Ahora nos interesa ver de qu manera podemos acceder a los valores que contiene el vector, esto es relativamente sencillo y se realiza de la siguienteIRSO Programacin I 48forma: se coloca el nombre de la variable vector considerada y entre corchetes la posicin a la cual se quiere acceder. Por ejemplo, en el vector V1 definido anteriormente, si queremos leer el valor que tiene la posicin 5, escribiremos lo siguiente: V1[5]. El valor que tiene V1[5] es 11.Si quisiramos imprimir el valor que tiene el vector V1 en la posicin 5, habra que escribir en el programa la siguiente instruccin: writeln(V1[5]);Si quisiramos modificar el valor que tiene cargado el vector V1 en la posicin 5 (que en este momento es 11) por el valor 33, deberamos realizar la siguiente asignacin: V1[5]:=33; de este modo, el vector quedara cargado con las valores:V1114243334053364577IRSO Programacin I49Estos son los nuevos valores del vector V1. Ntese que lo nico que se modific es que hemos cargado el valor 33 en lugar del valor 11 en la posicin 5 del vector.Si quisiramos realizar la impresin en pantalla de todos los valores que tiene el vector realizando previamente la carga por teclado del mismo, tendramos que realizar un programa similar al que se ve a continuacin:program imp_vect; const m=1; n=7; type vector=array [m..n] of integer; var V:vector; i:integer; begin for i:=m to n do readln (V[i]); for i:=m to n do writeln(V[i]) end.En este programa vemos bsicamente lo siguiente: El nombre del programa es imp_vect. En la declaracin de constantes hemos definido dos valores, m que vale 1 y n que vale 7. Estos no son ni ms ni menos que los extremos del intervalo donde se especifican los ndices del vector. En la declaracin de tipos, definimos el tipo vector como: array [m..n] of integer;. Lo que tenemos aqu es que los elementos que contendr el vector son enteros y que los ndices varan entre 1 y 7 denotados por las definiciones de las constantes m y n.IRSO Programacin I 50-En la declaracin de variables, se han definido las variables V de tipo vector y la variable i de entero para realizar el recorrido del vector posicin a posicin.-En el programa principal se observan dos instrucciones bsicas. Ambas son for que recorren posicin a posicin el vector al ir variando el valor de i (ndice) entre 1 y 7 (o entre m y n). El primer for realiza la lectura de 7 valores enteros de teclado y se los asigna a la posicin V[i] correspondiente. Al ir variando el valor de i entre 1 y 7, V[i] ir tomando los siguientes valores: Cuando i es 1, leeremos el valor de V[1]. Ingreso de teclado el valor 14. Cuando i es 2, leeremos el valor de V[2]. Ingreso de teclado el valor 43. Cuando i es 3, leeremos el valor de V[3]. Ingreso de teclado el valor -3. Cuando i es 4, leeremos el valor de V[4]. Ingreso de teclado el valor 0. Cuando i es 5, leeremos el valor de V[5]. Ingreso de teclado el valor 33. Cuando i es 6, leeremos el valor de V[6]. Ingreso de teclado el valor -45. Cuando i es 7, leeremos el valor de V[7]. Ingreso de teclado el valor 7. Esto har que el vector quede cargado como pretendamos. Por otra parte, el segundo for realiza la impresin de los valores que tiene cargado el vector V a pantalla. De esta forma, Cuando i es 1, imprimimos el valor de V[1], es decir el valor 14. Cuando i es 2, imprimimos el valor de V[2], es decir el valor 43. Cuando i es 3, imprimimos el valor de V[3], es decir el valor -3. Cuando i es 4, imprimimos el valor de V[4], es decir el valor 0. Cuando i es 5, imprimimos el valor de V[5], es decir el valor 33. Cuando i es 6, imprimimos el valor de V[6], es decir el valor -45. Cuando i es 7, imprimimos el valor de V[7], es decir el valor 7. Vemos por lo tanto que es muy sencillo realizar la impresin de los valores que contiene un vector. Ms aun, es sencillo realizar cualquier tipo de operacin que involucre a todos los elementos del vector, dado que se generan acciones repetitivas en las que slo vara una componente que es el ndice (en este caso utilizamos la variable i para este fin).IRSO Programacin I51Cmo definir un tipotype =array [lmites] of ;1.10. MATRICESDel mismo modo que hemos trabajado sobre vectores (teniendo slo un ndice para recorrer el mismo), es posible llevar este concepto a dos dimensiones (es decir, utilizar dos ndices para recorrer una estructura que tiene ahora dos coordenadas para identificar una posicin de la misma). La matriz es una estructura esttica al igual que el vector (esto es, que no vara su tamao durante la ejecucin del programa lo que si vara es el contenido de las posiciones que tiene el vector o la matriz pero no vara la cantidad de elementos que ellos tienen). Es decir, que una vez que se define la cantidad de elementos que tiene una matriz, esa cantidad no vara durante el tiempo de corrida del programa. Los elementos de la matriz son todos del mismo tipo. Los ndices son de un tipo discreto ordinal. Estas bsicamente son las caractersticas de la matriz y la estructura fsica de la misma puede ser representada como se ve a continuacin:IRSO Programacin I52M1123456180-6117-52470-1-163101010969488986610-2Esta matriz tiene 4 filas y 6 columnas. Cuando se quiere denotar una posicin especfica de la matriz siempre se indica primero la fila y luego la columna entre corchetes, y separadas por una coma, esto es: [3,5] indica la posicin fila:3 y columna:5. De este modo, M1[3,5] es la posicin fila 3 y columna 5 de la matriz M1 (o sea el valor 6). Cuando tengamos que hacer una operacin que involucre a todos los elementos de la matriz deberemos actuar incrementando dos ndices (uno para las filas y otro para las columnas). La definicin del tipo matriz debe realizarse de la misma forma que el vector pero teniendo en cuenta que ahora debemos trabajar sobre dos ndices en lugar de uno:type = array [a..b,c..d] of ;Aqu se puede ver que el nombre es elegido por el programador. Los lmites para los ndices se definen utilizando los corchetes y definiendo el rangoIRSO Programacin I53para cada uno de ellos (a..b ser el rango para las filas y c..d el de las columnas). El tipo_base es el tipo de los elementos de la matriz. Lo mejor es ver esto utilizando un programa como ejemplo. Vamos a realizar la lectura de teclado de los valores que contenga una matriz de 4 filas y 6 columnas como la descripta anteriormente y luego mostrarla en pantalla. El programa es el siguiente:program lee_matriz; const m=4; n=6; type matrices = array [1..m,1..n] of integer; var mat:matriz; i, j: integer; begin for i:=1 to m do for j:=1 to n do begin writeln (Ingrese valor de posicin ,i, ,j); readln (mat[i,j]) end; for i:=1 to m do for j:=1 to n do writeln (mat[,i,,,j, ]= ,mat[i,j]) end.IRSO Programacin I54En este programa podemos observar lo siguiente: El nombre del programa es lee_matriz. Se han definido dos constantes m para la cantidad de filas y n para la cantidad de columnas. En la definicin de tipos se declara un solo tipo generado por el programador que es matrices. Las variables que definimos son mat para la matriz, i y j para el recorrido sobre los ndices en filas y columnas respectivamente. En el programa principal encontramos un primer bloque que realiza la lectura de teclado de la matriz. Para ello se realiza la lectura por filas comenzando con el valor de i en 1 y variando el valor de j entre 1 y 6 para que recorra toda la fila. Luego se incrementa el valor de i a 2 y se realiza otra vez la variacin de j entre 1 y 6, y as sucesivamente hasta completar las cuatro filas. Por ltimo se realiza el vuelco a pantalla de los contenidos de cada elemento de la matriz.Otra forma en la que podra realizarse este programa se ve a continuacin:IRSO Programacin I55program lee_matriz; const m=4; n=6; type matriz = array [1..m,1..n] of integer; var M:matriz; i,j:integer; begin for i:=1 to m do for j:=1 to n do readln(M[i,j]); for i:=1 to m do begin for j:=1 to n do begin write(M[i,j]); write( ) end; writeln end end.Aqu vemos que a diferencia con el ejemplo anterior, cuando imprime la matriz en la pantalla lo hace tal como es la estructura de la misma por filas y por columnas. El writeln que se encuentra en el segundo for lo que permite es pasar a la siguiente lnea para estructurar la matriz por filas. Con el write nos manejamos para estructurar la impresin a nivel de columnas.IRSO Programacin I56Cmo definir un tipotype =array [lmitesFILA, lmitesCOLUMNA] of ;IRSO Programacin I57MDULO 2: ESTRUCTURAS DE DATOS COMPUESTASCules son nuestros objetivos para este mdulo? La idea en esta segunda parte es conocer el alcance que tienen las estructuras de datos compuestas, su uso y cules son los beneficios que las mismas nos brindan. Adems se trabajar utilizando subprogramas, lo que permitir modularizar las soluciones dotndolas de flexibilidad. Nuestros objetivos son, entonces: Generar estructuras bsicas para el almacenaje de la informacin. Lograr modularizar un programa en Pascal utilizando funciones y procedimientos.2.1.REGISTROSQu es un registro?Un registro es una variable compuesta. Est formada por componentes de igual o distinto tipo de datos llamados campos. La definicin de un tipo registro se realiza de la siguiente forma, se utiliza la palabra reservada record y, se definen cada uno de los campos (utilizando un nombre) y su tipo. Cmo definimos un tipo REGISTRO ?type = record : ; : ; : ; : ; . .IRSO Programacin I58. : end;El del tipo de datos registros, as tambin como el de cada uno de los campos , , , etc; es determinado por el programador. Esta estructura de datos es de tipo esttica, es decir que su tamao no vara en tiempo de ejecucin del programa y es nuestra puerta de acceso al manejo de datos que normalmente hacemos cuando trabajamos con tablas. Vamos a generar por ejemplo, un registro que contenga los datos de un alumno, teniendo en cuenta que los campos son: nmero de legajo, nombre del alumno y direccin (calle, nmero, localidad y cdigo postal). Para ello, generaremos la siguiente definicin de tipos tal como se detalla:type strnom = string [50]; strcalle = string [20]; strloc = string [30]; regalum = record legajo : integer; nomalum : strnom; dir_calle : strcalle; dir_num : integer; dir_loc : strloc; dir_cp : integer end;Aqu vemos que se ha definido el tipo registro regalum que est formado por seis campos; el primer campo se llama legajo y es de tipo entero, el segundo campo se llama nomalum y es de tipo strnom (este tipo est definido con anterioridad a su utilizacin dentro de la estructura registro), el tercer campo se llama dir_calle y es de tipo strcalle, el cuarto campo seIRSO Programacin I 59llama dir_num y es del tipo entero, el quinto campo se llama dir_loc y es de tipo strloc, el sexto y ltimo campo se llama dir_cp y es de tipo entero. Cmo definimos una variable de tipo registro ?Lo hacemos de la misma forma en que definimos cualquier otro tipo de variable, es decir:var : ;Por ejemplo, si queremos definir una variable del tipo regalum que hemos definido anteriormente, debiramos hacerlo de la siguiente manera:varr : regalum;Aqu la variable r es una variable de tipo registro del tipo regalum, es decir que tiene la siguiente estructura: rlegajonomalumdir_calledir_numdir_locdir_cpEsta es la variable r de tipo registro. Como vemos muy claramente en este grfico, la misma est formada por seis campos.IRSO Programacin I60 Cmo referenciamos o accedemos a cada uno de los seis campos (en este caso) que forman la variable registro?Para acceder o referenciarnos a cada uno de los campos, se utiliza la siguiente notacin:.Como vemos, la referencia se realiza a travs de un . que une el nombre de la variable de tipo registro considerada, con el nombre del campo al cual se hace referencia o al que se quiere acceder. Este tipo de notacin deja traslucir muy fcilmente a qu campo se hace referencia dentro de la estructura. Por ejemplo si queremos hacer referencia al campo legajo de la variable r de tipo regalum que hemos definido anteriormente, tenemos que hacerlo de la siguiente forma:r.legajoy aqu vemos que hacemos referencia al campo legajo de la variable r. -Si queremos darle un valor al legajo de un alumno, por ejemplo el 2654, haremos la siguiente asignacin:r.legajo:=2654;-Si queremos imprimir el valor que tiene el campo legajo de la variable r, escribiremos la siguiente instruccin:writeln (r.legajo);IRSO Programacin I61-Si queremos leer de teclado el nombre de un alumno, escribiremos la siguiente instruccin:readln (r.nomalum);-Si queremos leer de teclado todo el contenido de la variable r (es decir los datos completos de un alumno), tendremos que generar las siguientes lneas de cdigo:writeln (Ingrese los datos de un alumno); writeln (Ingrese LEGAJO); readln (r.legajo); writeln (Ingrese NOMBRE); readln (r.nomalum); writeln (Ingrese CALLE); readln (r.dir_calle); writeln (Ingrese NMERO); readln (r.dir_num); writeln (Ingrese LOCALIDAD); readln (r.dir_loc); writeln (Ingrese CDIGO POSTAL); readln (r.dir_cp);Con esto hemos logrado cargar los datos de un alumno va teclado en la variable r.-Si queremos asignarle el contenido de la variable r a otra variable s del mismo tipo ( tipo regalum), realizaremos la siguiente accin: s:=r;-Si queremos asignarle el valor del campo legajo de la variable registro r a una variable entera p, haremos directamente lo siguiente: p:=r.legajo;IRSO Programacin I 62Esta asignacin est totalmente permitida porque sus tipos de datos son los mismos. Es decir, la variable p es de tipo entero y, el campo legajo del tipo registro regalum tambin lo es.Por lo tanto concluimos que el trato y el manejo que hacemos sobre una variable de tipo registro es el mismo que podemos hacer sobre cualquier otra variable de cualquier otro tipo.Qu es lo que no debemos olvidar sobre el tipo registro?1) Para definirlo debemos utilizar la palabra reservada record, enumerando cada uno de los campos con sus respectivos tipos y finalizar la definicin con la palabra reservada end. 2) Un tipo registro no vara su tamao ni la cantidad de campos que posee durante la ejecucin de un programa. 3) Para leer de teclado utilizamos la instruccin read o readln de la siguiente manera: readln (.). 4) Para escribir en pantalla utilizamos la instruccin write o writeln de la siguiente manera: writeln (.).IRSO Programacin I63Cmo definir un tipo registrotype = record : ; : ; : ; : ; . . . : end;Preste mucha atencin al desarrollo del siguiente tema (VECTORES CON REGISTROS) dado que el mismo es de vital importancia en el desarrollo de la asignatura.2.1.1. VECTORES CON REGISTROS:Es evidente que una variable de tipo registro aislada y por s sola no nos permite el manejo de una gran cantidad de datos. Es por esto, que podemos recurrir a una estructura quizs un poco ms compleja, pero que admite un manejo bastante importante en lo que a cantidad de datos se refiere. EstaIRSO Programacin I 64estructura no es ni ms ni menos que un vector donde cada una de las posiciones del mismo en lugar de ser enteros, reales o caracteres son registros. Esto confiere a la nueva estructura de posibilidades concretas para el manejo de una determinada cantidad limitada de datos, asociada obviamente al tamao del vector de registros. Podemos ejemplificar esta estructura tomando en consideracin el grfico que se ve a continuacin:Vlegajo [entero]nombre [string]nota [byte]1[212873 Alberto45....n10IRSO Programacin I65Este vector V de n posiciones tiene componentes que son registros de tres campos: legajo (de tipo entero), nombre (de tipo cadena de caracteres) y nota (de tipo byte).Cmo generamos la definicin de este tipo de datos?Para definir este tipo de datos vector de registros, deberemos realizar las siguientes declaraciones:const n=20;type cad_nom=string[45]; reg_notas=record legajo:integer; nombre:cad_nom; nota:byte end; vec_notas=array [1..n] of reg_notas;Como vemos, hemos realizado las siguientes declaraciones: 1) Se ha definido la constante n con valor 20 (de manera arbitraria). Representa que para el vector considerado en particular, el tamao del mismo admite 20 posiciones. 2) Hemos definido dentro de los tipos, el tipo cad_nom que es una cadena de caracteres de 45 elementos. Se ha definido para ser utilizada como tipo para el nombre que tendremos que usar luego en la definicin del registro. 3) El tipo registro est formado por tres campos: legajo de tipo entero; nombre que es una cadena de caracteres de 45 elementos; nota que es de tipo byte.IRSO Programacin I 664) El tipo vector es el vec_notas y tiene un tamao de n componentes, donde cada una de las componentes es un registro del tipo reg_notas.Cmo definimos una variable del tipo vector de registro?Lo hacemos de la misma forma en la cual definimos cualquier otra variable, es decir:var v:vec_notas;donde v es la variable del tipo vector de registros.Cmo accedemos a cada una de las posiciones del vector y cmo accedemos a los campos en cada uno de los registros?Si queremos acceder a la posicin 3 del vector v descripto anteriormente segn el grfico que antecede, estaremos hablando de v[3]. En este caso, como cada una de las posiciones del vector son registros, v[3] ser un elemento del tipo registro reg_notas (es decir, que tiene un campo legajo, otro nombre y otro nota). Si v[3] es un registro, segn lo que hemos visto, para referenciarnos a un campo del mismo deberemos utilizar el . indicando a cul de ellos hacemos alusin. De esta forma, si tengo que hacer referencia al campo legajo del registro ubicado en la posicin 3 del vector v, estar hablando de: v[3].legajo-Si queremos imprimir el campo legajo de la posicin 2 del vector v, tendremos que utilizar la siguiente instruccin: writeln (v[2].legajo); Esto permitir que se imprima el valor 1287 que est cargado en esa posicin del vector en el campo legajo.IRSO Programacin I67-Si queremos cargarle a una variable s de tipo string el valor que tiene el campo nombre de la posicin 4 del vector v, tendremos que utilizar la siguiente instruccin: s:=v[4].nombre; Por lo tanto, en la variable s ha quedado cargado el valor Alberto.-Si queremos copiar la nota que est en la posicin n del vector v a la posicin 6 del vector v, podemos hacer lo siguiente: v[6].nota:=v[n].nota; De esta forma, en la posicin 6 del vector v ha quedado guardada tambin la nota 10.Cmo realizamos la lectura de teclado del vector v?Como el vector v tiene n posiciones, deberemos realizar un for de modo que se puedan ir recorriendo todas ellas tal como se ve a continuacin:for i:=1 to n do begin writeln (Ingrese legajo); readln (v[i].legajo); writeln (Ingrese nombre); readln (v[i].nombre); writeln (Ingrese nota); readln (v[i].nota) end;Como podemos ver, a travs de la instruccin for, lo que hacemos es ir recorriendo el vector posicin a posicin. En cada una de las posiciones, lo que tenemos es un registro de tres campos: legajo, nombre y nota. La variable i me permite moverme posicin a posicin dentro del vector.Cmo realizamos la impresin del vector v?IRSO Programacin I68for i:=1 to n do begin writeln (Legajo: , v[i].legajo); writeln (Nombre: , v[i].nombre); writeln (Nota: , v[i].nota) end;Qu no debemos olvidar del manejo de este tipo de estructuras?-La definicin de los tipos se realiza siempre desde la estructura ms sencilla a la ms compleja. Es decir que si el programador debe definir algn tipo (por ejemplo un tipo cadena de caracteres) que luego ser utilizado para definir un campo en un registro, debe comenzar definiendo este tipo base y luego el tipo registro. Siempre, por ltimo, se define el tipo vector de registros que involucra las dems estructuras definidas con anterioridad. -El acceso a cada una de las posiciones del vector se realiza utilizando el ndice correspondiente. -El acceso a cada uno de los campos se realiza utilizando el punto . -El tamao de una variable de tipo registro slo es modificable en tiempo de edicin. No es posible modificarse en tiempo de corrida.2.2. UTILIZACIN DE SUBPROGRAMAS:2.2.1. FUNCIONES Y PROCEDIMIENTOS 2.2.1.1. INTRODUCCIN:Hasta aqu hemos manejado los programas como unidades totalmente monolticas y sin ningn tipo de flexibilidad asociada a su programacin. Es decir que hemos generado secuencias de instrucciones que deben ejecutarseIRSO Programacin I 69una detrs de la otra siguiendo el orden de escritura de las mismas, desde la primera hasta la ltima. Este concepto lo seguiremos manteniendo, dado que el lenguaje de programacin utilizado es de los denominados lineales pero le agregaremos una cierta flexibilidad que permitir de alguna manera segmentar el programa u ordenarlo, con un criterio bastante amplio facilitando de alguna forma la programacin del mismo y modularizndolo, haciendo que varias secuencias de instrucciones puedan ser utilizadas en muchos programas sin necesidad de retipear o reescribir los mismos. Estos mdulos se llaman subprogramas y dentro de esta categora se encuentran las funciones y los procedimientos. Vamos a estudiar cada uno de ellos orientando a las aplicaciones que se desprenden de su uso, de manera de familiarizarnos con las mismas rpidamente.2.2.1.2. FUNCIONES: DEFINICIN:Una funcin es una secuencia de instrucciones agrupadas bajo un nombre determinado que devuelve un valor al ser invocada. Hay funciones que ya vienen predefinidas por Pascal y otras que pueden ser definidas por el programador. Evidentemente son estas ltimas las que dotan de una gran flexibilidad y modularidad al sistema, permitiendo la generacin de programas utilizando subprogramas, que podran formar parte de una biblioteca de funciones y procedimientos, donde se accede para poder utilizar lo que se necesite en el momento adecuado.Cmo declaramos una funcin dentro de un programa?Una funcin se escribe de la siguiente manera:IRSO Programacin I70function ():; const . . . type . . . var . . .begin . . . :=; end;Destacamos dentro de la estructura de una funcin las siguientes partes: Encabezado: all se coloca la palabra reservada function seguida del nombre de la funcin. Este es elegido por el programador. Luego entre parntesis se colocan los parmetros de la funcin, que no son ni ms ni menos que los valores que recibe la funcin para procesarlos y obtener un resultado. Luego de los parmetros y seguido a dos puntos, se coloca el tipo del valor que devuelve la funcin. Este tipo es normalmente un tipo predefinido.IRSO Programacin I71-Dentro de la funcin se declaran de la misma manera que lo hacemos en un programa, las constantes, tipos y variables que se usarn en la misma. A estas definiciones se las llama locales porque slo pueden ser usadas dentro de la funcin. Es decir que una variable definida dentro de la funcin es utilizable slo dentro de sta y no puede ser usada en el programa principal. A partir de ahora, y de manera de diferenciar las variables definidas dentro de un procedimiento o una funcin de aquellas que se definen en el programa principal, llamaremos a las primeras locales al procedimiento o funcin y, globales a las utilizadas en el programa principal.-Vemos por ltimo que dentro de la funcin tenemos un begin y un end que acotan el comienzo y fin de la funcin en cuanto a las instrucciones que la misma contiene. Siempre antes del fin de la funcin debe hacerse una asignacin al nombre de la funcin, del valor que la misma devolver cuando sea invocada. Invocar es llamar a la funcin desde el programa principal para que realice un clculo.Resultado (Valor de salida) FUNCINParmetros (Valores de entrada)Vamos a realizar algunos ejemplos de modo de comenzar a trabajar con las funciones:-Realicemos una funcin que nos permita calcular el triple de un valor que le pasamos como parmetro.IRSO Programacin I72Es decir, que si le pasamos el valor 2, la funcin nos devolver el valor 6. Si le pasamos el valor 8, nos devolver el valor 24.Resultado = 3 x Valor ingresadoMultiplica x3Ingreso un valor enteroEn el esquema anterior tenemos representado lo que queremos que la funcin realice.Vamos ahora a escribir el cdigo que representa a la funcin indicada.function mul3 (e:integer) : integer; begin mul3:=3*e end;Vemos que la funcin tiene como nombre mul3, necesita que se ingrese un solo parmetro (e) que es un valor entero, y devolver como es lgico un valor entero que es el resultado de multiplicar lo que se ingresa (e) por 3. Como vemos, antes de salir de la funcin, se realiza la asignacin del resultado de la funcin al nombre de la funcin (mul3:=3*e).IRSO Programacin I73- Realicemos una funcin que nos permita calcular la suma de dos nmeros reales.Resultado = Suma de los valores ingresados Suma ambos valoresIngresan dos valores realesEn el esquema anterior tenemos representado lo que queremos que la funcin realice. Vamos ahora a escribir el cdigo que representa a la funcin indicada.function suma (w,y:real) : real; begin suma:=w+y end;Vemos que la funcin tiene como nombre suma, los parmetros que se ingresan son los dos valores a ser sumados (w e y) y el valor que retorna es la suma de ambos valores. Nuevamente vemos que antes del end de la funcin, hemos hecho la asignacin pertinente asociando el nombre de la funcin al resultado.-Vamos a realizar ahora una funcin que nos permita ingresar un parmetro que sea un nmero entero. Si el valor ingresado es mayor a 2500, deber devolver el valor ingresado dividido por 9 y; si el valor ingresado es menor o igual a 2500, deber devolver el valor multiplicado por 2.IRSO Programacin I74Resultado=q/9Ingresa como parmetro un nmero entero (q)Si q es mayor a 2500Si q es menor o igual a 2500 Resultado=q*2La funcin tendr la siguiente forma: function calc1 (q: integer) : real; begin if q > 2500 then calc1:=q/9 else calc1:=q*2 end;Aqu vemos que si q es mayor a 2500, le asignamos a calc1 (que es la funcin) el valor q/9 mientras que si el valor es menor o igual a 2500, le asignamos a calc1 el valor q*2.Hemos utilizado ya varias funciones predefinidas como por ejemplo: sqr y sqrt.Dnde se declaran las funciones?Los bloques de funcin se declaran luego de las variables en el cuerpo de declaraciones del programa principal. Las mismas se declaran una debajo deIRSO Programacin I 75la otra. Si se declara una funcin 1 y otra funcin 2 y, la funcin 2 utiliza a la funcin 1, deber estar la funcin 1 declarada con anterioridad a la funcin 2.Cmo invocamos (llamamos) a las funciones desde el programa principal?Para invocar a la funcin desde el programa principal, siempre deberemos utilizar una variable del mismo tipo que el tipo que devuelve la funcin de modo que se realice una asignacin a la misma del valor que devuelve la funcin. Por ejemplo, si tenemos una funcin llamada xxxx que devuelve un valor de tipo real, tendremos que invocarla desde el programa principal haciendo una asignacin a una variable de tipo real.function xxxx ():real; . . . begin . . . xxxx:=; end;Por lo tanto en el programa principal deberemos declarar una variable de tipo real y hacer el siguiente llamado: var h:real; begin . . .IRSO Programacin I 76h:=xxxx(); . . . A h que es una variable de tipo real le estamos asignando el valor que devuelve la funcin xxxx.2.2.1.3. PROCEDIMIENTOS:Los procedimientos son una secuencia de instrucciones que nos permiten realizar una o varias acciones determinadas.Cmo declaramos un procedimiento dentro de un programa?Lo declaramos de la misma manera que declaramos una funcin. Para ello utilizamos la siguiente forma declaratoria: procedure (); const . . . type . . . var . . . begin . . . end;IRSO Programacin I 77Identificamos las siguientes partes en la declaracin: Encabezado: all se coloca la palabra reservada procedure seguida del nombre del procedimiento. Este es elegido por el programador. Luego entre parntesis se colocan los parmetros del procedimiento, que no son ni ms ni menos que los valores que recibe el mismo para procesarlos y generar las acciones correspondientes (pudiendo obtenerse o no resultados en este caso). Dentro del procedimiento se declaran de la misma manera que lo hacemos en un programa, las constantes, tipos y variables que se usarn en el mismo. A estas definiciones se las llama locales porque slo pueden ser usadas dentro del procedimiento. Es decir, que una variable definida dentro del procedimiento es utilizable slo dentro de ste, y no puede ser usada en el programa principal. A partir de ahora, y de manera de diferenciar las variables definidas dentro de un procedimiento o una funcin y aquellas que se definen en el programa principal, llamaremos a las primeras locales al procedimiento o funcin y, globales a las utilizadas en el programa principal.-Vemos por ltimo que dentro del procedimiento tenemos un begin y un end, que acotan el comienzo y fin del mismo en cuanto a las instrucciones que contiene. El procedimiento, a diferencia de la funcin, ser invocado slo con la mencin de su nombre y el pasaje de parmetros respectivo, no es necesario asignarlo a ninguna variable, como en el caso de la funcin, donde era imprescindible realizar el llamado haciendo una asignacin a una variable del tipo de datos que devuelve la funcin. Invocar es llamar al procedimiento desde el programa principal para que realice una determinada secuencia de acciones.IRSO Programacin I78Acciones y/o resultados (Salidas)PROCEDIMIENTOParmetros (Valores de entrada)Vemos que en su forma bsica de representacin, un procedimiento realiza una determinada cantidad de acciones pudiendo o no arrojar un resultado a nivel de valor, utilizando para generar estas acciones valores que recibe como datos de entrada (parmetros).Vamos a realizar algunos ejemplos de modo de comenzar a trabajar con los procedimientos:-Realizar un procedimiento que permita imprimir cinco lneas en blanco en pantalla.Imprime 5 lneas en blanco PROCEDIMIENTO-Vemos en este caso que el procedimiento no tiene parmetros de entrada de datos. Slo realiza acciones a nivel de salida imprimiendo cinco lneas en blanco.IRSO Programacin I79procedure cincolin; const n=5; var i:integer; begin for i:=1 to n do writeln end;-Realizar un procedimiento que permita dados dos nmeros enteros a y b, calcular su producto y su divisin (a/b si b es distinto de cero).Resultado1=a*bIngresamos por teclado dos nmeros enteros a y b PROCEDIMIENTOResultado2=a/bEn este caso vamos a hacer algo que no hemos realizado nunca an que es la devolucin por parte de un subprograma de dos valores (en este caso la multiplicacin y divisin de dos nmeros enteros). Para la multiplicacin el resultado ser un entero mientras que para la divisin, el resultado ser un real.procedure divmult (a,b:integer; var r1:integer; var r2:real);begin r1:=a*b;IRSO Programacin I 80r2:=a/b end;o agregando la validacin de que b sea distinto de cero, tendramos: procedure divmult (a,b:integer; var r1:integer; var r2:real);begin r1:=a*b; if (b0) then r2:=a/b end;Para este caso la escritura a nivel de cdigo del procedimiento es muy sencilla. Hay algo que es bastante diferente a lo que hemos manejado hasta el momento.-Dentro de los parmetros podemos observar que tenemos cuatro. Los dos primeros representan los valores que ingresan al procedimiento para ser procesados. Estos valores son a y b enteros, y estn definidos tal como los hemos definido siempre que hemos utilizado funciones y procedimientos hasta ahora. Los otros parmetros estn precedidos por la palabra var. Esta palabra indica, que los parmetros que se pasen al procedimiento precedidos por la misma, pueden sufrir modificaciones en sus valores, y mantenerlas una vez finalizada la ejecucin del mismo. A estos parmetros que son definidos con la palabra var se los conoce como parmetros por referencia o variable, mientras que los que se pasan sin la palabra var tal como los hemos estado utilizando hasta ahora, se llaman parmetros por valor.IRSO Programacin I81Como conclusin podemos decir que un parmetro por valor es aquel que se utiliza dentro de la funcin o procedimiento, y no puede sufrir alteraciones en su valor que tengan efecto una vez terminado de ejecutar el procedimiento o la funcin. Mientras que un parmetro pasado por referencia (o por variable) puede sufrir modificaciones en su contenido mientras es ejecutado el subprograma, manteniendo estos cambios de valor en las variables una vez finalizada la ejecucin del mismo.Este concepto es sumamente importante de tener en cuenta cada vez que definimos un procedimiento. Debemos considerar si el parmetro es un parmetro de entrada de datos o de salida de datos.Vemos que el procedimiento arroja el clculo de los valores de r1 y r2 (multiplicacin y divisin respectivamente).-Realizar un procedimiento que permita calcular la suma de todos los elementos de un vector de enteros de 20 posiciones e imprima el resultado. Para este caso vamos a considerar que en la declaracin de tipos del programa principal, tenemos la siguiente definicin:IRSO Programacin I82const n=20; type vector=array [1..n] of integer;Ingresa el vector como parmetro PROCEDIMIENTOImprime la suma de los elementos del vectorprocedure sumavec (mq: vector); var i, s:integer; begin s:=0; for i:=1 to n do s:=s+mq[i]; writeln (s) end;Aqu vemos que el nico parmetro es un vector (mq). Dentro del procedimiento, debimos declarar dos variables locales llamadas i y s, la primera para recorrer el vector, y la segunda para realizar el clculo de la suma. Cuando el clculo es realizado slo debemos imprimir el resultado.IRSO Programacin I83-Realizar un procedimiento que permita calcular la suma de todos los elementos de un vector de enteros de 20 posiciones y devuelva el resultado. Para este caso vamos a considerar que en la declaracin de tipos del programa principal tenemos la siguiente definicin: const n=20; type vector=array [1..n] of integer;En este caso podemos hacer un procedimiento o una funcin. Realizaremos primero un procedimiento y luego una funcin permitiendo de esta forma analizar diferencias y similitudes.Ingreso el vector como parmetroPROCEDIMIENTOOFUNCIN Devuelve la suma de los elementos del vectorprocedure sumav1 (k:vector; var h:integer); var i:integer; begin h:=0; for i:=1 to n do h:=h+k[i] end;IRSO Programacin I84function sumav2 (k:vector) : integer; var i, p:integer; begin p:=0; for i:=1 to n do p:=p+k[i]; sumav2:=p end;Dijimos que de alguna manera bamos a analizar diferencias y similitudes. Indicar cules son las diferencias y las similitudes que se pueden observar entre la funcin y el procedimiento descriptos anteriormente. Seguramente encontrar varias.Diferencias: _____________________________________________________________ _____________________________________________________________ _____________________________________________________________Similitudes:Hemos utilizado ya muchos procedimientos predefinidos como por ejemplo write o read.Vamos a generar ahora --a modo de resumen de este tema y para realizar un breve repaso de cada uno de los conceptos vistos-- un programa que tenga: -Un procedimiento que permita leer de teclado un vector de 5 posiciones.IRSO Programacin I 85-Una funcin que permita obtener el mximo de los elementos del vector. Imprimir luego el resultado que devuelve la funcin desde el programa principal.program ejemplo; const k=5; type vector1=array [1..k] of integer; var v:vector1;procedure leerv (var b:vector1); var t, i :integer; begin for i:=1 to k do begin writeln (Ingrese valor); readln (b[i]) end end;function maxvec (z:vector1):integer; var max, i: integer; begin max:=z[i]; for i:=2 to k do if z[i]>max then max:=z[i]; maxvec:=max end;IRSO Programacin I 86begin leerv (v); t:=maxvec(v); writeln (El mximo es, t) end.Vemos aqu un programa completo con una funcin y un procedimiento. Tambin podemos ver en el programa principal, el llamado a cada uno de ellos (el procedimiento leerv y la funcin maxvec).A partir de aho