Está en la página 1de 284

Fundamentos de Programacin

Fundamentos de Programacin
Curso No. CY300 Versin 2.0

Copyright IBM Corp. 2007

Objetivos del Curso Despus de completar este curso, usted estar en la capacidad de: Crear la lgica bsica de un programa. Conocer los pasos bsicos necesarios para ir desde el diseo de un programa hasta su ejecucin. Usar la notacin binaria y hexadecimal en un ambiente de computadora tradicional. Describir los componentes bsicos de la configuracin de una computadora.

Copyright IBM Corp. 2007

Volumen 1

Fundamentos de Programacin

Copyright IBM Corp. 2007

Unidad 1

Programas de Computadora

4
Copyright IBM Corp. 2007

Objetivos de Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Definir el propsito y el contenido de un programa de computadora. Establecer una metodologa para resolver problemas de procesamiento de datos. Definir el concepto de dato, los tipos de datos y las funciones incorporadas a los lenguajes de programacin. Enumerar las recomendaciones ms comunes necesarias para programar con estilo.

5
Copyright IBM Corp. 2007

Introduccin a la Programacin Actualmente las computadoras son parte importante en la solucin de problemas de cualquier rea: contabilidad, medicina, administracin, etc. Los programas de computadora son parte esencial para la solucin de problemas a cualquier nivel. Estas soluciones son llamadas aplicaciones. Los programadores utilizan algn lenguaje de programacin para desarrollar las aplicaciones requeridas por los clientes. Los lenguajes de programacin sirven como puente de enlace entre el anlisis realizado por el equipo de desarrollo y la capacidad de clculo que ofrece la computadora.
6
Copyright IBM Corp. 2007

Introduccin a la Programacin...1 Para programar se requiere de:  Fundamentos generales de programacin.  Lgica para entender, conceptuar y solucionar el problema.  Conocimientos del lenguaje de programacin. La programacin requiere de una serie de conocimientos bsicos comunes a cualquier lenguaje de programacin, que le permitan al programador indicarle inequvocamente al computador las tareas que ste debe realizar.

Copyright IBM Corp. 2007

Sistemas de Procesamiento Una computadora es una mquina de procesamiento de informacin.


Es una mquina porque tiene cables, circuitos y dems elementos mecnicos. Es de procesamiento porque es capaz de transformar o procesar datos. De informacin porque maneja conjuntos ordenados de datos.

Para procesar la informacin se requiere del hardware y del software.

8
Copyright IBM Corp. 2007

Algoritmo El Algoritmo es un proceso para resolver problemas. Fue desarrollado por el matemtico persa Abu Jafar Mohammed Ibn Musa Al Khwarizmi. Un algoritmo es una frmula para resolver un problema. Un algoritmo es un conjunto de acciones o secuencia de operaciones que ejecutadas en un determinado orden resuelven el problema planteado. Un algoritmo es un proceso metdico que define una serie finita de pasos sencillos y sin ambigedades para la solucin de un problema. La programacin consiste en adaptar el algoritmo al ordenador.
9

El algoritmo es independiente de la implementacin en algn lenguaje de programacin.

Copyright IBM Corp. 2007

Caractersticas de un Algoritmo Un algoritmo debe: Estar bien definido. Ser preciso. Finito.

10

Copyright IBM Corp. 2007

Metodologa para Disear Algoritmos Un algoritmo es una formula para obtener la solucin de un problema. La solucin puede ser planteada de diferentes formas. El diseo de un algoritmo es un proceso creativo. No existe un conjunto de reglas que indiquen expresamente cmo escribir un algoritmo en forma correcta.

11

Copyright IBM Corp. 2007

Metodologa para Disear Algoritmos...1 Los p sos p r r solv r u pro l


1) 2) 3) is lisis o rific ci l pro l l lgorit o. l lgorit o. .

so :

lisis ro l

is o l lgorit o

rific ci l lgorit o

12

Copyright IBM Corp. 2007

Metodologa para Disear Algoritmos...2 En la Fase de Anlisis del Problema se realiza lo siguiente: Identificar el problema. Determinar la informacin que se debe producir como salida. Identificar la informacin necesaria para resolver el problema. Identificar los elementos que se tienen y los elementos que se deben solicitar para resolver el problema. Establecer el camino a seguir o la solucin que se va implementar.
13

Copyright IBM Corp. 2007

Metodologa para Disear Algoritmos...3 En la Fase de Diseo del Algoritmo se realiza lo siguiente: Buscar la manera ms fcil para simplificar la propuesta. Identificar los procesos ms importantes y colocarlos en orden ascendente segn su importancia y precedencia (esto sirve como un algoritmo inicial). El algoritmo inicial se va refinando sucesivamente hasta obtener una solucin ms detallada y fcil de traducir a un lenguaje de programacin.

14

Copyright IBM Corp. 2007

Metodologa para Disear Algoritmos...4 En la Fase de Verificacin del Algoritmo se realiza lo siguiente: Verificar que el algoritmo cumpla con los procesos diseados y produzca el resultado esperado. Realizar una prueba del algoritmo mediante su ejecucin manual con datos significativos, adems de comprobar si se obtienen los resultados esperados para la salida.

15

Copyright IBM Corp. 2007

Programas de Computadora Un programa es un conjunto de instrucciones que, ejecutadas ordenadamente, resuelven un problema. En otras palabras, es la implementacin del algoritmo. Un programa de computadora es una secuencia de instrucciones que le indican al computador que realice las operaciones especficas para lograr el resultado deseado. Consiste de uno o ms mdulos o rutinas cada uno de los cuales puede estar compuesto de varios subprogramas.

16

Copyright IBM Corp. 2007

Programas de Computadora...1 Un programa de computadora no es: Una caja mgica. Intrnsicamente correcto. Un programa de computadora debe ser: Una solucin a un problema. Una secuencia de instrucciones que se ejecutan en una computadora. Slo tan correcto como el programador lo haya hecho.

17

Copyright IBM Corp. 2007

Definiciones Bsicas Lenguaje de Mquina. Lenguaje de Bajo Nivel: Ensamblador. Lenguaje de Alto Nivel. Compilar. Base de Datos. Sistema Operativo. Almacenamiento.

18

Copyright IBM Corp. 2007

Definiciones Bsicas: Lenguaje de Mquina Es un lenguaje que puede ser interpretado directamente por los circuitos internos de la mquina. Est basado en instrucciones compuestas por secuencias de ceros (0) y unos (1). Ventajas: No requiere traduccin, la mquina lo interpreta. Opera directamente con la mquina. Puede ser eficiente en el manejo de los recursos. Desventajas: Difcil de aprender, implementar y mantener. Es nico y particular para cada procesador.
Copyright IBM Corp. 2007

19

Definiciones Bsicas: Lenguaje de Bajo Nivel


Ensamblador. Es un lenguaje fuente para codificar sentencias simblicas. Hace uso de nemotcnicos para representar instrucciones de mquina. Un ensamblador convierte cada instruccin en instrucciones de lenguaje de mquina. Ventajas: No es tan complicado como el lenguaje de mquina. Eficiente en el manejo de recursos. Desventajas: Cada procesador tiene su propio juego de instrucciones en ensamblador. Debe ser traducido ensamblado.
20
Copyright IBM Corp. 2007

Definiciones Bsicas: Lenguaje de Alto Nivel Es un lenguaje orientado al problema o procedimiento. Son los ms cercanos al lenguaje humano. Ejemplo: COBOL, PL/I, FORTRAN, etc. Otros son los lenguajes de Programacin Orientado a Objetos (OOPL) : C++, Smalltalk, Java, etc. Ventajas: Son independientes del procesador. Son ms fciles de aprender, implementar y mantener. Tiene un carcter genrico. Desventajas: Menos eficiente en el manejo de recursos. Requiere un proceso de traduccin compilacin.
Copyright IBM Corp. 2007

21

Otras Definiciones Bsicas


Compilar: Es traducir un programa escrito en un lenguaje de alto nivel a lenguaje de mquina, que es la forma en que la computadora puede ejecutar las acciones o instrucciones. Base de Datos: Es una coleccin de datos completa e integrada para evitar duplicados, que permite recuperar informacin para satisfacer a una amplia variedad de usuarios. Sistema Operativo: Es una coleccin organizada de software que se usa para ayudar y controlar las operaciones de una computadora. Almacenamiento: Se refiere a los dispositivos en que los datos se almacenan para posteriormente ser recuperados.
Copyright IBM Corp. 2007

22

Desarrollar un Programa de Computadora El programador debe escribir las sentencias o instrucciones del cdigo fuente, en un editor. El conjunto de sentencias fuente se denomina programa fuente. El programa fuente es la entrada para el compilador. El compilador convierte el programa fuente en un conjunto de comandos entendibles por el computador llamado programa ejecutable. Si se encuentra algn error en la sintaxis de los comandos en el programa fuente, el compilador listar cada uno de ellos y no produce el programa ejecutable.

23

Copyright IBM Corp. 2007

Pasos de un Programa de Computadora

24

Copyright IBM Corp. 2007

Funcionamiento del Compilador/Enlazador El compilador crea un programa objeto y un listado del programa objeto. El programa objeto se usa como la entrada al enlazador para realizar lo que se llama el paso de edicin de enlace. El enlazador combina el programa objeto recin creado, con otros archivos objetos ya existentes para producir un programa ejecutable. Los otros archivos objeto generalmente residen en un archivo en disco llamado Librera de Enlace.

25

Copyright IBM Corp. 2007

Funcionamiento del Compilador / Enlazador

Compilador

Programa fuente

Programa objeto Enlazador

Libreras de Programas Objeto

Programa Ejecutable

26

Copyright IBM Corp. 2007

Datos e Instrucciones Un programa de computadora, para que pueda ser ejecutado debe ser cargado en memoria. La unidad de procesamiento del ordenador slo puede trabajar con los datos e instrucciones que residen en la memoria.

27

Copyright IBM Corp. 2007

Dato El dato es cualquier objeto o elemento de informacin que se usa a travs de las diversas operaciones dentro de un programa. Son los elementos sobre los que se opera cuando se efecta una instruccin. Un dato tiene un nombre que lo identifica y distingue de los dems elementos del programa. El nombre no es ms que una forma de referenciar la direccin de memoria que ocupa el dato.

28

Copyright IBM Corp. 2007

Tipo de Dato El tipo de dato es una definicin que identifica los valores vlidos para un conjunto de datos y las operaciones que sobre ellos se pueden realizar. Normalmente, se puede establecer una relacin de orden sobre los datos de naturaleza escalar o con valores determinsticos. Cada tipo de dato tiene una representacin en el computador. Para cada tipo de dato el computador reserva una cantidad de memoria para almacenarlo. Todo, absolutamente todo, en la memoria de un computador se representa por medio de cdigo binario.

29

Copyright IBM Corp. 2007

Clasificacin de los Tipos de Datos Los tipos de datos se clasifican en: Primitivos: tipos bsicos o simples predefinidos en el sistema. Pueden ser numrico, lgico o carcter. Definidos por el usuario: tipos de datos complejos definidos por el programador.

30

Copyright IBM Corp. 2007

Tipo de Dato Primitivo Numrico Los tipos primitivos numricos ms importantes son: Entero: es un subconjunto finito del conjunto matemtico de los nmeros enteros. No tiene parte decimal. Real: es un subconjunto finito del conjunto matemtico de los nmeros reales, tienen signo y parte decimal.

31

Copyright IBM Corp. 2007

Tipo de Dato Primitivo Lgico o Booleano El tipo primitivo lgico o booleano: Es aquel que slo puede tomar uno de los dos valores, verdadero o falso (1 0). Las operaciones lgicas retornan un valor lgico.

32

Copyright IBM Corp. 2007

Tipo de Dato Caracter El tipo de dato primitivo carcter: Es el conjunto finito y ordenado de caracteres que reconoce la computadora: letras, dgitos, caracteres especiales, cdigo ASCII y UNICODE. Los valores usualmente se representan dentro de un par de comillas simples. Se puede usar el cdigo del carcter o su posicin dentro del conjunto de caracteres vlidos que se est usando.

33

Copyright IBM Corp. 2007

Constantes y Variables Constantes: Son instancias de un tipo de dato que tienen un valor fijo que se le da cuando se define la constante. No puede ser modificado durante la ejecucin del programa o corrida del algoritmo. Variables: Son instancias de un tipo de dato, cuyo valor puede cambiar durante la ejecucin del programa o corrida del algoritmo. No vara su nombre y su tipo. Variables: Acumuladoras. Contadoras.
34
Copyright IBM Corp. 2007

Variables Las variables deben ser definidas o declaradas antes de usarlas. Una variable se declara dando un nombre significativo y tipo. El nombre o identificador, es una palabra que no es propia del lenguaje, la construye y usa el programador basndose en ciertas reglas. El nombre, por lo general, tiene que empezar por una letra, el tamao y caracteres permitidos para formar el identificador dependen del lenguaje. En algunos lenguajes, se le asigna un valor por defecto a la variable al declararla, si no se le asigna un valor inicial.
35
Copyright IBM Corp. 2007

Constantes Las constantes pueden llevar un nombre asociado, si no lo tienen se llaman literales. El valor de la constante se debe suministrar al definir la constante y no puede cambiar a lo largo de la ejecucin del programa. El tipo de dato de la constante se especifica o no en la declaracin dependiendo del lenguaje. Ejemplo de definicin de una constante: Const PI=3,1416 La ventaja de las constantes con nombre, es que se puede usar el nombre en cualquier lugar del programa y luego el compilador lo sustituye por su valor.

36

Copyright IBM Corp. 2007

Variables y Constantes en la Memoria Cuando el compilador consigue una declaracin de una variable o una constante con nombre, automticamente reserva en memoria espacio para guardarla. El espacio reservado en memoria depende del tipo de dato de la variable o constante. En esa ubicacin de memoria se guarda el valor asociado a la variable o constante. Cuando el programa se ejecuta busca el valor de la variable o constante en esa ubicacin de memoria.

37

Copyright IBM Corp. 2007

Expresiones: Tipos y Operadores Una expresin es una combinacin de constantes, variables, signos de operacin, parntesis y nombres especiales de funciones estndares, con un sentido unvoco y definido. La evaluacin de una expresin da como resultado un nico valor. Toda expresin tiene asociado un tipo que se corresponde con el tipo del valor que devuelve la expresin cuando se evala. Existen dos tipos de expresiones: Numricas. Lgicas.

38

Copyright IBM Corp. 2007

Expresiones Numricas: Operadores Aritmticos Las expresiones numricas son una combinacin de variables y constantes numricas con operadores aritmticos, que al evaluarse devuelven un valor numrico. Los operadores aritmticos se utilizan en las expresiones numricas. Algunos de los operadores aritmticos ms usados son: + Suma - Resta * Multiplicacin / Divisin
39

Copyright IBM Corp. 2007

