fundprog_ mv1_ v3_(corregido19-09-07)

284
1 © Copyright IBM Corp. 2007 Fundamentos de Programación Curso No. CY300 Versión 2.0 Fundamentos de Programación

Upload: igor-hereira

Post on 04-Jul-2015

5.221 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: FundProg_ MV1_ V3_(corregido19-09-07)

1© Copyright IBM Corp. 2007

Fundamentos de ProgramaciónCurso No. CY300

Versión 2.0

Fundamentos de Programación

Page 2: FundProg_ MV1_ V3_(corregido19-09-07)

2© Copyright IBM Corp. 2007

Después de completar este curso, usted estará en la capacidad de:

• Crear la lógica básica de un programa.• Conocer los pasos básicos necesarios para ir desde el

diseño de un programa hasta su ejecución.• Usar la notación binaria y hexadecimal en un

ambiente de computadora tradicional.• Describir los componentes básicos de la configuración

de una computadora.

Objetivos del Curso

Page 3: FundProg_ MV1_ V3_(corregido19-09-07)

3© Copyright IBM Corp. 2007

Volumen 1

Fundamentos de Programación

Page 4: FundProg_ MV1_ V3_(corregido19-09-07)

4© Copyright IBM Corp. 2007

Unidad 1

Programas de Computadora

Page 5: FundProg_ MV1_ V3_(corregido19-09-07)

5© Copyright IBM Corp. 2007

Al finalizar esta unidad ud. debería ser capaz de:

• Definir el propósito y el contenido de un programa de computadora.

• Establecer una metodología para resolver problemas de procesamiento de datos.

• Definir el concepto de dato, los tipos de datos y las funciones incorporadas a los lenguajes de programación.

• Enumerar las recomendaciones más comunes necesarias para programar con estilo.

Objetivos de Aprendizaje

Page 6: FundProg_ MV1_ V3_(corregido19-09-07)

6© Copyright IBM Corp. 2007

Introducción a la Programación

• Actualmente las computadoras son parte importante en la solución de problemas de cualquier área: contabilidad, medicina, administración, etc.

• Los programas de computadora son parte esencial para la solución de problemas a cualquier nivel.

• Estas soluciones son llamadas aplicaciones.

• Los programadores utilizan algún lenguaje de programación para desarrollar las aplicaciones requeridas por los clientes.

• Los lenguajes de programación sirven como puente de enlace entre el análisis realizado por el equipo de desarrollo y la capacidad de cálculo que ofrece la computadora.

Page 7: FundProg_ MV1_ V3_(corregido19-09-07)

7© Copyright IBM Corp. 2007

Introducción a la Programación...1

• Para programar se requiere de: Fundamentos generales de programación. Lógica para entender, conceptuar y solucionar el

problema.

Conocimientos del lenguaje de programación.

• La programación requiere de una serie de conocimientos básicos comunes a cualquier lenguaje de programación, que le permitan al programador indicarle inequívocamente al computador las tareas que éste debe realizar.

Page 8: FundProg_ MV1_ V3_(corregido19-09-07)

8© Copyright IBM Corp. 2007

Sistemas de Procesamiento

• Una computadora es una máquina de procesamiento de información.

– Es una máquina porque tiene cables, circuitos y demás elementos mecánicos.

– Es de procesamiento porque es capaz de transformar o procesar datos.

– De información porque maneja conjuntos ordenados de datos.

• Para procesar la información se requiere del hardware y del software.

Page 9: FundProg_ MV1_ V3_(corregido19-09-07)

9© Copyright IBM Corp. 2007

Algoritmo

• El Algoritmo es un proceso para resolver problemas.

• Fue desarrollado por el matemático persa Abu Jafar Mohammed Ibn Musa Al Khwarizmi.

• Un algoritmo es una fórmula 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 metódico que define una serie finita de pasos sencillos y sin ambigüedades para la solución de un problema.

• La programación consiste en adaptar el algoritmo al ordenador.

• El algoritmo es independiente de la implementación en algún lenguaje de programación.

Page 10: FundProg_ MV1_ V3_(corregido19-09-07)

10© Copyright IBM Corp. 2007

Características de un Algoritmo

Un algoritmo debe:

• Estar bien definido.

• Ser preciso.

• Finito.

Page 11: FundProg_ MV1_ V3_(corregido19-09-07)

11© Copyright IBM Corp. 2007

Metodología para Diseñar Algoritmos

• Un algoritmo es una formula para obtener la solución de un problema.

• La solución puede ser planteada de diferentes formas.

• El diseño de un algoritmo es un proceso creativo.

• No existe un conjunto de reglas que indiquen expresamente cómo escribir un algoritmo en forma correcta.

Page 12: FundProg_ MV1_ V3_(corregido19-09-07)

12© Copyright IBM Corp. 2007

Análisis delProblema

Diseño delAlgoritmo

Verificacióndel Algoritmo

Metodología para Diseñar Algoritmos...1

Los pasos para resolver un problema son:

1) Análisis del problema.

2) Diseño del algoritmo.

3) Verificación del algoritmo.

Page 13: FundProg_ MV1_ V3_(corregido19-09-07)

13© Copyright IBM Corp. 2007

Metodología para Diseñar Algoritmos...2

En la Fase de Análisis del Problema se realiza lo siguiente:

• Identificar el problema.

• Determinar la información que se debe producir como salida.

• Identificar la información 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 solución que se va implementar.

Page 14: FundProg_ MV1_ V3_(corregido19-09-07)

14© Copyright IBM Corp. 2007

Metodología para Diseñar Algoritmos...3

En la Fase de Diseño del Algoritmo se realiza lo siguiente:

• Buscar la manera más fácil para simplificar la propuesta.

• Identificar los procesos más importantes y colocarlos en orden ascendente según su importancia y precedencia (esto sirve como un algoritmo inicial).

• El algoritmo inicial se va refinando sucesivamente hasta obtener una solución más detallada y fácil de traducir a un lenguaje de programación.

Page 15: FundProg_ MV1_ V3_(corregido19-09-07)

15© Copyright IBM Corp. 2007

Metodología para Diseñar Algoritmos...4

En la Fase de Verificación del Algoritmo se realiza lo siguiente:

• Verificar que el algoritmo cumpla con los procesos diseñados y produzca el resultado esperado.

• Realizar una prueba del algoritmo mediante su ejecución manual con datos significativos, además de comprobar si se obtienen los resultados esperados para la salida.

Page 16: FundProg_ MV1_ V3_(corregido19-09-07)

16© 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 implementación del algoritmo.

• Un programa de computadora es una secuencia de instrucciones que le indican al computador que realice las operaciones específicas para lograr el resultado deseado.

• Consiste de uno o más módulos o rutinas cada uno de los cuales puede estar compuesto de varios subprogramas.

Page 17: FundProg_ MV1_ V3_(corregido19-09-07)

17© Copyright IBM Corp. 2007

Programas de Computadora...1

Un programa de computadora no es:

• Una caja mágica.

• Intrínsicamente correcto.

Un programa de computadora debe ser:• Una solución a un problema. • Una secuencia de instrucciones que se ejecutan en

una computadora. • Sólo tan correcto como el programador lo haya hecho.

Page 18: FundProg_ MV1_ V3_(corregido19-09-07)

18© Copyright IBM Corp. 2007

Definiciones Básicas

• Lenguaje de Máquina.

• Lenguaje de Bajo Nivel: Ensamblador.

• Lenguaje de Alto Nivel.

• Compilar.

• Base de Datos.

• Sistema Operativo.

• Almacenamiento.

Page 19: FundProg_ MV1_ V3_(corregido19-09-07)

19© Copyright IBM Corp. 2007

Definiciones Básicas: Lenguaje de Máquina

• Es un lenguaje que puede ser interpretado directamente por los circuitos internos de la máquina.

• Está basado en instrucciones compuestas por secuencias de ceros (0) y unos (1).

• Ventajas:– No requiere traducción, la máquina lo interpreta.– Opera directamente con la máquina.– Puede ser eficiente en el manejo de los recursos.

• Desventajas:– Difícil de aprender, implementar y mantener.– Es único y particular para cada procesador.

Page 20: FundProg_ MV1_ V3_(corregido19-09-07)

20© Copyright IBM Corp. 2007

Definiciones Básicas: Lenguaje de Bajo Nivel

• Ensamblador.

• Es un lenguaje fuente para codificar sentencias simbólicas.

• Hace uso de nemotécnicos para representar instrucciones de máquina.

• Un ensamblador convierte cada instrucción en instrucciones de lenguaje de máquina.

• Ventajas:– No es tan complicado como el lenguaje de máquina.– Eficiente en el manejo de recursos.

• Desventajas:– Cada procesador tiene su propio juego de instrucciones

en ensamblador.– Debe ser traducido – ensamblado.

Page 21: FundProg_ MV1_ V3_(corregido19-09-07)

21© Copyright IBM Corp. 2007

Definiciones Básicas: Lenguaje de Alto Nivel

• Es un lenguaje orientado al problema o procedimiento.• Son los más cercanos al lenguaje humano.• Ejemplo: COBOL, PL/I, FORTRAN, etc.• Otros son los lenguajes de Programación Orientado a

Objetos (OOPL) : C++, Smalltalk, Java, etc.• Ventajas:

– Son independientes del procesador.– Son más fáciles de aprender, implementar y

mantener.– Tiene un carácter genérico.

• Desventajas:– Menos eficiente en el manejo de recursos.– Requiere un proceso de traducción – compilación.

Page 22: FundProg_ MV1_ V3_(corregido19-09-07)

22© Copyright IBM Corp. 2007

Otras Definiciones Básicas

• Compilar:Es traducir un programa escrito en un lenguaje de alto nivel a lenguaje de máquina, que es la forma en que la computadora puede ejecutar las acciones o instrucciones.

• Base de Datos: Es una colección de datos completa e integrada para evitar duplicados, que permite recuperar información para satisfacer a una amplia variedad de usuarios.

• Sistema Operativo: Es una colección 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.

Page 23: FundProg_ MV1_ V3_(corregido19-09-07)

23© Copyright IBM Corp. 2007

Desarrollar un Programa de Computadora

• El programador debe escribir las sentencias o instrucciones del código 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 algún error en la sintaxis de los comandos en el programa fuente, el compilador listará cada uno de ellos y no produce el programa ejecutable.

Page 24: FundProg_ MV1_ V3_(corregido19-09-07)

24© Copyright IBM Corp. 2007

Pasos de un Programa de Computadora

Page 25: FundProg_ MV1_ V3_(corregido19-09-07)

25© 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 “edición de enlace”.

• El enlazador combina el programa objeto recién creado, con otros archivos objetos ya existentes para producir un programa ejecutable.

• Los otros archivos objeto generalmente residen en un archivo en disco llamado “Librería de Enlace”.

Page 26: FundProg_ MV1_ V3_(corregido19-09-07)

26© Copyright IBM Corp. 2007

Funcionamiento del Compilador / Enlazador

Programa fuente

Compilador

EnlazadorPrograma Ejecutable

Librerías de Programas

ObjetoPrograma objeto

Page 27: FundProg_ MV1_ V3_(corregido19-09-07)

27© 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 sólo puede trabajar con los datos e instrucciones que residen en la memoria.

Page 28: FundProg_ MV1_ V3_(corregido19-09-07)

28© Copyright IBM Corp. 2007

Dato

• El dato es cualquier objeto o elemento de información que se usa a través de las diversas operaciones dentro de un programa.

• Son los elementos sobre los que se opera cuando se efectúa una instrucción.

• Un dato tiene un nombre que lo identifica y distingue de los demás elementos del programa.

• El nombre no es más que una forma de referenciar la dirección de memoria que ocupa el dato.

Page 29: FundProg_ MV1_ V3_(corregido19-09-07)

29© Copyright IBM Corp. 2007

Tipo de Dato

• El tipo de dato es una definición que identifica los valores válidos para un conjunto de datos y las operaciones que sobre ellos se pueden realizar.

• Normalmente, se puede establecer una relación de orden sobre los datos de naturaleza escalar o con valores determinísticos.

• Cada tipo de dato tiene una representación 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 código binario.

Page 30: FundProg_ MV1_ V3_(corregido19-09-07)

30© Copyright IBM Corp. 2007

Clasificación de los Tipos de Datos

• Los tipos de datos se clasifican en:

– Primitivos: tipos básicos o simples predefinidos en el sistema. Pueden ser numérico, lógico o carácter.

– Definidos por el usuario: tipos de datos complejos definidos por el programador.

Page 31: FundProg_ MV1_ V3_(corregido19-09-07)

31© Copyright IBM Corp. 2007

Tipo de Dato Primitivo Numérico

• Los tipos primitivos numéricos más importantes son:

– Entero: es un subconjunto finito del conjunto matemático de los números enteros. No tiene parte decimal.

– Real: es un subconjunto finito del conjunto matemático de los números reales, tienen signo y parte decimal.

Page 32: FundProg_ MV1_ V3_(corregido19-09-07)

32© Copyright IBM Corp. 2007

Tipo de Dato Primitivo Lógico o Booleano

• El tipo primitivo lógico o booleano:

– Es aquel que sólo puede tomar uno de los dos valores, verdadero o falso (1 ó 0).

– Las operaciones lógicas retornan un valor lógico.

Page 33: FundProg_ MV1_ V3_(corregido19-09-07)

33© Copyright IBM Corp. 2007

Tipo de Dato Caracter

• El tipo de dato primitivo carácter:– Es el conjunto finito y ordenado de caracteres que

reconoce la computadora: letras, dígitos, caracteres especiales, código ASCII y UNICODE.

– Los valores usualmente se representan dentro de un par de comillas simples.

– Se puede usar el código del carácter o su posición dentro del conjunto de caracteres válidos que se esté usando.

Page 34: FundProg_ MV1_ V3_(corregido19-09-07)

34© 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 ejecución del

programa o corrida del algoritmo.• Variables:

– Son instancias de un tipo de dato, cuyo valor puede cambiar durante la ejecución del programa o corrida del algoritmo.

– No varía su nombre y su tipo.– Variables:

• Acumuladoras.• Contadoras.

Page 35: FundProg_ MV1_ V3_(corregido19-09-07)

35© 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 basándose en ciertas reglas.

• El nombre, por lo general, tiene que empezar por una letra, el tamaño 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.

Page 36: FundProg_ MV1_ V3_(corregido19-09-07)

36© 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 ejecución del programa.

• El tipo de dato de la constante se especifica o no en la declaración dependiendo del lenguaje.

• Ejemplo de definición 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.

Page 37: FundProg_ MV1_ V3_(corregido19-09-07)

37© Copyright IBM Corp. 2007

Variables y Constantes en la Memoria

• Cuando el compilador consigue una declaración de una variable o una constante con nombre, automáticamente reserva en memoria espacio para guardarla.

• El espacio reservado en memoria depende del tipo de dato de la variable o constante.

• En esa ubicación 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 ubicación de memoria.

Page 38: FundProg_ MV1_ V3_(corregido19-09-07)

38© Copyright IBM Corp. 2007

Expresiones: Tipos y Operadores

