Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fundamentos de Programacin
Curso No. CY300 Versin 2.0
Objetivos del Curso Despus de completar este curso, usted estar en la capacidad de: Crear la lgica bsica de un programa. Conocer los pasos bsicos necesarios para ir desde el diseo de un programa hasta su ejecucin. Usar la notacin binaria y hexadecimal en un ambiente de computadora tradicional. Describir los componentes bsicos de la configuracin de una computadora.
Volumen 1
Fundamentos de Programacin
Unidad 1
Programas de Computadora
4
Copyright IBM Corp. 2007
Objetivos de Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Definir el propsito y el contenido de un programa de computadora. Establecer una metodologa para resolver problemas de procesamiento de datos. Definir el concepto de dato, los tipos de datos y las funciones incorporadas a los lenguajes de programacin. Enumerar las recomendaciones ms comunes necesarias para programar con estilo.
5
Copyright IBM Corp. 2007
Introduccin a la Programacin Actualmente las computadoras son parte importante en la solucin de problemas de cualquier rea: contabilidad, medicina, administracin, etc. Los programas de computadora son parte esencial para la solucin de problemas a cualquier nivel. Estas soluciones son llamadas aplicaciones. Los programadores utilizan algn lenguaje de programacin para desarrollar las aplicaciones requeridas por los clientes. Los lenguajes de programacin sirven como puente de enlace entre el anlisis realizado por el equipo de desarrollo y la capacidad de clculo que ofrece la computadora.
6
Copyright IBM Corp. 2007
Introduccin a la Programacin...1 Para programar se requiere de: Fundamentos generales de programacin. Lgica para entender, conceptuar y solucionar el problema. Conocimientos del lenguaje de programacin. La programacin requiere de una serie de conocimientos bsicos comunes a cualquier lenguaje de programacin, que le permitan al programador indicarle inequvocamente al computador las tareas que ste debe realizar.
8
Copyright IBM Corp. 2007
Algoritmo El Algoritmo es un proceso para resolver problemas. Fue desarrollado por el matemtico persa Abu Jafar Mohammed Ibn Musa Al Khwarizmi. Un algoritmo es una frmula para resolver un problema. Un algoritmo es un conjunto de acciones o secuencia de operaciones que ejecutadas en un determinado orden resuelven el problema planteado. Un algoritmo es un proceso metdico que define una serie finita de pasos sencillos y sin ambigedades para la solucin de un problema. La programacin consiste en adaptar el algoritmo al ordenador.
9
Caractersticas de un Algoritmo Un algoritmo debe: Estar bien definido. Ser preciso. Finito.
10
Metodologa para Disear Algoritmos Un algoritmo es una formula para obtener la solucin de un problema. La solucin puede ser planteada de diferentes formas. El diseo de un algoritmo es un proceso creativo. No existe un conjunto de reglas que indiquen expresamente cmo escribir un algoritmo en forma correcta.
11
so :
lisis ro l
is o l lgorit o
rific ci l lgorit o
12
Metodologa para Disear Algoritmos...2 En la Fase de Anlisis del Problema se realiza lo siguiente: Identificar el problema. Determinar la informacin que se debe producir como salida. Identificar la informacin necesaria para resolver el problema. Identificar los elementos que se tienen y los elementos que se deben solicitar para resolver el problema. Establecer el camino a seguir o la solucin que se va implementar.
13
Metodologa para Disear Algoritmos...3 En la Fase de Diseo del Algoritmo se realiza lo siguiente: Buscar la manera ms fcil para simplificar la propuesta. Identificar los procesos ms importantes y colocarlos en orden ascendente segn su importancia y precedencia (esto sirve como un algoritmo inicial). El algoritmo inicial se va refinando sucesivamente hasta obtener una solucin ms detallada y fcil de traducir a un lenguaje de programacin.
14
Metodologa para Disear Algoritmos...4 En la Fase de Verificacin del Algoritmo se realiza lo siguiente: Verificar que el algoritmo cumpla con los procesos diseados y produzca el resultado esperado. Realizar una prueba del algoritmo mediante su ejecucin manual con datos significativos, adems de comprobar si se obtienen los resultados esperados para la salida.
15
Programas de Computadora Un programa es un conjunto de instrucciones que, ejecutadas ordenadamente, resuelven un problema. En otras palabras, es la implementacin del algoritmo. Un programa de computadora es una secuencia de instrucciones que le indican al computador que realice las operaciones especficas para lograr el resultado deseado. Consiste de uno o ms mdulos o rutinas cada uno de los cuales puede estar compuesto de varios subprogramas.
16
Programas de Computadora...1 Un programa de computadora no es: Una caja mgica. Intrnsicamente correcto. Un programa de computadora debe ser: Una solucin a un problema. Una secuencia de instrucciones que se ejecutan en una computadora. Slo tan correcto como el programador lo haya hecho.
17
Definiciones Bsicas Lenguaje de Mquina. Lenguaje de Bajo Nivel: Ensamblador. Lenguaje de Alto Nivel. Compilar. Base de Datos. Sistema Operativo. Almacenamiento.
18
Definiciones Bsicas: Lenguaje de Mquina Es un lenguaje que puede ser interpretado directamente por los circuitos internos de la mquina. Est basado en instrucciones compuestas por secuencias de ceros (0) y unos (1). Ventajas: No requiere traduccin, la mquina lo interpreta. Opera directamente con la mquina. Puede ser eficiente en el manejo de los recursos. Desventajas: Difcil de aprender, implementar y mantener. Es nico y particular para cada procesador.
Copyright IBM Corp. 2007
19
Definiciones Bsicas: Lenguaje de Alto Nivel Es un lenguaje orientado al problema o procedimiento. Son los ms cercanos al lenguaje humano. Ejemplo: COBOL, PL/I, FORTRAN, etc. Otros son los lenguajes de Programacin Orientado a Objetos (OOPL) : C++, Smalltalk, Java, etc. Ventajas: Son independientes del procesador. Son ms fciles de aprender, implementar y mantener. Tiene un carcter genrico. Desventajas: Menos eficiente en el manejo de recursos. Requiere un proceso de traduccin compilacin.
Copyright IBM Corp. 2007
21
22
Desarrollar un Programa de Computadora El programador debe escribir las sentencias o instrucciones del cdigo fuente, en un editor. El conjunto de sentencias fuente se denomina programa fuente. El programa fuente es la entrada para el compilador. El compilador convierte el programa fuente en un conjunto de comandos entendibles por el computador llamado programa ejecutable. Si se encuentra algn error en la sintaxis de los comandos en el programa fuente, el compilador listar cada uno de ellos y no produce el programa ejecutable.
23
24
Funcionamiento del Compilador/Enlazador El compilador crea un programa objeto y un listado del programa objeto. El programa objeto se usa como la entrada al enlazador para realizar lo que se llama el paso de edicin de enlace. El enlazador combina el programa objeto recin creado, con otros archivos objetos ya existentes para producir un programa ejecutable. Los otros archivos objeto generalmente residen en un archivo en disco llamado Librera de Enlace.
25
Compilador
Programa fuente
Programa Ejecutable
26
Datos e Instrucciones Un programa de computadora, para que pueda ser ejecutado debe ser cargado en memoria. La unidad de procesamiento del ordenador slo puede trabajar con los datos e instrucciones que residen en la memoria.
27
Dato El dato es cualquier objeto o elemento de informacin que se usa a travs de las diversas operaciones dentro de un programa. Son los elementos sobre los que se opera cuando se efecta una instruccin. Un dato tiene un nombre que lo identifica y distingue de los dems elementos del programa. El nombre no es ms que una forma de referenciar la direccin de memoria que ocupa el dato.
28
Tipo de Dato El tipo de dato es una definicin que identifica los valores vlidos para un conjunto de datos y las operaciones que sobre ellos se pueden realizar. Normalmente, se puede establecer una relacin de orden sobre los datos de naturaleza escalar o con valores determinsticos. Cada tipo de dato tiene una representacin en el computador. Para cada tipo de dato el computador reserva una cantidad de memoria para almacenarlo. Todo, absolutamente todo, en la memoria de un computador se representa por medio de cdigo binario.
29
Clasificacin de los Tipos de Datos Los tipos de datos se clasifican en: Primitivos: tipos bsicos o simples predefinidos en el sistema. Pueden ser numrico, lgico o carcter. Definidos por el usuario: tipos de datos complejos definidos por el programador.
30
Tipo de Dato Primitivo Numrico Los tipos primitivos numricos ms importantes son: Entero: es un subconjunto finito del conjunto matemtico de los nmeros enteros. No tiene parte decimal. Real: es un subconjunto finito del conjunto matemtico de los nmeros reales, tienen signo y parte decimal.
31
Tipo de Dato Primitivo Lgico o Booleano El tipo primitivo lgico o booleano: Es aquel que slo puede tomar uno de los dos valores, verdadero o falso (1 0). Las operaciones lgicas retornan un valor lgico.
32
Tipo de Dato Caracter El tipo de dato primitivo carcter: Es el conjunto finito y ordenado de caracteres que reconoce la computadora: letras, dgitos, caracteres especiales, cdigo ASCII y UNICODE. Los valores usualmente se representan dentro de un par de comillas simples. Se puede usar el cdigo del carcter o su posicin dentro del conjunto de caracteres vlidos que se est usando.
33
Constantes y Variables Constantes: Son instancias de un tipo de dato que tienen un valor fijo que se le da cuando se define la constante. No puede ser modificado durante la ejecucin del programa o corrida del algoritmo. Variables: Son instancias de un tipo de dato, cuyo valor puede cambiar durante la ejecucin del programa o corrida del algoritmo. No vara su nombre y su tipo. Variables: Acumuladoras. Contadoras.
34
Copyright IBM Corp. 2007
Variables Las variables deben ser definidas o declaradas antes de usarlas. Una variable se declara dando un nombre significativo y tipo. El nombre o identificador, es una palabra que no es propia del lenguaje, la construye y usa el programador basndose en ciertas reglas. El nombre, por lo general, tiene que empezar por una letra, el tamao y caracteres permitidos para formar el identificador dependen del lenguaje. En algunos lenguajes, se le asigna un valor por defecto a la variable al declararla, si no se le asigna un valor inicial.
35
Copyright IBM Corp. 2007
Constantes Las constantes pueden llevar un nombre asociado, si no lo tienen se llaman literales. El valor de la constante se debe suministrar al definir la constante y no puede cambiar a lo largo de la ejecucin del programa. El tipo de dato de la constante se especifica o no en la declaracin dependiendo del lenguaje. Ejemplo de definicin de una constante: Const PI=3,1416 La ventaja de las constantes con nombre, es que se puede usar el nombre en cualquier lugar del programa y luego el compilador lo sustituye por su valor.
36
Variables y Constantes en la Memoria Cuando el compilador consigue una declaracin de una variable o una constante con nombre, automticamente reserva en memoria espacio para guardarla. El espacio reservado en memoria depende del tipo de dato de la variable o constante. En esa ubicacin de memoria se guarda el valor asociado a la variable o constante. Cuando el programa se ejecuta busca el valor de la variable o constante en esa ubicacin de memoria.
37
Expresiones: Tipos y Operadores Una expresin es una combinacin de constantes, variables, signos de operacin, parntesis y nombres especiales de funciones estndares, con un sentido unvoco y definido. La evaluacin de una expresin da como resultado un nico valor. Toda expresin tiene asociado un tipo que se corresponde con el tipo del valor que devuelve la expresin cuando se evala. Existen dos tipos de expresiones: Numricas. Lgicas.
38
Expresiones Numricas: Operadores Aritmticos Las expresiones numricas son una combinacin de variables y constantes numricas con operadores aritmticos, que al evaluarse devuelven un valor numrico. Los operadores aritmticos se utilizan en las expresiones numricas. Algunos de los operadores aritmticos ms usados son: + Suma - Resta * Multiplicacin / Divisin
39
Otros Operadores Aritmticos Otros operadores aritmticos soportados en algunos lenguajes de programacin son: Resto: devuelve el resto de una divisin entera. Divisin entera: devuelve el cociente de una divisin en la que no se consideran los decimales. Potencia: devuelve el valor de una base elevada a una potencia dada. Todos los operadores estudiados son binarios, utilizan dos operandos y el operador se sita en medio de ambos operandos.
40
Copyright IBM Corp. 2007
Operadores Unarios Los operadores unarios son un tipo de operador que slo necesitan de un operando. Algunos de los operadores unarios ms comunes son: Signo negativo: devuelve el valor actual del operando multiplicado por menos uno (-1). Decremento: devuelve el valor actual del operador decrementado en una unidad. Incremento: devuelve el valor actual del operador incrementado en una unidad.
41
Copyright IBM Corp. 2007
Evaluacin de Expresiones
El resultado que retorna de la evaluacin de una expresin depende del orden en que se evalen los operadores. Ejemplo: Sea la siguiente expresin aritmtica: 2 + 3 * 2 + 3 Si se evala en el orden de aparicin de los operadores : (((2 + 3) * 2) + 3) El resultado = 13 Si se evala primero la suma (+) y luego la multiplicacin (*): (2 + 3) * (2 + 3) El resultado = 25 Si se evala primero la multiplicacin y luego la suma: 2 + (3 * 2) + 3 El resultado = 11
42
Copyright IBM Corp. 2007
43
Expresiones Lgicas: Operadores Relacionales y Lgicos Una expresin lgica es aquella que slo puede devolver uno de dos valores: Verdadero o Falso. Los operadores que pueden aparecer en una expresin lgica son de dos tipos: lgicos o relacionales. Los operadores lgicos slo trabajan sobre expresiones o datos que retornan valores booleanos. Los operadores relacionales trabajan con expresiones numricas para realizar comparaciones que retornan un valor booleano. Las expresiones combinan tanto los operadores lgicos como relacionales, se evala ms de una condicin o relacin por medio los de operadores lgicos.
44
Copyright IBM Corp. 2007
Operadores Relacionales Los operadores relacionales ms utilizados son: < menor que > mayor que = igualdad (en C/C++: ==) <> diferente (en C/C++: !=) menor o igual que mayor o igual que
45
Copyright IBM Corp. 2007
Ejercicio sobre Expresiones Lgicas Ejercicio: Evale las siguientes expresiones si se le asigna a:
la variable x el valor de 2. la variable y el valor de 4.
1. 2. 3. 4.
46
Copyright IBM Corp. 2007
Operadores Lgicos Los operadores lgicos se utilizan para evaluar ms de una condicin al mismo tiempo. Los operadores lgicos ms utilizados son: Y (and, &&) O (or, !!) No (not, ~, !) O exclusivo (xor, ^) El No es un operador unario todos los dems son operadores binarios.
47
Copyright IBM Corp. 2007
Tabla de Verdad
Operando 1 Operando 2 And Or XOr
V V F F
V F V F
V F F F
V V V F
F V V F
48
Copyright IBM Corp. 2007
Ejercicio sobre Operadores Lgicos Ejercicio: Si x representa 1 > 2 (FALSO). y representa 4 < 8 (VERDADERO). Evale la siguientes expresiones: 1. NOT x 2. x AND y 3. y OR x 4. (NOT x) AND y 5. x XOR y
49
Copyright IBM Corp. 2007
Funciones Incorporadas Las funciones incorporadas son funciones que se agregan al lenguaje y que son diferentes de las operaciones bsicas. Se consideran estndar en la mayora de herramientas y lenguajes de programacin. Son dependientes del lenguaje y normalmente se encuentran en libreras externas que se pueden incluir en un programa. Las libreras ms comunes son las libreras de soporte matemtico y las de entrada / salida. La sintaxis y el nombre de las funciones puede variar de un lenguaje a otro, pero la funcionalidad suele mantenerse entre las diversas herramientas de programacin.
50
Copyright IBM Corp. 2007
51
Copyright IBM Corp. 2007
Operacin de Asignacin La operacin de asignacin consiste en atribuir un valor a una variable. El valor asignado es una expresin, una constante u otra variable. Lenguaje Operador Ejemplo Pascal := var := 5 + 3; C y C++ Java = = var = 5 + 3; var = Math.sin(90.0);
var: representa la variable a la que se le asigna el valor dado en la expresin a la derecha del operador de asignacin.
52
Copyright IBM Corp. 2007
Recomendaciones al Programar Para minimizar la ocurrencia de errores al programar se recomienda: Reutilizar cdigo bueno. No asumir los datos de entrada como vlidos. No asumir que los datos de entrada estn en la secuencia correcta. Disear los tamaos de los campos de datos de modo que puedan contener en el campo el valor actual ms grande. Usar comentarios en los programas. Desarrollar programas legibles y fciles de entender.
54
Copyright IBM Corp. 2007
Resumen Ahora que ud. ha completado esta unidad, debe ser capaz de: Definir el propsito y el contenido de un programa de computadora. Establecer una metodologa para resolver problemas de procesamiento de datos. Definir el concepto de dato, los tipos de datos y las funciones incorporadas a los lenguajes de programacin. Enumerar las recomendaciones ms comunes necesarias para programar con estilo.
55
Copyright IBM Corp. 2007
Unidad 2
56
Copyright IBM Corp. 2007
Objetivos de Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Listar las caractersticas del Diseo Estructurado. Definir los conceptos de diseo Top-Down. Describir los Diagramas de Estructura, Diagramas de Flujo y Diagramas de Nassi Schederman. Definir el concepto de Pseudocdigo.
57
Copyright IBM Corp. 2007
Anlisis y Diseo de Algoritmos El anlisis y diseo de algoritmos requiere: 1. El uso de alguna tcnica para la descripcin del problema: Diseo Estructurado. Diseno Top-Down. 2. Representar el algoritmo mediante una herramienta de programacin: Diagramas de Flujo. Pseudocdigo. Diagrama N-S o Nassi-Schedeman.
58
Copyright IBM Corp. 2007
Conceptos de Diseo Estructurado Las caractersticas de un sistema que ha sido desarrollado siguiendo los lineamientos del diseo estructurado, son: Tiene una entrada y una salida con variaciones ocasionales. Est dividido en mdulos. No utiliza la sentencia GOTO.
59
Copyright IBM Corp. 2007
Diseo Top Down Es el proceso de dividir reiteradamente el problema en subproblemas ms simples, hasta que pueden ser implementados para su solucin. Va de lo ms general a lo ms especfico. Se conoce como refinamiento "paso a paso". Simplificacin del problema y de los subprogramas de cada descomposicin. Las diferentes partes del problema pueden ser programadas de modo independiente, incluso por diferentes personas. El programa final queda estructurado en forma de bloque o mdulos (lo que hace ms sencilla su lectura y mantenimiento).
60
Copyright IBM Corp. 2007
Notas Alumnos
Elegir opcin Asignar notas Cambiar notas Consultar
Por notas
61
Por apellido
Copyright IBM Corp. 2007
Diseo Top Down: Problema Objetivo: Escribir un programa para una tienda de video. Enunciado del Problema: Permitir que un cliente registrado en la tienda alquile videos. La tienda tiene un conjunto de reglas que deben cumplirse para que un cliente alquile un video: El cliente es un miembro registrado. No tiene ningn alquiler vencido. No debe nada a la tienda. La pelcula est en el inventario. La pelcula no est reservada.
62
Copyright IBM Corp. 2007
Diseo Top Down: Problema1 Un programa de alto nivel es: Alquilar un Video. Al descomponer el programa de alto nivel se obtienen los subprogramas: Verificar si el cliente es un miembro registrado. Verificar los alquileres vencidos. Verificar si el miembro tiene una deuda. Verificar si la pelcula est en el inventario. Verificar si la pelcula ya est reservada.
63
Copyright IBM Corp. 2007
64
65
Diagramas de Estructura
Un diagrama de estructura es una manera grfica de representar el diseo top down. Permite representar en forma clara, la organizacin de alto nivel de un programa. Ejemplo: Alquilar
una Pelcula
Verificar si es un miembro
Preguntar id 66
Ingresar id
Examinar perfil
Representacin de Algoritmos Para representar un algoritmo se utiliza algn mtodo que independice el algoritmo del lenguaje de programacin. Los mtodos permiten representar el algoritmo, y a partir de esta representacin, implementar el algoritmo en cualquier lenguaje de programacin. Las herramientas para representar un algoritmo son: Diagramas de Flujo. Pseudocdigo. Diagrama N-S o Nassi-Schedeman.
67
Copyright IBM Corp. 2007
Diagramas de Flujo Un diagrama de flujo es una representacin grfica de la lgica del diseo. Est a un nivel de detalle ms bajo que los diagramas de estructura. Un diagrama de flujo se usa cuando se desea seguir bajando a un nivel con mayores detalles, tal como agregar bifurcacin de condicionales y/o iterar. En todo diagrama de flujo siempre habr una caja de inicio y otra de fin, para el principio y final del algoritmo.
68
Copyright IBM Corp. 2007
Conectores: Sirven cuando un flujograma no cabe en una columna de la pgina y hay que seguir en otra columna. El primer smbolo si est en la misma pgina y el segundo en pgina distinta. Aclaratoria: Es un comentario para entender mejor el cdigo, pero no es parte del cdigo y por tanto no se ejecuta.
70
Copyright IBM Corp. 2007
Impresora.
71
NO
Fin
72
Detalles del Diagrama de Flujo Las bifurcaciones condicionales se ejecutan segn una determinada condicin. Si la condicin es verdadera se ejecuta un bloque del proceso. Si es falsa se ejecuta un bloque diferente. Iterar es cuando en un segmento de un algoritmo, los pasos se repiten un nmero determinado de veces mientras se cumple una determinada condicin.
73
NO
SI
Nmero encontrado?
74
Representacin de un Problema con un Diagrama de Flujo Problema: Determinar el producto de varios nmeros positivos que se ingresan a travs del teclado. Se indica el fin de datos al leer un nmero negativo. Algoritmo: Iniciar la variable del producto. Leer nmero. Preguntar si es negativo o positivo. Si es negativo salir y escribir el producto. Si es positivo, se multiplica el nmero ledo y luego se lee un nuevo nmero. Se vuelve al paso 3.
75
Copyright IBM Corp. 2007
P=1
LEER NUM
NO
ESCRIBIR P
FIN
76
Diagramas N-S o de Nassi-Schederman Los diagramas N-S son una forma de representacin semejante al diagrama de flujo, pero sin flechas y con los smbolos de condicin y repeticin diferentes. Estn conformados por una serie de cajas de procesos que constituyen las secuencias de acciones necesarias para representar el algoritmo. Las cajas de proceso o accin van unidas entre si. Son muy tiles para representar diagramas estructurados.
77
<Accin 1>
<Accin 2>
<Acciones>
<Acciones>
<Acciones>
78
FIN
79
Pseudocdigo El pseudocdigo es un lenguaje de documentacin de programas similar al ingls (o espaol), parecido a cualquier lenguaje de programacin de alto nivel. No necesita seguir ninguna regla especfica, como s lo requieren los programas que van a ser compilados. Normalmente no es muy especfico para las reas de E/S. Tiene la ventaja que se puede crear fcilmente con cualquier editor de texto. No hay ningn estndar en la industria definido para los pseudocdigos.
80
Copyright IBM Corp. 2007
81
Estructura de los Pseudocdigos La estructura recomendada para los algoritmos en pseudocdigo es:
82
Copyright IBM Corp. 2007
Resumen Ahora que ud. ha completado esta unidad, debe ser capaz de: Listar las caractersticas del Diseo Estructurado. Definir los conceptos de diseo Top-Down. Describir los Diagramas de Estructura, Diagramas de Flujo y Diagramas de Nassi Schederman. Definir el concepto de Pseudocdigo.
84
Copyright IBM Corp. 2007
Unidad 3
Programacin Estructurada
85
Copyright IBM Corp. 2007
Objetivos del Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Conocer las tcnicas de programacin estructurada. Trabajar con las estructuras secuenciales. Trabajar con las estructuras selectivas. Trabajar con las estructuras repetitivas. Conocer la anidacin de bucles y condicionales. Realizar el control de datos de entrada.
86
Copyright IBM Corp. 2007
Estructuras Secuenciales Una instruccin sigue a otra en secuencia, es decir, la salida de una instruccin es la entrada de la siguiente.
FLUJOGRAMA
DIAGRAMAS N-S
PSEUDOCDIGO
Leer num num = num * 2 Escribir num
87
Copyright IBM Corp. 2007
Estructuras Secuenciales: Ejemplo Problema: Obtener la edad de una persona en meses, si se ingresa su edad en aos y meses. Ejemplo: Si se ingresan 3 aos 4 meses debe mostrar 40 meses.
88
Copyright IBM Corp. 2007
anios
FIN
89
Copyright IBM Corp. 2007
Estructuras Secuenciales: Ejemplo2 Un instructor prepara tres modelos de exmenes para tres salones en un curso de programacin. El instructor tarda un tiempo diferente para revisar cada modelo de examen: 5 min en el modelo del saln A. 8 min en el modelo del saln B. 6 minutos en el modelo del saln C. Dadas las cantidades de estudiantes en cada saln, cuntas horas y minutos tardar el instructor en revisar los exmenes de todos los salones?.
90
Copyright IBM Corp. 2007
tiempoA = estA * 5, tiempoB = estB * 8, tiempoC = estC * 6, tiempoT = tiempoA + tiempoB + tiempoC
horasT = tiempoT / 60
91
Estructuras Selectivas Permiten que el algoritmo tome decisiones y ejecute u omita algunos procesos dependiendo de que se cumpla una condicin. En funcin del resultado lgico de la condicin (verdadero o falso) se ejecuta un conjunto de instrucciones u otro. Son tambin denominadas estructuras de control de flujo, estructuras condicionales o de toma de decisiones. Hay tres tipos: Simples. Dobles. Mltiples.
92
Copyright IBM Corp. 2007
Estructura Selectiva Simple Es la estructura condicional elemental y bsica. Se representa: S <condicin> entonces <acciones> Fin S En la estructura condicional simple se evala la condicin: Si el resultado es verdadero se ejecuta el conjunto de acciones asociadas al bloque. Si el resultado es falso, no se ejecuta accin alguna.
93
Copyright IBM Corp. 2007
FLUJOGRAMA
DIAGRAMAS N-S
PSEUDOCDIGO
94
Copyright IBM Corp. 2007
Estructura Selectiva Simple: Ejercicio Solicite un nmero al usuario e imprima su valor absoluto. El valor absoluto de un nmero es: Si es positivo: el mismo valor. Si es negativo: el valor cambiado de signo.
95
Copyright IBM Corp. 2007
algoritmo valor_absoluto var numero: entero inicio mostrar Ingrese un nmero entero: leer numero si numero < 0 entonces numero = numero * (-1) fin si mostrar El valor absoluto es: numero fin valor_absoluto
96
Copyright IBM Corp. 2007
Estructura Selectiva Doble La estructura selectiva doble evala la condicin: Si es verdad: se ejecuta el conjunto de acciones asociadas a la parte entonces. Si es falso se ejecutan el conjunto de acciones asociadas a la parte sino.
FLUJOGRAMA
No acciones Si Si acciones acciones acciones acciones No
DIAGRAMAS N-S
condicin
PSEUDOCDIGO
condicin
97
Copyright IBM Corp. 2007
Estructura Selectiva Doble: Ejemplo Dados dos nmeros enteros que se leen por teclado, comprelos y muestre un mensaje en pantalla que anuncie el resultado de la comparacin. Presente el algoritmo como: Diagrama de flujo. Pseudocdigo.
98
Copyright IBM Corp. 2007
Estructuras Selectivas de Alternativa Mltiple Son estructuras que evalan mltiples alternativas que se generan de una condicin o una expresin que puede tomar n valores distintos. De acuerdo al valor de la expresin, en un momento dado se ejecutan las acciones correspondientes al valor que haya tomado la expresin. Equivale a un conjunto de condiciones anidadas. En muchos lenguajes de programacin se conocen como sentencias Case o Switch.
99
Copyright IBM Corp. 2007
Estructuras Selectivas de Alternativa Mltiple1 La estructura selectiva de alternativa mltiple se representa: Segn sea <expresin> <valor1>: <acciones 1> <valor2>: <acciones 2> [<otro> : <acciones n>] Fin Segn Las acciones asociadas al valor otro se ejecutan cuando la expresin no toma ninguno de los valores que aparecen antes. Se le conoce tambin como alternativa Otherwise o Else.
100
FLUJOGRAMA
DIAGRAMAS N-S
PSEUDOCDIGO
Expresin Expresin V1 V2 V3 V4 Segn sea <expresin> <valor1>:<acciones> <valor2>:<acciones> <valor3>:<acciones> <valor4>:<acciones> [<otro> :<acciones>] Fin segn
V1
V2
V3
V4
acciones
101
Escribir un programa que dada una nota entera, presente por pantalla un mensaje acorde a la nota suministrada segn un rango de valores. Para un rango de valores: Leer una nota y escribir en pantalla la calificacin Var nota: entero Leer nota Segn sea nota 1..4: escribir suspenso 5..6: escribir aprobado 7..8: escribir Notable 9: escribir Sobresaliente 10: escribir Cuadro de honor Fin segn
102
Copyright IBM Corp. 2007
Estructuras Selectivas de Alternativa Mltiple: Ejemplo2 Una aseguradora de vehculos tiene diferentes porcentajes de prima dependiendo de los aos de antigedad del vehculo. 1 ao pagan el 5% de su valor, 2 aos el 8%, 3 aos el 10%, 4 aos el 12%, 5 aos o ms pagan el 15%. Elabore un programa que solicite el valor del vehculo y los aos de antigedad, y muestre por pantalla el valor de la prima.
103
Estructuras Condicionales Anidadas Las estructuras anidadas se forman cuando las estructuras se escriben unas dentro de otras. Se pueden tener estructuras condicionales anidadas. Sirven para evaluar un conjunto de condiciones en forma secuencial y separada. La ventaja de anidar sentencias condicionales, es que cuando se cumple una de las condiciones no hay que seguir evaluando las condiciones que le siguen.
104
Estructuras Condicionales Anidadas1 Sintaxis: Si <condicion1> Entonces <sentencia1> Sino si <condicion2> Entonces <sentencia2> Sino si <condicion2> Entonces <sentencia3> Fin si Fin si Fin si
105
Copyright IBM Corp. 2007
Estructuras Repetitivas o de Ciclo La estructura repetitiva o de ciclo, es la estructura de programacin que contiene o representa un bucle o conjunto de instrucciones que se repiten un nmero finito de veces. Cada repeticin del bucle se llama una iteracin. Todo bucle tiene asociado una condicin, que es la que va a determinar si se ejecuta el bucle y hasta cuando. Existen tres tipos de bsicos de estructuras repetitivas: Mientras-hacer (While do) Repetir hasta (Repeat until) Desde (For)
106
Estructura Repetitiva Mientras-Hacer La estructura Mientras-Hacer es aquella en que el cuerpo del bucle se repite mientras se cumple una determinada condicin. La condicin de entrada se evala antes de realizar cualquier iteracin del bucle. Si la condicin no se cumple, el ciclo no se ejecuta y el programa contina con la secuencia de acciones siguientes al ciclo Mientras-Hacer.
107
Estructura Repetitiva Mientras-Hacer1 Funcionamiento de la estructura Mientras-Hacer: La condicin del Mientras-Hacer se evala al principio, antes de entrar en l. Si la condicin es verdadera, se ejecutan las acciones del Mientras-Hacer. Despus de ejecutar la ltima accin, se repite el proceso de evaluacin de la condicin; si la condicin es verdadera, se repite el ciclo. Este proceso se conoce como un bucle y contina hasta que la condicin sea falsa. Cuando la condicin evala a falso se prosigue con la sentencia siguiente del programa.
108
FLUJOGRAMA
DIAGRAMAS N-S
PSEUDOCDIGO
No condicin
Si
acciones
109
cont < 10
fin
algoritmo suma Var n, cont, suma:entero inicio cont = 0 suma = 0 mientras cont < 10 hacer leer n suma = suma + n cont = cont + 1 fin mientras mostrar La suma es: suma fin suma
110
Estructura Repetitiva: Repetir-Hasta Es una estructura de ciclo en la que la condicin se evala despus de realizar la primera iteracin del bucle. Se repite el bucle mientras la condicin del ciclo, al final del bloque de sentencias, se mantenga en falso. Cuando la condicin evala a verdadero se sale del bucle.
111
Estructura Repetitiva: Repetir-Hasta1 Funcionamiento: Se repite el bucle hasta que la condicin sea verdadera. El bucle se repite y ejecuta mientras la condicin sea falsa. La condicin se evala siempre al final del bucle. Si es falsa volvemos a ejecutar las acciones. Si es verdad se sale del bucle. Dado que la condicin se evala al final, se habr pasado al menos una vez por el bucle. Cuando un bucle se tenga que ejecutar como mnimo una vez se puede usar esta estructura.
112
Copyright IBM Corp. 2007
FLUJOGRAMA
DIAGRAMAS N-S
PSEUDOCDIGO
<Acciones>
Acciones
condicin
falso
verdadero
113
suma=0 cont = 0
Leer n
no
cont = 10
si
algoritmo suma entero n, cont, suma inicio cont = 0 suma = 0 repetir leer n suma = suma + n cont = cont + 1 Hasta cont = 10 mostrar La suma es: suma fin
Mostrar suma
fin
114
Estructura Repetitiva: Desde La estructura Desde es una estructura de ciclo que se utiliza cuando se sabe el nmero exacto de veces que se va a ejecutar el bucle. El bucle lleva asociado una variable que se denomina variable ndice, a la que se le asigna un valor inicial y se establece cul va a ser su valor final. En cada iteracin del bucle la variable ndice se incrementa o decrementa en un valor constante y de manera automtica.
115
FLUJOGRAMA
v = vi no
DIAGRAMAS N-S
PSEUDOCDIGO
<acciones>
116
v <> vf
no
si Leer n
algoritmo suma entero n, v, vi, vf, suma inicio vi = 0 vf = 10 suma = 0 desde v= vi hasta v=vf leer n suma = suma + n fin desde mostrar La suma es: suma fin suma
Mostrar total
fin
117
cont = 0 cont = 0 suma = 0 suma = 0 Mientras(cont <> 10) Repetir Leer num Hacer suma= suma + num Leer num cont= cont + 1 suma= suma + num Hasta (cont == 10) cont= cont + 1 Fin mientras
118
Estructuras Anidadas Las estructuras anidadas se forman cuando las estructuras se escriben unas dentro de otras. Se pueden colocar los bucles unos dentro de otros o condicionales dentro de condicionales. Ejemplo: Un ciclo desde puede tener dentro de sus sentencias otro ciclo desde o cualquier otra estructura repetitiva. Ejemplo: La evaluacin de una condicin puede llevar a la evaluacin de otra condicin. No existen limitaciones formales en cuanto al nmero de sentencias y estructuras anidadas que se pueden colocar en un mismo bloque de cdigo, depende del lenguaje de programacin que se est usando
119
Copyright IBM Corp. 2007
120
Bucles Anidados Al anidar bucles hay que tener en cuenta que el bucle interno funciona como una sentencia ms en el bloque del bucle externo. Por cada iteracin del bucle externo se van a ejecutar todas las iteraciones del bucle interno. Los bucles que se anidan pueden ser de igual o de distinto tipo.
121
Bucles Anidados: Ejemplo Ejemplo: Existen 8 profesores y cada uno dicta 5 cursos. Se pide ingresar las asignaturas de cada profesor.
Desde i=1 hasta 8 Desde k=1 hasta 5
Escribir Profesor i introduzca su asignatura n k
Leer asignatura Fin desde {instruccin desde interno} Fin desde {instruccin desde externo}
122
Ejercicio 1 Desarrollar un algoritmo para determinar y mostrar los mltiplos de 5 comprendidos entre 1 y 100. Use las estructuras: Mientras hacer Repetir hasta Desde
124
Ejercicio 2 Leer 100 nmeros y determinar la media de los nmeros positivos y la media de los nmeros negativos. El cero no se considera ni negativo ni positivo. Use las estructuras: Mientras hacer Repetir hasta Desde
125
Ejercicio 2: Solucin
Leer 100 nmeros y determinar la media de los nmeros positivos y la media de los nmeros negativos. El cero no se considera ni negativo ni positivo inicio var np, nn, np = 0 , nn desde i = 1 leer numero si numero > entonces sp, sn, mediapos, medianeg, numero : enteros = 0, sp = 0 , sn = 0 hasta 100 0 np = np + 1 sp = sp + numero
sino si numero < o entonces nn = nn + 1 sn = sn + numero fin si fin si fin desde mediapos = sp / np medianeg = sn / nn mostrar media de los numeros positivos, mediapos mostrar media de los numeros negativos, medianeg fin
126
Copyright IBM Corp. 2007
Ejercicio 3 Dado un nmero determinar la suma de sus dgitos. Ejemplo: Nmero = 6542 Suma_digitos = 6 + 5 + 4 + 2 = 17
127
Ejercicio 3: Solucin
Dado un nmero entero determinar la suma de sus dgitos. algoritmo digitos inicio var n, suma, residuo : entero mostrar Ingrese un nmero entero: leer n suma = 0 mientras n <> 0 hacer residuo = n mod 10 suma = suma + residuo n = n div 10 fin mientras mostrar La suma es: suma fin digitos
128
Control de Entrada de Datos Cuando en los algoritmos se ingresan los datos desde un dispositivo de entrada, como una lista de valores, se utilizan bucles. Se requiere de alguna forma de control para finalizar el bucle de entrada de datos. Los casos a considerar son: Usar un valor centinela que determina el fin del bucle. La lectura secuencial de archivos. Se conozca el nmero exacto de veces que ejecuta una accin o proceso. El control de datos para no permitir datos errneos.
Copyright IBM Corp. 2007
129
Control de Entrada: Uso de Centinela Un centinela es un mtodo para terminar un bucle que lee una lista de valores. El centinela es un valor especial que indica el fin de los datos de entrada. El bucle se va a repetir mientras no se lea el valor centinela. La primera lectura se va a realizar fuera del bucle: Si al ingresar el dato, ste coincide con el valor centinela no se entra al bucle y se sigue con el resto del algoritmo. En caso contrario, se entra en el bucle. Se recomienda utilizar una estructura mientras.
130
Ejemplo 2 : Leer y sumar las notas de los estudiantes y terminar cuando se lea un valor negativo.
suma = 0 Leer nota mientras (nota >= 0) hacer suma = suma + nota Leer nota Fin mientras
131
Copyright IBM Corp. 2007
132
133
Se Conoce la Cantidad de Datos de Entrada Cuando se conoce la cantidad de datos de entrada la mejor opcin para realizar el control de entrada es utilizar un ciclo Desde...Hasta. Normalmente, el nmero de veces que se va a repetir el proceso es un valor de entrada o se tiene de otra fuente. Una vez que se obtiene este valor, se le asigna a la variable de ndice para el ciclo Desde. Se efecta la operacin hasta que se cumpla el nmero de veces deseado.
134
135
Control de Entrada: Evitar Datos Errneos El control de datos de entrada para evitar el ingreso de datos errneos, se usa cuando se quiere forzar al usuario a que introduzca datos correctos. Ejemplo: un valor numrico dentro de un rango determinado. En estos casos se recomienda usar un ciclo Repetir...Hasta.
136
Ejemplo:
var opcion : entero opcion = 0 repetir mostrar Menu: mostrar 1. Crear Archivo mostrar 2. Borra Archivo mostrar 3. Incluir Registro mostrar 4. Salir del sistema ingrese el numero de la opcion : leer opcion hasta (opcion >= 1) y (opcion <= 4)
137
Resumen Ahora que ud. ha completado esta unidad, debe ser capaz de: Conocer las tcnicas de programacin estructurada. Trabajar con las estructuras secuenciales. Trabajar con las estructuras selectivas. Trabajar con las estructuras repetitivas. Conocer la anidacin de bucles y condicionales. Realizar el control de datos de entrada.
138
Unidad 4
Procedimientos y Funciones
139
Objetivos de Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Definir qu son las funciones, sus caractersticas y sintaxis. Definir los procedimientos, sus caractersticas y sintaxis. Explicar el mbito de las variables. Explicar la comunicacin entre subprogramas. Definir qu es la recursividad.
140
Introduccin La programacin modular es una tcnica de la programacin que se apoya en el diseo descendente y en la filosofa de divide y vencers. Se trata de dividir el problema en problemas ms simples o ms pequeos. Cada subproblema se implementa en un mdulo o subrprograma independiente. Cada subprograma debe cumplir cabalmente una tarea especifica.
141
Clculo de Impuesto
Calcular Ingreso
Calcular Impuesto
142
Ventajas de la Programacin Modular Ventajas de la Programacin Modular: Simplifica el diseo. Disminuye la complejidad de los algoritmos. Disminuye el tamao total del programa. Ahorra en tiempo de programacin porque promueve la reusabilidad del cdigo. Favorece el trabajo en equipo. Facilita la depuracin y prueba. Facilita el mantenimiento. Permite la estructuracin de libreras especficas.
143
SubProblema 1
SubProblema 2
SubProblema 3
SubPrograma 1
SubPrograma 2
SubPrograma 3
144
Subprogramas Un subprograma, mdulo o subalgoritmo puede realizar las mismas acciones que un programa. Aceptar datos que se pasan al hacer la llamada. Realizar clculos o acciones, definir variables y llamar a otros subprogramas. Devolver o no resultados. El programa utiliza el subprograma para un propsito especfico. El subprograma recibe datos desde el programa y le devuelve resultados. El programa invoca al subprograma, ste ejecuta la tarea y a continuacin devuelve el control al programa.
145
Programa
Subprograma 1
Subprograma 1.1
Subprograma 2
Algoritmo
Subalgoritmos
146
147
Funciones Una funcin es, desde el punto de vista matemtico, una operacin que toma uno o varios operandos y devuelve un resultado. Una funcin, desde el punto de vista algortmico, es un subprograma que toma uno o varios parmetros como entrada y devuelve un nico resultado. Este resultado est asociado al nombre de la funcin, por esto, al invocar una funcin su valor de retorno se le asigna a una variable.
148
Clasificacin de las Funciones Hay dos tipos de funciones: Internas o Incorporadas: son funciones proporcionadas por cualquier lenguaje de programacin de alto nivel, y se clasifican en aritmticas, estadsticas, manejo de caracteres, etc. Externas o del usuario: son funciones que define el programador con el propsito de ejecutar alguna tarea especfica. Por lo general, se usan cuando se trata de hacer alguna tarea que ser requerida en varias ocasiones por el algoritmo principal o subalgoritmos.
149
Declaracin de una Funcin Toda funcin presenta la siguiente estructura: Una cabecera con: Identificador o Nombre. Lista de parmetros (opcional). El tipo de dato de retorno de la funcin. El cuerpo de la funcin. La sintaxis para la declaracin de una funcin depende del lenguaje de programacin utilizado.
150
funcion <nombre_funcion> (par1:tipo1,..,parn:tipon): tipo_retorno var <variables locales de la funcion> inicio <acciones> retorno <valor> fin <nombre_funcion>
nombre_funcion: nombre asociado a la funcin. Un nombre de identificador vlido. par1, parn: Lista de parmetros formales o argumentos.
151
152
Invocar una Funcin Para llamar o invocar a una funcin se coloca el nombre de la funcin y entre parntesis se aaden los parmetros reales que necesita la funcin. Nombre_funcion(lista_parmetros_actuales) La llamada se realiza en una sentencia de asignacin, una expresin o una sentencia de salida. Los parmetros reales pueden ser variables, expresiones e incluso constantes. Hay una correspondencia posicional entre los parmetros reales y los formales. Cada parmetro real debe pertenecer al mismo tipo de dato de su correspondiente parmetro formal.
153
Pasos para Hacer la Llamada a una Funcin Una llamada a la funcin implica los siguientes pasos: Cuando se efecta la llamada se cede el control a la funcin. Se asigna el valor de cada parmetro real a cada parmetro formal correspondiente. Si no hay coincidencia entre los tipos o el nmero de los parmetros formales con los reales, se produce un error. Si la llamada a la funcin es vlida, se ejecutan las acciones de la funcin hasta que se encuentre una instruccin del tipo retorno <valor>. Pueden existir varias sentencias de retorno en la misma funcin, normalmente dependen de sentencias condicionales para su ejecucin.
155
Copyright IBM Corp. 2007
1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6. 7.
funcion mitad (n: entero): real var med: real inicio med = n / 2 retorno med fin mitad Algoritmo calcular_mitad var num: entero inicio escribir Introduzca un nmero entero para hallar su mitad: leer num escribir La mitad de num es mitad(num) fin
156
Funcin: Ejercicio Escribir un algoritmo que determine la mayor de tres cantidades enteras, utilizando una funcin que determina la mayor de dos cantidades enteras.
157
Funcin: Ejercicio1
funcion maximo ( x:entero, y:entero): entero inicio entero max si (x > y) entonces max = x sino max = y fin si retorno max fin maximo algoritmo calcular_max_tres_enteros var entero a,b,c,d inicio mostrar introduzca tres valores enteros Leer a,b,c d = maximo(a,b) d = maximo(c,d) mostrar El maximo es:, d fin
158
Copyright IBM Corp. 2007
Funcin: Ejercicio2 Escribir una funcin que calcule el valor de xn Siendo: x un valor real n un valor entero
159
Funcin: Ejercicio3
funcion potencia(entero: n, real: x): real var real y entero i inicio si x = 0 entonces y = 0 retornar y sino y = 1 desde i = 1 hasta i = abs(n) hacer y = y*x fin desde si n > 0 entonces retornar y sino retornar (y = 1 / y) fin si fin si fin funcion
160
Copyright IBM Corp. 2007
Procedimientos Un procedimiento es un subprograma o un subalgoritmo que realiza una determinada tarea. No tiene ningn valor asociado a su nombre como ocurre en las funciones. Si devuelve informacin, lo hace a travs de parmetros. Al invocar a un procedimiento: Se le cede el control al procedimento. Se ejecuta el procedimento. Cuando termina se devuelve el control a la instruccin siguiente al punto donde se efectu la llamada al procedimiento.
161
Diferencias entre Funciones y Procedimientos Las funciones estn diseadas para devolver un nico valor. Un procedimiento puede devolver ningn valor o varios valores por medio de sus argumentos o parmetros. Ninguno de los resultados devueltos por el procedimiento se asocia a su nombre como ocurre con la funcin. La llamada a una funcin puede formar parte de una expresin. La llamada a un procedimiento es una instruccin aislada que por s sola no puede formar parte de una expresin.
Copyright IBM Corp. 2007
162
Sintaxis de un Procedimiento La sintaxis para declarar un procedimiento es similar a la de la definicin de una funcin, excepto que no se coloca un tipo de retorno asociado. La cabecera est formada por: El nombre del procedimiento, que debe ser un identificador vlido y significativo. Entre parntesis los parmetros o argumentos formales que requiere el procedimiento. En el cuerpo del procedimiento se colocan todas las sentencias necesarias para cumplir con su tarea. No habr ninguna sentencia de tipo retorno <valor>.
163
Sintaxis de un Procedimiento1
procedimiento <nombre> (par1:tipo1,,parn:tipon) var <variables locales del procedimiento> inicio <acciones> fin nombre: nombre asociado al procedimiento. par1,,parn: Lista de parmetros formales o argumentos
164
Pasos para Hacer la Llamada a un Procedimiento Desde el programa principal o subrutina, se coloca el nombre del procedimiento con su lista de parmetros reales entre parntesis, como una sentencia nica. Tiene que existir el mismo nmero de parmetros formales y parmetros reales. El tipo de dato de cada parmetro real, tiene que coincidir con el del parmetro formal asociado. Si no se cumple alguna de estas condiciones se produce un error en la llamada al procedimiento. La sintaxis de llamada al procedimiento es: Nombre_proc (lista de parmetros reales)
165
Llamada a un Procedimiento
1. procedimiento mitad (num:entero, ent-sal med:real) 2. inicio 3. med = num / 2 4. fin mitad 1. Algoritmo calcular_mitad 2. var 3. n: entero 4. mit: real 5. inicio 6. escribir Introduce un nmero 7. leer n 8. mitad (n, mit) 9. escribir La mitad es mit 10. fin
166
mbito: Variables Globales y Locales Las variables utilizadas en los programas principales y subprogramas se clasifican en dos tipos: Variables locales Variable globales La parte del programa/algoritmo en que una variable se define se conoce como el mbito. El mbito de un identificador ya sea variable, constante o funcin, entre otros, se refiere a la parte del programa que lo conoce y por tanto lo puede usar.
167
mbito Global y Local Existen dos tipos de mbito para los identificadores: mbito Global. mbito Local.
168
Variables de mbito Global Las Variables de mbito Global se refieren a los identificadores que se declaran dentro del programa principal y fuera de cualquier otro bloque de cdigo. Al ser declarados de esta forma los identificadores globales estarn disponibles a lo largo del programa. Se pueden usar en cualquier parte del programa, de all su nombre de globales.
169
Variables de mbito Local Las Variables de mbito Local se refieren a los identificadores declarados dentro de un bloque de cdigo diferente al programa principal, como por ejemplo una subrutina o procedimiento. Como regla general todo identificador slo es visible y accesible: Dentro del bloque de cdigo que lo declara. Dentro de los bloques anidados que este ltimo pueda tener. Lo contrario no es cierto, es decir, los identificadores declarados en un subbloque de cdigo no son visibles ni accesibles desde bloques de cdigo externos.
Copyright IBM Corp. 2007
170
Variable Local
Una variable local es aquella que est declarada y definida dentro de un subprograma o subbloque de cdigo. Su mbito coincidir con el mbito del subprograma en la que est definida. La variable no tiene ningn significado, no se conoce y no se puede acceder a ella, desde fuera del subprograma o bloque de cdigo donde se declara. Tiene una posicin de memoria distinta a la de cualquier otra variable del programa, incluso si es de una variable que tiene el mismo nombre pero que est definida fuera del subprograma. Las variables locales a un subprograma se definen en la parte de la definicin de variables del mismo. Los parmetros formales de un subprograma se comportan dentro de ste como si fueran variables locales del subprograma. Si se tiene una variable local con el mismo identificador que una variable global, las referencias dentro del bloque se harn a la variable local y no a la variable global. Copyright IBM Corp. 2007
171
Variable Global La variable global es aquella que est definida a nivel del programa. Su mbito es el programa o algoritmo principal y todos los subprogramas que dependen de ste. Una variable global se puede acceder desde cualquiera de los subprogramas y el programa principal, salvo que alguno de esos subprogramas tenga definida una variable local con el mismo nombre que la variable global.
172
mbito de Variables en Procedimientos Anidados El anidamiento consiste en que dentro de un procedimiento se puede definir otro procedimiento. La anidacin de procedimientos no se permite en todos los lenguajes. Plantean ms problemas en cuanto al mbito. Una variable local se conoce en el procedimiento en el que est definida y en todos los procedimientos anidados que componen el mbito de dicho procedimiento. Si se tienen dos variables declaradas con el mismo identificador, una local a un procedimiento anidado y otra global, al hacer referencia al identificador en el procedimiento anidado, siempre se va a referir a la variable local porque se considera el mbito ms restringido.
Copyright IBM Corp. 2007
173
A B C
D E F G
D E F G
174
PP var a, b
VARIABLE a
AMBITO PP PP
MBITO SUBPROGRAMA PP, P2 PP, P1, P1.1, P2 P1, P1.1 P1, P1.1 P1 P1.1 P1.1 P1.1 P2 P2
P1 var a, c, d
b a c d d e f c d
P1.1 var d, e, f
P2 var c, d
175
Comunicacin entre Subprogramas La comunicacin entre subprogramas se lleva a cabo mediante el paso de parmetros. Cuando se invoca a una funcin o procedimiento se le pasa a travs de los parmetros la informacin que necesita. En el caso de un procedimiento, tambin se devuelven los resultados a travs de los parmetros. Al hacer la llamada se pasa la informacin a travs de los parmetros reales. La correspondencia entre parmetros formales y reales se puede realizar de dos formas: Por correspondencia posicional. Por correspondencia de nombre implcito.
Copyright IBM Corp. 2007
176
Correspondencia Posicional En la correspondencia posicional se emparejan o hacen corresponder los parmetros formales y reales segn la posicin que ocupan, es decir, el orden de declaracin de izquierda a derecha. Tiene que existir el mismo nmero de parmetros formales y reales. El tipo de parmetro formal debe ser el mismo de su correspondiente parmetro real. Ejemplo: Declaracin del procedimiento: Proc(x: entero, y: real) Una llamada vlida es: Proc(8, a)
Copyright IBM Corp. 2007
177
Correspondencia por Nombre Implcito En la correspondencia por nombre implcito, en la llamada al subprograma se coloca explcitamente a qu parmetro formal corresponde cada parmetro real. En la llamada se coloca el nombre del parmetro formal seguido de dos puntos (:) y el nombre del parmetro real que se pasa. Ejemplo: Declaracin del procedimiento: Proc(x: entero, y: real) Llamadas vlidas: Proc(x: 8, y: a) Proc(y: a, x: 8)
Copyright IBM Corp. 2007
178
Tipos de Parmetros en los Procedimientos Existen tres tipos bsicos: De entrada. De salida. De entrada-salida.
179
Parmetro de Entrada del Procemiento Los parmetros de entrada son parmetros que slo aportan el valor que tienen como entrada al subprograma. En las funciones todos sus parmetros son de entrada. Estos parmetros slo pueden ser ledos, pero no modificados. Si se modifica el parmetro dentro del subprograma, esa modificacin no va a tener efecto fuera del subprograma.
Copyright IBM Corp. 2007
180
Parmetro de Salida del Procemiento Los parmetros de salida se usan slo y exclusivamente para devolver resultados a travs de ellos. Su valor al hacer la llamada al subprograma no es relevante. El valor que tenga el parmetro va a tener sentido cuando termine la ejecucin del subprograma. Un parmetro de este tipo tericamente nunca se puede leer, slo se va actualizar o modificar.
181
Parmetro de Entrada-Salida del Procemiento En los parmetro de entrada-salida del procedimiento, el valor del parmetro tiene importancia tanto a la entrada como a la salida del subprograma. Aporta informacin cuando se llama al subprograma y devuelve, a travs de l, los resultados cuando se termina la ejecucin del subprograma.
182
Mtodos de Paso de Parmetros Los mtodos ms usados para el pase de parmetros en los procedimientos y funciones son: Paso de parmetros por copia o valor. Paso de parmetros por referencia.
183
Paso de Parmetros por Copia o Valor Las caractersticas del pase de parmetros por valor son: El subprograma invocado no puede modificar el valor de los parmetros reales. Al realizar la llamada al subprograma, se copia el valor del argumento en el parmetro formal de la funcin. El parmetro formal del subprograma tiene asociado una direccin de memoria diferente a la direccin de memoria del parmetro real. Se puede cambiar el valor del parmetro dentro del subprograma y no afectar el argumento transferido. El parmetro real puede ser: una constante, expresin o variable.
Copyright IBM Corp. 2007
184
Z:entero)
14
Definicin
LLamada
En el paso por valor: Slo importa el valor del argumento. No se hace diferencia si un argumento es variable, constante o expresin.
185
Copyright IBM Corp. 2007
Resultado:
187
188
14
Posiciones de Memoria
Procedimiento1 (A, B, C)
LLamada
En el paso por referencia: En la llamada al procedimiento se pasa la direccin del parmetro real o actual. Una referencia al parmetro real se trata como una referencia a la posicin de memoria cuya direccin se ha pasado. El rea de almacenamiento o posiciones de memoria se utiliza para 189 pasar informacin de entrada y/o salida, en ambas direcciones.
Resultado:
190
Parmetro Formal
Parmetro Formal
191
Recursividad
La recursividad o recursin, es una herramienta muy til en la resolucin de problemas porque permite resolver problemas complicados, dividindolos en problemas ms sencillos. Un subprograma recursivo es un subprograma que se llama a s mismo durante su ejecucin. Es decir, dentro del cdigo del subprograma se tiene una llamada con el nombre del subprograma. La llamada recursiva no puede continuar indefinidamente porque el programa no terminara nunca. procedimiento infinito() inicio infinito() fin
Copyright IBM Corp. 2007
192
Recursividad...1 Todo programa recursivo debe tener alguna condicin que ponga fin a la recursividad, un punto en el que el subprograma deje de llamarse a s mismo cuando se cumpla la condicin. El subprograma tiene que funcionar para algunos parmetros sin necesidad de auto-llamadas. Mediante sucesivas llamadas se va acercando a esos parmetros iniciales o condicin de parada. Los parmetros iniciales tienen generalmente soluciones elementales calculables de manera sencilla que luego utilizan para armar la solucin completa. El conjunto de parmetros iniciales y sus soluciones son los llamados casos base.
Copyright IBM Corp. 2007
193
Partes de un Subprograma Recursivo Los subprogramas recursivos deben contener siempre dos partes: Una llamada a s mismo (recursiva), normalmente con el valor de los parmetros que cambian en cada llamada. Una condicin de terminacin o salida, que es la condicin que no produce ninguna autollamada.
194
Recursividad: Ejemplo 1 Ejemplo: funcin factorial Calcula el factorial de un nmero entero no negativo, partiendo de las siguientes definiciones : factorial (1) = 1 factorial (x) = x*factorial(x-1), para x>1 Ejemplo de clculo del factorial, utilizando la definicin: 4! = 4 * 3! = 4 * 3 * 2! = 4 * 3 * 2 * 1! = 4 * 3 * 2 * 1 * 0! = 4 * 3 * 2 * 1 * 1 = 24
Copyright IBM Corp. 2007
195
Recursividad: Ejemplo 11
Funcin recursiva que calcula el factorial: factorial (1) = 1 factorial (x) = x*factorial(x-1), para x>1 Algoritmo Recursivo
funcion factorial(x:integer):integer inicio si x = x entonces retorna 1 sino retorna (x * factorial(x-1)) fin si fin
196
Recursividad: Ejemplo 12
1. 2. 3. 4. 5. 6. 7. x = 4 Llamada a factorial(4); x = 1 : no Retorna 4 * factorial (3) x = 3 Llamada a factorial(3); x = 1 : no Retorna 3 * factorial (2) x = 2 Llamada a factorial(2); x = 1 : no Retorna 2 * factorial (1). x = 1 Llamada a factorial(1); numero = 1 : si Retorna 1 con ste valor se regresa a completar la invocacin: Con factorial(1) = 1, se regresa a completar: factorial(2) := 2 * 1 Con factorial(2) = 2, se regresa a completar : factorial(3) := 3 * 2 Con factorial(3) = 6, se regresa a completar : factorial(4) := 4 * 6 por lo que factorial(4) = 24 ste ser el valor que la funcin factorial devolver al programa que la haya invocado con un valor de parmetro igual a 4 .
197
Recursividad: Ejemplo 13
Para numero = 4, la funcin realiza los siguientes pasos :
funcion factorial(x:integer):integer inicio si (x > 1) entonces retorna (x*factorial(x-1)) sino retorna 1 fin si fin
x=4 Factorial(4)=4*Factorial(3) retorno x=3 Factorial(3)=3*Factorial(2) retorno x=2 Factorial(2)=2*Factorial(1) retorno x=1 Factorial(1)=1 retorno Factorial=1 Factorial=2 Factorial=6 Factorial=24
198
Recursividad: Ejemplo 2 Escribir una funcin recursiva que tome como entrada: un nmero un exponente
y retorne la potencia del nmero. Se asume que el valor del exponente es un nmero positivo.
199
Recursividad: Ejemplo 21
Funcion Potencia (Base, Exponente: entero): entero inicio si Exponente = 1 entonces Potencia = Base sino Potencia = Base * Potencia ( Base, Exponente - 1) fin si Fin Potencia
Al ejecutar Potencia (2,3) se obtiene como respuesta 8.
200
Copyright IBM Corp. 2007
Recursividad: Ejemplo 22
8
Potencia(2,3) inicio si 3=1 entonces Potencia=Base sino Potencia = 2*Potencia(2,2) fin 4 Potencia(2,2) inicio si 2=1 entonces Potencia=Base sino Potencia = 2*Potencia(2,1) fin 2 Potencia(2,1) inicio si 1=1 entonces Potencia=B ase fin
201
Copyright IBM Corp. 2007
Recursividad: Ejemplo 3 Escribir un procedimiento que tome como entrada una cadena de caracteres y su la longitud, y escriba la cadena en orden inverso. Ejemplo: entrada: Venezuela - salida: aleuzeneV El programa debe usar la recursividad para la escritura inversa.
202
Recursividad: Ejemplo 31
Procedimiento invertir_recursivo(longitud:entero) var car: char inicio si (longitud <= 1) entonces leer caracter escribir caracter sino leer caracter invertir_recursivo(longitud-1) escribir caracter fin si fin invertir_recursivo
203
Copyright IBM Corp. 2007
204
Recursin vs Iteracin Las funciones y procedimientos recursivos se pueden utilizar cuando los datos del problema estn organizados en una estructura de datos que se define recursivamente. Si se puede obtener un algoritmo no recursivo y es menos complejo que el recursivo, es mejor utilizar la versin no recursiva. No usar la recursividad a menos que se tenga un medio para terminar las llamadas recursivas. Cada llamada recursiva requiere la asignacin de espacio de memoria para todas las variables locales, parmetros por valor y la direccin de retorno. Por lo que cada llamada utiliza memoria, lo que representa una limitacin.
Copyright IBM Corp. 2007
205
Resumen Ahora que ud. ha completado esta unidad, debe ser capaz de: Definir qu son las funciones, sus caractersticas y sintaxis. Definir los procedimientos, sus caractersticas y sintaxis. Explicar el mbito de las variables. Explicar la comunicacin entre subprogramas. Definir qu es la recursividad.
206
Unidad 5
207
Objetivos de Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Conocer las estructuras de datos. Trabajar con arreglos unidimensionales o vectores. Realizar operaciones con arreglos unidimensionales o vectores. Trabajar con arreglos bidimensionales o matrices. Conocer acerca de los arreglos multidimensionales. Entender el almacenamiento de arreglos en memoria.
208
Introduccin Una de las representaciones de datos ms utilizada en la programacin se denomina arreglo (o vector o matriz). Los arreglos se utilizan para almacenar datos consecutivos de un mismo tipo. Los arreglos se usan con frecuencia en los algoritmos de clasificacin, ordenamiento y bsqueda. Los arreglos se clasifican en: Unidimensionales Vectores. Multidimensionales - Matrices.
209
Arreglos (Matriz o Vector) Un arreglo es un conjunto finito, consecutivo y organizado de elementos homogneos. Un arreglo es: Finito: tiene un nmero determinado de elementos. Homogneo: todos los elementos son del mismo tipo. Organizado: existe una forma de referenciar cada elemento del arreglo y de acceder a cada uno de sus elementos de manera independiente. Consecutivo: por la forma en que se almacena o representa un vector en la memoria del computador.
210
Arreglo Unidimensional o Vector El tipo ms simple de arreglo es el arreglo unidimensional o vector. Un arreglo unidimensional constituye una matriz de una sola dimensin. Ejemplo: un arreglo de notas de n elementos. .... ....
Notas(n)
El ndice o subndice de un elemento (1, 2, 3,..., n) designa su posicin en la ordenacin del vector.
211
Arreglos Unidimensionales en Memoria Los vectores se almacenan en la memoria principal de la computadora en posiciones consecutivas.
Ejemplo: un vector de 20 nmeros denominado numero se representa grficamente por 20 posiciones consecutivas de memoria. memoria
numero[1] numero[2] numero[3] direccin x direccin x + 1 direccin x + 2
numero[20]
direccin x + 19
213
Ejemplo: 1. 2. 3. 4.
214
Operaciones con Vectores Las operaciones que se pueden realizar con vectores en el proceso de resolucin de problemas son: Asignacin. Lectura/escritura. Recorrido (Acceso Secuencial). Actualizacin ( Aadir, Eliminar, Insertar). Ordenamiento. Bsqueda.
215
Asignacin de un Dato a una Posicin del Arreglo La operacin de asignacin consiste en asignar un valor dado a una posicin del arreglo, dada por el ndice. La sintaxis es: <nom_arreglo>[indice] = valor Ejemplo: Declaracin del vector: ventas: arreglo[12] de entero
1 2 3 4 60 6 7 8 9 10 11 12
ventas[5] = 60
216
Copyright IBM Corp. 2007
Lectura y Escritura de Datos usando Vector Consiste en usar una posicin del arreglo definida por un ndice, para operaciones de entrada y salida. La sintaxis de la operacin es: 1.Leer <nom_arreglo>[indice] 2.Escribir <nom_arreglo>[indice] Ejemplo: 1.Desde i = 1 Hasta 12
1.Escribir Introduce las ventas del mes i 2.Leer ventas[i]
4.Fin Desde
217
Copyright IBM Corp. 2007
Operaciones con Vectores: Ejemplo 1 Disear un algoritmo que realice lo siguiente: Leer las notas de una clase en un vector. Calcular el promedio de notas. Imprimir las notas mayores al promedio.
219
220
Algoritmo para Insertar un Elemento en un Vector Problema: Escribir un algoritmo para insertar un elemento en una posicin dada del vector. Sea: k la posicin donde se va a insertar el nuevo elemento. n el nmero de elementos almacenados en el vector. Se asume un vector de tamao de al menos n + 1. 1. Desde i= n Hasta k decremento 1
2. 3. 4.
222
223
Eliminar un Elemento del Arreglo1 Algoritmo para eliminar un elemento de una posicin dada del arreglo. Sea: n el nmero de elementos almacenados. k la posicin del elemento a eliminar. Se asume que el arreglo comienza en la posicin 0 1. Desde i = k Hasta 2. A[i] = A[i+1] 3. Fin Desde n - 1
224
Arreglos Unidimensionales: Ejemplo 2 Disear una funcin que reciba dos vectores como parmetros de entrada, la longitud de los vectores y retorne: VERDADERO si los vectores son iguales. FALSO si los arreglos no son iguales.
225
226
Arreglos Unidimensionales: Ejemplo 3 Disear una funcin para determinar si un valor dado existe en un vector. Asuma que los valores en el vector no estn ordenados. La funcin debe aceptar tres parmetros: El nombre de un vector. El valor que debe buscarse en ese vector. El tamao del vector. La funcin debe regresar: El valor 1 si el valor se encuentra en el vector. El valor 0 si la bsqueda es infructuosa.
227
funcion buscar(A[]:arreglo de entero, n:entero, elemento:entero): booleano var encontrado:booleano i:entero inicio i=1 mientras (i <=n && A[i] != elemento) i = i + 1 fin mientras si i > n entonces encontrado = falso sino encontrado = verdadero fin si retorna (encontrado) Fin buscar
228
Copyright IBM Corp. 2007
Arreglos Bidimensionales El arreglo bidimensional o matriz, se puede considerar como un vector de vectores. Es un conjunto de elementos, todos del mismo tipo, donde el orden de los componentes es significativo.
Fila 1 Fila 2 Fila 3 Fila 4 Fila 5 Columna 5 Columna 4 Columna 3 Columna 2 Columna 1
Copyright IBM Corp. 2007
229
Arreglos Bidimensionales...1 Los elementos del arreglo bidimensional se referencian con dos subndices. El primer subndice se refiere a las filas y el segundo a las columnas. Ejemplo: el elemento A[2,3] se refiere al elemento de la segunda fila y tercera columna de la matriz A y tiene el valor de 50.
1 2 3 4 5
230
50
5
Copyright IBM Corp. 2007
Arreglos Bidimensionales2
Si se tiene la matriz B[M,N]: El subndice i, de las filas, vara de 1 a M. El subndice j, de las columnas, vara de 1 a N. El arreglos tiene M x N elementos. Existen N elementos en cada fila y M elementos en cada columna (MxN).
Matriz B [M,N]
1 2 3 ... M
231
..
N
Copyright IBM Corp. 2007
ventas[4, 3] = 120
En memoria se almacenan los elementos en forma consecutiva:
1,1 1,2 1,3 1,4 ... 1,12 ... 5,1 5,2 5,3 5,4 ... 5,12
232
Inicializar la Matriz Inicializar la matriz es asignar a todos sus elementos un valor dado. 1. ventas: arreglo[5, 12] de entero 2. var i, j : entero 3. desde i = 1 Hasta 5 4. desde j = 1 Hasta 12 5. ventas[i, j] = 0 6. fin Desde 7. fin Desde
233
Inicializar una Fila de la Matriz Inicializar la fila de una matriz: Se mantiene fija la fila y se recorren las columnas asignndoles el valor dado. Programa: 1. ventas: arreglo[5, 12] de entero 2. var i, j : entero 3. i = 3 4. desde j = 1 Hasta 12 5. M[i, j] = 0 6. fin desde
234
Matrices: Ejercicio 1
Disear un algoritmo que dado una matriz cuadrada determine la suma de todos los elementos que estn en la diagonal. Los elementos de la diagonal son los A[i, j] de la matriz donde el ndice i es igual al ndice j. Una matriz se define como cuadrada si el nmero de filas es igual al nmero de columnas.
1 2 3 ... N
235
..
N
Copyright IBM Corp. 2007
Matrices: Ejercicio 2 Disear un algoritmo para: Sumar los elementos positivos y los elementos negativos de una tabla o arreglo. Indicar el nmero de elementos positivos y el nmero de elementos negativo. Considere el valor cero como positivo. La matriz es de dimensin MxN y se lee desde el teclado.
238
Arreglos Multidimensionales: M x N x...x Z Un arreglo multidimensional es una matriz de 3 ms dimensiones. La declaracin de un arreglo multidimensional es:
<arreglo>: arreglo[rangoI, rangoII, ..., rangoN] de <tipo>
Ejemplo: matriz de ventas mensuales por cinco aos para tres vendedores:
ventas : arreglo[3, 5, 12] de real ventas[2, 4, 10]= 120000.5
240
Arreglos Multidimensionales: M x N x...x Z Si el arreglo tiene N dimensiones y cada dimensin es de tamao d1,d2,..,dN, el nmero de elementos del arreglo es: d1 x d2 x .. X dN. Para acceder a un elemento del arreglo se usan N ndices, cada uno de los cuales referencia a una posicin dentro de una dimensin segn el orden de declaracin. A[i1, i2, ,in] = 5 Los elementos del arreglo se almacenan en memoria en posiciones consecutivas.
241
Copyright IBM Corp. 2007
Almacenamiento de Arreglos en Memoria...1 Los arreglos multidimensionales tambin se almacenan en posiciones contiguas de memoria. El tamao del arreglo es el producto del nmero de elementos del arreglo por el tamao requerido para representar cada elemento en memoria. Ejemplo: Array[3, 5, 12] de enteros Si cada entero requiere de dos bytes para representarlo, el arreglo requiere un total de bytes de almacenamiento igual a: 2 byte * (3 * 5 * 12) elementos = 360 bytes
243
Resumen Ahora que ud. ha completado esta unidad, debe ser capaz de: Conocer las estructuras de datos. Trabajar con arreglos unidimensionales o vectores. Realizar operaciones con arreglos unidimensionales o vectores. Trabajar con arreglos bidimensionales o matrices. Conocer acerca de los arreglos multidimensionales. Entender el almacenamiento de arreglos en memoria.
244
Unidad 6
Entrada y Salida
245
Objetivos de Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Describir los conceptos bsicos de Entrada y Salida en un programa de computadora. Listar algunas consideraciones para imprimir la salida. Describir los conceptos de registros de datos fijos, variables y bloqueados.
246
247
La entrada y salida generalmente son las partes ms complejas de cualquier programa en cualquier lenguaje de programacin. La transferencia real de datos hacia o desde los dispositivos de E/S, es generalmente la parte ms lenta de un programa.
248
Teclado
Impresora
Archivo en disco
Pantalla Red
Scanner
Red
249
Buffers de Datos Los datos externos que se procesan en un programa se leen y escriben realmente en un buffer que maneja la computadora. El sistema lee fsicamente los datos de algn dispositivo externo, los deja en un buffer de entrada y los escribe en un buffer de salida. El sistema es propietario de los buffers y los administra. El programa accede a los datos usando estos buffers del sistema, lee del buffer de entrada y escribe al buffer de salida, de manera transparente para el programador.
250
Buffers de Datos1 El sistema de Control de I/O (IOCS) se encarga del movimiento de los datos externos. El IOCS corre asincrnicamente a la ejecucin del programa. El programa contina con el procesamiento y el sistema se ocupa de transportarlos hacia y desde los dispositivos de E/S.
251
Buffers de Datos2
Buffers E N T R A D A S A L I D A Programa LEER (READ) ... HACER MIENTRAS (MAS DATOS) LEER /* PROCESAR */ ESCRIBIR FIN HACER
...
Disco
ESCRIBIR (WRITE)
252
Imprimir Datos Imprimir la salida en una impresora requiere ciertas consideraciones especiales: Separar los formatos de salida para las lneas de datos y las lneas del ttulo. Contadores de lnea. Contadores de pginas. Encabezados de pginas. Caracteres de control de carro en las lneas de salida.
253
Imprimir Datos1
Se requiere de algunas consideraciones de formato especiales cuando se escriben datos a un dispositivo de impresin. Un contador de lnea se mantiene para tener seguimiento de cuntas lneas se han impreso, para as tener control de cundo saltar a una nueva pgina y colocar los encabezados en una nueva pgina de salida. El contador de pginas permite colocar el nmero de la pgina en la nueva pgina. Los formatos de lneas separados se requieren para imprimir las lneas de datos y lneas de encabezado. Normalmente el encabezado de la pgina requiere de formatos nicos de lnea para las mltiples lneas de encabezado y los encabezados de columna. El control de carro de impresora le indica a la impresora dnde imprimir la prxima lnea.
Copyright IBM Corp. 2007
254
Control de Carro de Impresora Los lenguajes de programacin tambin proporcionarn un medio para controlar dnde se va a imprimir una lnea. Esto generalmente se hace con un carcter de control en la primera posicin de la impresin de cada lnea y no se vern en la copia impresa. El carcter de control siempre se aplica a la lnea que se va a imprimir. Ejemplos de caracteres de control: El 0 da el doble espacio. El + se usa para suprimir el espaciado de lnea y dar apariencia de sobreimpresin (overstrike) o de negrita.
255
Copyright IBM Corp. 2007
Caracteres de Control
Carcter espacio 0 _ 1 +
256
Accin de Control Espaciar 1 lnea Espaciar 2 lnea Espaciar 3 lnea Saltar a una nueva pgina Suprimir espaciado
Copyright IBM Corp. 2007
Imprimir Salida Reportes El programador cuando escribe los reportes a una impresora tiene que considerar: los encabezados de pginas, nmeros de las pginas, contadores de lnea y pie de pginas. Existen varios tipos de lneas que deben definirse: Lnea de ttulo. Lneas de encabezados. Lneas de datos. Lneas de resumen. Lneas de pie de pgina.
257
Encabezados de Pginas El programador define el tamao de la pgina y una variable contador de lnea. El contador de lnea se inicializa con el tamao de la pgina para que la rutina de encabezado de pgina sea llamada para la primera pgina. El tamao de la pgina es el nmero mximo de lneas a ser impresas en la pgina. La rutina de encabezado de pgina tambin debe ocuparse de la variable contador de pgina. Debe incrementase (variable contador) cada vez que una nueva pgina se escribe. Esta variable puede ser parte de la lnea del ttulo o de pie de pgina.
258
Encabezados de Pginas1 Las consideraciones para el contador de lnea son: Se debe comparar (>=) con el tamao de pgina despus de imprimir cada lnea de detalle, para determinar cundo se debe llamar a la rutina de encabezado de pgina. Se debe incrementar inmediatamente despus de imprimir una lnea, basado en el espaciado simple, doble o triple. Siempre debe reflejar el nmero de la lnea de la ltima lnea escrita. La rutina de encabezado de pgina debe reiniciarse.
259
Entrada/Salida de Archivo La estructura de datos aplicada a colecciones de datos en almacenamiento secundario se denomina archivo. Un archivo es un conjunto de datos estructurados en una coleccin de entidades elementales denominadas registros. Un registro es una coleccin de informacin, normalmente relativa a una entidad en particular. Un registro es una coleccin de campos lgicamente relacionados que pueden ser tratados como una unidad por algn programa.
260
Copyright IBM Corp. 2007
Entrada/Salida de Archivo Formatos de Registros Los datos escritos o ledos desde un archivo generalmente se manejan como un registro. Existen dos formas en las que generalmente se procesan los datos de un registro: Registros fijos. Registros variables. Los registros tambin pueden bloquearse para lograr eficiencia.
261
Archivo: Ejemplo
nombre
Registro 1
carnet
direccin
edad
carrera
262
Archivo: Formatos de Registros Los registros segn la organizacin de sus datos pueden ser:
- Registros fijos: todos los registros del archivo tienen el mismo tamao. - Registros variables: cada registro del archivo puede tener diferentes tamaos.
FIJO
REGISTRO
REGISTRO
REGISTRO
REGIST
VARIABLE
REGISTRO
REGISTRO
REGISTRO
263
Archivo Formatos de Registros1 Los registros tambin pueden bloquearse para lograr eficiencia. Un bloque puede contener uno o ms registros lgicos. Un bloque es la cantidad ms pequea que puede transferirse en una operacin de E/S entre la memoria principal y los dispositivos y viceversa. Los registros bloqueados se clasifican en: Registros fijos bloqueados. Registros variables bloqueados.
264
FIJO BLOQUEADO
RD
VARIABLE BLOQUEADO
REGISTRO
REGISTRO
REGISTRO
265
Ejercicio de E/S Disee un programa para generar un reporte de las horas trabajadas por un grupo de empleados. El formato del informe debe reflejar el nombre del empleado, las horas trabajadas y una indicacin de horas de sobre tiempo si trabaj ms de cuarenta horas. El reporte debe contener un ttulo y encabezados de columnas y debe manejar mltiples pginas.
266
Ejercicio de E/S...1 La tarea ser examinar los registros de entrada y el formato del reporte deseado, para luego hacer lo siguiente: Listar las localidades de entrada, salida y de procesamiento requeridos. Listar los requerimientos de pre-proceso, proceso y post-proceso. Dibujar un diagrama de flujo que muestra una solucin correcta. Verificar la solucin.
267
Ejercicio de E/S...2
Registros de Entrada Anderson 35 Andrews 42 Appleton Arnold Astor 40 30 45 Formato del Reporte: Reporte de Horas Trabajadas Nombre Anderson Andrews Appleton Arnold Astor Horas 35 42 40 39 45 Sobre Tiempo Si SI
268
Ejercicio de E/S...3
INICIO
HACER
PROCESAR REGISTRO
MIENTRAS
VERDADERO
FIN
269
Ejercicio de E/S...4
PROCESAR REGISTRO SI SINO INICIO
ENTONCES
NUEVA_PAGINA
ENTONCES
OUT_OT_IND = REG_INDICATOR
OUT_OT_IND = OT_INDICATOR
ESCRIBIR REGISTRO
LINE_CTR = LINE_CTR + 1
270
FIN
Ejercicio de E/S...5
INICIO
NUEVA_PAGINA
RE INICIALIZAR LINE_CTR
Resumen Ahora que ud. ha completado esta unidad, debe estar en la capacidad de: Describir los conceptos bsicos de Entrada y Salida en un programa de computadora. Listar algunas consideraciones para imprimir la salida. Describir los conceptos de registros de datos fijos, variables y bloqueados.
272
Unidad 7
Ejemplos de Programas
273
Objetivos de Aprendizaje Al finalizar esta unidad ud. debera ser capaz de: Disear un programa para manejar la verificacin de secuencias y rupturas de control. Disear un programa para resolver un problema de emparejamiento de transaccin.
274
Verificacin de Secuencias Una secuencia puede ser: Una serie continua o conectada - el alfabeto. Un orden consecutivo o por rango - los naipes. Un conjunto de elementos ordenados - los nmeros naturales. Una verificacin de secuencia es el proceso de garantizar el orden correcto de los registros al procesar un archivo secuencial. Los datos deben estar ordenados, requiere una jerarqua de datos y un valor clave para determinar el orden correcto.
275
Verificacin de Secuencias1 Verificar la secuencia implica trabajar con un archivo de registros de datos que se ha ordenado previamente, generalmente en orden ascendente. Los ejemplos de valores claves para ordenar pueden ser el nmero del empleado para registros de empleado o el nmero de parte para los registros del inventario. El proceso de ordenar las cosas en orden ascendente es un problema de programacin clsico. Esto se puede realizar a travs de alguna funcin del sistema o proceso perifrico fuera del programa que se est produciendo.
276
Rupturas de Control La ruptura de control (Control Break) es el reconocimiento de un cambio en el valor clave cuando se procesan secuencias de registros que contienen mltiples registros para una clave. Normalmente se usa para procesar registros en secuencia en un sistema que contiene mltiples actualizaciones a registros maestros. La ruptura de control normalmente implica recolectar subtotales o imprimir los resmenes intermedios.
277
Rupturas de Control1 Un ejemplo de procesamiento con ruptura de control es el procesamiento de promedio de notas de los estudiantes de un saln de clase. La clave para hacer la ruptura de control puede ser el ID del estudiante o el nombre del estudiante. A medida que el programa lee el conjunto ordenado de los registros de notas del estudiante, promedia las notas de todos los cursos del estudiante en particular y rompe el control cuando encuentra un nuevo ID de estudiante o nombre. Al interrumpir el control, este programa calcula el promedio de notas del estudiante y luego reinicializa todos los acumuladores para preparar el procesamiento del prximo estudiante.
278
Copyright IBM Corp. 2007
Emparejar Transacciones Emparejar Transacciones es emparejar el valor clave de un registro de un archivo, contra el valor clave de los registros en un archivo maestro. El archivo maestro es una coleccin de registros que contienen los datos permanentes o acumulados para un sistema. Emparejar transacciones es una actividad comn en el procesamiento de archivos. Tpicamente hay muchos registros de transaccin para ser procesados, contra slo un registro en el archivo maestro con el valor clave.
279
Emparejar Transacciones1 Algunos ejemplos dnde se aplica son: Las notas del estudiante de un semestre (las transacciones) emparejado contra los registros de notas permanentes para la cohorte (archivo maestro). La comprobacin diaria y la actividad de depsito (las transacciones) emparejado contra el registro de cuenta para la cuenta corriente (archivo maestro). Diariamente el punto de venta y la actividad de reabastecer (las transacciones) emparejado contra la informacin detallada de inventario actual para un producto (archivo maestro).
280
Ejercicio de Punto de Chequeo Disear un programa para generar un informe del resumen de ventas para un grupo de departamentos. El formato del informe debe reflejar el nmero del departamento y las ventas totales. Cada departamento puede tener mltiples registros de entrada. Se requiere verificar la secuencia del nmero del departamento. Si un registro de entrada est fuera de la secuencia, imprima un mensaje de error, los resultados acumulados y termine el programa. El informe debe contener las cabeceras de las columnas y debe ocuparse de pginas mltiples. El ttulo para el informe es optativo.
Copyright IBM Corp. 2007
281
Ejercicio de Punto de Chequeo1 La tarea ser examinar los registros de entrada y el formato del informe deseado y hacer lo siguiente: Listar la entrada, salida y localidades de almacenamiento de proceso requeridas. Listar los requisitos de pre-proceso, proceso y postproceso. Dibujar un diagrama de flujo que muestre una solucin correcta. Verificar la solucin usando los dos juegos de entrada que se muestran a continuacin:
282
283
Resumen Ahora que ud. ha completado esta unidad, debe ser capaz de: Disear un programa para manejar la verificacin de secuencias y rupturas de control. Disear un programa para resolver un problema de emparejamiento de transaccin.
284