Otros Operadores Aritmticos Otros operadores aritmticos soportados en algunos lenguajes de programacin son: Resto: devuelve el resto de una divisin entera. Divisin entera: devuelve el cociente de una divisin en la que no se consideran los decimales. Potencia: devuelve el valor de una base elevada a una potencia dada. Todos los operadores estudiados son binarios, utilizan dos operandos y el operador se sita en medio de ambos operandos.

40
Copyright IBM Corp. 2007

Operadores Unarios Los operadores unarios son un tipo de operador que slo necesitan de un operando. Algunos de los operadores unarios ms comunes son: Signo negativo: devuelve el valor actual del operando multiplicado por menos uno (-1). Decremento: devuelve el valor actual del operador decrementado en una unidad. Incremento: devuelve el valor actual del operador incrementado en una unidad.

41
Copyright IBM Corp. 2007

Evaluacin de Expresiones
El resultado que retorna de la evaluacin de una expresin depende del orden en que se evalen los operadores. Ejemplo: Sea la siguiente expresin aritmtica: 2 + 3 * 2 + 3 Si se evala en el orden de aparicin de los operadores : (((2 + 3) * 2) + 3) El resultado = 13 Si se evala primero la suma (+) y luego la multiplicacin (*): (2 + 3) * (2 + 3) El resultado = 25 Si se evala primero la multiplicacin y luego la suma: 2 + (3 * 2) + 3 El resultado = 11

42
Copyright IBM Corp. 2007

Reglas de Precedencia en las Expresiones


Para evaluar las expresiones, cada operador tiene una prioridad o regla de precedencia para su evaluacin dentro de la expresin. Cada lenguaje puede establecer sus propias reglas de prioridad o precedencia de operadores. El orden de precedencia ms usado para los operadores aritmticos bsicos, es: 1- ^ 2- *, /, div y mod 3- + y Se evala primero el operador con mayor prioridad. Entre dos operadores que tienen la misma precedencia se usa la regla de la asociatividad por la izquierda. Se pueden utilizar los parntesis () para cambiar el orden en que se evalan los operadores de una expresin aritmtica.
Copyright IBM Corp. 2007

43

Expresiones Lgicas: Operadores Relacionales y Lgicos Una expresin lgica es aquella que slo puede devolver uno de dos valores: Verdadero o Falso. Los operadores que pueden aparecer en una expresin lgica son de dos tipos: lgicos o relacionales. Los operadores lgicos slo trabajan sobre expresiones o datos que retornan valores booleanos. Los operadores relacionales trabajan con expresiones numricas para realizar comparaciones que retornan un valor booleano. Las expresiones combinan tanto los operadores lgicos como relacionales, se evala ms de una condicin o relacin por medio los de operadores lgicos.
44
Copyright IBM Corp. 2007

Operadores Relacionales Los operadores relacionales ms utilizados son: < menor que > mayor que = igualdad (en C/C++: ==) <> diferente (en C/C++: !=) menor o igual que mayor o igual que

45
Copyright IBM Corp. 2007

Ejercicio sobre Expresiones Lgicas Ejercicio: Evale las siguientes expresiones si se le asigna a:
la variable x el valor de 2. la variable y el valor de 4.

1. 2. 3. 4.

x == y x <> y y>x x >= y

46
Copyright IBM Corp. 2007

Operadores Lgicos Los operadores lgicos se utilizan para evaluar ms de una condicin al mismo tiempo. Los operadores lgicos ms utilizados son: Y (and, &&) O (or, !!) No (not, ~, !) O exclusivo (xor, ^) El No es un operador unario todos los dems son operadores binarios.

47
Copyright IBM Corp. 2007

Tabla de Verdad de los Operadores Lgicos

Tabla de Verdad
Operando 1 Operando 2 And Or XOr

V V F F

V F V F

V F F F

V V V F

F V V F

Leyenda: V=Verdadero F=Falso

48
Copyright IBM Corp. 2007

Ejercicio sobre Operadores Lgicos Ejercicio: Si x representa 1 > 2 (FALSO). y representa 4 < 8 (VERDADERO). Evale la siguientes expresiones: 1. NOT x 2. x AND y 3. y OR x 4. (NOT x) AND y 5. x XOR y

49
Copyright IBM Corp. 2007

Funciones Incorporadas Las funciones incorporadas son funciones que se agregan al lenguaje y que son diferentes de las operaciones bsicas. Se consideran estndar en la mayora de herramientas y lenguajes de programacin. Son dependientes del lenguaje y normalmente se encuentran en libreras externas que se pueden incluir en un programa. Las libreras ms comunes son las libreras de soporte matemtico y las de entrada / salida. La sintaxis y el nombre de las funciones puede variar de un lenguaje a otro, pero la funcionalidad suele mantenerse entre las diversas herramientas de programacin.
50
Copyright IBM Corp. 2007

Uso de las Funciones Incorporadas

Lenguaje Pascal C y C++ Java

Sentencia use include import

Ejemplo use conio; #include <iostream> Import java.io.*;

51
Copyright IBM Corp. 2007

Operacin de Asignacin La operacin de asignacin consiste en atribuir un valor a una variable. El valor asignado es una expresin, una constante u otra variable. Lenguaje Operador Ejemplo Pascal := var := 5 + 3; C y C++ Java = = var = 5 + 3; var = Math.sin(90.0);

var: representa la variable a la que se le asigna el valor dado en la expresin a la derecha del operador de asignacin.
52
Copyright IBM Corp. 2007

Fases de la Operacin de Asignacin


La operacin de asignacin se realiza en 2 fases: Se evala la expresin de la parte derecha de la asignacin y se obtiene un nico valor. Se asigna ese valor a la variable de la parte izquierda. En la parte izquierda de la operacin de asignacin slo puede haber una variable y al asignarle el valor pierde el valor anterior. Si la variable de la parte izquierda participa en la expresin, se evala primero la expresin antes de realizar la asignacin. Ejemplo x = x + 1. El tipo de dato resultante despus de evaluar la expresin (parte derecha), tiene que ser del mismo tipo de dato o un tipo compatible con el de la variable a la cual se le asignar el resultado de la operacin.
53
Copyright IBM Corp. 2007

Recomendaciones al Programar Para minimizar la ocurrencia de errores al programar se recomienda: Reutilizar cdigo bueno. No asumir los datos de entrada como vlidos. No asumir que los datos de entrada estn en la secuencia correcta. Disear los tamaos de los campos de datos de modo que puedan contener en el campo el valor actual ms grande. Usar comentarios en los programas. Desarrollar programas legibles y fciles de entender.
54
Copyright IBM Corp. 2007

Resumen Ahora que ud. ha completado esta unidad, debe ser capaz de: Definir el propsito y el contenido de un programa de computadora. Establecer una metodologa para resolver problemas de procesamiento de datos. Definir el concepto de dato, los tipos de datos y las funciones incorporadas a los lenguajes de programacin. Enumerar las recomendaciones ms comunes necesarias para programar con estilo.
55
Copyright IBM Corp. 2007

Unidad 2

Conceptos de Diseo Estructurado

56
Copyright IBM Corp. 2007

Objetivos de Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Listar las caractersticas del Diseo Estructurado. Definir los conceptos de diseo Top-Down. Describir los Diagramas de Estructura, Diagramas de Flujo y Diagramas de Nassi Schederman. Definir el concepto de Pseudocdigo.

57
Copyright IBM Corp. 2007

Anlisis y Diseo de Algoritmos El anlisis y diseo de algoritmos requiere: 1. El uso de alguna tcnica para la descripcin del problema: Diseo Estructurado. Diseno Top-Down. 2. Representar el algoritmo mediante una herramienta de programacin: Diagramas de Flujo. Pseudocdigo. Diagrama N-S o Nassi-Schedeman.

58
Copyright IBM Corp. 2007

Conceptos de Diseo Estructurado Las caractersticas de un sistema que ha sido desarrollado siguiendo los lineamientos del diseo estructurado, son: Tiene una entrada y una salida con variaciones ocasionales. Est dividido en mdulos. No utiliza la sentencia GOTO.

59
Copyright IBM Corp. 2007

Diseo Top Down Es el proceso de dividir reiteradamente el problema en subproblemas ms simples, hasta que pueden ser implementados para su solucin. Va de lo ms general a lo ms especfico. Se conoce como refinamiento "paso a paso". Simplificacin del problema y de los subprogramas de cada descomposicin. Las diferentes partes del problema pueden ser programadas de modo independiente, incluso por diferentes personas. El programa final queda estructurado en forma de bloque o mdulos (lo que hace ms sencilla su lectura y mantenimiento).

60
Copyright IBM Corp. 2007

Ejemplo de un Diseo Top Down


Un profesor requiere de un programa para manejar las notas de sus alumnos. El programa debe permitirle asignar las notas, cambiar las notas y ver las notas segn distintas calificaciones. Un esquema que representa una de las posibles divisiones del problema en subproblemas o mdulos es:

Notas Alumnos
Elegir opcin Asignar notas Cambiar notas Consultar

Por notas
61

Por apellido
Copyright IBM Corp. 2007

Diseo Top Down: Problema Objetivo: Escribir un programa para una tienda de video. Enunciado del Problema: Permitir que un cliente registrado en la tienda alquile videos. La tienda tiene un conjunto de reglas que deben cumplirse para que un cliente alquile un video: El cliente es un miembro registrado. No tiene ningn alquiler vencido. No debe nada a la tienda. La pelcula est en el inventario. La pelcula no est reservada.

62
Copyright IBM Corp. 2007

Diseo Top Down: Problema1 Un programa de alto nivel es: Alquilar un Video. Al descomponer el programa de alto nivel se obtienen los subprogramas: Verificar si el cliente es un miembro registrado. Verificar los alquileres vencidos. Verificar si el miembro tiene una deuda. Verificar si la pelcula est en el inventario. Verificar si la pelcula ya est reservada.

63
Copyright IBM Corp. 2007

Diseo Top Down: Problema2


Al descomponer de nuevo los pasos anteriores: Verificar si el cliente es un miembro registrado: Ingresar en el sistema la identificacin del cliente. Ver en pantalla si se encontr el perfil del cliente. Verificar los alquileres vencidos: Determinar si el perfil refleja algn alquiler vencido en el sistema. Verificar si el miembro tiene una deuda: Determinar si el perfil refleja algn cargo pendiente. Verificar si la pelcula est en el inventario: Ingresar el nombre de la pelcula al sistema. Verificar si existe una copia que no est alquilada. Verificar si la pelcula ya est reservada: Determinar si las copias no alquiladas ya estn reservadas. Copyright IBM Corp. 2007

64

Diseo Top Down: Problema3


Al descomponer el subprograma: 1.1. Verificar si el cliente es un miembro registrado. Preguntar el nmero de telfono u otra identificacin al cliente. 1.2. Ingresar el nmero de telfono en el sistema. Seleccionar del men la opcin de verificar el nmero de miembro. Ingresar el nmero de cliente en el prompt. Presionar la tecla que indica al sistema que est listo para que verifique si existe el nmero en el sistema. 1.3. Verificar en la pantalla si se ha encontrado alguna coincidencia. Visualmente verificar si el sistema indica si es o no miembro.
Copyright IBM Corp. 2007

65

Diagramas de Estructura
Un diagrama de estructura es una manera grfica de representar el diseo top down. Permite representar en forma clara, la organizacin de alto nivel de un programa. Ejemplo: Alquilar
una Pelcula

Verificar si es un miembro

Verificar alquileres vencidos

Verificar deudas pendientes

Verificar si est en inventario

Verificar si no est reservada

Preguntar id 66

Ingresar id

Examinar perfil

Copyright IBM Corp. 2007

Representacin de Algoritmos Para representar un algoritmo se utiliza algn mtodo que independice el algoritmo del lenguaje de programacin. Los mtodos permiten representar el algoritmo, y a partir de esta representacin, implementar el algoritmo en cualquier lenguaje de programacin. Las herramientas para representar un algoritmo son: Diagramas de Flujo. Pseudocdigo. Diagrama N-S o Nassi-Schedeman.

67
Copyright IBM Corp. 2007

Diagramas de Flujo Un diagrama de flujo es una representacin grfica de la lgica del diseo. Est a un nivel de detalle ms bajo que los diagramas de estructura. Un diagrama de flujo se usa cuando se desea seguir bajando a un nivel con mayores detalles, tal como agregar bifurcacin de condicionales y/o iterar. En todo diagrama de flujo siempre habr una caja de inicio y otra de fin, para el principio y final del algoritmo.

68
Copyright IBM Corp. 2007

Smbolos de los Diagramas de Flujo


Lneas de flujo: Sirve para conectar los smbolos del diagrama y la flecha, indica la secuencia en la que se van a ejecutar las acciones. Smbolo de proceso: Indica la accin que tiene que realizar la computadora. Dentro se escribe la accin. Acciones de entrada y salida. Dentro se colocan las acciones de lectura y escritura. Condicin: Se coloca una condicin. Representa estructuras selectivas y repetitivas. Se evala la condicin y se escoge un camino de acuerdo a si el resultado es verdadero o falso.
69
Copyright IBM Corp. 2007

Smbolos de los Diagramas de Flujo...1


Principio y fin: Dentro del smbolo ir la palabra inicio o fin del algoritmo. Subprograma: Dentro se coloca el nombre del subprograma al que se llama.

Conectores: Sirven cuando un flujograma no cabe en una columna de la pgina y hay que seguir en otra columna. El primer smbolo si est en la misma pgina y el segundo en pgina distinta. Aclaratoria: Es un comentario para entender mejor el cdigo, pero no es parte del cdigo y por tanto no se ejecuta.
70
Copyright IBM Corp. 2007

Smbolos de los Diagramas de Flujo2

Pantalla: Cuando la salida es por pantalla.

Teclado: Representa una entrada por teclado.

Impresora.

Entrada/Salida por disco.

71

Copyright IBM Corp. 2007

Pasos para Crear un Diagrama de Flujo


A

Determinar requerimientos del proceso Determinar requerimientos del post-proceso

Crear Diagrama de Flujo

Verificar Diagrama de Flujo

Diagrama Flujo OK?


SI

NO

Fin

72

Copyright IBM Corp. 2007

Detalles del Diagrama de Flujo Las bifurcaciones condicionales se ejecutan segn una determinada condicin. Si la condicin es verdadera se ejecuta un bloque del proceso. Si es falsa se ejecuta un bloque diferente. Iterar es cuando en un segmento de un algoritmo, los pasos se repiten un nmero determinado de veces mientras se cumple una determinada condicin.

73

Copyright IBM Corp. 2007

Ejemplo de Diagrama de Flujo


Problema: Alquiler de video. Subproblema: Verificar si el cliente es un miembro registrado.
Obtener Identificacin

Introducir nro. Telfono en la Computadora

NO

SI

Nmero encontrado?

Iniciar Proceso: Nuevo Miembro

Proceder con el Alquiler