• Una expresión es una combinación de constantes, variables, signos de operación, paréntesis y nombres especiales de funciones estándares, con un sentido unívoco y definido.

• La evaluación de una expresión da como resultado un único valor.

• Toda expresión tiene asociado un tipo que se corresponde con el tipo del valor que devuelve la expresión cuando se evalúa.

• Existen dos tipos de expresiones:– Numéricas.– Lógicas.

Page 39: FundProg_ MV1_ V3_(corregido19-09-07)

39© Copyright IBM Corp. 2007

Expresiones Numéricas: Operadores Aritméticos

• Las expresiones numéricas son una combinación de variables y constantes numéricas con operadores aritméticos, que al evaluarse devuelven un valor numérico.

• Los operadores aritméticos se utilizan en las expresiones numéricas.

• Algunos de los operadores aritméticos más usados son:– + Suma– - Resta– * Multiplicación– / División

Page 40: FundProg_ MV1_ V3_(corregido19-09-07)

40© Copyright IBM Corp. 2007

Otros Operadores Aritméticos

• Otros operadores aritméticos soportados en algunos lenguajes de programación son:– Resto: devuelve el resto de una división entera.– División entera: devuelve el cociente de una

división 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 sitúa en medio de ambos operandos.

Page 41: FundProg_ MV1_ V3_(corregido19-09-07)

41© Copyright IBM Corp. 2007

Operadores Unarios

• Los operadores unarios son un tipo de operador que sólo necesitan de un operando.

• Algunos de los operadores unarios más 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.

Page 42: FundProg_ MV1_ V3_(corregido19-09-07)

42© Copyright IBM Corp. 2007

Evaluación de Expresiones

• El resultado que retorna de la evaluación de una expresión depende del orden en que se evalúen los operadores.

• Ejemplo:– Sea la siguiente expresión aritmética: 2 + 3 * 2 + 3– Si se evalúa en el orden de aparición de los operadores :

(((2 + 3) * 2) + 3) El resultado = 13– Si se evalúa primero la suma (+) y luego la multiplicación

(*):(2 + 3) * (2 + 3) El resultado = 25

– Si se evalúa primero la multiplicación y luego la suma: 2 + (3 * 2) + 3 El resultado = 11

Page 43: FundProg_ MV1_ V3_(corregido19-09-07)

43© 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 evaluación dentro de la expresión.

• Cada lenguaje puede establecer sus propias reglas de prioridad o precedencia de operadores.

• El orden de precedencia más usado para los operadores aritméticos básicos, es:

1- ^2- *, /, div y mod3- + y –

• Se evalúa 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 paréntesis () para cambiar el orden en que se evalúan los operadores de una expresión aritmética.

Page 44: FundProg_ MV1_ V3_(corregido19-09-07)

44© Copyright IBM Corp. 2007

Expresiones Lógicas: Operadores Relacionales y Lógicos

• Una expresión lógica es aquella que sólo puede devolver uno de dos valores: Verdadero o Falso.

• Los operadores que pueden aparecer en una expresión lógica son de dos tipos: lógicos o relacionales.

• Los operadores lógicos sólo trabajan sobre expresiones o datos que retornan valores booleanos.

• Los operadores relacionales trabajan con expresiones numéricas para realizar comparaciones que retornan un valor booleano.

• Las expresiones combinan tanto los operadores lógicos como relacionales, se evalúa más de una condición o relación por medio los de operadores lógicos.

Page 45: FundProg_ MV1_ V3_(corregido19-09-07)

45© Copyright IBM Corp. 2007

Operadores Relacionales

• Los operadores relacionales más utilizados son:– < menor que– > mayor que– = igualdad (en C/C++: ==)– <> diferente (en C/C++: !=)– ≤ menor o igual que– ≥ mayor o igual que

Page 46: FundProg_ MV1_ V3_(corregido19-09-07)

46© Copyright IBM Corp. 2007

Ejercicio sobre Expresiones Lógicas

Ejercicio:

• Evalúe las siguientes expresiones si se le asigna a:– la variable x el valor de 2.– la variable y el valor de 4.

1. x == y2. x <> y 3. y > x4. x >= y

Page 47: FundProg_ MV1_ V3_(corregido19-09-07)

47© Copyright IBM Corp. 2007

Operadores Lógicos

• Los operadores lógicos se utilizan para evaluar más de una condición al mismo tiempo.

• Los operadores lógicos más utilizados son:Y (and, &&)O (or, !!)No (not, ~, !)O exclusivo (xor, ^)

• El “No” es un operador unario todos los demás son operadores binarios.

Page 48: FundProg_ MV1_ V3_(corregido19-09-07)

48© Copyright IBM Corp. 2007

Tabla de Verdad de los Operadores Lógicos

FFFFF

VVFVF

VVFFV

FVVVV

XOrOrAndOperando 2Operando 1

Leyenda: V=Verdadero F=Falso

Tabla de Verdad

Page 49: FundProg_ MV1_ V3_(corregido19-09-07)

49© Copyright IBM Corp. 2007

Ejercicio sobre Operadores Lógicos

• Ejercicio:

• Si “x” representa “1 > 2” (FALSO). • “y” representa “4 < 8” (VERDADERO).

• Evalúe la siguientes expresiones:1. NOT x2. x AND y3. y OR x 4. (NOT x) AND y5. x XOR y

Page 50: FundProg_ MV1_ V3_(corregido19-09-07)

50© Copyright IBM Corp. 2007

Funciones Incorporadas

• Las funciones incorporadas son funciones que se agregan al lenguaje y que son diferentes de las operaciones básicas.

• Se consideran estándar en la mayoría de herramientas y lenguajes de programación.

• Son dependientes del lenguaje y normalmente se encuentran en librerías externas que se pueden incluir en un programa.

• Las librerías más comunes son las librerías de soporte matemático 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 programación.

Page 51: FundProg_ MV1_ V3_(corregido19-09-07)

51© Copyright IBM Corp. 2007

Uso de las Funciones Incorporadas

Import java.io.*;importJava

#include <iostream>includeC y C++

use conio;usePascal

EjemploSentenciaLenguaje

Page 52: FundProg_ MV1_ V3_(corregido19-09-07)

52© Copyright IBM Corp. 2007

Operación de Asignación

var = Math.sin(90.0); =Java

var = 5 + 3; =C y C++

var := 5 + 3; :=Pascal

EjemploOperadorLenguaje

• La operación de asignación consiste en atribuir un valor a una variable.

• El valor asignado es una expresión, una constante u otra variable.

• var: representa la variable a la que se le asigna el valor dado en la expresión a la derecha del operador de asignación.

Page 53: FundProg_ MV1_ V3_(corregido19-09-07)

53© Copyright IBM Corp. 2007

Fases de la Operación de Asignación

• La operación de asignación se realiza en 2 fases:– Se evalúa la expresión de la parte derecha de la

asignación y se obtiene un único valor.– Se asigna ese valor a la variable de la parte izquierda.

• En la parte izquierda de la operación de asignación sólo puede haber una variable y al asignarle el valor pierde el valor anterior.

• Si la variable de la parte izquierda participa en la expresión, se evalúa primero la expresión antes de realizar la asignación. Ejemplo x = x + 1.

• El tipo de dato resultante después de evaluar la expresión (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 operación.

Page 54: FundProg_ MV1_ V3_(corregido19-09-07)

54© Copyright IBM Corp. 2007

Recomendaciones al Programar

• Para minimizar la ocurrencia de errores al programar se recomienda:– Reutilizar código bueno. – No asumir los datos de entrada como válidos. – No asumir que los datos de entrada están en la

secuencia correcta. – Diseñar los tamaños de los campos de datos de

modo que puedan contener en el campo el valor actual más grande.

– Usar comentarios en los programas. – Desarrollar programas legibles y fáciles de

entender.

Page 55: FundProg_ MV1_ V3_(corregido19-09-07)

55© Copyright IBM Corp. 2007

Resumen

Ahora que ud. ha completado esta unidad, debe ser capaz de:

• Definir el propósito y el contenido de un programa de computadora.

• Establecer una metodología para resolver problemas de procesamiento de datos.

• Definir el concepto de dato, los tipos de datos y las funciones incorporadas a los lenguajes de programación.

• Enumerar las recomendaciones más comunes necesarias para programar con estilo.

Page 56: FundProg_ MV1_ V3_(corregido19-09-07)

56© Copyright IBM Corp. 2007

Unidad 2

Conceptos de Diseño Estructurado

Page 57: FundProg_ MV1_ V3_(corregido19-09-07)

57© Copyright IBM Corp. 2007

Objetivos de Aprendizaje

Al finalizar esta unidad ud. debería ser capaz de:

• Listar las características del Diseño Estructurado. • Definir los conceptos de diseño Top-Down.• Describir los Diagramas de Estructura, Diagramas de

Flujo y Diagramas de Nassi – Schederman.• Definir el concepto de Pseudocódigo.

Page 58: FundProg_ MV1_ V3_(corregido19-09-07)

58© Copyright IBM Corp. 2007

Análisis y Diseño de Algoritmos

El análisis y diseño de algoritmos requiere:

1. El uso de alguna técnica para la descripción del problema:

• Diseño Estructurado.• Diseno Top-Down.

2. Representar el algoritmo mediante una herramienta de programación:

• Diagramas de Flujo.• Pseudocódigo.• Diagrama N-S o Nassi-Schedeman.

Page 59: FundProg_ MV1_ V3_(corregido19-09-07)

59© Copyright IBM Corp. 2007

Conceptos de Diseño Estructurado

• Las características de un sistema que ha sido desarrollado siguiendo los lineamientos del diseño estructurado, son:– Tiene una entrada y una salida con variaciones

ocasionales. – Está dividido en módulos.– No utiliza la sentencia GOTO.

Page 60: FundProg_ MV1_ V3_(corregido19-09-07)

60© Copyright IBM Corp. 2007

Diseño Top Down

• Es el proceso de dividir reiteradamente el problema en subproblemas más simples, hasta que pueden ser implementados para su solución.

• Va de lo más general a lo más específico. • Se conoce como refinamiento "paso a paso". • Simplificación del problema y de los subprogramas de

cada descomposición. • 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 módulos (lo que hace más sencilla su lectura y mantenimiento).

Page 61: FundProg_ MV1_ V3_(corregido19-09-07)

61© Copyright IBM Corp. 2007

Notas Alumnos

Elegir opción Asignar notas Cambiar notas Consultar

Por notas Por apellido

Ejemplo de un Diseño 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 según distintas calificaciones.

• Un esquema que representa una de las posibles divisiones del problema en subproblemas o módulos es:

Page 62: FundProg_ MV1_ V3_(corregido19-09-07)

62© Copyright IBM Corp. 2007

Diseño 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 ningún alquiler vencido. – No debe nada a la tienda. – La película está en el inventario. – La película no está reservada.

Page 63: FundProg_ MV1_ V3_(corregido19-09-07)

63© Copyright IBM Corp. 2007

Diseño Top Down: Problema…1

• 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 película está en el inventario. – Verificar si la película ya está reservada.

Page 64: FundProg_ MV1_ V3_(corregido19-09-07)

64© Copyright IBM Corp. 2007

Diseño Top Down: Problema…2

• Al descomponer de nuevo los pasos anteriores: – Verificar si el cliente es un miembro registrado:

• Ingresar en el sistema la identificación del cliente.• Ver en pantalla si se encontró el perfil del cliente.

– Verificar los alquileres vencidos:• Determinar si el perfil refleja algún alquiler vencido en el

sistema. – Verificar si el miembro tiene una deuda:

• Determinar si el perfil refleja algún cargo pendiente. – Verificar si la película está en el inventario:

• Ingresar el nombre de la película al sistema.• Verificar si existe una copia que no esté alquilada.

– Verificar si la película ya está reservada:• Determinar si las copias no alquiladas ya están

reservadas.

Page 65: FundProg_ MV1_ V3_(corregido19-09-07)

65© Copyright IBM Corp. 2007

Diseño Top Down: Problema…3

• Al descomponer el subprograma: 1.1. Verificar si el cliente es un miembro registrado.

• Preguntar el número de teléfono u otra identificación al cliente.

1.2. Ingresar el número de teléfono en el sistema. • Seleccionar del menú la opción de verificar el número

de miembro.• Ingresar el número de cliente en el prompt.• Presionar la tecla que indica al sistema que está listo

para que verifique si existe el número 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.

Page 66: FundProg_ MV1_ V3_(corregido19-09-07)

66© Copyright IBM Corp. 2007

Diagramas de Estructura

Alquilar una

Película

Verificar si es un

miembro

Verificar alquileres vencidos

Verificar deudas

pendientes

Verificar si está en

inventario

Verificar si no está

reservada

Preguntar id Ingresar id Examinar

perfil

• Un diagrama de estructura es una manera gráfica de representar el diseño top down.

• Permite representar en forma clara, la organización de alto nivel de un programa.

• Ejemplo:

Page 67: FundProg_ MV1_ V3_(corregido19-09-07)

67© Copyright IBM Corp. 2007

Representación de Algoritmos

• Para representar un algoritmo se utiliza algún método que independice el algoritmo del lenguaje de programación.

• Los métodos permiten representar el algoritmo, y a partir de esta representación, implementar el algoritmo en cualquier lenguaje de programación.

• Las herramientas para representar un algoritmo son:• Diagramas de Flujo.• Pseudocódigo.• Diagrama N-S o Nassi-Schedeman.

Page 68: FundProg_ MV1_ V3_(corregido19-09-07)

68© Copyright IBM Corp. 2007

Diagramas de Flujo

• Un diagrama de flujo es una representación gráfica de la lógica del diseño.

• Está a un nivel de detalle más 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 bifurcación 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.

Page 69: FundProg_ MV1_ V3_(corregido19-09-07)

69© Copyright IBM Corp. 2007

Símbolos de los Diagramas de Flujo

Líneas de flujo: Sirve para conectar los símbolos del diagrama y la flecha, indica la secuencia en la que se van a ejecutar las acciones.

Símbolo de proceso: Indica la acción que tiene que realizar la computadora. Dentro se escribe la acción.

Acciones de entrada y salida. Dentro se colocan las acciones de lectura y escritura.

Condición: Se coloca una condición. Representa estructuras selectivas y repetitivas. Se evalúa la condición y se escoge un camino de acuerdo a si el resultado es verdadero o falso.

Page 70: FundProg_ MV1_ V3_(corregido19-09-07)

70© Copyright IBM Corp. 2007

Símbolos de los Diagramas de Flujo...1

Principio y fin: Dentro del símbolo 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 página y hay que seguir en otra columna. El primer símbolo si está en la misma página y el segundo en página distinta.

Aclaratoria: Es un comentario para entender mejor el código, pero no es parte del código y por tanto no se ejecuta.

Page 71: FundProg_ MV1_ V3_(corregido19-09-07)

71© Copyright IBM Corp. 2007

Símbolos de los Diagramas de Flujo…2

Pantalla: Cuando la salida es por pantalla.

Teclado: Representa una entrada por teclado.

Impresora.

Entrada/Salida por disco.

Page 72: FundProg_ MV1_ V3_(corregido19-09-07)

72© Copyright IBM Corp. 2007

Pasos para Crear un Diagrama de Flujo

Determinar requerimientos del proceso

Determinar requerimientos del post-proceso

Fin

¿Diagrama Flujo OK?

Crear Diagrama de Flujo

Verificar Diagrama de Flujo

NO

SI

A

Page 73: FundProg_ MV1_ V3_(corregido19-09-07)

73© Copyright IBM Corp. 2007

Detalles del Diagrama de Flujo

• Las bifurcaciones condicionales se ejecutan según una determinada condición.– Si la condición 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 número determinado de veces mientras se cumple una determinada condición.

Page 74: FundProg_ MV1_ V3_(corregido19-09-07)

74© Copyright IBM Corp. 2007

Ejemplo de Diagrama de Flujo

Problema: “Alquiler de video”. Subproblema: “Verificar si el cliente es un miembro registrado”.

NO SI¿Número encontrado?

Obtener Identificación

Introducir nro. Teléfono en la Computadora

Iniciar Proceso: Nuevo Miembro Proceder con el Alquiler

Page 75: FundProg_ MV1_ V3_(corregido19-09-07)

75© Copyright IBM Corp. 2007

Representación de un Problema con un Diagrama de Flujo

Problema:• Determinar el producto de varios números positivos

que se ingresan a través del teclado. Se indica el fin de datos al leer un número negativo.

Algoritmo:– Iniciar la variable del producto.– Leer número.– Preguntar si es negativo o positivo.– Si es negativo salir y escribir el producto.– Si es positivo, se multiplica el número leído y luego

se lee un nuevo número. Se vuelve al paso 3.

Page 76: FundProg_ MV1_ V3_(corregido19-09-07)

76© Copyright IBM Corp. 2007

Diagramas de Flujo para Calcular el Producto de Números

INICIO

P = 1

LEER NUM

NUM >= 0 P = P x NUM

ESCRIBIR P

SI

NO

FIN

Page 77: FundProg_ MV1_ V3_(corregido19-09-07)

77© Copyright IBM Corp. 2007

Diagramas N-S o de Nassi-Schederman

• Los diagramas N-S son una forma de representación semejante al diagrama de flujo, pero sin flechas y con los símbolos de condición y repetición diferentes.

• Están conformados por una serie de cajas de procesos que constituyen las secuencias de acciones necesarias para representar el algoritmo.

• Las cajas de proceso o acción van unidas entre si.• Son muy útiles para representar diagramas

estructurados.

Page 78: FundProg_ MV1_ V3_(corregido19-09-07)

78© Copyright IBM Corp. 2007

Estructuras de los Diagramas N-S

• Representación de la Estructura Condicional:

CondiciónSI NO

<Acción 1> <Acción 2>

Mientras <Condición>

<Acciones>

<Acciones>

Repetir Hasta <Condición>

Para Var desde V1 Hasta V2

<Acciones>

• Representación de Estructuras Repetitivas:

Page 79: FundProg_ MV1_ V3_(corregido19-09-07)

79© Copyright IBM Corp. 2007

Ejemplo de Uso de los Diagramas N-S

Problema:Determinar el producto de varios números positivos que se ingresan a través del teclado. Se indica el fin de datos al leer un número negativo.

INICIO

p = 1

Leer num

Mientras (num >= 0>)

p = p x num

Leer num

Escribir p

FIN

Page 80: FundProg_ MV1_ V3_(corregido19-09-07)

80© Copyright IBM Corp. 2007

Pseudocódigo

• El pseudocódigo es un lenguaje de documentación de programas similar al inglés (o español), parecido a cualquier lenguaje de programación de alto nivel.

• No necesita seguir ninguna regla específica, como sí lo requieren los programas que van a ser compilados.

• Normalmente no es muy específico para las áreas de E/S.

• Tiene la ventaja que se puede crear fácilmente con cualquier editor de texto.

• No hay ningún estándar en la industria definido para los pseudocódigos.

Page 81: FundProg_ MV1_ V3_(corregido19-09-07)

81© Copyright IBM Corp. 2007

Palabras Claves en Pseudocódigo

• El pseudocódigo puede utilizar palabras claves o palabras especiales que van indicando lo que significa el algoritmo.

• Ejemplo de palabras claves en pseudocódigo:– Inicio y Fin– Sí <condición>– Entonces <acciones>– Sino <acciones>– Mientras <condición> hacer – Repetir / hasta <condición>– Desde / hasta – Según sea

• Los comentarios van encerrados entre llaves.• Hay que utilizar las sangrías.

Page 82: FundProg_ MV1_ V3_(corregido19-09-07)

82© Copyright IBM Corp. 2007

Estructura de los Pseudocódigos

• La estructura recomendada para los algoritmos en pseudocódigo es:

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

Page 83: FundProg_ MV1_ V3_(corregido19-09-07)

83© Copyright IBM Corp. 2007

Ejemplo de Pseudocódigo

Problema:Determinar el producto de varios números positivos que se ingresan a través del teclado. Se indica el fin de datos al leer un número negativo.

Algoritmo ProductoVar p, num: enteroInicio p = 1 Leer num Mientras num >=0 hacer p = p * num Leer num Fin mientras Escribir pFin

Page 84: FundProg_ MV1_ V3_(corregido19-09-07)

84© Copyright IBM Corp. 2007

Resumen

Ahora que ud. ha completado esta unidad, debe ser capaz de:

• Listar las características del Diseño Estructurado. • Definir los conceptos de diseño Top-Down.• Describir los Diagramas de Estructura, Diagramas de

Flujo y Diagramas de Nassi – Schederman.• Definir el concepto de Pseudocódigo.

Page 85: FundProg_ MV1_ V3_(corregido19-09-07)

85© Copyright IBM Corp. 2007

Unidad 3

Programación Estructurada

Page 86: FundProg_ MV1_ V3_(corregido19-09-07)

86© Copyright IBM Corp. 2007

Objetivos del Aprendizaje

Al finalizar esta unidad ud. debería ser capaz de:

• Conocer las técnicas de programación estructurada.• Trabajar con las estructuras secuenciales.• Trabajar con las estructuras selectivas.• Trabajar con las estructuras repetitivas.• Conocer la anidación de bucles y condicionales.• Realizar el control de datos de entrada.

Page 87: FundProg_ MV1_ V3_(corregido19-09-07)

87© Copyright IBM Corp. 2007

Estructuras Secuenciales

Leer numnum = num * 2Escribir num

PSEUDOCÓDIGODIAGRAMAS N-SFLUJOGRAMA

• Una instrucción sigue a otra en secuencia, es decir, la salida de una instrucción es la entrada de la siguiente.

Page 88: FundProg_ MV1_ V3_(corregido19-09-07)

88© Copyright IBM Corp. 2007

Estructuras Secuenciales: Ejemplo

Problema:

• Obtener la edad de una persona en meses, si se ingresa su edad en años y meses.

• Ejemplo: • Si se ingresan 3 años 4 meses debe mostrar 40

meses.

Page 89: FundProg_ MV1_ V3_(corregido19-09-07)

89© Copyright IBM Corp. 2007

Estructuras Secuenciales: Ejemplo…1

entero meses, anios, totalM

Ingrese los años de la persona

anios

meses

Ingrese los meses

totalM = (anios * 12) + meses La edad en meses es: ” totalM

FIN

INICIO

Page 90: FundProg_ MV1_ V3_(corregido19-09-07)

90© Copyright IBM Corp. 2007

Estructuras Secuenciales: Ejemplo…2

• Un instructor prepara tres modelos de exámenes para tres salones en un curso de programación.

• El instructor tarda un tiempo diferente para revisar cada modelo de examen:– 5 min en el modelo del salón A.– 8 min en el modelo del salón B.– 6 minutos en el modelo del salón C.

• Dadas las cantidades de estudiantes en cada salón, ¿cuántas horas y minutos tardará el instructor en revisar los exámenes de todos los salones?.

Page 91: FundProg_ MV1_ V3_(corregido19-09-07)

91© Copyright IBM Corp. 2007

estA, estB, estC

FIN

INICIO

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

“Ingrese la cantidad de estudiantes de los salones A, B y C”

“El instructor tardará ” horasT “horas y ” minT “minutos”

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

minT = tiempoT mod 60

horasT = tiempoT / 60

Estructuras Secuenciales: Ejemplo…3

Page 92: FundProg_ MV1_ V3_(corregido19-09-07)

92© Copyright IBM Corp. 2007

Estructuras Selectivas

• Permiten que el algoritmo tome decisiones y ejecute u omita algunos procesos dependiendo de que se cumpla una condición.

• En función del resultado lógico de la condición (verdadero o falso) se ejecuta un conjunto de instrucciones u otro.

• Son también denominadas estructuras de control de flujo, estructuras condicionales o de toma de decisiones.

• Hay tres tipos: – Simples.– Dobles.– Múltiples.

Page 93: FundProg_ MV1_ V3_(corregido19-09-07)

93© Copyright IBM Corp. 2007

Estructura Selectiva Simple

• Es la estructura condicional elemental y básica. • Se representa:

Sí <condición> entonces <acciones>Fin Sí

• En la estructura condicional simple se evalúa la condición:– Si el resultado es verdadero se ejecuta el conjunto

de acciones asociadas al bloque.– Si el resultado es falso, no se ejecuta acción alguna.

Page 94: FundProg_ MV1_ V3_(corregido19-09-07)

94© Copyright IBM Corp. 2007

Sí <condición> entonces <acciones>Fin sí

PSEUDOCÓDIGODIAGRAMAS N-SFLUJOGRAMA

Condición

Condición

Acciones

Acciones

Acciones

Si No

Si

No

Ejemplo de Estructuras Selectivas Simples

Page 95: FundProg_ MV1_ V3_(corregido19-09-07)

95© Copyright IBM Corp. 2007

Estructura Selectiva Simple: Ejercicio

• Solicite un número al usuario e imprima su valor absoluto.

• El valor absoluto de un número es:– Si es positivo: el mismo valor.– Si es negativo: el valor cambiado de signo.

Page 96: FundProg_ MV1_ V3_(corregido19-09-07)

96© Copyright IBM Corp. 2007

Estructura Selectiva Simple: Ejercicio…1

algoritmo valor_absoluto

var numero: entero

inicio

mostrar “Ingrese un número entero: ”

leer numero

si numero < 0 entonces

numero = numero * (-1)

fin si

mostrar “El valor absoluto es: ” numero

fin valor_absoluto

Page 97: FundProg_ MV1_ V3_(corregido19-09-07)

97© Copyright IBM Corp. 2007

Estructura Selectiva Doble

Sí <condición> entonces <acciones>Sino <acciones>Fin sí

PSEUDOCÓDIGODIAGRAMAS N-SFLUJOGRAMA

condición

condición

acciones

acciones

acciones

acciones acciones

Si

SiNo

No

• La estructura selectiva doble evalúa la condición: – 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.

Page 98: FundProg_ MV1_ V3_(corregido19-09-07)

98© Copyright IBM Corp. 2007

Estructura Selectiva Doble: Ejemplo

• Dados dos números enteros que se leen por teclado, compárelos y muestre un mensaje en pantalla que anuncie el resultado de la comparación.

• Presente el algoritmo como:– Diagrama de flujo. – Pseudocódigo.

Page 99: FundProg_ MV1_ V3_(corregido19-09-07)

99© Copyright IBM Corp. 2007

Estructuras Selectivas de Alternativa Múltiple

• Son estructuras que evalúan múltiples alternativas que se generan de una condición o una expresión que puede tomar n valores distintos.

• De acuerdo al valor de la expresión, en un momento dado se ejecutan las acciones correspondientes al valor que haya tomado la expresión.

• Equivale a un conjunto de condiciones anidadas.• En muchos lenguajes de programación se conocen

como sentencias Case o Switch.

Page 100: FundProg_ MV1_ V3_(corregido19-09-07)

100© Copyright IBM Corp. 2007

Estructuras Selectivas de Alternativa Múltiple…1

• La estructura selectiva de alternativa múltiple se representa:

Según sea <expresión> <valor1>: <acciones 1> <valor2>: <acciones 2> [<otro> : <acciones n>]Fin Según

• Las acciones asociadas al valor otro se ejecutan cuando la expresión no toma ninguno de los valores que aparecen antes. Se le conoce también como alternativa Otherwise o Else.

Page 101: FundProg_ MV1_ V3_(corregido19-09-07)

101© Copyright IBM Corp. 2007

Según sea <expresión> <valor1>:<acciones> <valor2>:<acciones> <valor3>:<acciones> <valor4>:<acciones> [<otro> :<acciones>]Fin según

PSEUDOCÓDIGODIAGRAMAS N-SFLUJOGRAMA

Representación de las Estructuras Selectivas de Alternativa Múltiple

Expresión

V1

V2

V3 V4

V1

V2

V3 V4

Expresión

acciones

Page 102: FundProg_ MV1_ V3_(corregido19-09-07)

102© Copyright IBM Corp. 2007

Escribir un programa que dada una nota entera, presente por pantalla un mensaje acorde a la nota suministrada según un rango de valores.

Para un rango de valores:Leer una nota y escribir en pantalla la calificaciónVar nota: enteroLeer notaSegún sea nota 1..4: escribir “suspenso” 5..6: escribir “aprobado” 7..8: escribir “Notable” 9: escribir “Sobresaliente” 10: escribir “Cuadro de honor”Fin según

Estructuras Selectivas de Alternativa Múltiple: Ejemplo…1

Page 103: FundProg_ MV1_ V3_(corregido19-09-07)

103© Copyright IBM Corp. 2007

Estructuras Selectivas de Alternativa Múltiple: Ejemplo…2

• Una aseguradora de vehículos tiene diferentes porcentajes de prima dependiendo de los años de antigüedad del vehículo.– 1 año pagan el 5% de su valor, – 2 años el 8%, – 3 años el 10%, – 4 años el 12%, – 5 años o más pagan el 15%.

• Elabore un programa que solicite el valor del vehículo y los años de antigüedad, y muestre por pantalla el valor de la prima.

Page 104: FundProg_ MV1_ V3_(corregido19-09-07)

104© 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.

Page 105: FundProg_ MV1_ V3_(corregido19-09-07)

105© Copyright IBM Corp. 2007

Estructuras Condicionales Anidadas…1

Sintaxis:

Si <condicion1>

Entonces <sentencia1>

Sino

si <condicion2>

Entonces <sentencia2>Sinosi <condicion2>

Entonces <sentencia3>Fin si

Fin siFin si

Page 106: FundProg_ MV1_ V3_(corregido19-09-07)

106© Copyright IBM Corp. 2007

Estructuras Repetitivas o de Ciclo

• La estructura repetitiva o de ciclo, es la estructura de programación que contiene o representa un bucle o conjunto de instrucciones que se repiten un número finito de veces.

• Cada repetición del bucle se llama una iteración. • Todo bucle tiene asociado una condición, que es la que

va a determinar si se ejecuta el bucle y hasta cuando.• Existen tres tipos de básicos de estructuras

repetitivas:• Mientras-hacer (While do)• Repetir hasta (Repeat until)• Desde (For)

Page 107: FundProg_ MV1_ V3_(corregido19-09-07)

107© 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 condición.

• La condición de entrada se evalúa antes de realizar cualquier iteración del bucle.

• Si la condición no se cumple, el ciclo no se ejecuta y el programa continúa con la secuencia de acciones siguientes al ciclo Mientras-Hacer.

Page 108: FundProg_ MV1_ V3_(corregido19-09-07)

108© Copyright IBM Corp. 2007

Estructura Repetitiva Mientras-Hacer…1

• Funcionamiento de la estructura Mientras-Hacer:– La condición del Mientras-Hacer se evalúa al

principio, antes de entrar en él. – Si la condición es verdadera, se ejecutan las

acciones del Mientras-Hacer. – Después de ejecutar la última acción, se repite el

proceso de evaluación de la condición; si la condición es verdadera, se repite el ciclo.

– Este proceso se conoce como un bucle y continúa hasta que la condición sea falsa.

– Cuando la condición evalúa a falso se prosigue con la sentencia siguiente del programa.

Page 109: FundProg_ MV1_ V3_(corregido19-09-07)

109© Copyright IBM Corp. 2007

Mientras <condición> Hacer <acciones>Fin mientras

PSEUDOCÓDIGODIAGRAMAS N-SFLUJOGRAMA

Estructura Repetitiva Mientras-Hacer…1

Mientras <cond> Hacer

<acciones>

acciones

condición

Si

No

Page 110: FundProg_ MV1_ V3_(corregido19-09-07)

110© Copyright IBM Corp. 2007

Estructura Repetitiva Mientras-Hacer: Ejemplo

algoritmo suma Var n, cont, suma:entero inicio cont = 0suma = 0mientras cont < 10 hacer

leer nsuma = suma + ncont = cont + 1

fin mientrasmostrar “La suma es: ” sumafin suma

cont = 0suma = 0

leer n

cont < 10

suma = suma + ncont = cont + 1

“La suma es: ” suma

inicio

fin

Ejemplo: Programa para sumar 10 números que se leen por terminal

Page 111: FundProg_ MV1_ V3_(corregido19-09-07)

111© Copyright IBM Corp. 2007

Estructura Repetitiva: Repetir-Hasta

• Es una estructura de ciclo en la que la condición se evalúa después de realizar la primera iteración del bucle.

• Se repite el bucle mientras la condición del ciclo, al final del bloque de sentencias, se mantenga en falso.

• Cuando la condición evalúa a verdadero se sale del bucle.

Page 112: FundProg_ MV1_ V3_(corregido19-09-07)

112© Copyright IBM Corp. 2007

Estructura Repetitiva: Repetir-Hasta…1

• Funcionamiento:

– Se repite el bucle hasta que la condición sea verdadera.

– El bucle se repite y ejecuta mientras la condición sea falsa.

– La condición se evalúa siempre al final del bucle. – Si es falsa volvemos a ejecutar las acciones.– Si es verdad se sale del bucle.– Dado que la condición se evalúa al final, se habrá

pasado al menos una vez por el bucle. – Cuando un bucle se tenga que ejecutar como mínimo

una vez se puede usar esta estructura.

Page 113: FundProg_ MV1_ V3_(corregido19-09-07)

113© Copyright IBM Corp. 2007

Estructura Repetitiva: Repetir-Hasta…2

Repetir <acciones> Hasta <condición>

PSEUDOCÓDIGODIAGRAMAS N-SFLUJOGRAMA

condición

Acciones

falso

verdadero

<Acciones>

Repetir <con> hasta

Page 114: FundProg_ MV1_ V3_(corregido19-09-07)

114© Copyright IBM Corp. 2007

Estructura Repetitiva: Repetir-Hasta…3

algoritmo suma entero n, cont, sumainicio cont = 0suma = 0repetir leer n suma = suma + n cont = cont + 1Hasta cont = 10mostrar “La suma es: ” sumafincont = 10

suma = suma + n cont = cont + 1

no si

inicio

suma=0cont = 0

Leer n

Mostrar suma

fin

Ejemplo: Programa para sumar 10 números que se leen por terminal

Page 115: FundProg_ MV1_ V3_(corregido19-09-07)

115© Copyright IBM Corp. 2007

Estructura Repetitiva: Desde

• La estructura Desde es una estructura de ciclo que se utiliza cuando se sabe el número 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 cuál va a ser su valor final.

• En cada iteración del bucle la variable índice se incrementa o decrementa en un valor constante y de manera automática.

Page 116: FundProg_ MV1_ V3_(corregido19-09-07)

116© Copyright IBM Corp. 2007

Estructura Repetitiva: Desde…1

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

PSEUDOCÓDIGODIAGRAMAS N-SFLUJOGRAMA

Desde v=vi hasta vf

<acciones>

v <>vf

acciones

v = vi

v= v+1

no

si

Page 117: FundProg_ MV1_ V3_(corregido19-09-07)

117© Copyright IBM Corp. 2007

Estructura Repetitiva: Desde…2

algoritmo suma entero n, v, vi, vf, sumainicio vi = 0vf = 10suma = 0desde v= vi hasta v=vf leer n suma = suma + nfin desdemostrar “La suma es: ” sumafin suma

Ejemplo: Programa para sumar 10 números que se leen por terminal

v <> vf

suma = suma+ n v = v + 1

inicio

suma=0vi = 0

vf = 10 v = vi

Leer n

Mostrar total

fin

no

si

Page 118: FundProg_ MV1_ V3_(corregido19-09-07)

118© Copyright IBM Corp. 2007

Comparación de las Estructuras Repetitivas

cont = 0suma = 0Repetir Leer num suma= suma + num cont= cont + 1Hasta (cont == 10)

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

Repetir hastaMientras hacer

vi = 1v = vivf = 10Desde v=vi hasta v=vf Leer num suma= suma + numFin desde

Desde hasta

Problema: Sumar 10 números leidos del terminal

Page 119: FundProg_ MV1_ V3_(corregido19-09-07)

119© 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 evaluación de una condición puede llevar a la evaluación de otra condición.

• No existen limitaciones formales en cuanto al número de sentencias y estructuras anidadas que se pueden colocar en un mismo bloque de código, depende del lenguaje de programación que se esté usando

Page 120: FundProg_ MV1_ V3_(corregido19-09-07)

120© Copyright IBM Corp. 2007

• 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 sifin si

Estructuras Anidadas - Anidación de Condicionales

Page 121: FundProg_ MV1_ V3_(corregido19-09-07)

121© Copyright IBM Corp. 2007

Bucles Anidados

• Al anidar bucles hay que tener en cuenta que el bucle interno funciona como una sentencia más en el bloque del bucle externo.

• Por cada iteración 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.

Page 122: FundProg_ MV1_ V3_(corregido19-09-07)

122© 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 {instrucción desde interno}Fin desde {instrucción desde externo}

Page 123: FundProg_ MV1_ V3_(corregido19-09-07)

123© Copyright IBM Corp. 2007

Bucles Anidados: Ejemplo…1

Tabla de multiplicar del 2Inicio

var i , j, producto: enterosi = 2desde j = 1 hasta 10

producto = i * j mostrar i, “por”, j , “=“, producto

fin desdeFin

Tablas de multiplicar

Iniciovar i , j, producto: enterosdesde i=1 hasta 9

mostrar “tabla del” i desde j = 1 hasta 10

producto = i * j mostrar i, “por”, j , “=“, productofin desde

fin desdefin

Page 124: FundProg_ MV1_ V3_(corregido19-09-07)

124© Copyright IBM Corp. 2007

Ejercicio 1

• Desarrollar un algoritmo para determinar y mostrar los múltiplos de 5 comprendidos entre 1 y 100.

• Use las estructuras:

• Mientras hacer• Repetir hasta • Desde

Page 125: FundProg_ MV1_ V3_(corregido19-09-07)

125© Copyright IBM Corp. 2007

Ejercicio 2

• Leer 100 números y determinar la media de los números positivos y la media de los números negativos.

• El cero no se considera ni negativo ni positivo.

• Use las estructuras:• Mientras hacer• Repetir hasta • Desde

Page 126: FundProg_ MV1_ V3_(corregido19-09-07)

126© Copyright IBM Corp. 2007

Ejercicio 2: Solución

Leer 100 números y determinar la media de los números positivos y la media de los números negativos. El cero no se considera ni negativo ni positivo

iniciovar np, nn, sp, sn, mediapos, medianeg, numero : enterosnp = 0 , nn = 0, sp = 0 , sn = 0 desde i = 1 hasta 100

leer numerosi numero > 0

entonces np = np + 1sp = sp + numero

sino si numero < o

entonces nn = nn + 1 sn = sn + numero fin si fin si fin desdemediapos = sp / npmedianeg = sn / nnmostrar “media de los numeros positivos”, mediaposmostrar “media de los numeros negativos”, medianegfin

Page 127: FundProg_ MV1_ V3_(corregido19-09-07)

127© Copyright IBM Corp. 2007

Ejercicio 3

• Dado un número determinar la suma de sus dígitos.

• Ejemplo:

Número = 6542

Suma_digitos = 6 + 5 + 4 + 2 = 17

Page 128: FundProg_ MV1_ V3_(corregido19-09-07)

128© Copyright IBM Corp. 2007

Ejercicio 3: Solución

Dado un número entero determinar la suma de sus dígitos.

algoritmo digitosiniciovar n, suma, residuo : enteromostrar “Ingrese un número entero: ”leer nsuma = 0mientras n <> 0 hacer

residuo = n mod 10suma = suma + residuon = n div 10

fin mientrasmostrar “La suma es: ” sumafin digitos

Page 129: FundProg_ MV1_ V3_(corregido19-09-07)

129© 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 número exacto de veces que

ejecuta una acción o proceso. – El control de datos para no permitir datos

erróneos.

Page 130: FundProg_ MV1_ V3_(corregido19-09-07)

130© Copyright IBM Corp. 2007

Control de Entrada: Uso de Centinela

• Un centinela es un método 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.

Page 131: FundProg_ MV1_ V3_(corregido19-09-07)

131© Copyright IBM Corp. 2007

Control de Entrada Uso de Centinela: Ejemplos

• Ejemplo 1centinela = 9Leer opcionmientras (opcion <> centinela) hacer <acciones> leer opcionfin mientras

• Ejemplo 2 : Leer y sumar las notas de los estudiantes y terminar cuando se lea un valor negativo.

suma = 0Leer notamientras (nota >= 0) hacer suma = suma + nota Leer notaFin mientras

Page 132: FundProg_ MV1_ V3_(corregido19-09-07)

132© 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 común 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.

Page 133: FundProg_ MV1_ V3_(corregido19-09-07)

133© Copyright IBM Corp. 2007

Control de Entrada en Archivos Secuenciales...1

Ejemplo:

archivo mi_archivoabrir_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 mientrasregresar al ciclo hasta que sea fin de archivo.

Page 134: FundProg_ MV1_ V3_(corregido19-09-07)

134© Copyright IBM Corp. 2007

Se Conoce la Cantidad de Datos de Entrada

• Cuando se conoce la cantidad de datos de entrada la mejor opción para realizar el control de entrada es utilizar un ciclo Desde...Hasta.

• Normalmente, el número 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 efectúa la operación hasta que se cumpla el número de veces deseado.

Page 135: FundProg_ MV1_ V3_(corregido19-09-07)

135© Copyright IBM Corp. 2007

• Ejemplo:

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

Se Conoce la Cantidad de Datos de Entrada

Page 136: FundProg_ MV1_ V3_(corregido19-09-07)

136© Copyright IBM Corp. 2007

Control de Entrada: Evitar Datos Erróneos

• El control de datos de entrada para evitar el ingreso de datos erróneos, se usa cuando se quiere forzar al usuario a que introduzca datos correctos.

• Ejemplo: un valor numérico dentro de un rango determinado.

• En estos casos se recomienda usar un ciclo Repetir...Hasta.

Page 137: FundProg_ MV1_ V3_(corregido19-09-07)

137© Copyright IBM Corp. 2007

Control de Entrada: Evitar Datos Erróneos…1

• Ejemplo:

var opcion : enteroopcion = 0repetir 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 opcionhasta (opcion >= 1) y (opcion <= 4)

Page 138: FundProg_ MV1_ V3_(corregido19-09-07)

138© Copyright IBM Corp. 2007

Resumen

Ahora que ud. ha completado esta unidad, debe ser capaz de:

• Conocer las técnicas de programación estructurada.• Trabajar con las estructuras secuenciales.• Trabajar con las estructuras selectivas.• Trabajar con las estructuras repetitivas.• Conocer la anidación de bucles y condicionales.• Realizar el control de datos de entrada.

Page 139: FundProg_ MV1_ V3_(corregido19-09-07)

139© Copyright IBM Corp. 2007

Unidad 4

Procedimientos y Funciones

Page 140: FundProg_ MV1_ V3_(corregido19-09-07)

140© Copyright IBM Corp. 2007

Objetivos de Aprendizaje

Al finalizar esta unidad ud. debería ser capaz de:

• Definir qué son las funciones, sus características y sintaxis.

• Definir los procedimientos, sus características y sintaxis.

• Explicar el ámbito de las variables.• Explicar la comunicación entre subprogramas.• Definir qué es la recursividad.

Page 141: FundProg_ MV1_ V3_(corregido19-09-07)

141© Copyright IBM Corp. 2007

Introducción

• La programación modular es una técnica de la programación que se apoya en el diseño descendente y en la filosofía de “divide y vencerás”.

• Se trata de dividir el problema en problemas más simples o más pequeños.

• Cada subproblema se implementa en un módulo o subrprograma independiente.

• Cada subprograma debe cumplir cabalmente una tarea especifica.

Page 142: FundProg_ MV1_ V3_(corregido19-09-07)

142© Copyright IBM Corp. 2007

Ejemplo de Programación Modular

Cálculo de Impuesto

Calcular Retención después de Impuesto

Calcular ImpuestoCalcular Retención antes de Impuesto

Calcular Ingreso

Calcular Impuesto sobre la Renta

Calcular Impuesto Activos

Page 143: FundProg_ MV1_ V3_(corregido19-09-07)

143© Copyright IBM Corp. 2007

Ventajas de la Programación Modular

• Ventajas de la Programación Modular:– Simplifica el diseño.– Disminuye la complejidad de los algoritmos.– Disminuye el tamaño total del programa.– Ahorra en tiempo de programación porque

promueve la reusabilidad del código. – Favorece el trabajo en equipo. – Facilita la depuración y prueba.– Facilita el mantenimiento.– Permite la estructuración de librerías específicas.

Page 144: FundProg_ MV1_ V3_(corregido19-09-07)

144© Copyright IBM Corp. 2007

Correspondencia entre Problema y Programa

• El problema principal se soluciona con el correspondiente algoritmo principal conocido como controlador.

• La solución de los subproblemas mediante subprogramas o subalgoritmos conocidos como funciones o procedimientos.

ProblemaPrincipal

SubProblema1

SubProblema2

SubProblema3

ProgramaPrincipal

SubPrograma2

SubPrograma3

SubPrograma1

Page 145: FundProg_ MV1_ V3_(corregido19-09-07)

145© Copyright IBM Corp. 2007

Subprogramas

• Un subprograma, módulo o subalgoritmo puede realizar las mismas acciones que un programa.– Aceptar datos que se pasan al hacer la llamada.– Realizar cálculos o acciones, definir variables y

llamar a otros subprogramas. – Devolver o no resultados.

• El programa utiliza el subprograma para un propósito específico.

• El subprograma recibe datos desde el programa y le devuelve resultados.

• El programa invoca al subprograma, éste ejecuta la tarea y a continuación devuelve el control al programa.

Page 146: FundProg_ MV1_ V3_(corregido19-09-07)

146© Copyright IBM Corp. 2007

Programa con Llamadas Subprogramas

Programa

Subalgoritmos

Subprograma 1

Subprograma 2

Subprograma 1.1

Algoritmo

Page 147: FundProg_ MV1_ V3_(corregido19-09-07)

147© Copyright IBM Corp. 2007

Tipos de Subprogramas

• Funciones. • Procedimientos.

Page 148: FundProg_ MV1_ V3_(corregido19-09-07)

148© Copyright IBM Corp. 2007

Funciones

• Una función es, desde el punto de vista matemático, una operación que toma uno o varios operandos y devuelve un resultado.

• Una función, desde el punto de vista algorítmico, es un subprograma que toma uno o varios parámetros como entrada y devuelve un único resultado.

• Este resultado está asociado al nombre de la función, por esto, al invocar una función su valor de retorno se le asigna a una variable.

Page 149: FundProg_ MV1_ V3_(corregido19-09-07)

149© Copyright IBM Corp. 2007

Clasificación de las Funciones

• Hay dos tipos de funciones:– Internas o Incorporadas: son funciones

proporcionadas por cualquier lenguaje de programación de alto nivel, y se clasifican en aritméticas, estadísticas, manejo de caracteres, etc.

– Externas o del usuario: son funciones que define

el programador con el propósito de ejecutar alguna tarea específica. Por lo general, se usan cuando se trata de hacer alguna tarea que será requerida en varias ocasiones por el algoritmo principal o subalgoritmos.

Page 150: FundProg_ MV1_ V3_(corregido19-09-07)

150© Copyright IBM Corp. 2007

Declaración de una Función

• Toda función presenta la siguiente estructura:– Una cabecera con:

• Identificador o Nombre.• Lista de parámetros (opcional).• El tipo de dato de retorno de la función.

– El cuerpo de la función.• La sintaxis para la declaración de una función

depende del lenguaje de programación utilizado.

Page 151: FundProg_ MV1_ V3_(corregido19-09-07)

151© Copyright IBM Corp. 2007

Sintaxis de la Declaración de la Función

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 función. Un nombre de identificador válido.

•par1, parn: Lista de parámetros formales o argumentos.

Page 152: FundProg_ MV1_ V3_(corregido19-09-07)

152© Copyright IBM Corp. 2007

Sintaxis de la Declaración de la Función...1

• Los parámetros dentro del cuerpo de la función se usan como si fueran variables locales.

• Cada parámetro formal o argumento debe tener su nombre y tipo de dato al momento de declarar la función.

• Los parámetros que se utilizan cuando la función es invocada, se denominan parámetros actuales o reales.

• En las variables locales se declaran las variables que se van a utilizar dentro de la función.

• Por definición una función siempre debe devolver algún valor, es decir debe tener la instrucción retorno<valor>.

• La sentencia retorno<valor> pondrá fin a la ejecución de la función y devolverá un valor que tiene que ser del mismo tipo que el tipo declarado de la función.

Page 153: FundProg_ MV1_ V3_(corregido19-09-07)

153© Copyright IBM Corp. 2007

Invocar una Función

• Para llamar o invocar a una función se coloca el nombre de la función y entre paréntesis se añaden los parámetros reales que necesita la función.

Nombre_funcion(lista_parámetros_actuales)• La llamada se realiza en una sentencia de

asignación, una expresión o una sentencia de salida.• Los parámetros reales pueden ser variables,

expresiones e incluso constantes. • Hay una correspondencia posicional entre los

parámetros reales y los formales.• Cada parámetro real debe pertenecer al mismo tipo

de dato de su correspondiente parámetro formal.

Page 154: FundProg_ MV1_ V3_(corregido19-09-07)

154© Copyright IBM Corp. 2007

Ejemplo de Invocación de una Función

Definición de la Función1. funcion sumarEnteros(num1: entero, num2:entero):

entero2. var3. resultado: entero4. Inicio5. resultado = num1 + num26. retornar resultado 7. fin sumarEnteros

La función puede ser llamada desde el programa principal o desde cualquier otro subprograma mediante sentencias:

1. var2. resultado : Entero3. numero : Entero4. inicio5. resultado = sumarEnteros(8, 9)6. mostrar “8 + 9 es: ” resultado7. numero = 12;8. resultado = sumarEnteros(numero, 5)9. mostrar “12 + 5 es: ” resultado10. mostrar “2 + 2 es: ” sumarEnteros(2, 2)11. fin

Page 155: FundProg_ MV1_ V3_(corregido19-09-07)

155© Copyright IBM Corp. 2007

Pasos para Hacer la Llamada a una Función

Una llamada a la función implica los siguientes pasos:• Cuando se efectúa la llamada se cede el control a la

función.• Se asigna el valor de cada parámetro real a cada

parámetro formal correspondiente.• Si no hay coincidencia entre los tipos o el número de los

parámetros formales con los reales, se produce un error.

• Si la llamada a la función es válida, se ejecutan las acciones de la función hasta que se encuentre una instrucción del tipo retorno <valor>.

• Pueden existir varias sentencias de retorno en la misma función, normalmente dependen de sentencias condicionales para su ejecución.

Page 156: FundProg_ MV1_ V3_(corregido19-09-07)

156© Copyright IBM Corp. 2007

Ejemplo de Llamada a una Función

1. funcion mitad (n: entero): real2. var med: real3. inicio4. med = n / 25. retorno med6. fin mitad

1. Algoritmo calcular_mitad2. var num: entero3. inicio4. escribir “Introduzca un número entero para hallar su mitad: ”5. leer num6. escribir “La mitad de “ num ” es “ mitad(num)7. fin

Page 157: FundProg_ MV1_ V3_(corregido19-09-07)

157© Copyright IBM Corp. 2007

Función: Ejercicio

• Escribir un algoritmo que determine la mayor de tres cantidades enteras, utilizando una función que determina la mayor de dos cantidades enteras.

Page 158: FundProg_ MV1_ V3_(corregido19-09-07)

158© Copyright IBM Corp. 2007

Función: Ejercicio…1

funcion maximo ( x:entero, y:entero): enteroinicioentero maxsi (x > y)

entonces max = xsino max = y

fin siretorno max

fin maximo

algoritmo calcular_max_tres_enterosvarentero a,b,c,diniciomostrar “introduzca tres valores enteros”Leer a,b,cd = maximo(a,b)d = maximo(c,d)mostrar “El maximo es:”, dfin

Page 159: FundProg_ MV1_ V3_(corregido19-09-07)

159© Copyright IBM Corp. 2007

Función: Ejercicio…2

• Escribir una función que calcule el valor de xn

Siendo: x un valor real

n un valor entero

Page 160: FundProg_ MV1_ V3_(corregido19-09-07)

160© Copyright IBM Corp. 2007

Función: Ejercicio…3

funcion potencia(entero: n, real: x): realvar real y entero iiniciosi x = 0 entonces y = 0 retornar y

sino y = 1 desde i = 1 hasta i = abs(n) hacer

y = y*xfin desdesi n > 0

entonces retornar y sino retornar (y = 1 / y)

fin sifin sifin funcion

Page 161: FundProg_ MV1_ V3_(corregido19-09-07)

161© Copyright IBM Corp. 2007

Procedimientos

• Un procedimiento es un subprograma o un subalgoritmo que realiza una determinada tarea.

• No tiene ningún valor asociado a su nombre como ocurre en las funciones.

• Si devuelve información, lo hace a través de parámetros.

• Al invocar a un procedimiento:– Se le cede el control al procedimento.– Se ejecuta el procedimento.– Cuando termina se devuelve el control a la

instrucción siguiente al punto donde se efectuó la llamada al procedimiento.

Page 162: FundProg_ MV1_ V3_(corregido19-09-07)

162© Copyright IBM Corp. 2007

Diferencias entre Funciones y Procedimientos

• Las funciones están diseñadas para devolver un único valor.

• Un procedimiento puede devolver ningún valor o varios valores por medio de sus argumentos o parámetros.

• Ninguno de los resultados devueltos por el procedimiento se asocia a su nombre como ocurre con la función.

• La llamada a una función puede formar parte de una expresión.

• La llamada a un procedimiento es una instrucción aislada que por sí sola no puede formar parte de una expresión.

Page 163: FundProg_ MV1_ V3_(corregido19-09-07)

163© Copyright IBM Corp. 2007

Sintaxis de un Procedimiento

• La sintaxis para declarar un procedimiento es similar a la de la definición de una función, excepto que no se coloca un tipo de retorno asociado.

• La cabecera está formada por:– El nombre del procedimiento, que debe ser un

identificador válido y significativo. – Entre paréntesis los parámetros 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>.

Page 164: FundProg_ MV1_ V3_(corregido19-09-07)

164© Copyright IBM Corp. 2007

procedimiento <nombre> (par1:tipo1,…,parn:tipon)

var <variables locales del procedimiento>

inicio <acciones> fin

nombre: nombre asociado al procedimiento.par1,…,parn: Lista de parámetros formales o argumentos

Sintaxis de un Procedimiento…1

Page 165: FundProg_ MV1_ V3_(corregido19-09-07)

165© 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 parámetros reales entre paréntesis, como una sentencia única.

• Tiene que existir el mismo número de parámetros formales y parámetros reales.

• El tipo de dato de cada parámetro real, tiene que coincidir con el del parámetro 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 parámetros reales)