74

Copyright IBM Corp. 2007

Representacin de un Problema con un Diagrama de Flujo Problema: Determinar el producto de varios nmeros positivos que se ingresan a travs del teclado. Se indica el fin de datos al leer un nmero negativo. Algoritmo: Iniciar la variable del producto. Leer nmero. Preguntar si es negativo o positivo. Si es negativo salir y escribir el producto. Si es positivo, se multiplica el nmero ledo y luego se lee un nuevo nmero. Se vuelve al paso 3.
75
Copyright IBM Corp. 2007

Diagramas de Flujo para Calcular el Producto de Nmeros


INICIO

P=1

LEER NUM

SI NUM >= 0 P = P x NUM

NO

ESCRIBIR P

FIN

76

Copyright IBM Corp. 2007

Diagramas N-S o de Nassi-Schederman Los diagramas N-S son una forma de representacin semejante al diagrama de flujo, pero sin flechas y con los smbolos de condicin y repeticin diferentes. Estn conformados por una serie de cajas de procesos que constituyen las secuencias de acciones necesarias para representar el algoritmo. Las cajas de proceso o accin van unidas entre si. Son muy tiles para representar diagramas estructurados.

77

Copyright IBM Corp. 2007

Estructuras de los Diagramas N-S Representacin de la Estructura Condicional:


Condicin SI NO

<Accin 1>

<Accin 2>

Representacin de Estructuras Repetitivas:


Mientras <Condicin>

<Acciones>

Para Var desde V1 Hasta V2

<Acciones>

Repetir Hasta <Condicin>

<Acciones>

78

Copyright IBM Corp. 2007

Ejemplo de Uso de los Diagramas N-S Problema:


Determinar el producto de varios nmeros positivos que se ingresan a travs del teclado. Se indica el fin de datos al leer un nmero negativo.
INICIO

p=1 Leer num

Mientras (num >= 0>) p = p x num

Leer num Escribir p

FIN

79

Copyright IBM Corp. 2007

Pseudocdigo El pseudocdigo es un lenguaje de documentacin de programas similar al ingls (o espaol), parecido a cualquier lenguaje de programacin de alto nivel. No necesita seguir ninguna regla especfica, como s lo requieren los programas que van a ser compilados. Normalmente no es muy especfico para las reas de E/S. Tiene la ventaja que se puede crear fcilmente con cualquier editor de texto. No hay ningn estndar en la industria definido para los pseudocdigos.

80
Copyright IBM Corp. 2007

Palabras Claves en Pseudocdigo


El pseudocdigo puede utilizar palabras claves o palabras especiales que van indicando lo que significa el algoritmo. Ejemplo de palabras claves en pseudocdigo: Inicio y Fin S <condicin> Entonces <acciones> Sino <acciones> Mientras <condicin> hacer Repetir / hasta <condicin> Desde / hasta Segn sea Los comentarios van encerrados entre llaves. Hay que utilizar las sangras.
Copyright IBM Corp. 2007

81

Estructura de los Pseudocdigos La estructura recomendada para los algoritmos en pseudocdigo es:

Algoritmo <nombre algoritmo> Var <nombre>: <tipo> Inicio <Instrucciones> Fin

82
Copyright IBM Corp. 2007

Ejemplo de Pseudocdigo Problema:


Determinar el producto de varios nmeros positivos que se ingresan a travs del teclado. Se indica el fin de datos al leer un nmero negativo. Algoritmo Producto Var p, num: entero Inicio p = 1 Leer num Mientras num >=0 hacer p = p * num Leer num Fin mientras Escribir p Fin
83
Copyright IBM Corp. 2007

Resumen Ahora que ud. ha completado esta unidad, debe ser capaz de: Listar las caractersticas del Diseo Estructurado. Definir los conceptos de diseo Top-Down. Describir los Diagramas de Estructura, Diagramas de Flujo y Diagramas de Nassi Schederman. Definir el concepto de Pseudocdigo.

84
Copyright IBM Corp. 2007

Unidad 3

Programacin Estructurada

85
Copyright IBM Corp. 2007

Objetivos del Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Conocer las tcnicas de programacin estructurada. Trabajar con las estructuras secuenciales. Trabajar con las estructuras selectivas. Trabajar con las estructuras repetitivas. Conocer la anidacin de bucles y condicionales. Realizar el control de datos de entrada.

86
Copyright IBM Corp. 2007

Estructuras Secuenciales Una instruccin sigue a otra en secuencia, es decir, la salida de una instruccin es la entrada de la siguiente.

FLUJOGRAMA

DIAGRAMAS N-S

PSEUDOCDIGO
Leer num num = num * 2 Escribir num

87
Copyright IBM Corp. 2007

Estructuras Secuenciales: Ejemplo Problema: Obtener la edad de una persona en meses, si se ingresa su edad en aos y meses. Ejemplo: Si se ingresan 3 aos 4 meses debe mostrar 40 meses.

88
Copyright IBM Corp. 2007

Estructuras Secuenciales: Ejemplo1


INICIO

entero meses, anios, totalM

Ingrese los aos de la persona

anios

Ingrese los meses


meses

totalM = (anios * 12) + meses

La edad en meses es: totalM

FIN

89
Copyright IBM Corp. 2007

Estructuras Secuenciales: Ejemplo2 Un instructor prepara tres modelos de exmenes para tres salones en un curso de programacin. El instructor tarda un tiempo diferente para revisar cada modelo de examen: 5 min en el modelo del saln A. 8 min en el modelo del saln B. 6 minutos en el modelo del saln C. Dadas las cantidades de estudiantes en cada saln, cuntas horas y minutos tardar el instructor en revisar los exmenes de todos los salones?.

90
Copyright IBM Corp. 2007

Estructuras Secuenciales: Ejemplo3


INICIO entero estA, estB, estC, tiempoA, tiempoB, tiempoC, tiempoT, horasT, minT

Ingrese la cantidad de estudiantes de los salones A, B y C estA, estB, estC

tiempoA = estA * 5, tiempoB = estB * 8, tiempoC = estC * 6, tiempoT = tiempoA + tiempoB + tiempoC

horasT = tiempoT / 60

minT = tiempoT mod 60

El instructor tardar horasT horas y minT minutos FIN


Copyright IBM Corp. 2007

91

Estructuras Selectivas Permiten que el algoritmo tome decisiones y ejecute u omita algunos procesos dependiendo de que se cumpla una condicin. En funcin del resultado lgico de la condicin (verdadero o falso) se ejecuta un conjunto de instrucciones u otro. Son tambin denominadas estructuras de control de flujo, estructuras condicionales o de toma de decisiones. Hay tres tipos: Simples. Dobles. Mltiples.
92
Copyright IBM Corp. 2007

Estructura Selectiva Simple Es la estructura condicional elemental y bsica. Se representa: S <condicin> entonces <acciones> Fin S En la estructura condicional simple se evala la condicin: Si el resultado es verdadero se ejecuta el conjunto de acciones asociadas al bloque. Si el resultado es falso, no se ejecuta accin alguna.

93
Copyright IBM Corp. 2007

Ejemplo de Estructuras Selectivas Simples

FLUJOGRAMA

DIAGRAMAS N-S

PSEUDOCDIGO

Condicin No Condicin Si Acciones Acciones Acciones Si No

S <condicin> entonces <acciones> Fin s

94
Copyright IBM Corp. 2007

Estructura Selectiva Simple: Ejercicio Solicite un nmero al usuario e imprima su valor absoluto. El valor absoluto de un nmero es: Si es positivo: el mismo valor. Si es negativo: el valor cambiado de signo.

95
Copyright IBM Corp. 2007

Estructura Selectiva Simple: Ejercicio1

algoritmo valor_absoluto var numero: entero inicio mostrar Ingrese un nmero entero: leer numero si numero < 0 entonces numero = numero * (-1) fin si mostrar El valor absoluto es: numero fin valor_absoluto

96
Copyright IBM Corp. 2007

Estructura Selectiva Doble La estructura selectiva doble evala la condicin: Si es verdad: se ejecuta el conjunto de acciones asociadas a la parte entonces. Si es falso se ejecutan el conjunto de acciones asociadas a la parte sino.
FLUJOGRAMA
No acciones Si Si acciones acciones acciones acciones No

DIAGRAMAS N-S
condicin

PSEUDOCDIGO

condicin

S <condicin> entonces <acciones> Sino <acciones> Fin s

97
Copyright IBM Corp. 2007

Estructura Selectiva Doble: Ejemplo Dados dos nmeros enteros que se leen por teclado, comprelos y muestre un mensaje en pantalla que anuncie el resultado de la comparacin. Presente el algoritmo como: Diagrama de flujo. Pseudocdigo.

98
Copyright IBM Corp. 2007

Estructuras Selectivas de Alternativa Mltiple Son estructuras que evalan mltiples alternativas que se generan de una condicin o una expresin que puede tomar n valores distintos. De acuerdo al valor de la expresin, en un momento dado se ejecutan las acciones correspondientes al valor que haya tomado la expresin. Equivale a un conjunto de condiciones anidadas. En muchos lenguajes de programacin se conocen como sentencias Case o Switch.

99
Copyright IBM Corp. 2007

Estructuras Selectivas de Alternativa Mltiple1 La estructura selectiva de alternativa mltiple se representa: Segn sea <expresin> <valor1>: <acciones 1> <valor2>: <acciones 2> [<otro> : <acciones n>] Fin Segn Las acciones asociadas al valor otro se ejecutan cuando la expresin no toma ninguno de los valores que aparecen antes. Se le conoce tambin como alternativa Otherwise o Else.

100

Copyright IBM Corp. 2007

Representacin de las Estructuras Selectivas de Alternativa Mltiple

FLUJOGRAMA

DIAGRAMAS N-S

PSEUDOCDIGO

Expresin Expresin V1 V2 V3 V4 Segn sea <expresin> <valor1>:<acciones> <valor2>:<acciones> <valor3>:<acciones> <valor4>:<acciones> [<otro> :<acciones>] Fin segn

V1

V2

V3

V4

acciones

101

Copyright IBM Corp. 2007

Estructuras Selectivas de Alternativa Mltiple: Ejemplo1

Escribir un programa que dada una nota entera, presente por pantalla un mensaje acorde a la nota suministrada segn un rango de valores. Para un rango de valores: Leer una nota y escribir en pantalla la calificacin Var nota: entero Leer nota Segn sea nota 1..4: escribir suspenso 5..6: escribir aprobado 7..8: escribir Notable 9: escribir Sobresaliente 10: escribir Cuadro de honor Fin segn
102
Copyright IBM Corp. 2007

Estructuras Selectivas de Alternativa Mltiple: Ejemplo2 Una aseguradora de vehculos tiene diferentes porcentajes de prima dependiendo de los aos de antigedad del vehculo. 1 ao pagan el 5% de su valor, 2 aos el 8%, 3 aos el 10%, 4 aos el 12%, 5 aos o ms pagan el 15%. Elabore un programa que solicite el valor del vehculo y los aos de antigedad, y muestre por pantalla el valor de la prima.

103

Copyright IBM Corp. 2007

Estructuras Condicionales Anidadas Las estructuras anidadas se forman cuando las estructuras se escriben unas dentro de otras. Se pueden tener estructuras condicionales anidadas. Sirven para evaluar un conjunto de condiciones en forma secuencial y separada. La ventaja de anidar sentencias condicionales, es que cuando se cumple una de las condiciones no hay que seguir evaluando las condiciones que le siguen.

104

Copyright IBM Corp. 2007

Estructuras Condicionales Anidadas1 Sintaxis: Si <condicion1> Entonces <sentencia1> Sino si <condicion2> Entonces <sentencia2> Sino si <condicion2> Entonces <sentencia3> Fin si Fin si Fin si
105
Copyright IBM Corp. 2007

Estructuras Repetitivas o de Ciclo La estructura repetitiva o de ciclo, es la estructura de programacin que contiene o representa un bucle o conjunto de instrucciones que se repiten un nmero finito de veces. Cada repeticin del bucle se llama una iteracin. Todo bucle tiene asociado una condicin, que es la que va a determinar si se ejecuta el bucle y hasta cuando. Existen tres tipos de bsicos de estructuras repetitivas: Mientras-hacer (While do) Repetir hasta (Repeat until) Desde (For)
106

Copyright IBM Corp. 2007

Estructura Repetitiva Mientras-Hacer La estructura Mientras-Hacer es aquella en que el cuerpo del bucle se repite mientras se cumple una determinada condicin. La condicin de entrada se evala antes de realizar cualquier iteracin del bucle. Si la condicin no se cumple, el ciclo no se ejecuta y el programa contina con la secuencia de acciones siguientes al ciclo Mientras-Hacer.

107

Copyright IBM Corp. 2007

Estructura Repetitiva Mientras-Hacer1 Funcionamiento de la estructura Mientras-Hacer: La condicin del Mientras-Hacer se evala al principio, antes de entrar en l. Si la condicin es verdadera, se ejecutan las acciones del Mientras-Hacer. Despus de ejecutar la ltima accin, se repite el proceso de evaluacin de la condicin; si la condicin es verdadera, se repite el ciclo. Este proceso se conoce como un bucle y contina hasta que la condicin sea falsa. Cuando la condicin evala a falso se prosigue con la sentencia siguiente del programa.

108

Copyright IBM Corp. 2007

Estructura Repetitiva Mientras-Hacer1

FLUJOGRAMA

DIAGRAMAS N-S

PSEUDOCDIGO

No condicin

Mientras <cond> Hacer <acciones>

Si

Mientras <condicin> Hacer <acciones> Fin mientras

acciones

109

Copyright IBM Corp. 2007

Estructura Repetitiva Mientras-Hacer: Ejemplo


Ejemplo: Programa para sumar 10 nmeros que se leen por terminal
inicio cont = 0 suma = 0

cont < 10

La suma es: suma

leer n suma = suma + n cont = cont + 1

fin

algoritmo suma Var n, cont, suma:entero inicio cont = 0 suma = 0 mientras cont < 10 hacer leer n suma = suma + n cont = cont + 1 fin mientras mostrar La suma es: suma fin suma

110

Copyright IBM Corp. 2007

Estructura Repetitiva: Repetir-Hasta Es una estructura de ciclo en la que la condicin se evala despus de realizar la primera iteracin del bucle. Se repite el bucle mientras la condicin del ciclo, al final del bloque de sentencias, se mantenga en falso. Cuando la condicin evala a verdadero se sale del bucle.

111

Copyright IBM Corp. 2007

Estructura Repetitiva: Repetir-Hasta1 Funcionamiento: Se repite el bucle hasta que la condicin sea verdadera. El bucle se repite y ejecuta mientras la condicin sea falsa. La condicin se evala siempre al final del bucle. Si es falsa volvemos a ejecutar las acciones. Si es verdad se sale del bucle. Dado que la condicin se evala al final, se habr pasado al menos una vez por el bucle. Cuando un bucle se tenga que ejecutar como mnimo una vez se puede usar esta estructura.
112
Copyright IBM Corp. 2007