Page 166: FundProg_ MV1_ V3_(corregido19-09-07)

166© Copyright IBM Corp. 2007

Llamada a un Procedimiento

1. procedimiento mitad (num:entero, ent-sal med:real)2. inicio3. med = num / 24. fin mitad

1. Algoritmo calcular_mitad2. var3. n: entero4. mit: real5. inicio6. escribir “Introduce un número”7. leer n8. mitad (n, mit)9. escribir “La mitad es” mit10. fin

Page 167: FundProg_ MV1_ V3_(corregido19-09-07)

167© 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 función, entre otros, se refiere a la parte del programa que lo conoce y por tanto lo puede usar.

Page 168: FundProg_ MV1_ V3_(corregido19-09-07)

168© Copyright IBM Corp. 2007

Ámbito Global y Local

• Existen dos tipos de ámbito para los identificadores:

– Ámbito Global.– Ámbito Local.

Page 169: FundProg_ MV1_ V3_(corregido19-09-07)

169© 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 código.

• Al ser declarados de esta forma los identificadores globales estarán disponibles a lo largo del programa.

• Se pueden usar en cualquier parte del programa, de allí su nombre de globales.

Page 170: FundProg_ MV1_ V3_(corregido19-09-07)

170© Copyright IBM Corp. 2007

Variables de Ámbito Local

• Las Variables de Ámbito Local se refieren a los identificadores declarados dentro de un bloque de código diferente al programa principal, como por ejemplo una subrutina o procedimiento.

• Como regla general todo identificador sólo es visible y accesible:– Dentro del bloque de código 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 código no son visibles ni accesibles desde bloques de código externos.

Page 171: FundProg_ MV1_ V3_(corregido19-09-07)

171© Copyright IBM Corp. 2007

Variable Local

• Una variable local es aquella que está declarada y definida dentro de un subprograma o subbloque de código.

• Su ámbito coincidirá con el ámbito del subprograma en la que está definida.

• La variable no tiene ningún significado, no se conoce y no se puede acceder a ella, desde fuera del subprograma o bloque de código donde se declara.

• Tiene una posición 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 definición de variables del mismo.

• Los parámetros 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 harán a la variable local y no a la variable global.

Page 172: FundProg_ MV1_ V3_(corregido19-09-07)

172© Copyright IBM Corp. 2007

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.

Page 173: FundProg_ MV1_ V3_(corregido19-09-07)

173© 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 anidación de procedimientos no se permite en todos los lenguajes.

• Plantean más 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 más restringido.

Page 174: FundProg_ MV1_ V3_(corregido19-09-07)

174© Copyright IBM Corp. 2007

Ámbito de Variables en Procedimientos Anidados…1

A

B

C

D

E

F

G

A A, B, C, D, E, F, G

B B, C

C C

D D, E, F, G

E E, F, G

F F

G G

Variables definidas en

procedimiento

Accesibles desde

procedimientos

Page 175: FundProg_ MV1_ V3_(corregido19-09-07)

175© Copyright IBM Corp. 2007

P2P2 d

P2P2 c

P1.1P1.1 f

P1.1P1.1 e

P1.1P1.1 d

P1P1 d

P1, P1.1P1 c

P1, P1.1P1 a

PP, P1, P1.1, P2PPb

PP, P2PPa

ÁMBITO SUBPROGRAMAAMBITOVARIABLE

Ámbito de Variables en Procedimientos Anidados…2

P1var a, c, d

P1.1var d, e, f

P2var c, d

PPvar a, b

Page 176: FundProg_ MV1_ V3_(corregido19-09-07)

176© Copyright IBM Corp. 2007

Comunicación entre Subprogramas

• La comunicación entre subprogramas se lleva a cabo mediante el paso de parámetros.

• Cuando se invoca a una función o procedimiento se le pasa a través de los parámetros la información que necesita.

• En el caso de un procedimiento, también se devuelven los resultados a través de los parámetros.

• Al hacer la llamada se pasa la información a través de los parámetros reales.

• La correspondencia entre parámetros formales y reales se puede realizar de dos formas:– Por correspondencia posicional.– Por correspondencia de nombre implícito.

Page 177: FundProg_ MV1_ V3_(corregido19-09-07)

177© Copyright IBM Corp. 2007

Correspondencia Posicional

• En la correspondencia posicional se emparejan o hacen corresponder los parámetros formales y reales según la posición que ocupan, es decir, el orden de declaración de izquierda a derecha.

• Tiene que existir el mismo número de parámetros formales y reales.

• El tipo de parámetro formal debe ser el mismo de su correspondiente parámetro real.

• Ejemplo:Declaración del procedimiento:

Proc(x: entero, y: real)Una llamada válida es:

Proc(8, a)

Page 178: FundProg_ MV1_ V3_(corregido19-09-07)

178© Copyright IBM Corp. 2007

Correspondencia por Nombre Implícito

• En la correspondencia por nombre implícito, en la llamada al subprograma se coloca explícitamente a qué parámetro formal corresponde cada parámetro real.

• En la llamada se coloca el nombre del parámetro formal seguido de dos puntos (:) y el nombre del parámetro real que se pasa.

• Ejemplo: Declaración del procedimiento:

Proc(x: entero, y: real)Llamadas válidas:

Proc(x: 8, y: a)Proc(y: a, x: 8)

Page 179: FundProg_ MV1_ V3_(corregido19-09-07)

179© Copyright IBM Corp. 2007