Estructura Repetitiva: Repetir-Hasta2

FLUJOGRAMA

DIAGRAMAS N-S

PSEUDOCDIGO

<Acciones>
Acciones

condicin

falso

Repetir <con> hasta

Repetir <acciones> Hasta <condicin>

verdadero

113

Copyright IBM Corp. 2007

Estructura Repetitiva: Repetir-Hasta3


Ejemplo: Programa para sumar 10 nmeros que se leen por terminal
inicio

suma=0 cont = 0

Leer n

suma = suma + n cont = cont + 1

no

cont = 10

si

algoritmo suma entero n, cont, suma inicio cont = 0 suma = 0 repetir leer n suma = suma + n cont = cont + 1 Hasta cont = 10 mostrar La suma es: suma fin

Mostrar suma

fin

114

Copyright IBM Corp. 2007

Estructura Repetitiva: Desde La estructura Desde es una estructura de ciclo que se utiliza cuando se sabe el nmero exacto de veces que se va a ejecutar el bucle. El bucle lleva asociado una variable que se denomina variable ndice, a la que se le asigna un valor inicial y se establece cul va a ser su valor final. En cada iteracin del bucle la variable ndice se incrementa o decrementa en un valor constante y de manera automtica.

115

Copyright IBM Corp. 2007

Estructura Repetitiva: Desde1

FLUJOGRAMA
v = vi no

DIAGRAMAS N-S

PSEUDOCDIGO

Desde v=vi hasta vf

v <>vf si acciones v= v+1

<acciones>

Desde <v=vi> hasta <vf> <acciones> Fin desde

116

Copyright IBM Corp. 2007

Estructura Repetitiva: Desde2


Ejemplo: Programa para sumar 10 nmeros que se leen por terminal
inicio suma=0 vi = 0 vf = 10 v = vi

v <> vf

no

si Leer n

suma = suma+ n v=v+1

algoritmo suma entero n, v, vi, vf, suma inicio vi = 0 vf = 10 suma = 0 desde v= vi hasta v=vf leer n suma = suma + n fin desde mostrar La suma es: suma fin suma

Mostrar total

fin

117

Copyright IBM Corp. 2007

Comparacin de las Estructuras Repetitivas


Problema: Sumar 10 nmeros leidos del terminal
Mientras hacer Repetir hasta Desde hasta
vi = 1 v = vi vf = 10 Desde v=vi hasta v=vf Leer num suma= suma + num Fin desde

cont = 0 cont = 0 suma = 0 suma = 0 Mientras(cont <> 10) Repetir Leer num Hacer suma= suma + num Leer num cont= cont + 1 suma= suma + num Hasta (cont == 10) cont= cont + 1 Fin mientras

118

Copyright IBM Corp. 2007

Estructuras Anidadas Las estructuras anidadas se forman cuando las estructuras se escriben unas dentro de otras. Se pueden colocar los bucles unos dentro de otros o condicionales dentro de condicionales. Ejemplo: Un ciclo desde puede tener dentro de sus sentencias otro ciclo desde o cualquier otra estructura repetitiva. Ejemplo: La evaluacin de una condicin puede llevar a la evaluacin de otra condicin. No existen limitaciones formales en cuanto al nmero de sentencias y estructuras anidadas que se pueden colocar en un mismo bloque de cdigo, depende del lenguaje de programacin que se est usando
119
Copyright IBM Corp. 2007

Estructuras Anidadas - Anidacin de Condicionales


Sirven para evaluar un conjunto de condiciones en forma secuencial y separada. La ventaja de anidar sentencias condicionales, es que cuando se cumple una de las condiciones no hay que seguir evaluando las condiciones que le siguen. Sintaxis:
si <condicion1> entonces <sentencia1> sino si <condicion2> entonces <sentencia2> sino si <condicion3> Entonces <sentencia3> fin si fin si fin si

120

Copyright IBM Corp. 2007

Bucles Anidados Al anidar bucles hay que tener en cuenta que el bucle interno funciona como una sentencia ms en el bloque del bucle externo. Por cada iteracin del bucle externo se van a ejecutar todas las iteraciones del bucle interno. Los bucles que se anidan pueden ser de igual o de distinto tipo.

121

Copyright IBM Corp. 2007

Bucles Anidados: Ejemplo Ejemplo: Existen 8 profesores y cada uno dicta 5 cursos. Se pide ingresar las asignaturas de cada profesor.
Desde i=1 hasta 8 Desde k=1 hasta 5
Escribir Profesor i introduzca su asignatura n k

Leer asignatura Fin desde {instruccin desde interno} Fin desde {instruccin desde externo}

122

Copyright IBM Corp. 2007

Bucles Anidados: Ejemplo1


Tabla de multiplicar del 2 Inicio var i , j, producto: enteros i = 2 desde j = 1 hasta 10 producto = i * j mostrar i, por, j , =, producto fin desde Fin Tablas de multiplicar Inicio var i , j, producto: enteros desde i=1 hasta 9 mostrar tabla del i desde j = 1 hasta 10 producto = i * j mostrar i, por, j , =, producto fin desde fin desde fin
123
Copyright IBM Corp. 2007

Ejercicio 1 Desarrollar un algoritmo para determinar y mostrar los mltiplos de 5 comprendidos entre 1 y 100. Use las estructuras: Mientras hacer Repetir hasta Desde

124

Copyright IBM Corp. 2007

Ejercicio 2 Leer 100 nmeros y determinar la media de los nmeros positivos y la media de los nmeros negativos. El cero no se considera ni negativo ni positivo. Use las estructuras: Mientras hacer Repetir hasta Desde

125

Copyright IBM Corp. 2007

Ejercicio 2: Solucin
Leer 100 nmeros y determinar la media de los nmeros positivos y la media de los nmeros negativos. El cero no se considera ni negativo ni positivo inicio var np, nn, np = 0 , nn desde i = 1 leer numero si numero > entonces sp, sn, mediapos, medianeg, numero : enteros = 0, sp = 0 , sn = 0 hasta 100 0 np = np + 1 sp = sp + numero

sino si numero < o entonces nn = nn + 1 sn = sn + numero fin si fin si fin desde mediapos = sp / np medianeg = sn / nn mostrar media de los numeros positivos, mediapos mostrar media de los numeros negativos, medianeg fin
126
Copyright IBM Corp. 2007

Ejercicio 3 Dado un nmero determinar la suma de sus dgitos. Ejemplo: Nmero = 6542 Suma_digitos = 6 + 5 + 4 + 2 = 17

127

Copyright IBM Corp. 2007

Ejercicio 3: Solucin
Dado un nmero entero determinar la suma de sus dgitos. algoritmo digitos inicio var n, suma, residuo : entero mostrar Ingrese un nmero entero: leer n suma = 0 mientras n <> 0 hacer residuo = n mod 10 suma = suma + residuo n = n div 10 fin mientras mostrar La suma es: suma fin digitos

128

Copyright IBM Corp. 2007

Control de Entrada de Datos Cuando en los algoritmos se ingresan los datos desde un dispositivo de entrada, como una lista de valores, se utilizan bucles. Se requiere de alguna forma de control para finalizar el bucle de entrada de datos. Los casos a considerar son: Usar un valor centinela que determina el fin del bucle. La lectura secuencial de archivos. Se conozca el nmero exacto de veces que ejecuta una accin o proceso. El control de datos para no permitir datos errneos.
Copyright IBM Corp. 2007

129

Control de Entrada: Uso de Centinela Un centinela es un mtodo para terminar un bucle que lee una lista de valores. El centinela es un valor especial que indica el fin de los datos de entrada. El bucle se va a repetir mientras no se lea el valor centinela. La primera lectura se va a realizar fuera del bucle: Si al ingresar el dato, ste coincide con el valor centinela no se entra al bucle y se sigue con el resto del algoritmo. En caso contrario, se entra en el bucle. Se recomienda utilizar una estructura mientras.

130

Copyright IBM Corp. 2007

Control de Entrada Uso de Centinela: Ejemplos


Ejemplo 1
centinela = 9 Leer opcion mientras (opcion <> centinela) hacer <acciones> leer opcion fin mientras

Ejemplo 2 : Leer y sumar las notas de los estudiantes y terminar cuando se lea un valor negativo.
suma = 0 Leer nota mientras (nota >= 0) hacer suma = suma + nota Leer nota Fin mientras
131
Copyright IBM Corp. 2007

Control de Entrada en Archivos Secuenciales


Los datos de entrada pueden estar en un archivo. Para recuperar los datos se realiza una lectura secuencial de todos los registros del archivo. Una estrategia comn de lectura para un archivo con acceso secuencial es: Abrir el archivo. Leer un registro del archivo. Verificar si no es fin de archivo antes de entrar al ciclo para recorrer el archivo. Realizar las operaciones con los datos de entrada. Volver a leer datos del archivo. Se repite el ciclo hasta que sea fin de archivo. Se recomienda utilizar una estructura mientras. Se repite el ciclo hasta que sea fin de archivo.

132

Copyright IBM Corp. 2007

Control de Entrada en Archivos Secuenciales...1 Ejemplo:


archivo mi_archivo abrir_Archivo(mi_archivo) leer_Archivo(mi_archivo) mientras (NO (Fin_de_Archivo(mi_archivo)))Hacer <acciones con los datos del archivo> leer_Archivo(mi_archivo) fin mientras regresar al ciclo hasta que sea fin de archivo.

133

Copyright IBM Corp. 2007

Se Conoce la Cantidad de Datos de Entrada Cuando se conoce la cantidad de datos de entrada la mejor opcin para realizar el control de entrada es utilizar un ciclo Desde...Hasta. Normalmente, el nmero de veces que se va a repetir el proceso es un valor de entrada o se tiene de otra fuente. Una vez que se obtiene este valor, se le asigna a la variable de ndice para el ciclo Desde. Se efecta la operacin hasta que se cumpla el nmero de veces deseado.

134

Copyright IBM Corp. 2007

Se Conoce la Cantidad de Datos de Entrada


Ejemplo:
var i : Entero mostrar Ingrese numero de materias a registrar: leer numero_materias desde i = 1 Hasta numero_materias mostrar Ingrese Materia numero ,i, : leer materia <acciones a realizar con materia> fin desde

135

Copyright IBM Corp. 2007

Control de Entrada: Evitar Datos Errneos El control de datos de entrada para evitar el ingreso de datos errneos, se usa cuando se quiere forzar al usuario a que introduzca datos correctos. Ejemplo: un valor numrico dentro de un rango determinado. En estos casos se recomienda usar un ciclo Repetir...Hasta.

136

Copyright IBM Corp. 2007

Control de Entrada: Evitar Datos Errneos1

Ejemplo:
var opcion : entero opcion = 0 repetir mostrar Menu: mostrar 1. Crear Archivo mostrar 2. Borra Archivo mostrar 3. Incluir Registro mostrar 4. Salir del sistema ingrese el numero de la opcion : leer opcion hasta (opcion >= 1) y (opcion <= 4)

137

Copyright IBM Corp. 2007

Resumen Ahora que ud. ha completado esta unidad, debe ser capaz de: Conocer las tcnicas de programacin estructurada. Trabajar con las estructuras secuenciales. Trabajar con las estructuras selectivas. Trabajar con las estructuras repetitivas. Conocer la anidacin de bucles y condicionales. Realizar el control de datos de entrada.

138

Copyright IBM Corp. 2007

Unidad 4

Procedimientos y Funciones

139

Copyright IBM Corp. 2007

Objetivos de Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Definir qu son las funciones, sus caractersticas y sintaxis. Definir los procedimientos, sus caractersticas y sintaxis. Explicar el mbito de las variables. Explicar la comunicacin entre subprogramas. Definir qu es la recursividad.

140

Copyright IBM Corp. 2007

Introduccin La programacin modular es una tcnica de la programacin que se apoya en el diseo descendente y en la filosofa de divide y vencers. Se trata de dividir el problema en problemas ms simples o ms pequeos. Cada subproblema se implementa en un mdulo o subrprograma independiente. Cada subprograma debe cumplir cabalmente una tarea especifica.

141

Copyright IBM Corp. 2007

Ejemplo de Programacin Modular

Clculo de Impuesto

Calcular Ingreso

Calcular Retencin antes de Impuesto

Calcular Impuesto

Calcular Retencin despus de Impuesto

Calcular Impuesto sobre la Renta

Calcular Impuesto Activos

142

Copyright IBM Corp. 2007

Ventajas de la Programacin Modular Ventajas de la Programacin Modular: Simplifica el diseo. Disminuye la complejidad de los algoritmos. Disminuye el tamao total del programa. Ahorra en tiempo de programacin porque promueve la reusabilidad del cdigo. Favorece el trabajo en equipo. Facilita la depuracin y prueba. Facilita el mantenimiento. Permite la estructuracin de libreras especficas.

143

Copyright IBM Corp. 2007

Correspondencia entre Problema y Programa


El problema principal se soluciona con el correspondiente algoritmo principal conocido como controlador. La solucin de los subproblemas mediante subprogramas o subalgoritmos conocidos como funciones o procedimientos.
Problema Principal Programa Principal

SubProblema 1

SubProblema 2

SubProblema 3

SubPrograma 1

SubPrograma 2

SubPrograma 3

144

Copyright IBM Corp. 2007

Subprogramas Un subprograma, mdulo o subalgoritmo puede realizar las mismas acciones que un programa. Aceptar datos que se pasan al hacer la llamada. Realizar clculos o acciones, definir variables y llamar a otros subprogramas. Devolver o no resultados. El programa utiliza el subprograma para un propsito especfico. El subprograma recibe datos desde el programa y le devuelve resultados. El programa invoca al subprograma, ste ejecuta la tarea y a continuacin devuelve el control al programa.
145

Copyright IBM Corp. 2007

Programa con Llamadas Subprogramas

Programa

Subprograma 1

Subprograma 1.1

Subprograma 2

Algoritmo

Subalgoritmos

146

Copyright IBM Corp. 2007

Tipos de Subprogramas Funciones. Procedimientos.

147

Copyright IBM Corp. 2007

Funciones Una funcin es, desde el punto de vista matemtico, una operacin que toma uno o varios operandos y devuelve un resultado. Una funcin, desde el punto de vista algortmico, es un subprograma que toma uno o varios parmetros como entrada y devuelve un nico resultado. Este resultado est asociado al nombre de la funcin, por esto, al invocar una funcin su valor de retorno se le asigna a una variable.

148

Copyright IBM Corp. 2007

Clasificacin de las Funciones Hay dos tipos de funciones: Internas o Incorporadas: son funciones proporcionadas por cualquier lenguaje de programacin de alto nivel, y se clasifican en aritmticas, estadsticas, manejo de caracteres, etc. Externas o del usuario: son funciones que define el programador con el propsito de ejecutar alguna tarea especfica. Por lo general, se usan cuando se trata de hacer alguna tarea que ser requerida en varias ocasiones por el algoritmo principal o subalgoritmos.
149