Tipos de Parámetros en los Procedimientos

• Existen tres tipos básicos:

– De entrada.– De salida.– De entrada-salida.

Page 180: FundProg_ MV1_ V3_(corregido19-09-07)

180© Copyright IBM Corp. 2007

Parámetro de Entrada del Procemiento

• Los parámetros de entrada son parámetros que sólo aportan el valor que tienen como entrada al subprograma.

• En las funciones todos sus parámetros son de entrada.

• Estos parámetros sólo pueden ser leídos, pero no modificados.

• Si se modifica el parámetro dentro del subprograma, esa modificación no va a tener efecto fuera del subprograma.

Page 181: FundProg_ MV1_ V3_(corregido19-09-07)

181© Copyright IBM Corp. 2007

Parámetro de Salida del Procemiento

• Los parámetros de salida se usan sólo y exclusivamente para devolver resultados a través de ellos.

• Su valor al hacer la llamada al subprograma no es relevante.

• El valor que tenga el parámetro va a tener sentido cuando termine la ejecución del subprograma.

• Un parámetro de este tipo teóricamente nunca se puede leer, sólo se va actualizar o modificar.

Page 182: FundProg_ MV1_ V3_(corregido19-09-07)

182© Copyright IBM Corp. 2007

Parámetro de Entrada-Salida del Procemiento

• En los parámetro de entrada-salida del procedimiento, el valor del parámetro tiene importancia tanto a la entrada como a la salida del subprograma.

• Aporta información cuando se llama al subprograma y devuelve, a través de él, los resultados cuando se termina la ejecución del subprograma.

Page 183: FundProg_ MV1_ V3_(corregido19-09-07)

183© Copyright IBM Corp. 2007

Métodos de Paso de Parámetros

• Los métodos más usados para el pase de parámetros en los procedimientos y funciones son:

– Paso de parámetros por copia o valor.– Paso de parámetros por referencia.

Page 184: FundProg_ MV1_ V3_(corregido19-09-07)

184© Copyright IBM Corp. 2007

Paso de Parámetros por Copia o Valor

• Las características del pase de parámetros por valor son:– El subprograma invocado no puede modificar el valor

de los parámetros reales. – Al realizar la llamada al subprograma, se copia el valor

del argumento en el parámetro formal de la función. – El parámetro formal del subprograma tiene asociado

una dirección de memoria diferente a la dirección de memoria del parámetro real.

– Se puede cambiar el valor del parámetro dentro del subprograma y no afectará el argumento transferido.

– El parámetro real puede ser: una constante, expresión o variable.

Page 185: FundProg_ MV1_ V3_(corregido19-09-07)

185© Copyright IBM Corp. 2007

Ejemplo:

A = 5

B = 2

Procedimiento1( X, Y, Z:entero)

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

En el paso por valor:

• Sólo importa el valor del argumento.

• No se hace diferencia si un argumento es variable, constante o expresión.

Paso de Parámetros por Copia o Valor: Ejemplo

5 20 14

Definición

LLamada

Page 186: FundProg_ MV1_ V3_(corregido19-09-07)

186© Copyright IBM Corp. 2007

Paso de Parámetros por Copia o Valor: Ejemplo…1

Ejemplo:

1. procedimiento Duplicar(x : entero)2. inicio3. x = x * 24. escribir x5. fin duplicar

1. Algoritmo CopiaValor2. var a : entero 3. inicio 4. a = 35. duplicar(a)6. escribir a7. fin

Page 187: FundProg_ MV1_ V3_(corregido19-09-07)

187© Copyright IBM Corp. 2007

Ejemplo de Paso de Parámetros por Valor: Resultado…1

Ejemplo:

1. procedimiento duplicar(x : entero)2. inicio3. x = x * 24. escribir x5. fin duplicar

1. Algoritmo CopiaValor2. var a : entero 3. inicio 4. a = 35. duplicar(a)6. escribir a7. fin

Resultado: x = 6 a = 3

Page 188: FundProg_ MV1_ V3_(corregido19-09-07)

188© Copyright IBM Corp. 2007

Paso de Parámetros por Referencia

• La características del pase de parámetros por referencia son:– El subprograma invocado puede modificar el valor de

los parámetros reales. – Al invocar al subprograma, no se copia el valor del

argumento en el parámetro de la función, sino que se almacena la dirección de memoria del parámetro real asociado.

– El parámetro formal apunta a la dirección de memoria del parámetro real correspondiente.

– Cualquier modificación que se efectúe sobre el parámetro formal dentro del subprograma, afectará directamente al parámetro real asociado.

– El parámetro real no puede ser una constante ni una expresión, sólo puede ser una variable.

Page 189: FundProg_ MV1_ V3_(corregido19-09-07)

189© Copyright IBM Corp. 2007

Paso de Parámetros por Referencia: Ejemplo

Ejemplo:

A = 5

B = 2

C = 14

Procedimiento1( X, Y, Z:entero)

Procedimiento1 (A, B, C)

En el paso por referencia:• En la llamada al procedimiento se pasa la dirección del parámetro

real o actual. • Una referencia al parámetro real se trata como una referencia a la

posición de memoria cuya dirección se ha pasado.• El área de almacenamiento o posiciones de memoria se utiliza para

pasar información de entrada y/o salida, en ambas direcciones.

Definición

LLamada

Posiciones de Memoria145 2

Page 190: FundProg_ MV1_ V3_(corregido19-09-07)

190© Copyright IBM Corp. 2007

Paso de Parámetros por Referencia: Ejemplo…1

Ejemplo:

1. Procedimiento duplicar(ent-sal x : entero)2. inicio3. x = x * 24. escribir ‘x=‘ x5. iin duplicar

1. Algoritmo Referencia2. var a3. inicio4. a = 35. duplicar(a)6. escribir ‘a =‘ a7. fin

Resultado: x = 6 a = 6

Page 191: FundProg_ MV1_ V3_(corregido19-09-07)

191© Copyright IBM Corp. 2007

Paso de Parámetros: Resumen

Paso por Valor Paso por Referencia

Programa Principal

Parámetro Real(Variable, constante o

Expresión)

Subprograma

…..

…..

Parámetro Formal

Evaluación Programa Principal

Subprograma

Posición Memoria

Parámetro Real(debe ser una variable)

Parámetro Formal

Page 192: FundProg_ MV1_ V3_(corregido19-09-07)

192© Copyright IBM Corp. 2007

Recursividad

• La recursividad o recursión, es una herramienta muy útil en la resolución de problemas porque permite resolver problemas complicados, dividiéndolos en problemas más sencillos.

• Un subprograma recursivo es un subprograma que se llama a sí mismo durante su ejecución. Es decir, dentro del código del subprograma se tiene una llamada con el nombre del subprograma.

• La llamada recursiva no puede continuar indefinidamente porque el programa no terminaría nunca. procedimiento infinito() inicio

infinito() fin

Page 193: FundProg_ MV1_ V3_(corregido19-09-07)

193© Copyright IBM Corp. 2007

Recursividad...1

• Todo programa recursivo debe tener alguna condición que ponga fin a la recursividad, un punto en el que el subprograma deje de llamarse a sí mismo cuando se cumpla la condición.

• El subprograma tiene que funcionar para algunos parámetros sin necesidad de auto-llamadas.

• Mediante sucesivas llamadas se va acercando a esos parámetros iniciales o condición de parada.

• Los parámetros iniciales tienen generalmente soluciones elementales calculables de manera sencilla que luego utilizan para armar la solución completa.

• El conjunto de parámetros iniciales y sus soluciones son los llamados casos base.

Page 194: FundProg_ MV1_ V3_(corregido19-09-07)

194© Copyright IBM Corp. 2007

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 parámetros que cambian en cada llamada.

– Una condición de terminación o salida, que es la condición que no produce ninguna autollamada.

Page 195: FundProg_ MV1_ V3_(corregido19-09-07)

195© Copyright IBM Corp. 2007

Recursividad: Ejemplo 1

• Ejemplo: función factorial• Calcula el factorial de un número entero no negativo,

partiendo de las siguientes definiciones : – factorial (1) = 1– factorial (x) = x*factorial(x-1), para x>1

• Ejemplo de cálculo del factorial, utilizando la definición:

4! = 4 * 3!

= 4 * 3 * 2!

= 4 * 3 * 2 * 1!

= 4 * 3 * 2 * 1 * 0!

= 4 * 3 * 2 * 1 * 1 = 24

Page 196: FundProg_ MV1_ V3_(corregido19-09-07)

196© Copyright IBM Corp. 2007

Recursividad: Ejemplo 1…1

Función recursiva que calcula el factorial:

factorial (1) = 1

factorial (x) = x*factorial(x-1), para x>1

Algoritmo Recursivo

funcion factorial(x:integer):integerinicio si x = x entonces retorna 1 sino retorna (x * factorial(x-1)) fin sifin

Page 197: FundProg_ MV1_ V3_(corregido19-09-07)

197© Copyright IBM Corp. 2007

Recursividad: Ejemplo 1…2

1. x = 4 Llamada a factorial(4); x = 1 : noRetorna 4 * factorial (3)

2. x = 3 Llamada a factorial(3); x = 1 : noRetorna 3 * factorial (2)

3. x = 2 Llamada a factorial(2); x = 1 : noRetorna 2 * factorial (1).

4. x = 1 Llamada a factorial(1); numero = 1 : siRetorna 1 con éste valor se regresa a completar la invocación:

5. Con factorial(1) = 1, se regresa a completar: factorial(2) := 2 * 1

6. Con factorial(2) = 2, se regresa a completar : factorial(3) := 3 * 2

7. Con factorial(3) = 6, se regresa a completar : factorial(4) := 4 * 6 por lo que factorial(4) = 24

éste será el valor que la función factorial devolverá al programa que la haya invocado con un valor de parámetro igual a 4 .

Page 198: FundProg_ MV1_ V3_(corregido19-09-07)

198© Copyright IBM Corp. 2007

Para numero = 4, la función realiza los siguientes pasos :

Recursividad: Ejemplo 1…3

Factorial(4)=4*Factorial(3)retorno Factorial=24

Factorial(3)=3*Factorial(2)retorno

Factorial(2)=2*Factorial(1)retorno

Factorial=6

Factorial=2

Factorial=1

x=2

x=3

x=4

x=1

Factorial(1)=1retorno

funcion factorial(x:integer):integer

inicio

si (x > 1) entonces

retorna (x*factorial(x-1))

sino

retorna 1

fin si

fin

Page 199: FundProg_ MV1_ V3_(corregido19-09-07)

199© Copyright IBM Corp. 2007

Recursividad: Ejemplo 2

• Escribir una función recursiva que tome como entrada:

– un número – un exponente

y retorne la potencia del número.

• Se asume que el valor del exponente es un número positivo.

Page 200: FundProg_ MV1_ V3_(corregido19-09-07)

200© Copyright IBM Corp. 2007

Recursividad: Ejemplo 2…1

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.

Page 201: FundProg_ MV1_ V3_(corregido19-09-07)

201© Copyright IBM Corp. 2007

Recursividad: Ejemplo 2…2

8

Potencia(2,3)iniciosi 3=1 entonces Potencia=Basesino Potencia = 2*Potencia(2,2)fin 4

Potencia(2,2)iniciosi 2=1 entonces Potencia=Basesino Potencia = 2*Potencia(2,1)fin 2

Potencia(2,1)iniciosi 1=1 entonces

Potencia=Basefin

Page 202: FundProg_ MV1_ V3_(corregido19-09-07)

202© 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.

Page 203: FundProg_ MV1_ V3_(corregido19-09-07)

203© Copyright IBM Corp. 2007

Recursividad: Ejemplo 3…1

Procedimiento invertir_recursivo(longitud:entero)var car: charinicio

si (longitud <= 1) entonces

leer caracterescribir caracter

sino leer caracter invertir_recursivo(longitud-1)escribir caracter

fin sifin invertir_recursivo

Page 204: FundProg_ MV1_ V3_(corregido19-09-07)

204© Copyright IBM Corp. 2007

Una Función Recursiva e Itereativa: Ejemplo

Función Factorial Recursiva1. Funcion FactorialRecur(x : entero): entero2. Inicio3. Si (x > 1) entonces4. Retornar (x * FactorialRecur(x – 1))5. Sino6. Retornar 17. Fin FactorialRecur

Función Factorial Iterativa1. Funcion FactorialItera(x : entero): entero2. Var3. res : entero4. i : entero5. Inicio6. res = x7. Si (x > 1) entonces 8. Desde i = x - 1 hasta 19. res = res * i10. Fin Desde11. Sino12. res = 113. Retorno (res)14. Fin FactorialItera

Page 205: FundProg_ MV1_ V3_(corregido19-09-07)

205© Copyright IBM Corp. 2007

Recursión vs Iteración

• Las funciones y procedimientos recursivos se pueden utilizar cuando los datos del problema están 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 versión no recursiva.

• No usar la recursividad a menos que se tenga un medio para terminar las llamadas recursivas.

• Cada llamada recursiva requiere la asignación de espacio de memoria para todas las variables locales, parámetros por valor y la dirección de retorno. Por lo que cada llamada utiliza memoria, lo que representa una limitación.

Page 206: FundProg_ MV1_ V3_(corregido19-09-07)

206© Copyright IBM Corp. 2007

Resumen

Ahora que ud. ha completado esta unidad, debe ser capaz de:

• Definir qué son las funciones, sus características y sintaxis.

• Definir los procedimientos, sus características y sintaxis.

• Explicar el ámbito de las variables.• Explicar la comunicación entre subprogramas.• Definir qué es la recursividad.

Page 207: FundProg_ MV1_ V3_(corregido19-09-07)

207© Copyright IBM Corp. 2007

Unidad 5

Estructura de Datos Arreglo

Page 208: FundProg_ MV1_ V3_(corregido19-09-07)

208© Copyright IBM Corp. 2007

Objetivos de Aprendizaje

Al finalizar esta unidad ud. debería 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.

Page 209: FundProg_ MV1_ V3_(corregido19-09-07)

209© Copyright IBM Corp. 2007

Introducción

• Una de las representaciones de datos más utilizada en la programación 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 clasificación, ordenamiento y búsqueda.

• Los arreglos se clasifican en:– Unidimensionales – Vectores.– Multidimensionales - Matrices.

Page 210: FundProg_ MV1_ V3_(corregido19-09-07)

210© Copyright IBM Corp. 2007

Arreglos (Matriz o Vector)

• Un arreglo es un conjunto finito, consecutivo y organizado de elementos homogéneos.

• Un arreglo es:– Finito: tiene un número determinado de elementos. – Homogéneo: 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.

Page 211: FundProg_ MV1_ V3_(corregido19-09-07)

211© Copyright IBM Corp. 2007

Arreglo Unidimensional o Vector

Notas(n)........

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

• El tipo más simple de arreglo es el arreglo unidimensional o vector.

• Un arreglo unidimensional constituye una matriz de una sola dimensión.

• Ejemplo: un arreglo de notas de n elementos.

• El índice o subíndice de un elemento (1, 2, 3,..., n) designa su posición en la ordenación del vector.

Page 212: FundProg_ MV1_ V3_(corregido19-09-07)

212© Copyright IBM Corp. 2007

Arreglo Unidimensional o Vector…1

• Se puede acceder a cada elemento del arreglo de manera independiente a través de los índices. numero[12] = 20

• El índice es un valor que directa o indirectamente, referencia la posición del arreglo.

• Los índices tienen que ser de tipo de dato escalar y, normalmente, son números enteros.

• Para referenciar un elemento de un arreglo se usa el nombre del arreglo y entre corchetes [ ] el índice que determina la posición de ese elemento en el arreglo.

• El rango o longitud de un vector es la diferencia entre el índice de valor máximo y el índice de valor mínimo de ese arreglo, más uno.

• Los índices suelen enumerarse, dependiendo del lenguaje, a partir de 0 ó 1, pero pueden comenzar en cualquier otro valor.

Page 213: FundProg_ MV1_ V3_(corregido19-09-07)

213© 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 números denominado numero se representa gráficamente por 20 posiciones consecutivas de memoria.

memoria

numero[1]numero[1]

numero[2]

numero[3]

numero[20]

dirección x

dirección x + 1

dirección x + 2

dirección x + 19

Page 214: FundProg_ MV1_ V3_(corregido19-09-07)

214© Copyright IBM Corp. 2007

Declaración y Uso de un Arreglo

Declaración de un arreglo unidimensional:

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

Ejemplo:

1. sueldo: arreglo[8] de real2. var i: entero3. i = 24. sueldo[i]= 23.5

Page 215: FundProg_ MV1_ V3_(corregido19-09-07)

215© Copyright IBM Corp. 2007

Operaciones con Vectores

• Las operaciones que se pueden realizar con vectores en el proceso de resolución de problemas son:– Asignación.– Lectura/escritura.– Recorrido (Acceso Secuencial).– Actualización ( Añadir, Eliminar, Insertar).– Ordenamiento.– Búsqueda.

Page 216: FundProg_ MV1_ V3_(corregido19-09-07)

216© Copyright IBM Corp. 2007

Asignación de un Dato a una Posición del Arreglo

1211109876604321

ventas[5] = 60

• La operación de asignación consiste en asignar un valor dado a una posición del arreglo, dada por el índice.

La sintaxis es:

<nom_arreglo>[indice] = valor• Ejemplo:

Declaración del vector:

ventas: arreglo[12] de entero

Page 217: FundProg_ MV1_ V3_(corregido19-09-07)

217© Copyright IBM Corp. 2007

Lectura y Escritura de Datos usando Vector

• Consiste en usar una posición del arreglo definida por un índice, para operaciones de entrada y salida.

• La sintaxis de la operación 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 ” i2.Leer ventas[i]

2.Fin Desde3.Desde i = 1 Hasta 12

1.Escribir “Ventas del mes ” i ” = ” ventas [i]4.Fin Desde

Page 218: FundProg_ MV1_ V3_(corregido19-09-07)

218© 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 información.

• Se usa generalmentr un ciclo Desde para recorrer el vector.

• La sintaxis de la operación es: Desde indice = 1 Hasta Rango_Array <acciones con el arreglo> Fin Desde

• Ejemplo:1. Desde i = 1 Hasta 122. ventas[i] = ventas[i] + 10000003. Fin Desde

Page 219: FundProg_ MV1_ V3_(corregido19-09-07)

219© Copyright IBM Corp. 2007

Operaciones con Vectores: Ejemplo 1

• Diseñar 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.

Page 220: FundProg_ MV1_ V3_(corregido19-09-07)

220© Copyright IBM Corp. 2007

Operaciones con Vectores: Ejemplo 1…1

Algoritmo Notasvar

MAX = 100 {número máximo de estudiantes}notas: arreglo[1..MAX] de realcantidad, i:enterosuma, promedio:real

inicioescribir “Introducir cantidad de calificaciones”leer numerosi numero > MAX

entonces“no se puede procesar mas de” MAX “notas”sino

suma = 0escribir “Introducir las calificaciones”desde i = 1 hasta numero hacer

leer notas[i]suma = suma + notas[i]

fin desdepromedio = suma / numeroescribir “el promedio de las notas es:” promedioescribir “las notas mayores que el promedio son:” desde i = 1 hasta numero hacer

si notas[i] > promedioentonces escribir notas[i]

fin si fin desde fin sifin

Page 221: FundProg_ MV1_ V3_(corregido19-09-07)

221© Copyright IBM Corp. 2007

OMJFEC

OMJGFEC

Insertar un Elemento en una Posición del Arreglo

• Para insertar un elemento en una posición dada, hay que desplazar en una posición 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 tamaño del arreglo tendrá que ser al menos n + 1 para poder insertar el nuevo elemento.Ejemplo:

Elementos en el Arreglo:

Al insertar G en la cuarta posición:

Page 222: FundProg_ MV1_ V3_(corregido19-09-07)

222© Copyright IBM Corp. 2007

Algoritmo para Insertar un Elemento en un Vector

Problema:• Escribir un algoritmo para insertar un elemento en

una posición dada del vector.

Sea:– k la posición donde se va a insertar el nuevo

elemento. – n el número de elementos almacenados en el

vector.– Se asume un vector de tamaño de al menos n + 1.

1. Desde i= n Hasta k decremento 12. A[i + 1] = A[i]3. Fin Desde4. A[k] = valor

Page 223: FundProg_ MV1_ V3_(corregido19-09-07)

223© 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 tamaño del arreglo decrementado su valor en 1.

- Si el elemento a eliminar ocupa cualquier otra posición, se desplazan todos los elementos ubicados a la derecha del elemento a borrar, una posición hacia la izquierda para que el arreglo quede organizado.

• Ejemplo: Elementos en el Arreglo:

Al borrar J de la cuarta posición:

OMJFEC

OMFEC

Page 224: FundProg_ MV1_ V3_(corregido19-09-07)

224© Copyright IBM Corp. 2007

Eliminar un Elemento del Arreglo…1

• Algoritmo para eliminar un elemento de una posición dada del arreglo.

• Sea:– n el número de elementos almacenados. – k la posición del elemento a eliminar.– Se asume que el arreglo comienza en la posición 0

1. Desde i = k Hasta n - 1 2. A[i] = A[i+1] 3. Fin Desde

Page 225: FundProg_ MV1_ V3_(corregido19-09-07)

225© Copyright IBM Corp. 2007

Arreglos Unidimensionales: Ejemplo 2

• Diseñar una función que reciba dos vectores como parámetros de entrada, la longitud de los vectores y retorne:

– VERDADERO si los vectores son iguales.

– FALSO si los arreglos no son iguales.

Page 226: FundProg_ MV1_ V3_(corregido19-09-07)

226© Copyright IBM Corp. 2007

Arreglos Unidimensionales: Ejemplo 2…1

Funcion comparar(A[],B[]:arreglo de entero, n:entero): booleanovar

encontrado:booleanoi:entero

inicioi=1mientras (i <=n && A[i] == B[i])

i = i + 1 fin mientras

Si i > n entonces encontrado = verdadero

sino encontrado = falsofin siretorna (encontrado)

fin

Page 227: FundProg_ MV1_ V3_(corregido19-09-07)

227© Copyright IBM Corp. 2007

Arreglos Unidimensionales: Ejemplo 3

• Diseñar una función para determinar si un valor dado existe en un vector.

• Asuma que los valores en el vector no están ordenados.

• La función debe aceptar tres parámetros:– El nombre de un vector. – El valor que debe buscarse en ese vector.– El tamaño del vector.

• La función debe regresar:– El valor 1 si el valor se encuentra en el vector.– El valor 0 si la búsqueda es infructuosa.

Page 228: FundProg_ MV1_ V3_(corregido19-09-07)

228© Copyright IBM Corp. 2007

Arreglos Unidimensionales: Ejemplo 3…1

funcion buscar(A[]:arreglo de entero, n:entero, elemento:entero): booleanovar

encontrado:booleanoi:entero

inicioi=1mientras (i <=n && A[i] != elemento)

i = i + 1 fin mientrassi i > n entonces encontrado = falso

sino encontrado = verdaderofin siretorna (encontrado)

Fin buscar

Page 229: FundProg_ MV1_ V3_(corregido19-09-07)

229© Copyright IBM Corp. 2007

Arreglos Bidimensionales

Fila 1

Fila 2

Fila 3

Fila 4

Fila 5

Columna 1Columna 2

Columna 3Columna 4

Columna 5

• 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.

Page 230: FundProg_ MV1_ V3_(corregido19-09-07)

230© Copyright IBM Corp. 2007

Arreglos Bidimensionales...1

• Los elementos del arreglo bidimensional se referencian con dos subíndices.

• El primer subíndice 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

1 2 43 5

50

Page 231: FundProg_ MV1_ V3_(corregido19-09-07)

231© Copyright IBM Corp. 2007

Arreglos Bidimensionales…2

1

2

3

...

M

1 2 ..3 N

Matriz B [M,N]

• Si se tiene la matriz B[M,N]:– El subíndice i, de las filas, varía de 1 a M.– El subíndice j, de las columnas, varía de 1 a N.– El arreglos tiene M x N elementos.– Existen N elementos en cada fila y M elementos en

cada columna (MxN).

Page 232: FundProg_ MV1_ V3_(corregido19-09-07)

232© Copyright IBM Corp. 2007

Arreglos Bidimensionales: Ejemplo…1

5

1204

3

2

1

121110987654321

Matriz de ventas 5 x 12, total de 60 elementos.

ventas[4, 3] = 120

En memoria se almacenan los elementos en forma consecutiva:

5,12...5,45,35,25,1...1,12...1,41,31,21,1

Page 233: FundProg_ MV1_ V3_(corregido19-09-07)

233© 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 entero2. var i, j : entero3. desde i = 1 Hasta 54. desde j = 1 Hasta 125. ventas[i, j] = 06. fin Desde7. fin Desde

Page 234: FundProg_ MV1_ V3_(corregido19-09-07)

234© 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

asignándoles el valor dado.

• Programa:1. ventas: arreglo[5, 12] de entero2. var i, j : entero3. i = 34. desde j = 1 Hasta 125. M[i, j] = 06. fin desde

Page 235: FundProg_ MV1_ V3_(corregido19-09-07)

235© Copyright IBM Corp. 2007

Matrices: Ejercicio 1

1

2

3

...

N

1 2 ..3 N

• Diseñar un algoritmo que dado una matriz cuadrada determine la suma de todos los elementos que están 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 número de filas es igual al número de columnas.

Page 236: FundProg_ MV1_ V3_(corregido19-09-07)

236© Copyright IBM Corp. 2007

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

• Un arreglo multidimensional es una matriz de 3 ó más dimensiones.

• Si el arreglo tiene N dimensiones y cada dimensión es de tamaño d1,d2,..,dN, el número 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 posición dentro de una dimensión según el orden de declaración.

• El arreglo se almacena en memoria en posiciones consecutivas.

• La declaración de un arreglo multidimensional es:

N_arreglo: arreglo[rangoI, rangoII, ..., rangoN] de tipo

• Ejemplo:

• Matriz de ventas mensuales por cinco años para tres vendedores:

ventas : arreglo[3, 5, 12] de real

ventas[2, 4, 10]= 120000.5

Page 237: FundProg_ MV1_ V3_(corregido19-09-07)

237© Copyright IBM Corp. 2007

Matrices: Solución Ejercicio 1

Algoritmo Suma de la Diagonal

var M = 100: enterotabla: arreglo[M,M] de enteroSD, i:entero

inicioescribir “Introducir elementos de la tabla”desde i = 1 hasta M hacer

desde j = 1 hasta M hacerescribir “Introducir elemento (“ i “,” j “)”leer tabla(i,j)

fin desdefin desde

{Suma de los elementos de la diagonal}

desde i = 1 hasta M hacerSD = SD + tabla[i,i]

fin desde

escribir “la suma de elementos de la diagonal es:” SDfin

Page 238: FundProg_ MV1_ V3_(corregido19-09-07)

238© Copyright IBM Corp. 2007

Matrices: Ejercicio 2

• Diseñar un algoritmo para:– Sumar los elementos positivos y los elementos

negativos de una tabla o arreglo.– Indicar el número de elementos positivos y el

número de elementos negativo.– Considere el valor cero como positivo.– La matriz es de dimensión MxN y se lee desde el

teclado.

Page 239: FundProg_ MV1_ V3_(corregido19-09-07)

239© Copyright IBM Corp. 2007

Matrices: Solución del Ejercicio 2

Algoritmo Sumavar M = 10, N = 8, SP, SN, i, j,CP,CN:entero tabla: arreglo[M,N] de enteroinicio

escribir “Introducir elementos de la tabla”SP = 0, SN = 0, CP = 0, CN = 0desde i = 1 hasta M hacer

desde j = 1 hasta N hacerescribir “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 sifin desde

fin desdeescribir “la suma de elementos positivos es:” SPescribir “la cantidad de elementos positivos es:” CPescribir “la suma de elementos negativos es:” SNescribir “la cantidad de elementos negativos es:” CN

fin

Page 240: FundProg_ MV1_ V3_(corregido19-09-07)

240© Copyright IBM Corp. 2007

Arreglos Multidimensionales: M x N x...x Z

• Un arreglo multidimensional es una matriz de 3 ó más dimensiones.

• La declaración de un arreglo multidimensional es:

<arreglo>: arreglo[rangoI, rangoII, ..., rangoN] de <tipo>

• Ejemplo: matriz de ventas mensuales por cinco años para tres vendedores:

ventas : arreglo[3, 5, 12] de real

ventas[2, 4, 10]= 120000.5

Page 241: FundProg_ MV1_ V3_(corregido19-09-07)

241© Copyright IBM Corp. 2007

Arreglos Multidimensionales: M x N x...x Z

• Si el arreglo tiene N dimensiones y cada dimensión es de tamaño d1,d2,..,dN, el número 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 posición dentro de una dimensión según el orden de declaración.

A[i1, i2, …,in] = 5

• Los elementos del arreglo se almacenan en memoria en posiciones consecutivas.

Page 242: FundProg_ MV1_ V3_(corregido19-09-07)

242© Copyright IBM Corp. 2007

Almacenamiento de Arreglos en Memoria

• Un arreglo en memoria siempre se almacena en posiciones contiguas a partir de la dirección base de comienzo del arreglo.

• La dirección base se asigna cuando se declara una variable de tipo arreglo.

• El tamaño que ocupa el arreglo en memoria es el producto del número de sus elementos por el tamaño de cada uno de ellos.

• Ejemplo:

Array[100] de carácter

Si cada carácter ocupa un byte entonces el arreglo requiere de un total de 100 bytes de memoria.

1 byte * 100 elementos = 100 bytes

Page 243: FundProg_ MV1_ V3_(corregido19-09-07)

243© Copyright IBM Corp. 2007

Almacenamiento de Arreglos en Memoria...1

• Los arreglos multidimensionales también se almacenan en posiciones contiguas de memoria.

• El tamaño del arreglo es el producto del número de elementos del arreglo por el tamaño 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

Page 244: FundProg_ MV1_ V3_(corregido19-09-07)

244© 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.