Copyright IBM Corp. 2007

Declaracin de una Funcin Toda funcin presenta la siguiente estructura: Una cabecera con: Identificador o Nombre. Lista de parmetros (opcional). El tipo de dato de retorno de la funcin. El cuerpo de la funcin. La sintaxis para la declaracin de una funcin depende del lenguaje de programacin utilizado.

150

Copyright IBM Corp. 2007

Sintaxis de la Declaracin de la Funcin

funcion <nombre_funcion> (par1:tipo1,..,parn:tipon): tipo_retorno var <variables locales de la funcion> inicio <acciones> retorno <valor> fin <nombre_funcion>

nombre_funcion: nombre asociado a la funcin. Un nombre de identificador vlido. par1, parn: Lista de parmetros formales o argumentos.

151

Copyright IBM Corp. 2007

Sintaxis de la Declaracin de la Funcin...1


Los parmetros dentro del cuerpo de la funcin se usan como si fueran variables locales. Cada parmetro formal o argumento debe tener su nombre y tipo de dato al momento de declarar la funcin. Los parmetros que se utilizan cuando la funcin es invocada, se denominan parmetros actuales o reales. En las variables locales se declaran las variables que se van a utilizar dentro de la funcin. Por definicin una funcin siempre debe devolver algn valor, es decir debe tener la instruccin retorno<valor>. La sentencia retorno<valor> pondr fin a la ejecucin de la funcin y devolver un valor que tiene que ser del mismo tipo que el tipo declarado de la funcin.
Copyright IBM Corp. 2007

152

Invocar una Funcin Para llamar o invocar a una funcin se coloca el nombre de la funcin y entre parntesis se aaden los parmetros reales que necesita la funcin. Nombre_funcion(lista_parmetros_actuales) La llamada se realiza en una sentencia de asignacin, una expresin o una sentencia de salida. Los parmetros reales pueden ser variables, expresiones e incluso constantes. Hay una correspondencia posicional entre los parmetros reales y los formales. Cada parmetro real debe pertenecer al mismo tipo de dato de su correspondiente parmetro formal.

153

Copyright IBM Corp. 2007

Ejemplo de Invocacin de una Funcin


Definicin de la Funcin 1. funcion sumarEnteros(num1: entero, num2:entero): entero 2. var 3. resultado: entero 4. Inicio 5. resultado = num1 + num2 6. retornar resultado 7. fin sumarEnteros La funcin puede ser llamada desde el programa principal o desde cualquier otro subprograma mediante sentencias: 1. var 2. resultado : Entero 3. numero : Entero 4. inicio 5. resultado = sumarEnteros(8, 9) 6. mostrar 8 + 9 es: resultado 7. numero = 12; 8. resultado = sumarEnteros(numero, 5) 9. mostrar 12 + 5 es: resultado 10. mostrar 2 + 2 es: sumarEnteros(2, 2) 11. fin
154
Copyright IBM Corp. 2007

Pasos para Hacer la Llamada a una Funcin Una llamada a la funcin implica los siguientes pasos: Cuando se efecta la llamada se cede el control a la funcin. Se asigna el valor de cada parmetro real a cada parmetro formal correspondiente. Si no hay coincidencia entre los tipos o el nmero de los parmetros formales con los reales, se produce un error. Si la llamada a la funcin es vlida, se ejecutan las acciones de la funcin hasta que se encuentre una instruccin del tipo retorno <valor>. Pueden existir varias sentencias de retorno en la misma funcin, normalmente dependen de sentencias condicionales para su ejecucin.
155
Copyright IBM Corp. 2007

Ejemplo de Llamada a una Funcin

1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6. 7.

funcion mitad (n: entero): real var med: real inicio med = n / 2 retorno med fin mitad Algoritmo calcular_mitad var num: entero inicio escribir Introduzca un nmero entero para hallar su mitad: leer num escribir La mitad de num es mitad(num) fin

156

Copyright IBM Corp. 2007

Funcin: Ejercicio Escribir un algoritmo que determine la mayor de tres cantidades enteras, utilizando una funcin que determina la mayor de dos cantidades enteras.

157

Copyright IBM Corp. 2007

Funcin: Ejercicio1
funcion maximo ( x:entero, y:entero): entero inicio entero max si (x > y) entonces max = x sino max = y fin si retorno max fin maximo algoritmo calcular_max_tres_enteros var entero a,b,c,d inicio mostrar introduzca tres valores enteros Leer a,b,c d = maximo(a,b) d = maximo(c,d) mostrar El maximo es:, d fin
158
Copyright IBM Corp. 2007

Funcin: Ejercicio2 Escribir una funcin que calcule el valor de xn Siendo: x un valor real n un valor entero

159

Copyright IBM Corp. 2007

Funcin: Ejercicio3
funcion potencia(entero: n, real: x): real var real y entero i inicio si x = 0 entonces y = 0 retornar y sino y = 1 desde i = 1 hasta i = abs(n) hacer y = y*x fin desde si n > 0 entonces retornar y sino retornar (y = 1 / y) fin si fin si fin funcion
160
Copyright IBM Corp. 2007

Procedimientos Un procedimiento es un subprograma o un subalgoritmo que realiza una determinada tarea. No tiene ningn valor asociado a su nombre como ocurre en las funciones. Si devuelve informacin, lo hace a travs de parmetros. Al invocar a un procedimiento: Se le cede el control al procedimento. Se ejecuta el procedimento. Cuando termina se devuelve el control a la instruccin siguiente al punto donde se efectu la llamada al procedimiento.

161

Copyright IBM Corp. 2007

Diferencias entre Funciones y Procedimientos Las funciones estn diseadas para devolver un nico valor. Un procedimiento puede devolver ningn valor o varios valores por medio de sus argumentos o parmetros. Ninguno de los resultados devueltos por el procedimiento se asocia a su nombre como ocurre con la funcin. La llamada a una funcin puede formar parte de una expresin. La llamada a un procedimiento es una instruccin aislada que por s sola no puede formar parte de una expresin.
Copyright IBM Corp. 2007

162

Sintaxis de un Procedimiento La sintaxis para declarar un procedimiento es similar a la de la definicin de una funcin, excepto que no se coloca un tipo de retorno asociado. La cabecera est formada por: El nombre del procedimiento, que debe ser un identificador vlido y significativo. Entre parntesis los parmetros o argumentos formales que requiere el procedimiento. En el cuerpo del procedimiento se colocan todas las sentencias necesarias para cumplir con su tarea. No habr ninguna sentencia de tipo retorno <valor>.

163

Copyright IBM Corp. 2007

Sintaxis de un Procedimiento1
procedimiento <nombre> (par1:tipo1,,parn:tipon) var <variables locales del procedimiento> inicio <acciones> fin nombre: nombre asociado al procedimiento. par1,,parn: Lista de parmetros formales o argumentos

164

Copyright IBM Corp. 2007

Pasos para Hacer la Llamada a un Procedimiento Desde el programa principal o subrutina, se coloca el nombre del procedimiento con su lista de parmetros reales entre parntesis, como una sentencia nica. Tiene que existir el mismo nmero de parmetros formales y parmetros reales. El tipo de dato de cada parmetro real, tiene que coincidir con el del parmetro formal asociado. Si no se cumple alguna de estas condiciones se produce un error en la llamada al procedimiento. La sintaxis de llamada al procedimiento es: Nombre_proc (lista de parmetros reales)

165

Copyright IBM Corp. 2007

Llamada a un Procedimiento

1. procedimiento mitad (num:entero, ent-sal med:real) 2. inicio 3. med = num / 2 4. fin mitad 1. Algoritmo calcular_mitad 2. var 3. n: entero 4. mit: real 5. inicio 6. escribir Introduce un nmero 7. leer n 8. mitad (n, mit) 9. escribir La mitad es mit 10. fin

166

Copyright IBM Corp. 2007

mbito: Variables Globales y Locales Las variables utilizadas en los programas principales y subprogramas se clasifican en dos tipos: Variables locales Variable globales La parte del programa/algoritmo en que una variable se define se conoce como el mbito. El mbito de un identificador ya sea variable, constante o funcin, entre otros, se refiere a la parte del programa que lo conoce y por tanto lo puede usar.

167

Copyright IBM Corp. 2007

mbito Global y Local Existen dos tipos de mbito para los identificadores: mbito Global. mbito Local.

168

Copyright IBM Corp. 2007

Variables de mbito Global Las Variables de mbito Global se refieren a los identificadores que se declaran dentro del programa principal y fuera de cualquier otro bloque de cdigo. Al ser declarados de esta forma los identificadores globales estarn disponibles a lo largo del programa. Se pueden usar en cualquier parte del programa, de all su nombre de globales.

169

Copyright IBM Corp. 2007

Variables de mbito Local Las Variables de mbito Local se refieren a los identificadores declarados dentro de un bloque de cdigo diferente al programa principal, como por ejemplo una subrutina o procedimiento. Como regla general todo identificador slo es visible y accesible: Dentro del bloque de cdigo que lo declara. Dentro de los bloques anidados que este ltimo pueda tener. Lo contrario no es cierto, es decir, los identificadores declarados en un subbloque de cdigo no son visibles ni accesibles desde bloques de cdigo externos.
Copyright IBM Corp. 2007

170

Variable Local
Una variable local es aquella que est declarada y definida dentro de un subprograma o subbloque de cdigo. Su mbito coincidir con el mbito del subprograma en la que est definida. La variable no tiene ningn significado, no se conoce y no se puede acceder a ella, desde fuera del subprograma o bloque de cdigo donde se declara. Tiene una posicin de memoria distinta a la de cualquier otra variable del programa, incluso si es de una variable que tiene el mismo nombre pero que est definida fuera del subprograma. Las variables locales a un subprograma se definen en la parte de la definicin de variables del mismo. Los parmetros formales de un subprograma se comportan dentro de ste como si fueran variables locales del subprograma. Si se tiene una variable local con el mismo identificador que una variable global, las referencias dentro del bloque se harn a la variable local y no a la variable global. Copyright IBM Corp. 2007

171

Variable Global La variable global es aquella que est definida a nivel del programa. Su mbito es el programa o algoritmo principal y todos los subprogramas que dependen de ste. Una variable global se puede acceder desde cualquiera de los subprogramas y el programa principal, salvo que alguno de esos subprogramas tenga definida una variable local con el mismo nombre que la variable global.

172

Copyright IBM Corp. 2007

mbito de Variables en Procedimientos Anidados El anidamiento consiste en que dentro de un procedimiento se puede definir otro procedimiento. La anidacin de procedimientos no se permite en todos los lenguajes. Plantean ms problemas en cuanto al mbito. Una variable local se conoce en el procedimiento en el que est definida y en todos los procedimientos anidados que componen el mbito de dicho procedimiento. Si se tienen dos variables declaradas con el mismo identificador, una local a un procedimiento anidado y otra global, al hacer referencia al identificador en el procedimiento anidado, siempre se va a referir a la variable local porque se considera el mbito ms restringido.
Copyright IBM Corp. 2007

173

mbito de Variables en Procedimientos Anidados1

A B C

Variables definidas en procedimiento A B C

Accesibles desde procedimientos A, B, C, D, E, F, G B, C C D, E, F, G E, F, G F G

D E F G

D E F G

174

Copyright IBM Corp. 2007

mbito de Variables en Procedimientos Anidados2

PP var a, b

VARIABLE a

AMBITO PP PP

MBITO SUBPROGRAMA PP, P2 PP, P1, P1.1, P2 P1, P1.1 P1, P1.1 P1 P1.1 P1.1 P1.1 P2 P2

P1 var a, c, d

b a c d d e f c d

P1 P1 P1 P1.1 P1.1 P1.1 P2 P2

P1.1 var d, e, f

P2 var c, d

175

Copyright IBM Corp. 2007

Comunicacin entre Subprogramas La comunicacin entre subprogramas se lleva a cabo mediante el paso de parmetros. Cuando se invoca a una funcin o procedimiento se le pasa a travs de los parmetros la informacin que necesita. En el caso de un procedimiento, tambin se devuelven los resultados a travs de los parmetros. Al hacer la llamada se pasa la informacin a travs de los parmetros reales. La correspondencia entre parmetros formales y reales se puede realizar de dos formas: Por correspondencia posicional. Por correspondencia de nombre implcito.
Copyright IBM Corp. 2007

176

Correspondencia Posicional En la correspondencia posicional se emparejan o hacen corresponder los parmetros formales y reales segn la posicin que ocupan, es decir, el orden de declaracin de izquierda a derecha. Tiene que existir el mismo nmero de parmetros formales y reales. El tipo de parmetro formal debe ser el mismo de su correspondiente parmetro real. Ejemplo: Declaracin del procedimiento: Proc(x: entero, y: real) Una llamada vlida es: Proc(8, a)
Copyright IBM Corp. 2007

177

Correspondencia por Nombre Implcito En la correspondencia por nombre implcito, en la llamada al subprograma se coloca explcitamente a qu parmetro formal corresponde cada parmetro real. En la llamada se coloca el nombre del parmetro formal seguido de dos puntos (:) y el nombre del parmetro real que se pasa. Ejemplo: Declaracin del procedimiento: Proc(x: entero, y: real) Llamadas vlidas: Proc(x: 8, y: a) Proc(y: a, x: 8)
Copyright IBM Corp. 2007

178

Tipos de Parmetros en los Procedimientos Existen tres tipos bsicos: De entrada. De salida. De entrada-salida.

179

Copyright IBM Corp. 2007

Parmetro de Entrada del Procemiento Los parmetros de entrada son parmetros que slo aportan el valor que tienen como entrada al subprograma. En las funciones todos sus parmetros son de entrada. Estos parmetros slo pueden ser ledos, pero no modificados. Si se modifica el parmetro dentro del subprograma, esa modificacin no va a tener efecto fuera del subprograma.
Copyright IBM Corp. 2007

180

Parmetro de Salida del Procemiento Los parmetros de salida se usan slo y exclusivamente para devolver resultados a travs de ellos. Su valor al hacer la llamada al subprograma no es relevante. El valor que tenga el parmetro va a tener sentido cuando termine la ejecucin del subprograma. Un parmetro de este tipo tericamente nunca se puede leer, slo se va actualizar o modificar.

181

Copyright IBM Corp. 2007

Parmetro de Entrada-Salida del Procemiento En los parmetro de entrada-salida del procedimiento, el valor del parmetro tiene importancia tanto a la entrada como a la salida del subprograma. Aporta informacin cuando se llama al subprograma y devuelve, a travs de l, los resultados cuando se termina la ejecucin del subprograma.

182

Copyright IBM Corp. 2007