Page 245: FundProg_ MV1_ V3_(corregido19-09-07)

245© Copyright IBM Corp. 2007

Unidad 6

Entrada y Salida

Page 246: FundProg_ MV1_ V3_(corregido19-09-07)

246© Copyright IBM Corp. 2007

Objetivos de Aprendizaje

Al finalizar esta unidad ud. debería ser capaz de:

• Describir los conceptos básicos 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.

Page 247: FundProg_ MV1_ V3_(corregido19-09-07)

247© Copyright IBM Corp. 2007

Entrada y Salida de un Programa

• La solución 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 comunicación entre la aplicación y el entorno.

• Este intercambio de datos con fuentes externas es lo que se denomina leer o escribir datos en algún dispositivo.

Page 248: FundProg_ MV1_ V3_(corregido19-09-07)

248© Copyright IBM Corp. 2007

• Cuando el programa se ejecuta, probablemente necesita leer datos o escribir datos en algún 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 más complejas de cualquier programa en cualquier lenguaje de programación.

• La transferencia real de datos hacia o desde los dispositivos de E/S, es generalmente la parte más lenta de un programa.

Entrada y Salida de un Programa…1

Page 249: FundProg_ MV1_ V3_(corregido19-09-07)

249© Copyright IBM Corp. 2007

Entrada y Salida de un Programa…1

Red

Scanner

PROCESADOR(programa)

ENTRADA SALIDA

Teclado

Archivo en disco

Impresora

Archivo en disco

Pantalla

Red

Page 250: FundProg_ MV1_ V3_(corregido19-09-07)

250© 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 físicamente los datos de algún 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.

Page 251: FundProg_ MV1_ V3_(corregido19-09-07)

251© Copyright IBM Corp. 2007

Buffers de Datos…1

• El sistema de Control de I/O (IOCS) se encarga del movimiento de los datos externos.

• El IOCS corre asincrónicamente a la ejecución del programa.

• El programa continúa con el procesamiento y el sistema se ocupa de transportarlos hacia y desde los dispositivos de E/S.

Page 252: FundProg_ MV1_ V3_(corregido19-09-07)

252© Copyright IBM Corp. 2007

Buffers de Datos…2

Buffers

ENTRADA

SALIDA

LEER(READ)

ESCRIBIR(WRITE)

...

HACER MIENTRAS (MAS DATOS) LEER /* PROCESAR */ ESCRIBIRFIN HACER...

Programa Disco

Page 253: FundProg_ MV1_ V3_(corregido19-09-07)

253© Copyright IBM Corp. 2007

Imprimir Datos

• Imprimir la salida en una impresora requiere ciertas consideraciones especiales:

– Separar los formatos de salida para las líneas de datos y las líneas del título.

– Contadores de línea.– Contadores de páginas.– Encabezados de páginas.– Caracteres de control de carro en las líneas de

salida.

Page 254: FundProg_ MV1_ V3_(corregido19-09-07)

254© Copyright IBM Corp. 2007

Imprimir Datos…1

• Se requiere de algunas consideraciones de formato especiales cuando se escriben datos a un dispositivo de impresión.

• Un contador de línea se mantiene para tener seguimiento de cuántas líneas se han impreso, para así tener control de cuándo saltar a una nueva página y colocar los encabezados en una nueva página de salida.

• El contador de páginas permite colocar el número de la página en la nueva página.

• Los formatos de líneas separados se requieren para imprimir las líneas de datos y líneas de encabezado.

• Normalmente el encabezado de la página requiere de formatos únicos de línea para las múltiples líneas de encabezado y los encabezados de columna.

• El control de carro de impresora le indica a la impresora dónde imprimir la próxima línea.

Page 255: FundProg_ MV1_ V3_(corregido19-09-07)

255© Copyright IBM Corp. 2007

Control de Carro de Impresora

• Los lenguajes de programación también proporcionarán un medio para controlar dónde se va a imprimir una línea.

• Esto generalmente se hace con un carácter de control en la primera posición de la impresión de cada línea y no se verán en la copia impresa.

• El carácter de control siempre se aplica a la línea que se va a imprimir.

• Ejemplos de caracteres de control:– El “0” da el doble espacio. – El “+” se usa para suprimir el espaciado de línea y

dar apariencia de sobreimpresión (overstrike) o de negrita.

Page 256: FundProg_ MV1_ V3_(corregido19-09-07)

256© Copyright IBM Corp. 2007

Control de Carro de Impresora

Suprimir espaciado+

Saltar a una nueva página1

Espaciar 3 línea_

Espaciar 2 línea0

Espaciar 1 líneaespacio

Acción de ControlCarácter

Caracteres de Control

Page 257: FundProg_ MV1_ V3_(corregido19-09-07)

257© Copyright IBM Corp. 2007

Imprimir Salida – Reportes

• El programador cuando escribe los reportes a una impresora tiene que considerar: los encabezados de páginas, números de las páginas, contadores de línea y pie de páginas.

• Existen varios tipos de líneas que deben definirse:– Línea de título. – Líneas de encabezados.– Líneas de datos.– Líneas de resumen.– Líneas de pie de página.

Page 258: FundProg_ MV1_ V3_(corregido19-09-07)

258© Copyright IBM Corp. 2007

Encabezados de Páginas

• El programador define el tamaño de la página y una variable contador de línea.

• El contador de línea se inicializa con el tamaño de la página para que la rutina de encabezado de página sea llamada para la primera página.

• El tamaño de la página es el número máximo de líneas a ser impresas en la página.

• La rutina de encabezado de página también debe ocuparse de la variable contador de página.

• Debe incrementase (variable contador) cada vez que una nueva página se escribe. Esta variable puede ser parte de la línea del título o de pie de página.

Page 259: FundProg_ MV1_ V3_(corregido19-09-07)

259© Copyright IBM Corp. 2007

Encabezados de Páginas…1

• Las consideraciones para el contador de línea son:– Se debe comparar (>=) con el tamaño de página

después de imprimir cada línea de detalle, para determinar cuándo se debe llamar a la rutina de encabezado de página.

– Se debe incrementar inmediatamente después de imprimir una línea, basado en el espaciado simple, doble o triple.

– Siempre debe reflejar el número de la línea de la última línea escrita.

– La rutina de encabezado de página debe reiniciarse.

Page 260: FundProg_ MV1_ V3_(corregido19-09-07)

260© 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 colección de entidades elementales denominadas registros.

• Un registro es una colección de información, normalmente relativa a una entidad en particular.

• Un registro es una colección de campos lógicamente relacionados que pueden ser tratados como una unidad por algún programa.

Page 261: FundProg_ MV1_ V3_(corregido19-09-07)

261© Copyright IBM Corp. 2007

Entrada/Salida de Archivo – Formatos de Registros

• Los datos escritos o leídos 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 también pueden bloquearse para lograr eficiencia.

Page 262: FundProg_ MV1_ V3_(corregido19-09-07)

262© Copyright IBM Corp. 2007

Archivo: Ejemplo

Ejemplo de un Archivo de Estudiante

carreraedaddireccióncarnetnombreRegistro 1

Registro 2

Registro 3

Registro 4

Page 263: FundProg_ MV1_ V3_(corregido19-09-07)

263© Copyright IBM Corp. 2007

Archivo: Formatos de Registros

• Los registros según la organización de sus datos pueden ser:

- Registros fijos: todos los registros del archivo tienen el mismo tamaño.

- Registros variables: cada registro del archivo puede tener diferentes tamaños.

FIJO REGISTRO

REGISTROREGISTRO REGIST

VARIABLE REGISTRO REGISTRO REGISTRO

Page 264: FundProg_ MV1_ V3_(corregido19-09-07)

264© Copyright IBM Corp. 2007

Archivo – Formatos de Registros…1

• Los registros también pueden bloquearse para lograr eficiencia.

• Un bloque puede contener uno o más registros lógicos.• Un bloque es la cantidad más pequeña que puede

transferirse en una operación de E/S entre la memoria principal y los dispositivos y viceversa.

• Los registros bloqueados se clasifican en:

– Registros fijos bloqueados. – Registros variables bloqueados.

Page 265: FundProg_ MV1_ V3_(corregido19-09-07)

265© Copyright IBM Corp. 2007

Archivo – Formatos de Registros…2

FIJOBLOQUEADO

VARIABLEBLOQUEADO

RD

Número de bytes en el bloque

REGISTRO REGISTRO REGISTRO REGIST

BLOQUE

Número de bytes en el registro

REGISTRO REGISTRO REGISTRO

Page 266: FundProg_ MV1_ V3_(corregido19-09-07)

266© Copyright IBM Corp. 2007

Ejercicio de E/S

• Diseñe 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 indicación de horas de sobre tiempo si trabajó más de cuarenta horas.

• El reporte debe contener un título y encabezados de columnas y debe manejar múltiples páginas.

Page 267: FundProg_ MV1_ V3_(corregido19-09-07)

267© 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 solución correcta.

– Verificar la solución.

Page 268: FundProg_ MV1_ V3_(corregido19-09-07)

268© Copyright IBM Corp. 2007

Ejercicio de E/S...2

Formato del Reporte:

Reporte de Horas Trabajadas

Nombre Horas Sobre Tiempo Anderson 35Andrews 42 SiAppleton 40Arnold 39Astor 45 SI

Registros de Entrada

Anderson 35

Andrews 42

Appleton 40Arnold 30Astor 45

Page 269: FundProg_ MV1_ V3_(corregido19-09-07)

269© Copyright IBM Corp. 2007

Ejercicio de E/S...3

INICIO

LINE_CTR = MAX_LINESPAGE_CTR = 1

LEER PRIMER REGISTRO

LEER SIGUIENTE REGISTRO

NOT FIN DE ARCHIVO

FIN

HACER

VERDADERO

MIENTRAS

FALSO

PROCESAR REGISTRO

Page 270: FundProg_ MV1_ V3_(corregido19-09-07)

270© Copyright IBM Corp. 2007FIN

IN_HOURS

> REG_HOURS

OUT_OT_IND = REG_INDICATOR

ASIGNAR INS A OUTS

ESCRIBIR REGISTRO

LINE_CTR = LINE_CTR + 1

OUT_OT_IND =OT_INDICATOR

SINO

INICIO

LINE_CTR

>= MAX_LINES

NUEVA_PAGINA

PROCESAR REGISTRO

SIENTONCESSINO

SI ENTONCES

Ejercicio de E/S...4

Page 271: FundProg_ MV1_ V3_(corregido19-09-07)

271© Copyright IBM Corp. 2007

Ejercicio de E/S...5

INICIO

SALTAR A NUEVA PAGINA

FIN

ESCRIBIR LINEA DE CABECERA

RE INICIALIZARLINE_CTR

INCREMENTA PAGE_CTR

ESCRIBIR LINEA DE TITULO

NUEVA_PAGINA

Page 272: FundProg_ MV1_ V3_(corregido19-09-07)

272© Copyright IBM Corp. 2007

Resumen

Ahora que ud. ha completado esta unidad, debe estar en la capacidad de:

• Describir los conceptos básicos 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.

Page 273: FundProg_ MV1_ V3_(corregido19-09-07)

273© Copyright IBM Corp. 2007

Unidad 7

Ejemplos de Programas

Page 274: FundProg_ MV1_ V3_(corregido19-09-07)

274© Copyright IBM Corp. 2007

Objetivos de Aprendizaje

Al finalizar esta unidad ud. debería ser capaz de:

• Diseñar un programa para manejar la verificación de secuencias y rupturas de control.

• Diseñar un programa para resolver un problema de emparejamiento de transacción.

Page 275: FundProg_ MV1_ V3_(corregido19-09-07)

275© Copyright IBM Corp. 2007

Verificación 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 números

naturales.• Una verificación 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 jerarquía de datos y un valor clave para determinar el orden correcto.

Page 276: FundProg_ MV1_ V3_(corregido19-09-07)

276© Copyright IBM Corp. 2007

Verificación de Secuencias…1

• 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 número del empleado para registros de empleado o el número de parte para los registros del inventario.

• El proceso de ordenar las cosas en orden ascendente es un problema de programación clásico.

• Esto se puede realizar a través de alguna función del sistema o proceso periférico fuera del programa que se está produciendo.

Page 277: FundProg_ MV1_ V3_(corregido19-09-07)

277© 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 múltiples registros para una clave.

• Normalmente se usa para procesar registros en secuencia en un sistema que contiene múltiples actualizaciones a registros maestros.

• La ruptura de control normalmente implica recolectar subtotales o imprimir los resúmenes intermedios.

Page 278: FundProg_ MV1_ V3_(corregido19-09-07)

278© Copyright IBM Corp. 2007

Rupturas de Control…1

• Un ejemplo de procesamiento con ruptura de control es el procesamiento de promedio de notas de los estudiantes de un salón 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 próximo estudiante.

Page 279: FundProg_ MV1_ V3_(corregido19-09-07)

279© 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 colección de registros que contienen los datos permanentes o acumulados para un sistema.

• Emparejar transacciones es una actividad común en el procesamiento de archivos.

• Típicamente hay muchos registros de transacción para ser procesados, contra sólo un registro en el archivo maestro con el valor clave.

Page 280: FundProg_ MV1_ V3_(corregido19-09-07)

280© Copyright IBM Corp. 2007

Emparejar Transacciones…1

• Algunos ejemplos dónde 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 comprobación diaria y la actividad de depósito (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 información detallada de inventario actual para un producto (archivo maestro).

Page 281: FundProg_ MV1_ V3_(corregido19-09-07)

281© Copyright IBM Corp. 2007

Ejercicio de Punto de Chequeo

• Diseñar un programa para generar un informe del resumen de ventas para un grupo de departamentos.

• El formato del informe debe reflejar el número del departamento y las ventas totales.

• Cada departamento puede tener múltiples registros de entrada.

• Se requiere verificar la secuencia del número 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 páginas múltiples.

• El título para el informe es optativo.

Page 282: FundProg_ MV1_ V3_(corregido19-09-07)

282© Copyright IBM Corp. 2007

Ejercicio de Punto de Chequeo…1

• 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 post-

proceso. – Dibujar un diagrama de flujo que muestre una

solución correcta. – Verificar la solución usando los dos juegos de

entrada que se muestran a continuación:

Page 283: FundProg_ MV1_ V3_(corregido19-09-07)

283© Copyright IBM Corp. 2007

Entrada 1 Entrada 2

5 200.00 5 200.00

5 100.00 5 100.00

5 100.00 5 100.00

6 50.00 16 300.00

6 200.00 16 200.00

16 300.00 9 50.00

16 100.00 6 200.00

Salida 1 Salida 2

Dpto. No. Ventas Dpto. No. Ventas

5 400.00 5 400.00

6 250.00 16 500.00

16 400.00 Error de secuencia

Ejercicio de Punto de Chequeo…2

Page 284: FundProg_ MV1_ V3_(corregido19-09-07)

284© Copyright IBM Corp. 2007

Resumen

Ahora que ud. ha completado esta unidad, debe ser capaz de:

• Diseñar un programa para manejar la verificación de secuencias y rupturas de control.

• Diseñar un programa para resolver un problema de emparejamiento de transacción.