Mtodos de Paso de Parmetros Los mtodos ms usados para el pase de parmetros en los procedimientos y funciones son: Paso de parmetros por copia o valor. Paso de parmetros por referencia.

183

Copyright IBM Corp. 2007

Paso de Parmetros por Copia o Valor Las caractersticas del pase de parmetros por valor son: El subprograma invocado no puede modificar el valor de los parmetros reales. Al realizar la llamada al subprograma, se copia el valor del argumento en el parmetro formal de la funcin. El parmetro formal del subprograma tiene asociado una direccin de memoria diferente a la direccin de memoria del parmetro real. Se puede cambiar el valor del parmetro dentro del subprograma y no afectar el argumento transferido. El parmetro real puede ser: una constante, expresin o variable.
Copyright IBM Corp. 2007

184

Paso de Parmetros por Copia o Valor: Ejemplo


Ejemplo:
A=5 B=2 Procedimiento1( X, Y,
5 20

Z:entero)
14

Definicin

Procedimiento1 (A, 20, B*3 + 8)

LLamada

En el paso por valor: Slo importa el valor del argumento. No se hace diferencia si un argumento es variable, constante o expresin.
185
Copyright IBM Corp. 2007

Paso de Parmetros por Copia o Valor: Ejemplo1 Ejemplo:


1. procedimiento Duplicar(x : entero) 2. inicio 3. x = x * 2 4. escribir x 5. fin duplicar 1. Algoritmo CopiaValor 2. var a : entero 3. inicio 4. a = 3 5. duplicar(a) 6. escribir a 7. fin
186

Copyright IBM Corp. 2007

Ejemplo de Paso de Parmetros por Valor: Resultado1 Ejemplo:


1. procedimiento duplicar(x : entero) 2. inicio 3. x = x * 2 4. escribir x 5. fin duplicar 1. 2. 3. 4. 5. 6. 7. Algoritmo CopiaValor var a : entero inicio a = 3 duplicar(a) escribir a fin x = 6 a = 3
Copyright IBM Corp. 2007

Resultado:
187

Paso de Parmetros por Referencia


La caractersticas del pase de parmetros por referencia son: El subprograma invocado puede modificar el valor de los parmetros reales. Al invocar al subprograma, no se copia el valor del argumento en el parmetro de la funcin, sino que se almacena la direccin de memoria del parmetro real asociado. El parmetro formal apunta a la direccin de memoria del parmetro real correspondiente. Cualquier modificacin que se efecte sobre el parmetro formal dentro del subprograma, afectar directamente al parmetro real asociado. El parmetro real no puede ser una constante ni una expresin, slo puede ser una variable.
Copyright IBM Corp. 2007

188

Paso de Parmetros por Referencia: Ejemplo


Ejemplo:
A= 5 B=2 C = 14 Procedimiento1( X, Y, Z:entero)
Definicin

14

Posiciones de Memoria

Procedimiento1 (A, B, C)

LLamada

En el paso por referencia: En la llamada al procedimiento se pasa la direccin del parmetro real o actual. Una referencia al parmetro real se trata como una referencia a la posicin de memoria cuya direccin se ha pasado. El rea de almacenamiento o posiciones de memoria se utiliza para 189 pasar informacin de entrada y/o salida, en ambas direcciones.

Copyright IBM Corp. 2007

Paso de Parmetros por Referencia: Ejemplo1 Ejemplo:


1. Procedimiento duplicar(ent-sal x : entero) 2. inicio 3. x = x * 2 4. escribir x= x 5. iin duplicar 1. 2. 3. 4. 5. 6. 7. Algoritmo Referencia var a inicio a = 3 duplicar(a) escribir a = a fin x = 6 a = 6
Copyright IBM Corp. 2007

Resultado:
190

Paso de Parmetros: Resumen


Paso por Valor Paso por Referencia

Parmetro Real (Variable, constante o Expresin)


Evaluacin ..

Parmetro Real (debe ser una variable) Programa Principal


Posicin Memoria

Programa Principal Subprograma Subprograma


..

Parmetro Formal

Parmetro Formal

191

Copyright IBM Corp. 2007

Recursividad
La recursividad o recursin, es una herramienta muy til en la resolucin de problemas porque permite resolver problemas complicados, dividindolos en problemas ms sencillos. Un subprograma recursivo es un subprograma que se llama a s mismo durante su ejecucin. Es decir, dentro del cdigo del subprograma se tiene una llamada con el nombre del subprograma. La llamada recursiva no puede continuar indefinidamente porque el programa no terminara nunca. procedimiento infinito() inicio infinito() fin
Copyright IBM Corp. 2007

192

Recursividad...1 Todo programa recursivo debe tener alguna condicin que ponga fin a la recursividad, un punto en el que el subprograma deje de llamarse a s mismo cuando se cumpla la condicin. El subprograma tiene que funcionar para algunos parmetros sin necesidad de auto-llamadas. Mediante sucesivas llamadas se va acercando a esos parmetros iniciales o condicin de parada. Los parmetros iniciales tienen generalmente soluciones elementales calculables de manera sencilla que luego utilizan para armar la solucin completa. El conjunto de parmetros iniciales y sus soluciones son los llamados casos base.
Copyright IBM Corp. 2007

193

Partes de un Subprograma Recursivo Los subprogramas recursivos deben contener siempre dos partes: Una llamada a s mismo (recursiva), normalmente con el valor de los parmetros que cambian en cada llamada. Una condicin de terminacin o salida, que es la condicin que no produce ninguna autollamada.

194

Copyright IBM Corp. 2007

Recursividad: Ejemplo 1 Ejemplo: funcin factorial Calcula el factorial de un nmero entero no negativo, partiendo de las siguientes definiciones : factorial (1) = 1 factorial (x) = x*factorial(x-1), para x>1 Ejemplo de clculo del factorial, utilizando la definicin: 4! = 4 * 3! = 4 * 3 * 2! = 4 * 3 * 2 * 1! = 4 * 3 * 2 * 1 * 0! = 4 * 3 * 2 * 1 * 1 = 24
Copyright IBM Corp. 2007

195

Recursividad: Ejemplo 11
Funcin recursiva que calcula el factorial: factorial (1) = 1 factorial (x) = x*factorial(x-1), para x>1 Algoritmo Recursivo
funcion factorial(x:integer):integer inicio si x = x entonces retorna 1 sino retorna (x * factorial(x-1)) fin si fin
196

Copyright IBM Corp. 2007

Recursividad: Ejemplo 12
1. 2. 3. 4. 5. 6. 7. x = 4 Llamada a factorial(4); x = 1 : no Retorna 4 * factorial (3) x = 3 Llamada a factorial(3); x = 1 : no Retorna 3 * factorial (2) x = 2 Llamada a factorial(2); x = 1 : no Retorna 2 * factorial (1). x = 1 Llamada a factorial(1); numero = 1 : si Retorna 1 con ste valor se regresa a completar la invocacin: Con factorial(1) = 1, se regresa a completar: factorial(2) := 2 * 1 Con factorial(2) = 2, se regresa a completar : factorial(3) := 3 * 2 Con factorial(3) = 6, se regresa a completar : factorial(4) := 4 * 6 por lo que factorial(4) = 24 ste ser el valor que la funcin factorial devolver al programa que la haya invocado con un valor de parmetro igual a 4 .

197

Copyright IBM Corp. 2007

Recursividad: Ejemplo 13
Para numero = 4, la funcin realiza los siguientes pasos :
funcion factorial(x:integer):integer inicio si (x > 1) entonces retorna (x*factorial(x-1)) sino retorna 1 fin si fin
x=4 Factorial(4)=4*Factorial(3) retorno x=3 Factorial(3)=3*Factorial(2) retorno x=2 Factorial(2)=2*Factorial(1) retorno x=1 Factorial(1)=1 retorno Factorial=1 Factorial=2 Factorial=6 Factorial=24

198

Copyright IBM Corp. 2007

Recursividad: Ejemplo 2 Escribir una funcin recursiva que tome como entrada: un nmero un exponente

y retorne la potencia del nmero. Se asume que el valor del exponente es un nmero positivo.

199

Copyright IBM Corp. 2007

Recursividad: Ejemplo 21

Funcion Potencia (Base, Exponente: entero): entero inicio si Exponente = 1 entonces Potencia = Base sino Potencia = Base * Potencia ( Base, Exponente - 1) fin si Fin Potencia
Al ejecutar Potencia (2,3) se obtiene como respuesta 8.
200
Copyright IBM Corp. 2007

Recursividad: Ejemplo 22
8
Potencia(2,3) inicio si 3=1 entonces Potencia=Base sino Potencia = 2*Potencia(2,2) fin 4 Potencia(2,2) inicio si 2=1 entonces Potencia=Base sino Potencia = 2*Potencia(2,1) fin 2 Potencia(2,1) inicio si 1=1 entonces Potencia=B ase fin
201
Copyright IBM Corp. 2007

Recursividad: Ejemplo 3 Escribir un procedimiento que tome como entrada una cadena de caracteres y su la longitud, y escriba la cadena en orden inverso. Ejemplo: entrada: Venezuela - salida: aleuzeneV El programa debe usar la recursividad para la escritura inversa.

202

Copyright IBM Corp. 2007

Recursividad: Ejemplo 31

Procedimiento invertir_recursivo(longitud:entero) var car: char inicio si (longitud <= 1) entonces leer caracter escribir caracter sino leer caracter invertir_recursivo(longitud-1) escribir caracter fin si fin invertir_recursivo
203
Copyright IBM Corp. 2007

Una Funcin Recursiva e Itereativa: Ejemplo


Funcin Factorial Recursiva
1. Funcion FactorialRecur(x : entero): entero 2. Inicio 3. Si (x > 1) entonces 4. Retornar (x * FactorialRecur(x 1)) 5. Sino 6. Retornar 1 7. Fin FactorialRecur

Funcin Factorial Iterativa


1. Funcion FactorialItera(x : entero): entero 2. Var 3. res : entero 4. i : entero 5. Inicio 6. res = x 7. Si (x > 1) entonces 8. Desde i = x - 1 hasta 1 9. res = res * i 10. Fin Desde 11. Sino 12. res = 1 13. Retorno (res) 14. Fin FactorialItera
Copyright IBM Corp. 2007

204

Recursin vs Iteracin Las funciones y procedimientos recursivos se pueden utilizar cuando los datos del problema estn organizados en una estructura de datos que se define recursivamente. Si se puede obtener un algoritmo no recursivo y es menos complejo que el recursivo, es mejor utilizar la versin no recursiva. No usar la recursividad a menos que se tenga un medio para terminar las llamadas recursivas. Cada llamada recursiva requiere la asignacin de espacio de memoria para todas las variables locales, parmetros por valor y la direccin de retorno. Por lo que cada llamada utiliza memoria, lo que representa una limitacin.
Copyright IBM Corp. 2007

205

Resumen Ahora que ud. ha completado esta unidad, debe ser capaz de: Definir qu son las funciones, sus caractersticas y sintaxis. Definir los procedimientos, sus caractersticas y sintaxis. Explicar el mbito de las variables. Explicar la comunicacin entre subprogramas. Definir qu es la recursividad.

206

Copyright IBM Corp. 2007

Unidad 5

Estructura de Datos Arreglo

207

Copyright IBM Corp. 2007

Objetivos de Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Conocer las estructuras de datos. Trabajar con arreglos unidimensionales o vectores. Realizar operaciones con arreglos unidimensionales o vectores. Trabajar con arreglos bidimensionales o matrices. Conocer acerca de los arreglos multidimensionales. Entender el almacenamiento de arreglos en memoria.

208

Copyright IBM Corp. 2007

Introduccin Una de las representaciones de datos ms utilizada en la programacin se denomina arreglo (o vector o matriz). Los arreglos se utilizan para almacenar datos consecutivos de un mismo tipo. Los arreglos se usan con frecuencia en los algoritmos de clasificacin, ordenamiento y bsqueda. Los arreglos se clasifican en: Unidimensionales Vectores. Multidimensionales - Matrices.

209

Copyright IBM Corp. 2007

Arreglos (Matriz o Vector) Un arreglo es un conjunto finito, consecutivo y organizado de elementos homogneos. Un arreglo es: Finito: tiene un nmero determinado de elementos. Homogneo: todos los elementos son del mismo tipo. Organizado: existe una forma de referenciar cada elemento del arreglo y de acceder a cada uno de sus elementos de manera independiente. Consecutivo: por la forma en que se almacena o representa un vector en la memoria del computador.
210

Copyright IBM Corp. 2007

Arreglo Unidimensional o Vector El tipo ms simple de arreglo es el arreglo unidimensional o vector. Un arreglo unidimensional constituye una matriz de una sola dimensin. Ejemplo: un arreglo de notas de n elementos. .... ....

Notas(1) Notas(2) Notas(3)

Notas(n)

El ndice o subndice de un elemento (1, 2, 3,..., n) designa su posicin en la ordenacin del vector.

211

Copyright IBM Corp. 2007

Arreglo Unidimensional o Vector1


Se puede acceder a cada elemento del arreglo de manera independiente a travs de los ndices. numero[12] = 20 El ndice es un valor que directa o indirectamente, referencia la posicin del arreglo. Los ndices tienen que ser de tipo de dato escalar y, normalmente, son nmeros enteros. Para referenciar un elemento de un arreglo se usa el nombre del arreglo y entre corchetes [ ] el ndice que determina la posicin de ese elemento en el arreglo. El rango o longitud de un vector es la diferencia entre el ndice de valor mximo y el ndice de valor mnimo de ese arreglo, ms uno. Los ndices suelen enumerarse, dependiendo del lenguaje, a partir de 0 1, pero pueden comenzar en cualquier otro valor.
212
Copyright IBM Corp. 2007

Arreglos Unidimensionales en Memoria Los vectores se almacenan en la memoria principal de la computadora en posiciones consecutivas.
Ejemplo: un vector de 20 nmeros denominado numero se representa grficamente por 20 posiciones consecutivas de memoria. memoria
numero[1] numero[2] numero[3] direccin x direccin x + 1 direccin x + 2

numero[20]

direccin x + 19

213

Copyright IBM Corp. 2007

Declaracin y Uso de un Arreglo

Declaracin de un arreglo unidimensional:


<nom_arreglo>: arreglo [rango] de <tipo>

Ejemplo: 1. 2. 3. 4.

sueldo: arreglo[8] de real var i: entero i = 2 sueldo[i]= 23.5

214

Copyright IBM Corp. 2007

Operaciones con Vectores Las operaciones que se pueden realizar con vectores en el proceso de resolucin de problemas son: Asignacin. Lectura/escritura. Recorrido (Acceso Secuencial). Actualizacin ( Aadir, Eliminar, Insertar). Ordenamiento. Bsqueda.

215

Copyright IBM Corp. 2007

Asignacin de un Dato a una Posicin del Arreglo La operacin de asignacin consiste en asignar un valor dado a una posicin del arreglo, dada por el ndice. La sintaxis es: <nom_arreglo>[indice] = valor Ejemplo: Declaracin del vector: ventas: arreglo[12] de entero
1 2 3 4 60 6 7 8 9 10 11 12

ventas[5] = 60
216
Copyright IBM Corp. 2007

Lectura y Escritura de Datos usando Vector Consiste en usar una posicin del arreglo definida por un ndice, para operaciones de entrada y salida. La sintaxis de la operacin es: 1.Leer <nom_arreglo>[indice] 2.Escribir <nom_arreglo>[indice] Ejemplo: 1.Desde i = 1 Hasta 12
1.Escribir Introduce las ventas del mes i 2.Leer ventas[i]

2.Fin Desde 3.Desde i = 1 Hasta 12


1.Escribir Ventas del mes i = ventas [i]

4.Fin Desde
217
Copyright IBM Corp. 2007

Recorrido o Acceso Secuencial de un Arreglo


El acceso secuencial de un arreglo consiste en recorrer todas las posiciones del arreglo para procesar la informacin. Se usa generalmentr un ciclo Desde para recorrer el vector. La sintaxis de la operacin es: Desde indice = 1 Hasta Rango_Array <acciones con el arreglo> Fin Desde Ejemplo: 1. Desde i = 1 Hasta 12 2. ventas[i] = ventas[i] + 1000000 3. Fin Desde
218
Copyright IBM Corp. 2007

Operaciones con Vectores: Ejemplo 1 Disear un algoritmo que realice lo siguiente: Leer las notas de una clase en un vector. Calcular el promedio de notas. Imprimir las notas mayores al promedio.

219

Copyright IBM Corp. 2007

Operaciones con Vectores: Ejemplo 11


Algoritmo Notas var MAX = 100 {nmero mximo de estudiantes} notas: arreglo[1..MAX] de real cantidad, i:entero suma, promedio:real inicio escribir Introducir cantidad de calificaciones leer numero si numero > MAX entoncesno se puede procesar mas de MAX notas sino suma = 0 escribir Introducir las calificaciones desde i = 1 hasta numero hacer leer notas[i] suma = suma + notas[i] fin desde promedio = suma / numero escribir el promedio de las notas es: promedio escribir las notas mayores que el promedio son: desde i = 1 hasta numero hacer si notas[i] > promedio entonces escribir notas[i] fin si fin desde fin si fin
Copyright IBM Corp. 2007

220

Insertar un Elemento en una Posicin del Arreglo


Para insertar un elemento en una posicin dada, hay que desplazar en una posicin a la derecha a todos los elementos situados desde el lugar donde se va a insertar. Esto se hace con el fin de preservar el orden relativo entre los elementos. Si existen n elementos almacenados en el arreglo, el tamao del arreglo tendr que ser al menos n + 1 para poder insertar el nuevo elemento. Ejemplo: Elementos en el Arreglo:
C E F J M O

Al insertar G en la cuarta posicin:


C
221

Copyright IBM Corp. 2007

Algoritmo para Insertar un Elemento en un Vector Problema: Escribir un algoritmo para insertar un elemento en una posicin dada del vector. Sea: k la posicin donde se va a insertar el nuevo elemento. n el nmero de elementos almacenados en el vector. Se asume un vector de tamao de al menos n + 1. 1. Desde i= n Hasta k decremento 1
2. 3. 4.
222

A[i + 1] = A[i] Fin Desde A[k] = valor


Copyright IBM Corp. 2007

Eliminar un Elemento del Arreglo


Para eliminar un elemento de un arreglo hay que considerar dos casos:
- Si el elemento a eliminar es el ltimo elemento del arreglo, se actualiza el tamao del arreglo decrementado su valor en 1. - Si el elemento a eliminar ocupa cualquier otra posicin, se desplazan todos los elementos ubicados a la derecha del elemento a borrar, una posicin hacia la izquierda para que el arreglo quede organizado.

Ejemplo: Elementos en el Arreglo:


C E F J M O

Al borrar J de la cuarta posicin: C E F M O

223

Copyright IBM Corp. 2007

Eliminar un Elemento del Arreglo1 Algoritmo para eliminar un elemento de una posicin dada del arreglo. Sea: n el nmero de elementos almacenados. k la posicin del elemento a eliminar. Se asume que el arreglo comienza en la posicin 0 1. Desde i = k Hasta 2. A[i] = A[i+1] 3. Fin Desde n - 1

224

Copyright IBM Corp. 2007

Arreglos Unidimensionales: Ejemplo 2 Disear una funcin que reciba dos vectores como parmetros de entrada, la longitud de los vectores y retorne: VERDADERO si los vectores son iguales. FALSO si los arreglos no son iguales.

225

Copyright IBM Corp. 2007

Arreglos Unidimensionales: Ejemplo 21


Funcion comparar(A[],B[]:arreglo de entero, n:entero): booleano var encontrado:booleano i:entero inicio i=1 mientras (i <=n && A[i] == B[i]) i = i + 1 fin mientras Si i > n entonces encontrado = verdadero sino encontrado = falso fin si retorna (encontrado) fin

226

Copyright IBM Corp. 2007

Arreglos Unidimensionales: Ejemplo 3 Disear una funcin para determinar si un valor dado existe en un vector. Asuma que los valores en el vector no estn ordenados. La funcin debe aceptar tres parmetros: El nombre de un vector. El valor que debe buscarse en ese vector. El tamao del vector. La funcin debe regresar: El valor 1 si el valor se encuentra en el vector. El valor 0 si la bsqueda es infructuosa.

227

Copyright IBM Corp. 2007

Arreglos Unidimensionales: Ejemplo 31

funcion buscar(A[]:arreglo de entero, n:entero, elemento:entero): booleano var encontrado:booleano i:entero inicio i=1 mientras (i <=n && A[i] != elemento) i = i + 1 fin mientras si i > n entonces encontrado = falso sino encontrado = verdadero fin si retorna (encontrado) Fin buscar
228
Copyright IBM Corp. 2007

Arreglos Bidimensionales El arreglo bidimensional o matriz, se puede considerar como un vector de vectores. Es un conjunto de elementos, todos del mismo tipo, donde el orden de los componentes es significativo.
Fila 1 Fila 2 Fila 3 Fila 4 Fila 5 Columna 5 Columna 4 Columna 3 Columna 2 Columna 1
Copyright IBM Corp. 2007

229

Arreglos Bidimensionales...1 Los elementos del arreglo bidimensional se referencian con dos subndices. El primer subndice se refiere a las filas y el segundo a las columnas. Ejemplo: el elemento A[2,3] se refiere al elemento de la segunda fila y tercera columna de la matriz A y tiene el valor de 50.
1 2 3 4 5
230

50

5
Copyright IBM Corp. 2007

Arreglos Bidimensionales2
Si se tiene la matriz B[M,N]: El subndice i, de las filas, vara de 1 a M. El subndice j, de las columnas, vara de 1 a N. El arreglos tiene M x N elementos. Existen N elementos en cada fila y M elementos en cada columna (MxN).
Matriz B [M,N]
1 2 3 ... M
231

..

N
Copyright IBM Corp. 2007

Arreglos Bidimensionales: Ejemplo1 Matriz de ventas 5 x 12, total de 60 elementos.


1 1 2 3 4 5 120 2 3 4 5 6 7 8 9 10 11 12

ventas[4, 3] = 120
En memoria se almacenan los elementos en forma consecutiva:
1,1 1,2 1,3 1,4 ... 1,12 ... 5,1 5,2 5,3 5,4 ... 5,12

232

Copyright IBM Corp. 2007

Inicializar la Matriz Inicializar la matriz es asignar a todos sus elementos un valor dado. 1. ventas: arreglo[5, 12] de entero 2. var i, j : entero 3. desde i = 1 Hasta 5 4. desde j = 1 Hasta 12 5. ventas[i, j] = 0 6. fin Desde 7. fin Desde

233

Copyright IBM Corp. 2007

Inicializar una Fila de la Matriz Inicializar la fila de una matriz: Se mantiene fija la fila y se recorren las columnas asignndoles el valor dado. Programa: 1. ventas: arreglo[5, 12] de entero 2. var i, j : entero 3. i = 3 4. desde j = 1 Hasta 12 5. M[i, j] = 0 6. fin desde

234

Copyright IBM Corp. 2007

Matrices: Ejercicio 1
Disear un algoritmo que dado una matriz cuadrada determine la suma de todos los elementos que estn en la diagonal. Los elementos de la diagonal son los A[i, j] de la matriz donde el ndice i es igual al ndice j. Una matriz se define como cuadrada si el nmero de filas es igual al nmero de columnas.
1 2 3 ... N
235

..

N
Copyright IBM Corp. 2007

Arreglos Multidimensionales: Matrices m x n x...z


Un arreglo multidimensional es una matriz de 3 ms dimensiones. Si el arreglo tiene N dimensiones y cada dimensin es de tamao d1,d2,..,dN, el nmero de elementos del arreglo es: d1*d2*..*dN. Para acceder a un elemento del arreglo se usan N ndices, cada uno de los cuales referencia a una posicin dentro de una dimensin segn el orden de declaracin. El arreglo se almacena en memoria en posiciones consecutivas. La declaracin de un arreglo multidimensional es: N_arreglo: arreglo[rangoI, rangoII, ..., rangoN] de tipo Ejemplo: Matriz de ventas mensuales por cinco aos para tres vendedores: ventas : arreglo[3, 5, 12] de real ventas[2, 4, 10]= 120000.5
236
Copyright IBM Corp. 2007

Matrices: Solucin Ejercicio 1


Algoritmo Suma de la Diagonal var M = 100: entero tabla: arreglo[M,M] de entero SD, i:entero inicio escribir Introducir elementos de la tabla desde i = 1 hasta M hacer desde j = 1 hasta M hacer escribir Introducir elemento ( i , j ) leer tabla(i,j) fin desde fin desde {Suma de los elementos de la diagonal} desde i = 1 hasta M hacer SD = SD + tabla[i,i] fin desde escribir la suma de elementos de la diagonal es: SD fin
237

Copyright IBM Corp. 2007

Matrices: Ejercicio 2 Disear un algoritmo para: Sumar los elementos positivos y los elementos negativos de una tabla o arreglo. Indicar el nmero de elementos positivos y el nmero de elementos negativo. Considere el valor cero como positivo. La matriz es de dimensin MxN y se lee desde el teclado.

238

Copyright IBM Corp. 2007

Matrices: Solucin del Ejercicio 2


Algoritmo Suma var M = 10, N = 8, SP, SN, i, j,CP,CN:entero tabla: arreglo[M,N] de entero inicio escribir Introducir elementos de la tabla SP = 0, SN = 0, CP = 0, CN = 0 desde i = 1 hasta M hacer desde j = 1 hasta N hacer escribir Introducir elemento ( i , j ) leer tabla[i,j] si tabla[i,J] >= 0 entonces SP = SP + tabla[i,j] CP = CP + 1 sino SN = SN + tabla[i,j] CN = CN + 1 fin si fin desde fin desde escribir la suma de elementos positivos es: SP escribir la cantidad de elementos positivos es: CP escribir la suma de elementos negativos es: SN escribir la cantidad de elementos negativos es: CN fin
239
Copyright IBM Corp. 2007

Arreglos Multidimensionales: M x N x...x Z Un arreglo multidimensional es una matriz de 3 ms dimensiones. La declaracin de un arreglo multidimensional es:
<arreglo>: arreglo[rangoI, rangoII, ..., rangoN] de <tipo>

Ejemplo: matriz de ventas mensuales por cinco aos para tres vendedores:
ventas : arreglo[3, 5, 12] de real ventas[2, 4, 10]= 120000.5

240

Copyright IBM Corp. 2007

Arreglos Multidimensionales: M x N x...x Z Si el arreglo tiene N dimensiones y cada dimensin es de tamao d1,d2,..,dN, el nmero de elementos del arreglo es: d1 x d2 x .. X dN. Para acceder a un elemento del arreglo se usan N ndices, cada uno de los cuales referencia a una posicin dentro de una dimensin segn el orden de declaracin. A[i1, i2, ,in] = 5 Los elementos del arreglo se almacenan en memoria en posiciones consecutivas.
241
Copyright IBM Corp. 2007

Almacenamiento de Arreglos en Memoria


Un arreglo en memoria siempre se almacena en posiciones contiguas a partir de la direccin base de comienzo del arreglo. La direccin base se asigna cuando se declara una variable de tipo arreglo. El tamao que ocupa el arreglo en memoria es el producto del nmero de sus elementos por el tamao de cada uno de ellos. Ejemplo: Array[100] de carcter Si cada carcter ocupa un byte entonces el arreglo requiere de un total de 100 bytes de memoria. 1 byte * 100 elementos = 100 bytes
242

Copyright IBM Corp. 2007

Almacenamiento de Arreglos en Memoria...1 Los arreglos multidimensionales tambin se almacenan en posiciones contiguas de memoria. El tamao del arreglo es el producto del nmero de elementos del arreglo por el tamao requerido para representar cada elemento en memoria. Ejemplo: Array[3, 5, 12] de enteros Si cada entero requiere de dos bytes para representarlo, el arreglo requiere un total de bytes de almacenamiento igual a: 2 byte * (3 * 5 * 12) elementos = 360 bytes

243

Copyright IBM Corp. 2007

Resumen Ahora que ud. ha completado esta unidad, debe ser capaz de: Conocer las estructuras de datos. Trabajar con arreglos unidimensionales o vectores. Realizar operaciones con arreglos unidimensionales o vectores. Trabajar con arreglos bidimensionales o matrices. Conocer acerca de los arreglos multidimensionales. Entender el almacenamiento de arreglos en memoria.

244

Copyright IBM Corp. 2007

Unidad 6

Entrada y Salida

245

Copyright IBM Corp. 2007

Objetivos de Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Describir los conceptos bsicos de Entrada y Salida en un programa de computadora. Listar algunas consideraciones para imprimir la salida. Describir los conceptos de registros de datos fijos, variables y bloqueados.

246

Copyright IBM Corp. 2007

Entrada y Salida de un Programa


La solucin de problemas mediante computadoras, requiere de programas que, generalmente, necesitan leer y escribir datos provenientes de fuentes externas al programa. Para permitir el intercambio de datos con fuentes externas las computadoras ofrecen capacidades de entrada y salida (E/S), que son las que permiten la comunicacin entre la aplicacin y el entorno. Este intercambio de datos con fuentes externas es lo que se denomina leer o escribir datos en algn dispositivo.

247

Copyright IBM Corp. 2007

Entrada y Salida de un Programa1


Cuando el programa se ejecuta, probablemente necesita leer datos o escribir datos en algn dispositivo. El lenguaje que se use para escribir un programa tendr algunos comandos especiales o funciones que se pueden usar para realizar la entrada y salida, por ejemplo:
Para entrada de datos: get, read, scan Para salida de datos: print, write, put

La entrada y salida generalmente son las partes ms complejas de cualquier programa en cualquier lenguaje de programacin. La transferencia real de datos hacia o desde los dispositivos de E/S, es generalmente la parte ms lenta de un programa.

248

Copyright IBM Corp. 2007

Entrada y Salida de un Programa1

Teclado

Impresora

Archivo en disco ENTRADA PROCESADOR (programa) SALIDA

Archivo en disco

Pantalla Red

Scanner

Red

249

Copyright IBM Corp. 2007

Buffers de Datos Los datos externos que se procesan en un programa se leen y escriben realmente en un buffer que maneja la computadora. El sistema lee fsicamente los datos de algn dispositivo externo, los deja en un buffer de entrada y los escribe en un buffer de salida. El sistema es propietario de los buffers y los administra. El programa accede a los datos usando estos buffers del sistema, lee del buffer de entrada y escribe al buffer de salida, de manera transparente para el programador.

250

Copyright IBM Corp. 2007

Buffers de Datos1 El sistema de Control de I/O (IOCS) se encarga del movimiento de los datos externos. El IOCS corre asincrnicamente a la ejecucin del programa. El programa contina con el procesamiento y el sistema se ocupa de transportarlos hacia y desde los dispositivos de E/S.

251

Copyright IBM Corp. 2007

Buffers de Datos2
Buffers E N T R A D A S A L I D A Programa LEER (READ) ... HACER MIENTRAS (MAS DATOS) LEER /* PROCESAR */ ESCRIBIR FIN HACER
...

Disco

ESCRIBIR (WRITE)

252

Copyright IBM Corp. 2007

Imprimir Datos Imprimir la salida en una impresora requiere ciertas consideraciones especiales: Separar los formatos de salida para las lneas de datos y las lneas del ttulo. Contadores de lnea. Contadores de pginas. Encabezados de pginas. Caracteres de control de carro en las lneas de salida.

253

Copyright IBM Corp. 2007

Imprimir Datos1
Se requiere de algunas consideraciones de formato especiales cuando se escriben datos a un dispositivo de impresin. Un contador de lnea se mantiene para tener seguimiento de cuntas lneas se han impreso, para as tener control de cundo saltar a una nueva pgina y colocar los encabezados en una nueva pgina de salida. El contador de pginas permite colocar el nmero de la pgina en la nueva pgina. Los formatos de lneas separados se requieren para imprimir las lneas de datos y lneas de encabezado. Normalmente el encabezado de la pgina requiere de formatos nicos de lnea para las mltiples lneas de encabezado y los encabezados de columna. El control de carro de impresora le indica a la impresora dnde imprimir la prxima lnea.
Copyright IBM Corp. 2007

254

Control de Carro de Impresora Los lenguajes de programacin tambin proporcionarn un medio para controlar dnde se va a imprimir una lnea. Esto generalmente se hace con un carcter de control en la primera posicin de la impresin de cada lnea y no se vern en la copia impresa. El carcter de control siempre se aplica a la lnea que se va a imprimir. Ejemplos de caracteres de control: El 0 da el doble espacio. El + se usa para suprimir el espaciado de lnea y dar apariencia de sobreimpresin (overstrike) o de negrita.
255
Copyright IBM Corp. 2007

Control de Carro de Impresora

Caracteres de Control

Carcter espacio 0 _ 1 +
256

Accin de Control Espaciar 1 lnea Espaciar 2 lnea Espaciar 3 lnea Saltar a una nueva pgina Suprimir espaciado
Copyright IBM Corp. 2007

Imprimir Salida Reportes El programador cuando escribe los reportes a una impresora tiene que considerar: los encabezados de pginas, nmeros de las pginas, contadores de lnea y pie de pginas. Existen varios tipos de lneas que deben definirse: Lnea de ttulo. Lneas de encabezados. Lneas de datos. Lneas de resumen. Lneas de pie de pgina.

257

Copyright IBM Corp. 2007

Encabezados de Pginas El programador define el tamao de la pgina y una variable contador de lnea. El contador de lnea se inicializa con el tamao de la pgina para que la rutina de encabezado de pgina sea llamada para la primera pgina. El tamao de la pgina es el nmero mximo de lneas a ser impresas en la pgina. La rutina de encabezado de pgina tambin debe ocuparse de la variable contador de pgina. Debe incrementase (variable contador) cada vez que una nueva pgina se escribe. Esta variable puede ser parte de la lnea del ttulo o de pie de pgina.

258

Copyright IBM Corp. 2007

Encabezados de Pginas1 Las consideraciones para el contador de lnea son: Se debe comparar (>=) con el tamao de pgina despus de imprimir cada lnea de detalle, para determinar cundo se debe llamar a la rutina de encabezado de pgina. Se debe incrementar inmediatamente despus de imprimir una lnea, basado en el espaciado simple, doble o triple. Siempre debe reflejar el nmero de la lnea de la ltima lnea escrita. La rutina de encabezado de pgina debe reiniciarse.

259

Copyright IBM Corp. 2007

Entrada/Salida de Archivo La estructura de datos aplicada a colecciones de datos en almacenamiento secundario se denomina archivo. Un archivo es un conjunto de datos estructurados en una coleccin de entidades elementales denominadas registros. Un registro es una coleccin de informacin, normalmente relativa a una entidad en particular. Un registro es una coleccin de campos lgicamente relacionados que pueden ser tratados como una unidad por algn programa.
260
Copyright IBM Corp. 2007

Entrada/Salida de Archivo Formatos de Registros Los datos escritos o ledos desde un archivo generalmente se manejan como un registro. Existen dos formas en las que generalmente se procesan los datos de un registro: Registros fijos. Registros variables. Los registros tambin pueden bloquearse para lograr eficiencia.

261

Copyright IBM Corp. 2007

Archivo: Ejemplo

Registro 4 Registro 3 Registro 2

nombre
Registro 1

carnet

direccin

edad

carrera

Ejemplo de un Archivo de Estudiante

262

Copyright IBM Corp. 2007

Archivo: Formatos de Registros Los registros segn la organizacin de sus datos pueden ser:
- Registros fijos: todos los registros del archivo tienen el mismo tamao. - Registros variables: cada registro del archivo puede tener diferentes tamaos.

FIJO

REGISTRO

REGISTRO

REGISTRO

REGIST

VARIABLE

REGISTRO

REGISTRO

REGISTRO

263

Copyright IBM Corp. 2007

Archivo Formatos de Registros1 Los registros tambin pueden bloquearse para lograr eficiencia. Un bloque puede contener uno o ms registros lgicos. Un bloque es la cantidad ms pequea que puede transferirse en una operacin de E/S entre la memoria principal y los dispositivos y viceversa. Los registros bloqueados se clasifican en: Registros fijos bloqueados. Registros variables bloqueados.

264

Copyright IBM Corp. 2007

Archivo Formatos de Registros2

FIJO BLOQUEADO
RD

BLOQUE REGISTRO REGISTRO REGISTRO REGIST

Nmero de bytes en el registro

VARIABLE BLOQUEADO

REGISTRO

REGISTRO

REGISTRO

Nmero de bytes en el bloque

265

Copyright IBM Corp. 2007

Ejercicio de E/S Disee un programa para generar un reporte de las horas trabajadas por un grupo de empleados. El formato del informe debe reflejar el nombre del empleado, las horas trabajadas y una indicacin de horas de sobre tiempo si trabaj ms de cuarenta horas. El reporte debe contener un ttulo y encabezados de columnas y debe manejar mltiples pginas.

266

Copyright IBM Corp. 2007

Ejercicio de E/S...1 La tarea ser examinar los registros de entrada y el formato del reporte deseado, para luego hacer lo siguiente: Listar las localidades de entrada, salida y de procesamiento requeridos. Listar los requerimientos de pre-proceso, proceso y post-proceso. Dibujar un diagrama de flujo que muestra una solucin correcta. Verificar la solucin.

267

Copyright IBM Corp. 2007

Ejercicio de E/S...2
Registros de Entrada Anderson 35 Andrews 42 Appleton Arnold Astor 40 30 45 Formato del Reporte: Reporte de Horas Trabajadas Nombre Anderson Andrews Appleton Arnold Astor Horas 35 42 40 39 45 Sobre Tiempo Si SI

268

Copyright IBM Corp. 2007

Ejercicio de E/S...3
INICIO

LINE_CTR = MAX_LINES PAGE_CTR = 1

LEER PRIMER REGISTRO

HACER

LEER SIGUIENTE REGISTRO

PROCESAR REGISTRO
MIENTRAS

NOT FIN DE ARCHIVO


FALSO

VERDADERO

FIN

269

Copyright IBM Corp. 2007

Ejercicio de E/S...4
PROCESAR REGISTRO SI SINO INICIO

LINE_CTR >= MAX_LINES

ENTONCES

NUEVA_PAGINA

SI SINO IN_HOURS > REG_HOURS

ENTONCES

OUT_OT_IND = REG_INDICATOR

OUT_OT_IND = OT_INDICATOR

ASIGNAR INS A OUTS

ESCRIBIR REGISTRO

LINE_CTR = LINE_CTR + 1

270

FIN

Copyright IBM Corp. 2007

Ejercicio de E/S...5
INICIO

NUEVA_PAGINA

SALTAR A NUEVA PAGINA

ESCRIBIR LINEA DE TITULO

ESCRIBIR LINEA DE CABECERA

RE INICIALIZAR LINE_CTR

INCREMENTA PAGE_CTR 271 FIN

Copyright IBM Corp. 2007

Resumen Ahora que ud. ha completado esta unidad, debe estar en la capacidad de: Describir los conceptos bsicos de Entrada y Salida en un programa de computadora. Listar algunas consideraciones para imprimir la salida. Describir los conceptos de registros de datos fijos, variables y bloqueados.

272

Copyright IBM Corp. 2007

Unidad 7

Ejemplos de Programas

273

Copyright IBM Corp. 2007

Objetivos de Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Disear un programa para manejar la verificacin de secuencias y rupturas de control. Disear un programa para resolver un problema de emparejamiento de transaccin.

274

Copyright IBM Corp. 2007

Verificacin de Secuencias Una secuencia puede ser: Una serie continua o conectada - el alfabeto. Un orden consecutivo o por rango - los naipes. Un conjunto de elementos ordenados - los nmeros naturales. Una verificacin de secuencia es el proceso de garantizar el orden correcto de los registros al procesar un archivo secuencial. Los datos deben estar ordenados, requiere una jerarqua de datos y un valor clave para determinar el orden correcto.

275

Copyright IBM Corp. 2007

Verificacin de Secuencias1 Verificar la secuencia implica trabajar con un archivo de registros de datos que se ha ordenado previamente, generalmente en orden ascendente. Los ejemplos de valores claves para ordenar pueden ser el nmero del empleado para registros de empleado o el nmero de parte para los registros del inventario. El proceso de ordenar las cosas en orden ascendente es un problema de programacin clsico. Esto se puede realizar a travs de alguna funcin del sistema o proceso perifrico fuera del programa que se est produciendo.

276

Copyright IBM Corp. 2007

Rupturas de Control La ruptura de control (Control Break) es el reconocimiento de un cambio en el valor clave cuando se procesan secuencias de registros que contienen mltiples registros para una clave. Normalmente se usa para procesar registros en secuencia en un sistema que contiene mltiples actualizaciones a registros maestros. La ruptura de control normalmente implica recolectar subtotales o imprimir los resmenes intermedios.

277

Copyright IBM Corp. 2007

Rupturas de Control1 Un ejemplo de procesamiento con ruptura de control es el procesamiento de promedio de notas de los estudiantes de un saln de clase. La clave para hacer la ruptura de control puede ser el ID del estudiante o el nombre del estudiante. A medida que el programa lee el conjunto ordenado de los registros de notas del estudiante, promedia las notas de todos los cursos del estudiante en particular y rompe el control cuando encuentra un nuevo ID de estudiante o nombre. Al interrumpir el control, este programa calcula el promedio de notas del estudiante y luego reinicializa todos los acumuladores para preparar el procesamiento del prximo estudiante.
278
Copyright IBM Corp. 2007

Emparejar Transacciones Emparejar Transacciones es emparejar el valor clave de un registro de un archivo, contra el valor clave de los registros en un archivo maestro. El archivo maestro es una coleccin de registros que contienen los datos permanentes o acumulados para un sistema. Emparejar transacciones es una actividad comn en el procesamiento de archivos. Tpicamente hay muchos registros de transaccin para ser procesados, contra slo un registro en el archivo maestro con el valor clave.

279

Copyright IBM Corp. 2007

Emparejar Transacciones1 Algunos ejemplos dnde se aplica son: Las notas del estudiante de un semestre (las transacciones) emparejado contra los registros de notas permanentes para la cohorte (archivo maestro). La comprobacin diaria y la actividad de depsito (las transacciones) emparejado contra el registro de cuenta para la cuenta corriente (archivo maestro). Diariamente el punto de venta y la actividad de reabastecer (las transacciones) emparejado contra la informacin detallada de inventario actual para un producto (archivo maestro).

280

Copyright IBM Corp. 2007

Ejercicio de Punto de Chequeo Disear un programa para generar un informe del resumen de ventas para un grupo de departamentos. El formato del informe debe reflejar el nmero del departamento y las ventas totales. Cada departamento puede tener mltiples registros de entrada. Se requiere verificar la secuencia del nmero del departamento. Si un registro de entrada est fuera de la secuencia, imprima un mensaje de error, los resultados acumulados y termine el programa. El informe debe contener las cabeceras de las columnas y debe ocuparse de pginas mltiples. El ttulo para el informe es optativo.
Copyright IBM Corp. 2007

281

Ejercicio de Punto de Chequeo1 La tarea ser examinar los registros de entrada y el formato del informe deseado y hacer lo siguiente: Listar la entrada, salida y localidades de almacenamiento de proceso requeridas. Listar los requisitos de pre-proceso, proceso y postproceso. Dibujar un diagrama de flujo que muestre una solucin correcta. Verificar la solucin usando los dos juegos de entrada que se muestran a continuacin:

282

Copyright IBM Corp. 2007

Ejercicio de Punto de Chequeo2


Entrada 1 5 200.00 5 100.00 5 100.00 6 50.00 6 200.00 16 300.00 16 100.00 Salida 1 Dpto. No. Ventas 5 400.00 6 250.00 16 400.00 Salida 2 Dpto. No. Ventas 5 400.00 16 500.00 Error de secuencia Entrada 2 5 200.00 5 100.00 5 100.00 16 300.00 16 200.00 9 50.00 6 200.00

283

Copyright IBM Corp. 2007

Resumen Ahora que ud. ha completado esta unidad, debe ser capaz de: Disear un programa para manejar la verificacin de secuencias y rupturas de control. Disear un programa para resolver un problema de emparejamiento de transaccin.

284

Copyright IBM Corp. 2007

También podría gustarte