Story Transcript
Fundamentos de Programación Código del Curso: CY300 Versión 4.0
Guía del Estudiante
Libro 1: Fundamentos de Programación
IBM IT Education Services Worldwide Certified Material
Información Sobre la Publicación Esta publicación ha sido producida usando Microsoft Word 2000 y Microsoft PowerPoint 2000 para Windows. Marcas Registradas IBM ® es una marca registrada por International Business Machines Corporation. Otras compañías, productos, y nombre de servicios pueden ser marcas registradas o marcas de servicios de otros. Trademarks of International Business Machines Corporation DB2
Informix
Lotus Script
Net.data
Marcas Registradas de otras Compañías Windows, Microsoft Visual Studio
Microsoft Corporation
Sybase
Sybase Inc.
Edición Agosto 2007 La información contenida en este documento no ha sido sometida a ninguna prueba formal de IBM y es distribuida básicamente “como es" sin ninguna garantía ya sea expresa o implícita. El uso de esta información o la implementación de cualquiera de estas técnicas es responsabilidad del comprador y dependerá de la habilidad de éste para su evaluación e integración en el ambiente operacional del comprador. A pesar de que cada tema ha sido revisado por IBM para su exactitud en una situación específica, no hay garantía de que obtener el mismo resultado o uno similar a éste en otra situación. Los compradores que intenten adaptar estas técnicas a sus propios ambientes lo hacen bajo su propio riesgo. Copyright International Business Machines Corporation, 2007. All rights reserved. Este documento no puede ser reproducido en su totalidad o en parte sin el previo permiso escrito de IBM. Instrucciones Especiales para la Impresión de este Curso: No elimine páginas en blanco que puedan aparecer al final de cada unidad ó entre unidades. Estas páginas fueron insertadas intencionalmente.
.
Guía del Estudiante
Fundamentos de Programación
Contenido Descripción del Curso........................................................................................1 Descripción de Unidades ...................................................................................2 Volumen 1: Conceptos de Programación .........................................................5 Unidad 1: Programas de Computadora ............................................................7 Objetivos del Aprendizaje
7
1. Introducción
8
2. Sistemas de Procesamiento
9
3. Algoritmos
9
4. Metodología para Diseñar Algoritmos
9
5. Programas de Computadora
10
6. Definiciones Básicas
11
7. Crear un Programa de Computadora
12
8. Funcionamiento del Compilador/Enlazador
13
9. Datos, Tipos de Datos y Funciones Incorporadas
14
10. Expresiones: Tipos y Operadores
17
11. Funciones Incorporadas
22
12. Operación de Asignación
23
13. Recomendaciones
24
Resumen
25
Unidad 1: Examen de Autoevaluación
26
Respuestas de la Unidad 1: Examen de Autoevaluación
28
Unidad 2: Conceptos de Diseño Estructurado...............................................29 Objetivos del Aprendizaje
29
1. Introducción
30
2. Conceptos de Diseño Estructurado
30
3. Diseño Top Down
30
4. Diagramas de Estructura
32
5. Diagramas de Flujo o Flujograma
32
6. Recomendaciones para hacer Diagramas de Flujo
36
7. Ejemplo de un Diagrama de Flujo
36
8. Diagramas N-S o de Nassi-Schederman:
37
9. Pseudocódigo
39
Resumen
41 i © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
Unidad 2: Examen de Autoevaluación
42
Respuesta de la Unidad 2: Examen de Autoevaluación
44
Unidad 3: Programación Estructurada ...........................................................45 Objetivos del Aprendizaje
45
1. Introducción
46
2. Estructuras Secuenciales
46
3. Estructuras Selectivas
47
4. Estructuras Repetitivas o de Ciclo
49
5. Estructuras Anidadas
52
6. Control de Datos de Entrada
54
Resumen
57
Unidad 3: Examen de Autoevaluación
58
Respuestas de la Unidad 3: Examen de Autoevaluación
60
Unidad 4: Funciones y Procedimientos..........................................................61 Objetivos del Aprendizaje
61
1. Introducción
62
2. Funciones
63
3. Procedimientos
67
4. Ámbitos: Variables Globales y Locales
69
5. Comunicación entre Subprogramas: Paso de Parámetros
71
6. Recursividad
75
Resumen
78
Unidad 4: Examen de Autoevaluación
79
Respuesta de la Unidad 4: Examen de Autoevaluación
82
Unidad 5: Estructura de Datos: Arreglos........................................................83 Objetivos del Aprendizaje
83
1. Introducción
84
2. Arreglos Unidimensionales: Arreglos o Vectores
84
3. Arreglos Bidimensionales: Matrices m x n
89
4. Arreglos Multidimensionales: Matrices m x n x...z
91
5. Almacenamiento de Arreglos en Memoria
91
Resumen
93
Unidad 5: Examen de Autoevaluación
94
Respuesta de la Unidad 5: Examen de Autoevaluación
96
Unidad 6: Entrada y Salida...............................................................................97 ii © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Objetivos del Aprendizaje
97
1. Introducción
98
2. Entrada y Salida de un Programa
98
3. Buffers de Entrada y Salida
99
4. Imprimir Datos
100
5. Entrada/Salida de Archivo: Formatos de Registros
103
Resumen
107
Unidad 6: Examen de Autoevaluación
108
Respuesta de la Unidad 6: Examen de Autoevaluación
110
Unidad 7: Ejemplos de Programas................................................................111 Objetivos del Aprendizaje
111
1. Verificar la Secuencias
112
2. Rupturas de Control
112
3. Emparejar Transacciones
113
Resumen
117
Volumen 2: Complementos I..........................................................................119 Unidad 1: Sentencias Simples .......................................................................121 1. Conceptos
121
Ejercicios Resueltos
123
Ejercicios por Resolver
129
Unidad 2: Estructuras de Decisión................................................................131 1. Conceptos
131
Ejercicios Resueltos
132
Ejercicios por Resolver
139
Unidad 3: Estructuras de Repetición ............................................................141 1. Conceptos
141
Ejercicios Resueltos
143
Ejercicios Propuestos
148
Unidad 4: Sentencias Simples (Pseudocódigo) ...........................................149 Ejercicios Resueltos
149
Ejercicios por Resolver
152
Unidad 5: Estructuras de Decisión (Pseudocódigo)....................................153 Ejercicios Resueltos
153
Ejercicios por Resolver
159
Unidad 6: Estructuras de Repetición (Pseudocódigo) ................................161 Ejercicios Resueltos
161 iii
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
Ejercicios Propuestos
166
Volumen 3: Complementos II.........................................................................169 Unidad 4: Funciones y Procedimientos........................................................171 Ejercicios Resueltos
171
Ejercicios Propuestos
175
Unidad 5: Estructuras de Datos - Arreglos...................................................179 Ejercicios Resueltos
179
Ejercicios Propuestos
183
Volumen 4: Ejercicios Propuestos ................................................................189 Unidad 1: Programas de Computadora ........................................................191 Respuestas de la Unidad 1: Ejercicios Propuestos
192
Unidad 2: Conceptos de Diseño Estructurado.............................................193 Respuestas de la Unidad 2: Ejercicios Propuestos
194
Unidad 3: Programación Estructurada. ........................................................197 Respuesta Unidad 3: Ejercicios Propuestos
198
Unidad 4: Procedimientos y Funciones ........................................................203 Respuesta Unidad 4: Ejercicios Propuestos
204
Unidad 5: Estructura de Datos: Arreglos......................................................207 Respuesta Unidad 5: Ejercicios Propuestos
208
iv © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Descripción del Curso Nombre del Curso Fundamentos de Programación.
Duración La duración del curso es de 40 horas.
Propósito El propósito de este curso es introducir los fundamentos de programación, para ello se estudian los elementos del proceso de desarrollo de aplicaciones que se ejecutan en las computadoras. El curso, cubre los conceptos de programa, estructura de datos, tipos de datos, variables y constantes. También, se discuten algunas técnicas para desarrollar algoritmos, que se implementan en la programación estructurada, así como, los elementos estándar de un programa de aplicación de computadora.
Audiencia Cualquier persona que desee obtener un conocimiento básico acerca de los fundamentos de la programación.
Pre-requisitos Ninguno.
Objetivos del Curso 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.
•
Describir los componentes básicos de la configuración de una computadora.
Agenda Cada unidad de este curso es de dos horas académicas de duración.
Libro 1: Fundamentos de Programación
Descripción del Curso 1
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
Descripción de Unidades Volumen 1: Conceptos de Programación Unidad 1: Programas de Computadora En esta unidad se define el propósito y el contenido de un programa de computación y se aprende una metodología para resolver problemas de procesamiento de datos. Se discuten los elementos de un programa, para ello se estudian los conceptos de variables, variables contadoras, variables acumuladoras, constantes, los operadores aritméticos y operadores lógicos. Se estudian las operaciones incorporadas y se discuten algunos de los errores más comunes que se cometen en la programación. Se presentan también, algunas sugerencias para programar con estilo y disciplina.
Unidad 2: Conceptos de Diseño Incorporado Aquí se definen los conceptos utilizados para facilitar el entendimiento de un problema. Se utilizan técnicas Top-Down (de abajo hacia arriba) y se aprende cómo dibujar gráficos que muestran la jerarquía de un problema, y así poder, a partir de estos gráficos, analizar el problema, crear los diagramas de flujo y el pseudocódigo necesario para comenzar a escribir un programa de computación. Se discuten los Diagramas de Estructura, los Diagramas de Flujo, los Diagramas N-S o de Nassi-Schederman, así como los conceptos y elementos del pseudocódigo.
Unidad 3: Programación Estructurada Se describen los conceptos relacionados con las estructuras de los bloques de código que conforman un programa de computadora bajo el concepto de Programación Estructurada. Se revisan las estructuras secuenciales, las selectivas o de bifurcación para direccionar el flujo de control. También, se estudian las estructuras de bloques de código para ciclos o repeticiones, en conjunto con las capacidades de anidamiento de bloques de código. Por último, se muestran algunos casos del uso de las estructuras de control y repetición en la entrada de datos.
Unidad 4: Funciones y Procedimientos En esta unidad, se estudia el concepto de funciones y procedimientos. Se describe la sintaxis y el uso de los procedimientos y funciones como parte de un programa de computadora. Se analiza el ámbito de las variables, la invocación de funciones y procedimientos desde un programa, así como la comunicación entre subprogramas o pase de parámetros o argumentos. Por último, se revisa el concepto de recursividad, además de cómo se definen y usan las funciones y procedimientos recursivos.
Descripción de Unidades
Libro 1: Fundamentos de Programación 2
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos Se estudian las estructuras de almacenamiento continuo y su representación en la memoria del computador. Se revisan los conceptos de arreglos unidimensionales o vectores, matrices de dos dimensiones y matrices multidimensionales.
Unidad 6: Entrada y Salida Esta unidad presenta la descripción de los conceptos básicos de entrada y salida en un programa de computadora, tomando en cuenta algunas consideraciones específicas para imprimir una salida. Se describen los conceptos de registros de datos fijos, variable y bloqueado. Se finaliza con la creación del diseño de un programa que permite manejar encabezados de página.
Unidad 7: Ejemplos de Programas Esta unidad está diseñada para reforzar los conceptos presentados en las unidades anteriores. Se presentan ejemplos que permiten diseñar programas para manejar la verificación de secuencias y rupturas de control, así como para resolver problemas de emparejamiento de transacciones.
Volumen 2: Complementos I Unidad 1: Sentencias Simples En esta unidad se aprecia cómo se realiza la Declaración de Variables, Asignación de Variables, Lectura de Variables desde un dispositivo de entrada de datos hacia la memoria, Escritura de Datos desde la memoria hacia un dispositivo de salida, todo esto con su respectiva notación de Diagramas de Flujo o Flujogramas. También se presentan una serie de Ejercicios Resueltos aplicando la técnica de Diagrama de Flujo o Flujograma.
Unidad 2: Estructuras de Decisión Aquí se visualiza la aplicación de los tres tipos de Estructuras de Decisión: simple, dobles y múltiples. Denotando el concepto de cada una de ellas y aplicando estas bajo la técnica de Flujograma o Diagrama de Flujo.
Unidad 3: Estructuras de Repetición Se describen los conceptos relacionados con las estructuras de Repetición: Ciclo Mientras.. Hacer (while .. do), Ciclo Repetir .. Hasta (Repeat ..until), Ciclo Desde (for); aplicando cada uno de ellos bajo la técnica de Flujograma o Diagrama de Flujo.
Unidad 4: Sentencias Simples (Pseudocódigo) En esta unidad se aprecia cómo se realiza la Declaración de Variables, Asignación de Variables, Lectura de Variables, así como la estructura básica de un algoritmo
Libro 1: Fundamentos de Programación
Descripción de Unidades 3
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
representada bajo la técnica de Pseudocódigo. También se presentan una serie de Ejercicios Resueltos aplicando la técnica de Pseudocódigo.
Unidad 5: Estructuras de Decisión (Pseudocódigo) Aquí se visualiza la aplicación de los tres tipos de Estructuras de Decisión: simple, dobles y múltiples. Denotando el concepto de cada una de ellas y aplicando estas bajo la técnica de Pseudocódigo.
Unidad 6: Estructuras de Repetición (Pseudocódigo) Se describen los conceptos relacionados con las estructuras de Repetición: Ciclo Mientras.. Hacer (while .. do), Ciclo Repetir .. Hasta (Repeat ..until), Ciclo Desde (for); aplicando cada uno de ellos bajo la técnica de Pseudocódigo.
Volumen 3: Complementos II Unidad 1: Funciones y Procedimientos Aquí se presentan una serie de ejercicios resueltos aplicando la técnica de Pseudocódigo, empleando los conceptos de Funciones y Procedimientos que permite visualizar su aplicación.
Unidad 2: Estructuras de Datos - Arreglos En esta unidad se aprecia la representación de Arreglos unidimensionales y bidimensionales por medio de ejercicios resueltos, utilizando la técnica de Pseudocódigo.
Volumen 4: Ejercicios Propuestos Desde la Unidad 1 hasta la Unidad 5, se presenta una variedad de ejercicios correspondientes a los conceptos manejados por cada unidad, que han sido resueltos para mayor comprensión. En la mayoría de los casos se aplica la técnica de Pseudocódigo para el diseño de algoritmos, en otro caso una descripción comprensible de la solución del problema como se puede visualizar en la resolución de los ejercicios para la Unidad 1.
Descripción de Unidades
Libro 1: Fundamentos de Programación 4
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Volumen 1: Conceptos de Programación
Libro 1: Fundamentos de Programación
Descripción de Unidades 5
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Unidad 1: Programas de Computadora Objetivos del Aprendizaje Al finalizar esta unidad, usted 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.
Unidad 1: Programas de Computadora
Libro 1: Fundamentos de Programación 7
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
1. Introducción En la actualidad es común contar con la ayuda de las computadoras para la solución de problemas. Para casi cualquier problema típico en las áreas de negocios, servicios y tecnologías, entre otras, la solución puede ser modelada con programas de computadora, esta solución es generalmente más confiable y de menor costo. Los programas de computadora permiten dar solución a problemas de cualquier nivel, estas soluciones típicamente llamadas aplicaciones, las realiza un equipo multidisciplinario donde se encuentran los programadores, diseñadores y analistas de sistemas, entre otros especialistas. Generalmente, los programadores utilizan algún lenguaje de programación para desarrollar las aplicaciones requeridas por los clientes. Estos 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. En otras palabras, por medio del lenguaje de programación, el programador le indicará al computador la secuencia de instrucciones que se deben ejecutar para obtener la solución esperada por los clientes. Todo esto hace pensar que de alguna manera, un programador debe tener cierta lógica que le ayude a tratar con el lenguaje de programación, esto es, debe saber exactamente las capacidades brindadas por el lenguaje de programación y más aún, debe tener nociones claras de los fundamentos generales de la programación. Como cualquier ciencia, 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. Dichos conocimientos básicos son conocidos como Fundamentos de Programación, los cuales no son más que un conjunto de reglas, técnicas y conceptos que ayudan a definir lo que se puede hacer con un lenguaje de programación y así dar los primeros pasos para desarrollar aplicaciones para la solución de problemas computacionales. Este curso introduce al estudiante a los fundamentos de la programación de manera breve y concisa. Se discuten diversos temas, tales como: ¿qué son los programas de computadora?, el diseño estructurado, la lógica de programación, diagramas de flujos, pseudocódigo, entrada y salida, entre otros. Para desarrollar programas de computadora existe una gran variedad de lenguajes de programación, por esta razón, fue necesario definir una notación genérica que permitiera, en primer lugar, representar y describir el problema de forma clara y sencilla. Esta representación se obtiene con el uso de algoritmos, los cuales permiten definir una secuencia finita de pasos claros y sencillos, para obtener una solución del problema. El proceso para desarrollar programas de computadora requiere entender y conceptuar el problema, para luego definir los aspectos importantes acerca de la entrada, salida y almacenamiento. Libro 1: Fundamentos de Programación
Unidad 1: Programas de Computadora 8
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
En esta unidad se discuten los conceptos básicos más importantes de la programación y la metodología para desarrollar una solución computacional de un problema.
2. Sistemas de Procesamiento Un ordenador es una máquina de procesamiento de información. Es una máquina, porque tiene cables, circuitos y demás elementos mecánicos. Es además de procesamiento, porque es capaz de transformar o procesar datos y de información porque maneja conjuntos ordenados de datos. Para procesar la información se requiere del hardware como microprocesador, memoria RAM, entre otros y del software que sirve para manejar el hardware tal como programas, sistema operativo, etc.
3. Algoritmos El concepto de algoritmo fue desarrollado por el matemático persa Abu Jafar Mohammed Ibn Musa Al Khwarizmi. Se puede decir que un algoritmo es una fórmula para resolver un problema. Es un conjunto de acciones o secuencia de operaciones que ejecutadas en un determinado orden, resuelven el problema planteado. Un algoritmo debe tener las siguientes características: •
Estar bien definido.
•
Ser preciso.
•
Ser finito.
Básicamente, 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.
4. Metodología para Diseñar Algoritmos Un algoritmo es una fórmula para obtener la solución de un problema, ésta fórmula puede ser planteada de diferentes formas y cada una de estas formas puede efectivamente resolver el problema planteado. Por esa razón, el diseño de un algoritmo es un proceso creativo, ya que no existe un conjunto de reglas que indiquen expresamente cómo escribir un algoritmo en forma correcta, por el contrario, si existen muchas maneras de resolver un problema, entonces existen muchos algoritmos que implementen la solución. Sin embargo, hay una serie de pasos que permiten resolver un problema de la forma más conveniente, estos son: •
Análisis del problema.
Unidad 1: Programas de Computadora
Libro 1: Fundamentos de Programación 9
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
•
Diseño del algoritmo.
•
Verificación del algoritmo.
Análisis del Problema
Guía del Estudiante
Diseño del Algoritmo
Verificación del Algoritmo
Figura 1.1: Metodología de Diseño de Algoritmos
1.1 Análisis del Problema El primer paso es identificar el problema. Se debe revisar cuidadosamente el problema para determinar qué tipo de información se necesita producir como salida. Luego se identifica toda la información que se necesita para encontrar la solución. En otras palabras, es importante considerar lo que se está pidiendo en el problema, con qué elementos se cuenta y cuáles se deben solicitar para establecer el camino a seguir en la solucionar el problema. Luego de obtener todos estos datos, se inicia la fase de Diseño del Algoritmo.
1.2 Diseño del Algoritmo En esta fase, la solución del problema puede requerir varios pasos, así que es necesario buscar la manera más fácil para simplificar la propuesta. Una forma de hacerlo, es identificar los procesos más importantes y colocarlos en orden ascendente según su importancia y precedencia, esto sirve como un algoritmo inicial. Este algoritmo inicial podrá ser refinado en sucesivas operaciones, hasta obtener una solución más detallada y más fácil de traducir a un lenguaje de programación.
1.3 Verificación del Algoritmo Cuando el algoritmo está listo, es necesario comprobar que cumple con los procesos ideados y produce el resultado esperado. Una manera de hacerlo, es por medio de la ejecución manual, que consiste en realizar una prueba del algoritmo con datos significativos y comprobar que al ejecutar todos los procesos se obtienen los resultados esperados para la salida.
5. 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 operaciones específicas para lograr un resultado deseado. Consiste de uno o más módulos o rutinas, cada uno de los cuales puede estar compuesto a su vez de otros módulos o subprogramas. Un programa de computadora no es: •
Una caja mágica.
Libro 1: Fundamentos de Programación
Unidad 1: Programas de Computadora 10
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
•
Fundamentos de Programación
Intrínsicamente correcto.
Un programa de computadora debe ser: •
Una solución a un problema.
•
Una secuencia de instrucciones hechas para ejecutarse en una computadora.
•
Sólo tan correcto como el programador lo haya hecho.
En resumen, un programa de computadora es un conjunto de instrucciones generadas por el programador, que le dicen al computador exactamente lo que debe hacer.
6. Definiciones Básicas A continuación se presentan un conjunto de definiciones básicas que se usan en el entorno de un programa de computadora: Lenguaje de Máquina: es un lenguaje que puede ser interpretado directamente por los circuitos internos de la computadora porque está basado en instrucciones compuestas por secuencias de ceros (0) y unos (1). Ventajas: •
No necesita ser traducido puesto que la máquina lo entiende.
•
Opera directamente con la máquina.
•
Puede llegar a ser muy eficiente en el manejo de recursos.
Desventajas son: •
Extremadamente difícil de aprender, implementar y mantener.
•
Es único y particular para cada procesador.
Lenguaje de Bajo Nivel (Ensamblador): es un lenguaje que usa el programador para codificar sentencias simbólicas que un compilador (programa traductor) puede convertir una a una en instrucciones de lenguaje de máquina. Hace uso de mnemotécnicos o abreviaturas, para representar las instrucciones de máquina. Ventajas: •
No es tan complicado como el lenguaje de máquina.
•
Eficiente en el manejo de recursos.
Desventajas son: •
Cada procesador tiene su propio juego de instrucciones en ensamblador.
•
Debe ser traducido (ensamblado).
Lenguaje de Alto Nivel: es un lenguaje de programación orientado al problema o procedimientos, es cercano al idioma humano. Ejemplos de estos lenguajes son COBOL, PL/I, FORTRAN, Java, etc. Unidad 1: Programas de Computadora
Libro 1: Fundamentos de Programación 11
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Algunos lenguajes de alto nivel se denominan Lenguajes de Programación Orientado a Objetos (ó OOPL). Ejemplos de éstos son: Smalltalk, Java, C++, Eiffel, etc. Ventajas: •
Son independientes del procesador.
•
Son mucho más fáciles de aprender, implementar y mantener.
•
Tienen un carácter genérico.
Desventajas son: •
Menos eficientes en el manejo de los recursos.
•
Requiere de un proceso de traducción (compilación).
Compilar: Es traducir un programa escrito en un lenguaje de alto nivel a un programa en lenguaje de máquina, que es la forma en que la computadora puede ejecutar directamente las acciones o instrucciones. Típicamente una instrucción de alto nivel se compila o traduce, en muchas instrucciones de lenguaje de máquina. En algunos casos, el proceso de compilación se descompone en dos pasos: •
Compilar las instrucciones de alto nivel para producir lo que se denomina el código objeto.
•
Enlazar (link) que es tomar el código objeto generado y cualquier otro código objeto que sea requerido, que haya sido previamente generado y colocarlos juntos, produciendo así el programa ejecutable o código ejecutable.
Base de Datos: Es una colección de datos completa e integrada, organizada 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 un dispositivo en el que los datos se pueden ingresar, guardar y posteriormente recuperar.
7. Crear un Programa de Computadora Para crear un programa de computadora, generalmente el programador debe partir de un algoritmo y escribir las sentencias (instrucciones) del código fuente en un editor. Un editor es un programa utilitario que permite la edición de textos y programas. Existen muchos editores que están diseñados específicamente para ayudar en la creación del programa fuente. Algunos incluso siguen la especificación de un lenguaje particular. El conjunto de sentencias fuente se denomina un “programa fuente”. El programa fuente es la entrada para el compilador, que lo convierte en un conjunto de comandos entendibles por el computador llamado “programa ejecutable.” Libro 1: Fundamentos de Programación
Unidad 1: Programas de Computadora 12
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
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 producirá el programa ejecutable. El programador debe repetir los pasos de editar/compilar hasta que no se encuentren errores de compilación. La Figura 1.2 presenta en forma esquemática los pasos para crear un programa de computadora.
Figura 1.2: Creación de un Programa de Computadora
8. Funcionamiento del Compilador/Enlazador Previo a la creación del programa ejecutable, el compilador, si no detecta errores de sintaxis, crea un programa objeto y un listado del programa fuente. La Figura 1.3 muestra la creación del programa ejecutable, partiendo del programa fuente, con un paso de enlace (link) involucrado. El programa objeto, producido por el compilador, 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 programas objeto ya existentes, produciendo Unidad 1: Programas de Computadora
Libro 1: Fundamentos de Programación 13
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
el programa ejecutable. Los otros programas objeto generalmente residen en un archivo en disco llamado “Librería de Enlace”.
Compilación
Programa fuente
Librerías de enlace
Programa Objeto
Compilación Compilador
Enlazador
Programa Ejecutable Enlace
Figura 1.3: Compilador / Enlazador
9. Datos, Tipos de Datos y Funciones Incorporadas 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.
9.1 Dato El dato es cualquier objeto o elemento de información que se usa a lo largo de diversas operaciones dentro de un programa o fragmentos de éste. Los datos son los elementos sobre los que se opera cuando se efectúa una operación en el computador, es decir, cuando se ejecuta una instrucción en un programa. Un dato tiene un nombre que lo identifica y distingue de los demás elementos del programa. Dicho nombre no es más que otra forma de referenciar la dirección de memoria que ocupa el dato, así que cuando se trabaja con el nombre del dato, en realidad se trabajar con el valor que se encuentra en esa dirección de memoria. Cuando se está trabajando con un programa de computadora, siempre se está trabajando con direcciones de memoria, es por ello que es una estrategia común referenciar esas posiciones de memoria por medio de nombres o identificadores significativos para los humanos. En otras palabras, un programa de computadora es una serie de instrucciones organizadas para manipular y trabajar con direcciones de memoria en un computador. Los datos pertenecen a un tipo de dato específico, lo cual le indica al computador el rango de valores que dicho dato puede aceptar y las operaciones que sobre él se pueden realizar.
Libro 1: Fundamentos de Programación
Unidad 1: Programas de Computadora 14
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Por último, los datos poseen un valor que bien puede cambiar o permanecer constante a lo largo del programa o mientras el dato esté disponible.
9.2 Tipo de Dato El tipo de dato es una definición que agrupa 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 determinada en el computador. Esto tiene que ver con el tamaño o la cantidad de memoria que el computador reserva para almacenar los datos de un tipo especifico cualquiera. Todo, absolutamente todo, en la memoria de un computador se representa por medio de código binario, un código binario es un número en base 2, cuyos dígitos son ceros o unos. De esta manera, un código cualquiera puede ser tratado como un número entero en un momento dado, como un carácter en otro o en cualquier otra forma diferente de acuerdo a las necesidades del programa. Los tipos de datos pueden ser: •
Tipo dato primitivo: Tipos básicos o simples predefinidos en el sistema.
•
Tipo de dato definidos por el usuario: Agregados por el programador.
Los tipos de datos primitivos más importantes son: numéricos, lógicos y carácter. A continuación se detalla cada uno de ellos: •
Numéricos: Pueden ser a su vez: - Entero: Subconjunto finito del conjunto matemático de los números enteros. No tiene parte decimal. El rango de los valores depende del tamaño que se les asigne en la memoria para su representación, este tamaño es definido por el lenguaje de programación, usualmente 2 bytes. - Real: Subconjunto finito del conjunto matemático de los números reales. Llevan signo y parte decimal. Se almacenan usualmente en 4 bytes o más (dependiendo del lenguaje de programación que se utilice). Si se utilizan números reales muy grandes, se puede usar notación científica que se divide en mantisa, base y exponente. De tal forma que el valor se obtiene multiplicando la mantisa por la base elevada al exponente.
•
Lógicos o booleanos: Es aquel que sólo puede tomar uno de los dos valores, verdadero o falso (1 ó 0). Este es el tipo de dato que retorna todas las operaciones lógicas.
•
Carácter: Abarca al conjunto finito y ordenado de caracteres que reconoce la computadora: letras, dígitos, caracteres especiales, ASCII, UNICODE. Generalmente, sus valores se representan dentro de un par de comillas simples, aunque también se puede suministrar su código numérico o posición dentro del conjunto de caracteres válidos que se esté usando.
Unidad 1: Programas de Computadora
Libro 1: Fundamentos de Programación 15
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
•
Guía del Estudiante
Tipo cadena o string: Conjunto de caracteres, que usualmente se presentan entre los símbolos de comilla doble (“”).
Los diversos lenguajes existentes pueden añadir más tipos de datos u otros modificadores. Por ejemplo, el modificador Long se usa comúnmente con los tipos entero (int) para indicar un entero de gran tamaño (Long int). En algunos lenguajes se definen tipos especiales para la fecha y hora, sobre todo en los lenguajes modernos, tales como Java.
9.3 Variables Las variables son instancias de un tipo de dato determinado, cuyo valor puede cambiar durante la ejecución del programa o corrida del algoritmo. Antes de usar una variable, el programador debe definirla o declararla, indicando su nombre y el tipo de dato al que pertenece. El nombre que se elija para una variable se denomina identificador y debe ser un nombre significativo que esté relacionado con el propósito para el que se vaya a usar la variable en el programa. El identificador de una variable será un conjunto de caracteres que tendrán ciertas restricciones, según lo defina el lenguaje de programación. Por lo general, el identificador de una variable tiene que empezar por una letra, el tamaño y caracteres permitidos como parte del identificador dependen del lenguaje de programación. Algunos lenguajes de programación asignan un valor por omisión o defecto a las variables, al momento de su declaración. En cualquier caso una variable puede tomar un valor inicial e ir cambiándolo a lo largo de la ejecución del programa o corrida del algoritmo. Al momento de asignar un valor inicial a una variable, se le denomina inicialización de la variable.
9.4 Variables Acumuladoras Aquellas variables que el programador use para ir sumando valores a lo largo de la ejecución del programa, se denominan acumuladoras y es recomendable inicializarlas con un valor conveniente al uso que posteriormente se les dé.
9.5 Variables Contadoras Se llaman así a las variables que el programador usa para ir contando a lo largo de la ejecución del programa.
9.6 Constantes Las constantes son instancias de un tipo de dato determinado, que tienen un valor fijo asignado por el programador en el momento en que la define. Este valor no puede ser modificado durante la ejecución del programa o corrida del algoritmo. Libro 1: Fundamentos de Programación
Unidad 1: Programas de Computadora 16
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Las constantes pueden llevar asociados un nombre o no, si no lo llevan, se llaman literales. El programador especifica su valor al definir la constante, que ya no puede cambiar a lo largo de la ejecución del programa. En cuanto al tipo de dato, hay que colocarlo o no dependiendo del lenguaje de programación. Si no hace falta colocarlo, es porque la constante tomará el tipo de dato del valor que se le asigne al definirla. Por ejemplo: Const PI=3,1416. La ventaja de usar constantes con nombre, es que en cualquier lugar donde quiera que vaya la constante, basta con colocar su nombre y luego el compilador lo sustituirá por su valor. Las constantes sin nombres o literales son de valor fijo: 5, 6, ‘a’, “hola”.
9.7 Relación entre Variables y Constantes en Memoria Al declarar una variable o constante con nombre, automáticamente se reserva en memoria espacio para guardarla. El espacio reservado depende del tipo de dato de la variable o constante. En esa zona de memoria, es en la que se guardará el valor asociado a la variable o constante. Cuando el programa use esa variable o constante, irá a ese lugar de la memoria a buscar su valor.
10. Expresiones: Tipos y Operadores Una expresión es una combinación de constantes, variables, signos de operación, paréntesis y nombres especiales (nombres de funciones estándar), con un sentido unívoco y definido. De la evaluación de una expresión resulta un único valor o resultado. Una expresión tiene asociado un tipo de dato que corresponde con el tipo del valor que devuelve la expresión cuando se evalúa, por lo que habrá tantos tipos de expresiones como tipos de datos. En tal sentido, se tienen expresiones numéricas y lógicas.
10.1 Expresiones Numéricas: Operadores Aritméticos La expresión numérica es una combinación de variables y constantes numéricas con operadores aritméticos, que al evaluarla devuelve un valor numérico. Algunos de los operadores aritméticos más comunes son: +, -, *, / , los cuales equivalen a las operaciones suma, resta, multiplicación y división respectivamente. Otras operaciones aritméticas soportadas en algunos lenguajes de programación son: •
Operador Resto o Módulo: Devuelve el resto de una división entera.
Unidad 1: Programas de Computadora
Libro 1: Fundamentos de Programación 17
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Lenguaje
Operador
Ejemplo
Resultado
%
5%2
1
mod
5 mod 2
1
C Pascal
Tabla 1.1: Operador Resto o Módulo
•
Operador División Entera: Devuelve la parte entera del cociente de una división.
Lenguaje
Operador
Ejemplo
Resultado
/
5/2
2
Div
5 div 2
2
C Pascal
Tabla 1.2: Operador División Entera
•
Operador Potencia: Devuelve el valor de una base elevada a una potencia dada. Lenguaje
Operador
Ejemplo
Resultado
^
5^2
25
Basic
Tabla 1.3: Operador Potencia
Los operadores anteriores se denominan operadores binarios porque utilizan dos operando. Existen también otros tipos de operadores que sólo necesitan de un operando y se denominan operadores unarios. Algunos de los operadores unarios más comunes son: •
El signo negativo: Operador unario que devuelve el valor actual del operando multiplicado por menos uno (-1).
Lenguaje
Operador
Ejemplo
Resultado
-
X= 5; -X;
X= -5;
C
Tabla 1.4: Signo Negativo
•
Operador Decremento: Operador unario que devuelve el valor actual del operador decrementado en una unidad.
Libro 1: Fundamentos de Programación
Unidad 1: Programas de Computadora 18
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Lenguaje
Operador
Ejemplo
Resultado
--
X= 5; --X;
X= 4;
C
Tabla 1.4: Signo Negativo
•
Operador Incremento: Operador unario que devuelve el valor actual del operador incrementado en una unidad.
Lenguaje
Operador
Ejemplo
Resultado
++
X= 5; ++X;
X= 6;
C
Tabla 1.4: Signo Negativo
10.2 Reglas de Precedencia El orden en que se evalúan los operadores aritméticos dentro de una expresión influye directamente en el resultado que retorna dicha expresión. Ejemplo: Sea la siguiente expresión aritmética: 2 + 3 * 2 + 3 Si se evalúa en el orden de aparición se tiene: (((2 + 3) * 2) + 3) = 13 Si se evalúa primero la suma (+) y luego la multiplicación (*) se tendrá la expresión: (2 + 3) * (2 + 3) = 25 Si se evalúa primero la multiplicación y luego la suma se tendrá la expresión: 2 + (3 * 2) + 3 = 11 Entonces, ¿Cómo resolver está situación potencialmente problemática? La solución es aplicar prioridad entre los operadores, de modo que ante la posibilidad de usar varios operadores aritméticos en una misma expresión, siempre se aplicará primero el de mayor prioridad. Cada lenguaje de programación puede establecer sus propias reglas de prioridad o precedencia de operadores. Siempre se pueden utilizar los paréntesis ( ) para definir y cambiar el orden en que se evalúa una expresión aritmética dada. El orden de precedencia definido comúnmente para los operadores aritméticos básicos es: 1. ^ Unidad 1: Programas de Computadora
Libro 1: Fundamentos de Programación 19
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
2. *, /, div y mod 3. + y – Entre dos operaciones que tienen la misma precedencia, para resolver la ambigüedad hay que usar la regla de la asociatividad. La más normal, es la asociatividad por la izquierda (primero lo de la izquierda). De esta forma, la expresión 2+3 * 2 / 3 – 5 ^ 2 será evaluada como (2 + ((3 * 2) / 3)) – (5 ^ 2).
10.3 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. Es común tener expresiones que combinan tanto los operadores lógicos como relacionales, en estas expresiones se evalúa más de una condición o relación por medio de operadores lógicos. Los operadores relacionales más usados son: <
menor que
>
mayor que
=
igualdad (en C: ==)
diferente (en C: !=) ≤
menor o igual que
≥
mayor o igual que
Para evaluar una expresión relacional: •
Se evalúa el primer operando y se sustituye por su valor.
•
Se evalúa el segundo operando y se sustituye por su valor.
•
Se aplica el operador relacional y se devuelve el valor booleano correspondiente.
Ejemplo: ((5 * 4) + 1 – (5 ^ 2)) < (2 - 1) -4
<
1
la expresión retorna Verdadero
Ejercicio: Evaluar las siguientes expresiones si a la variable “x” se le asigna el valor 2 y a la variable “y” se le asigna el valor 4. Cada respuesta debe ser VERDADERO o FALSO, según corresponda:
Libro 1: Fundamentos de Programación
Unidad 1: Programas de Computadora 20
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
1. x == y
: ___________
2. x y
: ___________
3. y > x
: ___________
4. x >= y
: ___________
El problema es que en algunos casos se requiere preguntar o evaluar más de una condición al mismo tiempo, para esto, están los operadores lógicos. Los operadores lógicos más utilizados son: Y
(and, &&)
O
(or, ||)
No
(not, ~, !)
O exclusivo
(xor, ^)
Y, O y O exclusivo son operadores binarios. Estos operadores trabajan bajo el esquema: Operador El operador No es de tipo unario y se coloca precediendo al operando al que se niega. La tabla de verdad para los operadores lógicos binarios es como sigue:
Operando 1
Operando 2
AND
OR
XOR
V
V
V
V
F
V
F
F
V
V
F
V
F
V
V
F
F
F
F
F
V= Verdadero; F= Falso Tabla 1.5: Tabla de Verdad para los operadores lógicos binarios
La tabla de verdad para el operador unario No es como sigue:
NOT
Operando
V
F
F
V
Tabla 1.6: Tabla de Verdad para el operador unario “No”
Unidad 1: Programas de Computadora
Libro 1: Fundamentos de Programación 21
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Se observa que para que el operador lógico AND sea Verdadero, es necesario que ambos operandos sean Verdaderos. Para que el operador lógico OR sea Verdadero, basta con que al menos uno de sus operandos sea Verdadero. Para que el operador XOR sea Verdadero, ambos operandos deben ser diferentes entre sí. Ejercicio: Si x representa “1 > 2” (FALSO) e y representa “4 < 8” (VERDADERO) Cuál es el resultado de cada una de las siguientes expresiones: 1. NOT x
: ___________
2. x AND y
: ___________
3. y OR x
: ___________
4. (NOT x) AND y
: ___________
5. x XOR y
: ___________
11. Funciones Incorporadas Las funciones Incorporadas son funciones adicionales a las operaciones básicas, que se incorporan al lenguaje de programación. Se consideran estándar en la mayoría de lenguajes de programación. Son dependientes del lenguaje y normalmente se encuentran en librerías externas que se pueden incluir en un programa. La sintaxis exacta y el nombre de las funciones pueden variar de un lenguaje a otro, pero la funcionalidad suele mantenerse entre las diversas herramientas de programación. Las más comunes son las librerías de soporte matemático y las de entrada / salida. Todos los lenguajes de programación proporcionan mecanismos para incorporar diversos elementos que brinden funcionalidad extra a los programas. La Tabla 1.7, muestra la forma en que algunos lenguajes de programación populares incorporan funcionalidad extra. Lenguaje
Sentencia
Ejemplo
Pascal
use
use conio;
C y C++
#include
#include
Java
import
Import java.io.*;
Tabla 1.7: Funcionalidad extra de algunos programas
Libro 1: Fundamentos de Programación
Unidad 1: Programas de Computadora 22
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
12. Operación de Asignación La operación de asignación consiste en atribuir un valor a una variable. El valor asignado puede ser una expresión, una constante o el valor de otra variable. Las formas más comunes del operador de asignación se resumen en la Tabla 1.8:
Lenguaje
Operador
Ejemplo
Pascal
:=
var := 5 + 3;
C y C++
=
var = var + 5;
Java
=
var = Math.sin(90.0);
Tabla 1.8: Operador de Asignación
En los ejemplos de la tabla anterior, 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. El proceso de asignación se realiza en 2 fases: •
Se evalúa la expresión de la parte derecha de la asignación obteniéndose un único valor.
•
Se asigna ese valor a la variable de la parte izquierda.
Debe tenerse en cuenta: •
En la parte izquierda de la operación de asignación, sólo puede haber una variable.
•
La variable a la que se le asigna el valor pierde su valor anterior.
•
Si la variable a la que se le asigna un valor (parte izquierda) participa en la expresión a evaluar (parte derecha), como por ejemplo la sentencia: x = x + 1 , entonces como primero se evalúa la expresión antes de realizar la asignación, el valor usado en la expresión es el que tenía la variable antes de la operación. En el ejemplo dado si x tenía un valor igual a 5, entonces la evaluación de la expresión x = x + 1 sería x = 5 + 1, quedando x con un valor final de 6.
•
El tipo de dato del valor resultante al evaluar la parte derecha de una operación de asignación, tiene que ser del mismo tipo de dato o de un tipo compatible, con la variable a la cual se le va a asignar el resultado de la operación. Muchos lenguajes de programación imponen sus propias reglas de conversión de tipos de datos, definiendo cuáles son las operaciones permitidas entre los diversos tipos de datos.
Unidad 1: Programas de Computadora
Libro 1: Fundamentos de Programación 23
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
13. Recomendaciones Cuando se programa existen una serie de problemas y errores de programación que tienden a presentarse una y otra vez en los programas. Para minimizar la ocurrencia de errores en la programación, es aconsejable que se consideren las siguientes recomendaciones: •
Reutilizar código probado: Puede existir un código ya desarrollado y probado para resolver totalmente o parte del problema que pueda utilizarse. Esto facilita la solución del problema y minimiza el tiempo de desarrollo. Al reutilizar código no se desperdicia tiempo depurando una parte de la lógica que se sabe que funciona.
•
No asumir los datos de entrada como válidos: Si no se tiene ningún control sobre la fuente de los datos, no se tiene ningún control sobre la calidad de los mismos.
•
No asumir que los datos de entrada están en la secuencia correcta.
•
Verificar siempre la secuencia: Es muy fácil para alguien proporcionar datos erróneos.
•
Diseñar los tamaños de los campos de datos, de modo que tengan capacidad para contener el valor más grande permitido.
•
Usar comentarios libremente. Explicar cualquier cosa que pueda confundir a un futuro lector, además de señalar cualquier área que pueda estar sujeta a cambios.
•
Hacer programas legibles y fáciles de entender.
•
Usar nombres adecuados para las variables, que sean auto descriptivos.
•
Usar sangrías, alineación y espacios donde sea necesario (líneas blancas y columnas).
Libro 1: Fundamentos de Programación
Unidad 1: Programas de Computadora 24
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Resumen Ahora que ha completado esta unidad, usted debe ser capaz de: •
Definir el propósito y el contenido de un programa de computadora.
•
Utilizar una metodología para resolver problemas de procesamiento de datos.
•
Describir el funcionamiento de un compilador/enlazador.
•
Definir el concepto de Dato.
•
Describir los diferentes tipos de datos y las operaciones incorporadas a los lenguajes de programación.
•
Presentar las recomendaciones que ayudan a programar con estilo.
Unidad 1: Programas de Computadora
Libro 1: Fundamentos de Programación 25
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Unidad 1: Examen de Autoevaluación 1) ¿Cuáles de los siguientes son lenguajes de alto nivel? a) Cobol b) Fortran c) Java d) Ensamblador 2) Se entiende por algoritmo, un conjunto de reglas bien definidas para la solución de un problema en un número de pasos que podría no ser finito. a) Verdadero b) Falso 3) Seleccione las afirmaciones correctas en referencia a un programa de computadora. a) Es una solución a un problema b) Es una caja mágica c) Es un conjunto de instrucciones hechas para ejecutarse en una computadora d) Todas las anteriores 4) Para diseñar un programa de computadora se requiere de un proceso que cumpla con las siguientes características: a) Actualizable b) Fácil de mantener c) No estructurado d) Ninguna de las anteriores 5) Seleccione las afirmaciones correctas: a) El conjunto de sentencias creadas para resolver un problema se denomina "programa fuente" b) Un compilador convierte un programa fuente en un programa ejecutable c) Si se encuentran errores de sintaxis en las instrucciones del programa fuente, el compilador lista cada uno de ellos y produce un archivo ejecutable d) Ninguna de las anteriores
Libro 1: Fundamentos de Programación
Unidad 1: Programas de Computadora 26
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
6) ¿Cuáles de los siguientes son lenguajes de programación orientado a objetos? a) Java b) C c) C++ d) Cobol 7) Compilar es traducir un programa escrito en un lenguaje de máquina en un programa de alto nivel; forma en la cual la computadora puede ejecutar acciones o instrucciones. a) Verdadero b) Falso 8) Para minimizar la ocurrencia de errores en la programación se recomienda revisar que los programas cumplan con lo siguiente: a) Reutilización de código b) Asumir que todas las entradas de usuario son correctas c) Verificar que la secuencia de entrada de datos es la requerida por el programa d) Que las instrucciones sean legibles y fáciles de entender 9) Un sistema operativo es una colección organizada de software que se usa para ayudar y, en parte, controlar las operaciones de una computadora. a) Verdadero b) Falso 10) ¿Cuáles de los siguientes son dispositivos de almacenamiento? a) Teclado b) Cinta magnética c) Impresora d) Otra computadora
Unidad 1: Programas de Computadora
Libro 1: Fundamentos de Programación 27
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Respuestas de la Unidad 1: Examen de Autoevaluación 1) a, b y c 2) b 3) a y c 4) a y b 5) a y b 6) a y c 7) b 8) a, c y d 9) a 10) b y d
Libro 1: Fundamentos de Programación
Unidad 1: Programas de Computadora 28
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Unidad 2: Conceptos de Diseño Estructurado Objetivos del Aprendizaje Al finalizar esta unidad, usted 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.
Unidad 2: Conceptos de Diseño Estructurado
Libro 1: Fundamentos de Programación 29
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
1. Introducción Existen técnicas para facilitar el entendimiento de un problema en términos que permitan desarrollar un algoritmo que ofrezca una solución y que, posteriormente, conlleve al desarrollo de un programa que solucione el problema con la ayuda de un computador. Éstas técnicas son: •
El diseño Top-Down (de arriba hacia abajo).
•
Los diagramas de estructura.
•
Los diagramas de flujo.
•
El pseudocódigo.
2. Conceptos de Diseño Estructurado El diseño estructurado es una metodología para el desarrollo de programas, que puede ser definida a través de las siguientes características: •
El sistema desarrollado siguiendo el diseño estructurado tendrá una entrada y una salida, con variaciones ocasionales.
•
El diseño estructurado divide el problema a resolver en partes o módulos.
•
El diseño estructurado evita el uso de la sentencia GOTO (sentencia que se utiliza para desviar el flujo normal de un programa; la desventaja de esta sentencia es que el seguimiento del programa puede ser desde difícil hasta imposible).
3. Diseño Top Down El diseño top down o “refinamiento paso a paso”, establece que debe irse de lo más general a lo más específico y se define como el proceso de dividir un problema en subproblemas más pequeños. Para entender el diseño top down se presenta a continuación un problema ejemplo y se discute cómo se aplica esta técnica en el diseño de programas. Enunciado del problema: Se le ha solicitado que escriba un programa para una tienda de videos que tenga como objetivo permitir que un cliente, previamente registrado en la tienda, alquile videos. Ya existe un sistema para llevar el control del inventario de películas y registro de clientes. La tienda tiene un conjunto de reglas que deben cumplirse para que un cliente alquile un video. Estas son: •
Un cliente es un miembro registrado.
•
El cliente no debe tener alquileres vencidos.
Libro 1: Fundamentos de Programación
Unidad 2: Conceptos de Diseño Estructurado 30
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
•
El cliente no debe nada a la tienda.
•
La película está en inventario.
•
La película no está reservada.
Un programa de alto nivel será: Alquilar un video. Al descomponer este programa de alto nivel, se obtienen los siguientes sub-programas: •
Verificar si el cliente es un miembro registrado.
•
Verificar si tiene alquileres vencidos.
•
Verificar si el miembro debe dinero.
•
Verificar si la película está en el inventario.
•
Verificar si la película está reservada.
Al descomponer de nuevo cada uno de los pasos anteriores, se obtiene: 1. Verificar si el cliente es un miembro registrado: • Ingresar una identificación del cliente en el sistema. •
Verificar si el sistema ha encontrado un perfil que coincida con este cliente.
2. Verificar los alquileres vencidos: • Ver si el perfil refleja cualquier alquiler vencido en el sistema. 3. Verificar si el miembro debe algún dinero: • Ver si el perfil refleja algún cargo pendiente. 4. Verificar si la película está en el inventario: • Ingresar el nombre de la película al sistema. •
Verificar si hay alguna copia que no esté alquilada.
5. Verificar si la película está reservada: • Ver si las copias que no están alquiladas están reservadas. De nuevo, al descomponer el sub-programa “Verificar si el cliente es un miembro registrado”: 1.1. Verificar si el cliente es un miembro registrado: • Preguntar la identificación al cliente. 1.2. Ingresar la identificación en el sistema: • Seleccionar del menú la opción de “verificar la identificación del miembro”. •
Ingresar la identificación del cliente en el prompt.
Unidad 2: Conceptos de Diseño Estructurado
Libro 1: Fundamentos de Programación 31
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
•
Guía del Estudiante
Presionar la tecla que indica al sistema que está listo, para que éste verifique por un número que coincida con el que se ha ingresado.
1.3. Leer la pantalla para ver si el sistema ha encontrado alguna coincidencia: • Verificar visualmente si el sistema dice ‘sí ' o ‘no ' es un miembro.
4. Diagramas de Estructura 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. La Figura 2.1 muestra un diagrama de estructura parcial del problema presentado en el punto anterior.
Alquilar una Película
Verificar si es un miembro
Preguntar identificación
Verificar alquileres vencidos
Ingresar identificación
Verificar deudas pendientes
Verificar si película está
Verificar si no está reservada
Examinar perfil
Figura 2.1: Diagrama de Estructura del Problema Ejemplo
5. Diagramas de Flujo o Flujograma Un diagrama de flujo es una representación gráfica de la lógica del diseño. Generalmente, presenta un nivel de detalle mucho mayor que los diagramas de estructura. Un diagrama de flujo resulta adecuado cuando se desea obtener mayor detalle, tal como agregar bifurcación de condicionales y/o iteraciones. En todo diagrama de flujo, siempre habrá una caja de inicio y otra de fin para el principio y final del algoritmo. Libro 1: Fundamentos de Programación
Unidad 2: Conceptos de Diseño Estructurado 32
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
5.1 Los símbolos A continuación los símbolos más comunes que se usan en un diagrama de flujo: Flechas o Líneas de Flujo: sirven para conectar los símbolos del diagrama. 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. Entrada/Salida: Representa las acciones de entrada y salida. Dentro se colocan las acciones de lectura y escritura.
Condición: En el rombo encontrar este signo, se dentro. Según la condición, un camino u otro. Sirve selectivas y repetitivas.
se coloca una condición, al evalúa la condición que hay sea verdadera o falsa, se toma para representar estructuras
Principio y Fin: Dentro del símbolo va la palabra inicio o fin del algoritmo. Subprograma: Dentro se subprograma al que se llama.
coloca
el
nombre
del
Conectores: Sirven cuando un flujograma no cabe en una columna de la hoja y hay que seguir en otra columna. Se colocan uno donde termina la columna y otro donde empieza. Hay 2 tipos: - Si es en la misma hoja. - Si es en una hoja distinta. Aclaratoria: Se usa para añadir comentarios que permitan entender mejor el código, no es parte del código.
Unidad 2: Conceptos de Diseño Estructurado
Libro 1: Fundamentos de Programación 33
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
5.2 Otros Símbolos Pantalla: Cuando una salida es por pantalla.
Teclado: También se usa para representar una entrada por teclado. Impresora
Entrada/Salida por Disco
Las bifurcaciones condicionales se ejecutan según una determinada condición, es decir, si la condición es verdadera se ejecuta un bloque del proceso, si es falsa se ejecuta un bloque diferente. Una iteración 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. La metodología para representar un problema utilizando diagramas de flujo, se describe en la Figura 2.2.
Libro 1: Fundamentos de Programación
Unidad 2: Conceptos de Diseño Estructurado 34
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
5.3 Metodología para Resolver un Problema con Diagramas de Flujo Inicio
Determinar requerimientos del proceso
Determinar requerimientos del postproceso
Crear Diagrama de Flujo
Verificar Diagrama de Flujo
NO ¿Diagrama Flujo OK?
SI Fin Figura 2.2: Metodología para Resolver un Problema con Diagramas de Flujo
Unidad 2: Conceptos de Diseño Estructurado
Libro 1: Fundamentos de Programación 35
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
6. Recomendaciones para hacer Diagramas de Flujo •
El diagrama debe mostrar claramente donde inicia y donde termina.
•
Cualquier camino que se siga, debe conducir al fin.
•
Los símbolos deben estar organizados de tal forma, que visualmente el flujo vaya de arriba abajo y de izquierda a derecha.
•
No debe usarse lenguajes de programación dentro de los símbolos.
•
El diagrama debe estar centrado dentro de la página.
•
Las flechas deben ser verticales u horizontales, nunca diagonales.
•
No deben cruzarse las flechas, para evitar esto están los conectores.
•
No abusar de los conectores.
•
A un símbolo sólo debe llegar una flecha, si fuese necesario otras flechas entrantes, estas deben llegar a un conector.
•
Las flechas deben entrar a los símbolos por arriba o por la izquierda, preferiblemente.
•
Debe tratarse de que el diagrama se ajuste a una página, de no ser posible debe usarse un conector.
7. Ejemplo de un Diagrama de Flujo Ejemplo 2.1 Calcular el producto de los números positivos introducidos por teclado. El proceso finaliza cuando se ingresa un número negativo o un cero. Algoritmo: 1. Iniciar la variable que va a contener el producto. 2. Leer el primer número. 3. Preguntar si es negativo o positivo. 4. Si es negativo o cero se sale de la iteración y se escribe el producto. 5. Si es mayor que cero, se multiplica el número leído y se lee un nuevo número. Se vuelve al paso 2.
Libro 1: Fundamentos de Programación
Unidad 2: Conceptos de Diseño Estructurado 36
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
INICIO
P=1
LEER NUM
NUM > 0
SI
P = P x NUM
NO ESCRIBIR P
FIN Figura 2.3: Diagrama de Flujo para el cálculo del producto de enteros
Fin del Ejemplo 2.1
8. Diagramas N-S o de Nassi-Schederman: Es una forma de representación semejante al flujograma o diagrama de flujo, pero sin flechas y cambiando los símbolos de condición y repetición. Está conformado por una serie de cajas de procesos que constituyen las secuencias de acciones necesarias para presentar el algoritmo. Las cajas de proceso o acción van unidas entre sí. Los Diagramas N-S son muy útiles para representar diagramas estructurados. A continuación en la Figura 2.4 se observa la representación de las condiciones.
Unidad 2: Conceptos de Diseño Estructurado
Libro 1: Fundamentos de Programación 37
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Condición SI
NO
Figura 2.4: Representación de Condiciones
Seguidamente, se presenta la Figura 2.5 en la cual se representan las estructuras repetitivas: Mientras
Repetir Hasta
Desde Var = V1 Hasta V2
Figura 2.5: Estructuras Repetitivas
A continuación se presenta nuevamente el problema de determinar el producto de un conjunto de enteros, cuya solución es representada en esta oportunidad mediante un diagrama de N-S. Para ello, observe la Figura 2.6. INICIO
p = 1 Leer num
Mientras (num > 0) p = p x num Leer num
Escribir p
FIN
Figura 2.6: Diagrama de N-S para el Cálculo del Producto de Enteros Libro 1: Fundamentos de Programación
Unidad 2: Conceptos de Diseño Estructurado 38
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
9. Pseudocódigo El pseudocódigo es un lenguaje de documentación de programas similar al español o al inglés (se parece a cualquier lenguaje de programación de alto nivel). No necesita seguir ninguna regla específica, como por ejemplo ser requerido por los programas que van a ser traducidos o compilados. El pseudocódigo normalmente no es muy específico para las áreas de E/S. No hay ningún estándar en la industria definido para escribir pseudocódigo y tiene la ventaja de que se puede crear fácilmente con cualquier editor de texto. Un ejemplo de pseudocódigo parecido a PL/I, se muestra a continuación: do while( count = 0 ) do process count = count - 1 end
Un ejemplo de pseudocódigo parecido a COBOL: perform until count = 0 perform process subtract 1 from count end-perform El pseudocódigo también puede utilizar una serie de palabras claves o palabras especiales que van indicando lo que significa el algoritmo. Ejemplo 2.2 Ejemplo de palabras claves en pseudocódigo: 1. Inicio y Fin: Por donde empieza y termina el algoritmo. 2. Si 3. Entonces 4. 5. 6.
Sino Mientras hacer Repetir / hasta
7. 8.
Desde / hasta Según sea (Para evaluar opciones múltiples)
Nota: Se debe tomar en cuenta que los comentarios van encerrados entre llaves y hay que utilizar sangría al escribir el código. La estructura recomendada para los algoritmos en pseudocódigo es: Unidad 2: Conceptos de Diseño Estructurado
Libro 1: Fundamentos de Programación 39
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Algoritmo Var : Inicio Fin Se presenta el pseudocódigo para el ejemplo de determinar el producto de un conjunto de enteros: 1. Algoritmo Producto 2. Var p, num: entero 3. Inicio 4. p = 1 5. 6.
Leer num Mientras num > 0 hacer
7.
p = p * num
8. 9.
Leer num Fin mientras
10. 11. Fin
Escribir p
Fin del Ejemplo 2.2
Libro 1: Fundamentos de Programación
Unidad 2: Conceptos de Diseño Estructurado 40
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Resumen Ahora que ha completado esta unidad, usted 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.
•
Dibujar un diagrama de estructura para mostrar la jerarquía de un programa.
•
Definir el concepto de Pseudocódigo.
Unidad 2: Conceptos de Diseño Estructurado
Libro 1: Fundamentos de Programación 41
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Unidad 2: Examen de Autoevaluación 1) El pseudocódigo es un lenguaje de documentación que: a) Necesita una sintaxis específica b) Necesita ser traducido pero no compilado c) Se puede crear fácilmente d) Ninguna de las anteriores 2) En diseño estructurado, el proceso de dividir un problema en subproblemas más pequeños se conoce como: a) Diagrama de flujo b) Diagrama de estructura c) Refinamiento paso a paso d) Diseño Top – Down 3) ¿Cuáles de las siguientes afirmaciones son verdaderas sobre diseño estructurado? a) Tiene una entrada y una salida b) Divide el problema en sub-problemas. c) Elimina el uso de la sentencia GO TO d) Ninguna de las anteriores 4) El refinamiento paso a paso puede representarse gráficamente con un: a) Diagrama de clases b) Árbol binario c) Diagrama de estructura d) Diagrama de secuencia 5) Para la representación de un problema, cumple la misma función utilizar un diagrama de flujo o un diseño top-down. a) Verdadero b) Falso 6) Si un algoritmo se representa en un diagrama de flujo, entonces no se puede representar en pseudocódigo. a) Verdadero b) Falso
Libro 1: Fundamentos de Programación
Unidad 2: Conceptos de Diseño Estructurado 42
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
7) Cuando se trabaja con programas grandes se hace difícil: a) El refinamiento paso a paso b) La representación gráfica de la lógica del diseño c) Probar totalmente el código d) Todas las anteriores 8) Un diagrama de flujo es: a) La representación de un algoritmo en un lenguaje de alto nivel b) La representación gráfica de la lógica del diseño c) Un refinamiento “paso a paso” d) Ninguna de las anteriores 9) ¿Indique cuáles de las siguientes son características del pseudo-código? a) Es un lenguaje de documentación similar al ingles o español b) Normalmente no es muy específico para las áreas de entrada y salida c) Se puede compilar para revisar las fallas de sintaxis d) Se puede crear fácilmente con cualquier editor de texto 10) ¿Cuál es la forma de representación del diseño top-down? a) Diagrama de Flujo b) Algoritmos c) Pseudocódigo d) Diagrama de Estructura
Unidad 2: Conceptos de Diseño Estructurado
Libro 1: Fundamentos de Programación 43
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Respuesta de la Unidad 2: Examen de Autoevaluación 1) c 2) c y d 3) a, b y c 4) c 5) b 6) b 7) d 8) b 9) a, b y d 10) d
Libro 1: Fundamentos de Programación
Unidad 2: Conceptos de Diseño Estructurado 44
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Unidad 3: Programación Estructurada Objetivos del Aprendizaje Al finalizar esta unidad usted 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.
Unidad 3: Programación Estructurada
Libro 1: Fundamentos de Programación 45
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
1. Introducción La característica fundamental de la programación estructurada es que se basa en el uso únicamente de tres estructuras de control y se apoya en los siguientes conceptos: •
Recursos Abstractos: Son los recursos que se tienen en el momento de programar y que se irán transformando en recursos concretos.
•
Diseño Descendente (top down): Se trata de ir descomponiendo el problema en niveles o pasos cada vez más sencillos, de forma que la salida de una etapa va a servir como entrada de la siguiente. En las primeras etapas se toma el punto de vista externo, es decir, qué entradas se tienen y qué salidas se producen. A medida que se avanza en la descomposición del problema, se van concretando las abstracciones, es decir cómo en efecto se resuelve.
•
Estructuras Básicas de Control: Para construir un programa se siguen los pasos de razonamiento anteriores y al final se codifica el programa usando tres tipos de estructuras: repetitivas, alternativas y secuenciales.
Al final todo programa tendrá una única entrada y una única salida. Desde la entrada tienen que existir caminos que permitan pasar por todas las partes del programa y llegar a la salida. Se permiten los bucles infinitos.
2. Estructuras Secuenciales En las estructuras secuenciales una instrucción sigue a otra en secuencia, es decir, la salida de una instrucción es la entrada de la siguiente. Observe la Figura 3.1. FLUJOGRAMA
DIAGRAMAS N-S
Leer num
PSEUDOCÓDIGO Leer num num = num * 2 Escribir num
Leer num
num=num*2 num=num*2
Escribir num Escribir num
Figura 3.1: Estructuras Secuenciales
Libro 1: Fundamentos de Programación
Unidad 3: Programación Estructurada 46
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
3. Estructuras Selectivas En este tipo de estructuras se evalúa una condición y en función del resultado lógico (verdadero o falso) u otro resultado se ejecuta un conjunto de instrucciones. Son también denominadas estructuras de control de flujo, estructuras condicionales o de toma de decisiones. Hay tres tipos de estructuras selectivas: simples, dobles o múltiples.
3.1 Estructura Selectiva Simple La estructura selectiva simple es la estructura condicional elemental y básica. Presenta la forma: Si
entonces
Fin si En esta estructura condicional se evalúa la condición, si el resultado es verdadero se ejecuta el conjunto de acciones asociadas al bloque, entonces si el resultado es falso no se ejecuta acción alguna. Esto está representado en la Figura 3.2. FLUJOGRAMA
DIAGRAMAS N-S Condición
Condición
no
SI
PSEUDOCÓDIGO Si
NO
entonces
Acciones si Acciones
Fin si
Acciones
| Figura 3.2: Estructura Selectiva Simple
3.2 Estructura Selectiva Doble La estructura selectiva doble es una estructura condicional que evalúa una condición dada. Si es verdad, se ejecutan el conjunto de acciones asociadas a la parte del ‘si’, si es falso se ejecutan el conjunto de acciones asociadas a la parte del ‘no’. En la siguiente figura se podrá observar con detalle esta estructura.
Unidad 3: Programación Estructurada
Libro 1: Fundamentos de Programación 47
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
FLUJOGRAMA
Guía del Estudiante
DIAGRAMAS N-S
PSEUDOCÓDIGO
condición
No acciones
condición
Si
No
Si acciones acciones
acciones
Si entonces Sino Fin si
acciones
Figura 3.3: Estructura Selectiva Doble
3.3 Estructura Selectiva de Alternativa Múltiple En la estructura selectiva de alternativa múltiple se evalúa una condición o expresión que puede tomar “n” valores distintos. Según sea el valor de la expresión en un instante dado, se ejecutarán las acciones correspondientes a ese valor. En realidad equivale a un conjunto de condiciones anidadas. En muchos lenguajes de programación se conocen como sentencias Case o Switch. Es una sentencia de la forma: Según sea : : [ : ] fin según Las acciones asociadas a la opción ‘Otro:’ se ejecutan cuando la expresión no toma ninguno de los valores que aparecen antes. En algunos lenguajes de programación se le conoce como alternativa ‘Otherwise’, ‘Else’ o ‘Default’. El valor con el que se compara la expresión es dependiente de los lenguajes de programación. Por lo general, se espera un tipo de dato determinístico y con valores secuenciales, tales como los enteros y caracteres. En general, ese valor puede ser un valor constante, un rango de valores determinístico o incluso otra condición. La Figura 3.4 representa una Estructura Selectiva de Alternativa Múltiple.
Libro 1: Fundamentos de Programación
Unidad 3: Programación Estructurada 48
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
FLUJOGRAMA
DIAGRAMAS N-S
PSEUDOCÓDIGO
Expresión Expresión V1
V1
V2
V3
V2
V4
V3
V4
Según sea : : : : [ :] Fin según
acciones
Figura 3.4: Estructura Selectiva de Alternativa Múltiple
Ejemplo 3.1: Uso de la Estructura Selectiva de Alternativa Múltiple Escribir un programa que dada una nota entera presente por pantalla un mensaje acorde a la nota suministrada según un rango de valores. Var nota: entero Leer nota Según sea nota 1..4: escribir “suspendido” 5..6: escribir “aprobado” 7..8: escribir “Notable” 9: escribir “Sobresaliente” 10: escribir “Cuadro de honor” Fin según Fin del Ejemplo 3.1
4. Estructuras Repetitivas o de Ciclo Las estructuras repetitivas o de ciclo representan 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 asociada una condición, que es la que va a determinar si debe ejecutarse el bucle y hasta cuando. Existen tres tipos de básicos de estructuras repetitivas: 1. Mientras-hacer (while) Unidad 3: Programación Estructurada
Libro 1: Fundamentos de Programación 49
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
2. Repetir-hasta (repeat until) 3. Desde (for)
4.1 Estructura Repetitiva Mientras-Hacer En la estructura repetitiva Mientras-Hacer, la condición de entrada al ciclo 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. Si la condición es verdadera, comienzan a ejecutarse las acciones del Mientras-Hacer. Después de la última acción, se repite el proceso de evaluación de la condición, esto es, si la condición es verdadera de nuevo, entonces se repiten las acciones. Este proceso se conoce como un bucle y continua hasta que la condición sea falsa y la ejecución prosiga con la sentencia siguiente después del bucle. Al evaluarse la condición la primera vez antes de entrar en el bucle, si la condición es falsa no se entra nunca en el bucle, en estas circunstancias el bucle nunca se ejecuta. Por lo tanto, se usará el bucle Mientras-hacer en el caso de que exista la posibilidad de que el bucle nunca deba ejecutarse.
FLUJOGRAMA
DIAGRAMAS N-S
No
Mientras Hacer
condición
Si
PSEUDOCÓDIGO
Mientras Hacer Fin mientras
acciones
Figura 3.5: Estructura Repetitiva Mientras-Hacer
4.2 Estructura Repetitiva Repetir-Hasta En la estructura repetitiva Repetir-Hasta, la condición del ciclo se evalúa después de realizar la primera iteración del bucle. Este bucle se repite mientras la condición evaluada al final se mantenga falsa. Al cumplirse la condición y ser verdadera, se sale del bucle. De allí su nombre “repetir hasta” que se cumpla la condición.
Libro 1: Fundamentos de Programación
Unidad 3: Programación Estructurada 50
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Como la condición se evalúa al final, se pasa al menos una vez por el bucle. Es decir que cuando un bucle se tenga que ejecutar como mínimo una vez, se puede usar una estructura ‘repetir hasta’. Ver Figura 3.6.
FLUJOGRAMA
DIAGRAMAS N-S
Acciones
condición
PSEUDOCÓDIGO
Repetir Hasta
No Repetir hasta
Si
Figura 3.6: Estructura Repetitiva Repetir-Hasta
En un ciclo ‘mientras-hacer’ se repite el bucle siempre que la condición sea verdadera, por el contrario, un ciclo ‘repetir-hasta’ se repite el bucle siempre que la condición sea falsa. A continuación un ejemplo. Ejemplo 3.2 Leer 3 números y calcular su suma:
Mientras hacer cont = 0 suma = 0 Mientras (cont 3) Hacer Leer num suma= suma + num cont= cont + 1 Fin mientras
Repetir hasta cont = 0 suma = 0 Repetir Leer num suma= suma + num cont= cont + 1 Hasta (cont == 3)
Fin del Ejemplo 3.2
4.3 Estructura Repetitiva Desde La estructura repetitiva ‘Desde’ se usa cuando se sabe el número exacto de veces que se va ha ejecutar el bucle. El bucle lleva asociado una variable que se denomina variable Unidad 3: Programación Estructurada
Libro 1: Fundamentos de Programación 51
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
índice, a la que se le asigna un valor inicial y se establece cual va a ser su valor final. La variable índice se incrementa o decrementa de manera automática, en cada iteración del bucle, en un valor constante. El programador no se tiene que ocupar de actualizar el valor de esta variable en cada iteración del bucle; es una operación implícita. Por lo tanto, en cada iteración del bucle, la variable índice se actualiza automáticamente y cuando alcanza el valor que se ha establecido como final, se termina la ejecución del bucle. Observe la Figura 3.7.
FLUJOGRAMA
DIAGRAMAS N-S
Desde v=vi hasta vf
v = vi
PSEUDOCÓDIGO
Desde hasta
v = v + 1
si
v = 1) Y (opcion 1) entonces Factorial(x) = x * Factorial(x-1) sino Factorial(x)=1 La función factorial en forma recursiva: Funcion FactorialRecursiva(x : entero): entero Inicio Si (x > 1) entonces Retornar (x * FactorialRecursiva(x – 1)) Sino Retornar 1 Fin FactorialRecursiva
Unidad 4: Funciones y Procedimientos
Libro 1: Fundamentos de Programación 75
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Si se realiza el cálculo del factorial de 4, la función al ejecutarse realizaría los siguientes pasos: x=4
Factorial(4)=4*Factorial(3) retorno
Factorial=24
x=3 Factorial(3)=3*Factorial(2) retorno
Factorial=6
x=2
Factorial(2)=2*Factorial(1) retorno
Factorial=2
x=1 Factorial(1)=1 retorno
Factorial=1
Figura 4.3: Pasos para calcular el factorial de 4
A continuación se presenta el Ejemplo 4.4 para efectuar la función factorial en forma iterativa: Ejemplo 4.4 1. Funcion FactorialIterativa(x : entero): entero 2. Var 3. res : entero 4. i : entero 5. Inicio 6. 7. 8. 9.
res = x Si (x > 1) entonces Desde i = x - 1 hasta 1 res = res * i
Libro 1: Fundamentos de Programación
Unidad 4: Funciones y Procedimientos 76
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
10. 11. 12.
Fundamentos de Programación
Fin Desde Sino res = 1
13. Retorno (res) 14. Fin FactorialIterativa Toda función recursiva puede expresarse en forma iterativa, lo contrario no es cierto. Fin del Ejemplo 4.4 Como guía para el uso o no de la recursividad, puede considerarse: •
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 un algoritmo no recursivo se puede obtener y es menos complejo que el recursivo, es mejor utilizar el no recursivo.
•
No debe usarse 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.
Unidad 4: Funciones y Procedimientos
Libro 1: Fundamentos de Programación 77
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Resumen Ahora que ha completado esta unidad, usted debe ser capaz de: •
Definir qué son las funciones.
•
Listar las características de las funciones.
•
Conocer la sintaxis de las funciones.
•
Definir los Procedimientos.
•
Listar las características de los procedimientos.
•
Explicar el Ámbito de las Variables.
•
Explicar la comunicación entre subprogramas.
•
Definir que es la recursividad.
Libro 1: Fundamentos de Programación
Unidad 4: Funciones y Procedimientos 78
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Unidad 4: Examen de Autoevaluación 1) En relación a las Funciones, ¿Cuáles de siguientes afirmaciones son correctas? I. Un programador puede establecer que la función devuelva o no un valor II. Es necesario que en el cuerpo se incluya una sentencia retorno III. Se puede devolver varios resultados asociados al nombre de la función IV. El parámetro real de una función puede ser el valor de retorno de otra función a) I, II, IV b) II, III, IV c) I, II, III, IV d) Ninguna de las anteriores 2) Los parámetros pueden ser pasados por: a) Referencia b) Copia c) Constantes d) Ninguna de las anteriores 3) Con respecto a la recursividad, ¿Cuáles de las siguientes afirmaciones no son verdaderas? I. Todo algoritmo recursivo debe tener una condición que finalice la recursividad II. Todo algoritmo iterativo puede ser reescrito como un algoritmo recursivo III. Los algoritmos iterativos son menos eficientes que los algoritmos recursivos IV. Un programa recursivo puede ocasionar un desborde de pila del sistema a) I, II, IV b) II, III c) I, IV d) II, III, IV 4) La mayoría de los lenguajes sólo permiten tipos de parámetros de entrada y de salida a) Verdadero b) Falso
Unidad 4: Funciones y Procedimientos
Libro 1: Fundamentos de Programación 79
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
5) Con respecto a la anidación de procedimientos ¿Cuál de las siguientes afirmaciones es cierta? a) Está permitida en todos los lenguajes b) Se presentan problemas en el ámbito de las variables c) El procedimiento interno únicamente es visto por el procedimiento externo al cual pertenece. d) Una variable x en el procedimiento externo puede ser ocultada por una variable x en el procedimiento interno. 6) La cabecera de una función comprende: a) Tipo de dato de retorno b) Lista de parámetros c) Identificador d) Grupo de sentencias 7) Con relación a los procedimientos, ¿Cuáles de las siguientes afirmaciones son verdaderas? I. Sólo pueden devolver cero o un valor por sus parámetros II. Por si solos pueden formar parte de una expresión III. El valor devuelto es asociado al nombre del procedimiento IV. Puede recibir sólo parámetros por referencia a) I, II b) II, III, IV c) III, IV d) Ninguna de las anteriores 8) El valor de un parámetro por referencia pasado a una función no puede ser modificado dentro de ella a) Verdadero b) Falso 9) Dado el siguiente algoritmo: Procedimiento Duplicar(x:entero) Inicio x=x*2 Fin Duplicar Algoritmo Sumar Var a,b: entero Inicio Libro 1: Fundamentos de Programación
Unidad 4: Funciones y Procedimientos 80
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
a=3 b=Duplicar(a)+Duplicar(a) Escribir(b) Fin Se puede decir que el algoritmo está bien elaborado y funciona correctamente a) Verdadero b) Falso 10) Las variables locales a una función o procedimiento sólo existen dentro del contexto en donde se encuentran definidas a) Verdadero b) Falso
Unidad 4: Funciones y Procedimientos
Libro 1: Fundamentos de Programación 81
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Respuesta de la Unidad 4: Examen de Autoevaluación 1) a 2) a y b 3) b 4) b 5) b, c y d 6) a, b y c 7) d 8) b 9) b 10) a
Libro 1: Fundamentos de Programación
Unidad 4: Funciones y Procedimientos 82
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos Objetivos del Aprendizaje Al finalizar esta unidad, usted 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 los arreglos multidimensionales.
•
Entender el almacenamiento de arreglos en memoria.
Unidad 5: Estructura de Datos: Arreglos
Libro 1: Fundamentos de Programación 83
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
1. Introducción En las unidades anteriores se estudiaron los conceptos de algoritmos y programas, así como una serie de elementos, entre ellos, la lógica, que ayudan a resolver problemas computacionales. También se discutió cómo un programa o algoritmo puede ser representado gráficamente mediante un diagrama de flujo y se trabajó con los principios de la programación estructurada, sus recursos y técnicas. Ésta unidad se ocupa de estudiar una de las representaciones de datos más usadas en programación: Los Arreglos o Vectores. Los arreglos se utilizan para almacenar datos consecutivos de un mismo tipo, por lo que se usan generalmente en algoritmos de clasificación, ordenamiento y búsqueda.
2. Arreglos Unidimensionales: Arreglos o Vectores Un arreglo unidimensional o vector, es un conjunto finito, consecutivo y organizado de elementos homogéneos, es decir, elementos pertenecientes a un mismo tipo de dato. Se dice que es: •
Finito: El arreglo tiene un número determinado de elementos.
•
Homogéneo: Todos los elementos del arreglo 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, en posiciones consecutivas de la memoria.
Para referenciar cada elemento de un arreglo se usa el índice, que es un valor que directa o indirectamente referencia la posición del elemento dentro del arreglo. Los índices deben ser de cualquier tipo de datos escalar, porque en un escalar se puede definir un orden y entre dos elementos consecutivos no puede haber infinitos elementos. Un ejemplo de datos escalares son los enteros y caracteres. Normalmente, como índices se van a utilizar 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 o arreglo lineal es la diferencia entre el índice de valor máximo en el arreglo y el índice de valor mínimo + 1. Normalmente, los índices comienzan a enumerarse desde 0 ó 1, como el valor mínimo del índice, dependiendo del lenguaje de programación (en Pascal inician con 1 y en ‘C’ inician con 0). Sin embargo, nada impide que comiencen con cualquier otro valor. Los arreglos se almacenan siempre en posiciones consecutivas de memoria y se puede acceder a cada elemento del arreglo de manera independiente, a través de los índices. Un índice no tiene porque ser un valor constante, puede ser también una variable o una Libro 1: Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos 84
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
expresión que al ser evaluada devuelva un valor escalar que se encuentre entre el índice menor y el índice mayor del arreglo o ambos inclusive.
2.1 Definición de un Arreglo o Vector Para definir un arreglo, se da el nombre del arreglo, el rango de sus índices y el tipo de los datos que contiene. Esto es: : arreglo [rango] de Ejemplo: sueldo: arreglo[8] de real i: entero i = 2 sueldo[i]= 23.5 Si el valor mínimo del rango del índice es 1 la sentencia sueldo[i]= 23.5 asigna el valor 23.5 a la segunda posición de un arreglo de ocho elementos. Si el valor mínimo del rango del índice es 0 la sentencia sueldo[i]= 23.5, se asigna el valor 23.5 a la tercera posición de un arreglo dado que el valor del índice i es 2. Se considera un error intentar acceder a una posición del arreglo que esté fuera del rango del índice. Este error se denomina comúnmente ‘índice fuera de rango’.
2.2 Operaciones con vectores Se va a usar la declaración de vector: ventas: arreglo[12] de entero Gráficamente éste vector puede representarse como: 1
2
3
4
5
6
7
8
9
10
11
12
2.2.1 Asignar un Dato a una Posición del Arreglo Consiste en asignar un valor dado a una posición del arreglo dada por un índice. La sintaxis de ésta operación es: [indice] = valor Ejemplo: Asignar el valor 600000 a la posición 5 del vector. ventas[5] = 600000 2.2.2 Lectura y Escritura de Datos Consiste en usar una posición cualquiera del arreglo definida por un índice para operaciones de entrada y salida. Unidad 5: Estructura de Datos: Arreglos
Libro 1: Fundamentos de Programación 85
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
La sintaxis para estas operaciones es: Leer [indice] Escribir [indice] Ejemplo 5.1 Leer y mostrar las ventas de los 12 meses del año y almacenarlas en un vector. 1. Desde i = 1 Hasta 12 2. Escribir “Introduzca las ventas del mes ” i 3. Leer ventas[i] 4. Fin Desde 5. Desde i = 1 Hasta 12 6. Escribir “Ventas del mes ” i ” = ” ventas [i] 7. Fin Desde Fin del Ejemplo 5.1 2.2.3 Recorrido o Acceso Secuencial de un Arreglo Consiste en pasar por todas las posiciones del arreglo para procesar su información. Usualmente, se usa un ciclo ‘Desde’ para recorrer el vector. La sintaxis de esta operación es: Desde indice = 1 Hasta Rango_Arreglo Fin Desde Ejemplo 5.2 Sumar 1 millón a las ventas de cada mes. 1. Desde i = 1 Hasta 12 2. Ventas[i] = ventas[i] + 1000000 3. Fin Desde Fin del Ejemplo 5.2
Libro 1: Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos 86
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
2.2.4 Actualización de un Arreglo •
Añadir Datos
Es un caso especial de la operación de inserción de un elemento en un arreglo, donde el elemento nuevo se agrega después de la última posición que contiene información válida en el arreglo. Para hacer esta operación, es necesario que si actualmente el arreglo tiene k posiciones de información válida, tenga un tamaño de al menos k + 1 para que se pueda añadir otro elemento a continuación del elemento en la posición k. Sintaxis: •
[K + 1] = valor
Insertar Datos
Consiste en introducir un elemento en una posición del interior de un arreglo, para lo cual será necesario desplazar una posición a la derecha a todos los elementos que estén a la derecha de donde se va a insertar el elemento, esto con el fin de conservar el orden relativo entre los elementos. Para que se pueda insertar un nuevo elemento en el arreglo, si ya existen n elementos con información en el arreglo, el arreglo tendrá que tener un tamaño al menos de n + 1 para poder insertar el nuevo elemento. C
E
F
J
M
O
J
M
Al insertar ‘G’ en la cuarta posición queda: C
E
F
G
O
Si k es la posición donde se va a insertar el nuevo elemento, n es el número de elementos válidos en el arreglo en el momento de la inserción y suponiendo un tamaño mínimo de n + 1, el algoritmo de inserción es: Desde i= n hasta k con decremento 1 A[i+1] = A[i] Fin Desde A[k] = valor Ejemplo 5.3 Insertar 30000 correspondientes a las ventas del mes 5. 1. Desde i= 11 hasta 5 con decremento 1 2. ventas[i + 1] = ventas[i]
Unidad 5: Estructura de Datos: Arreglos
Libro 1: Fundamentos de Programación 87
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
3. Fin Desde 4. ventas[5] = 30000 Fin del Ejemplo 5.3 •
Eliminar Datos
Para eliminar un elemento de un arreglo, si ese elemento está posicionado al final del arreglo, no hay ningún problema, simplemente si el tamaño del arreglo era n, ahora hay que considerar que el tamaño del arreglo es n - 1. Si el elemento a eliminar ocupa cualquier otra posición, entonces se tendrán que desplazar una posición hacia la izquierda todos los elementos situados a la derecha del elemento a borrar, para que el arreglo quede organizado. C
E
F
J
M
O
Al borrar el elemento J de la cuarta posición.
C
E
F
M
O
Suponiendo que el número de elementos válidos actualmente es “n” y que se desea borrar el elemento de la posición k. Desde i = k Hasta
n - 1
A[i] = A[i+1] Fin Desde Ejemplo 5.4 Eliminar las ventas registradas en el mes 4 y desplazar las de los meses subsiguientes hacia la izquierda. 1. Desde i= 4 Hasta 11 2. ventas[i] = ventas[i+1] 3. Fin Desde 4. El número de elementos validos n es ahora n = n – 1 Fin del Ejemplo 5.4
Libro 1: Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos 88
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
3. Arreglos Bidimensionales: Matrices m x n En un arreglo unidimensional o vector cada elemento es referenciado por un índice. En un arreglo bidimensional cada elemento se va a referenciar por 2 índices. La representación lógica de un arreglo bidimensional es una matriz de dimensiones M x N, donde M es el número de filas de la matriz y N es el número de columnas, es decir, la 1ª dimensión indica las filas y la 2ª dimensión indica las columnas. Al acceder a un elemento I,J se está accediendo al elemento que ocupa la fila I y la columna J. Un arreglo bidimensional de M x N elementos es un conjunto de M x N elementos, todos del mismo tipo, cada uno de los cuales es referenciado a través de 2 subíndices. El primer subíndice varía entre 1 y M o entre 0 hasta M-1, dependiendo desde donde comience el índice. El segundo índice varía entre 1 y N o entre 0 y N-1. En general se puede definir un arreglo de 2 dimensiones de la siguiente manera: : arreglo[rango-filas, rango-columnas] de Así la matriz para la representación de las ventas mensuales de cinco años será: ventas: arreglo[5, 12] de real tamaño = m x n = 5 x 12 = 60 En memoria, sin embargo todos los elementos del arreglo se almacenan en posiciones contiguas. Matriz de ventas 5 x 12, total de 60 elementos: 1 1 2 3 4 5
2
3
4
5
6
7
8
9
10
11
12
120
ventas[4, 3] = 120 En memoria se almacenan los elementos en forma consecutiva: 1,1 1,2
1,3 1,4
...
Unidad 5: Estructura de Datos: Arreglos
1,12 2,1 2,2
2,3
…
5,1
...
5,12
Libro 1: Fundamentos de Programación 89
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
3.1 Manejo de Matrices 3.1.2 Colocar el Valor de Cero a todos los Elementos de la Matriz Esta es una operación útil cuando se desea inicializar todos los elementos de la matriz a un valor dado, usualmente ese valor es cero, aunque bien podría ser cualquier otro valor válido. Sintaxis M: arreglo[m, n] de entero Var i, j : entero Desde i = 1 Hasta m Desde j = 1 Hasta n M[i, j] = 0 Fin Desde Fin Desde Ejemplo 5.5 Inicializar la matriz de ventas mensuales para 5 años. 1. 2. 3. 4. 5. 6. 7.
ventas: arreglo[5, 12] de entero Var i, j : entero Desde i = 1 Hasta 5 Desde j = 1 Hasta 12 ventas[i, j] = 0 Fin Desde Fin Desde
Fin del Ejemplo 5.5 3.1.3 Colocar el valor de cero a sólo los elementos de una fila dada En este caso, se mantiene fija la fila y se recorren las columnas asignándoles un valor suministrado, usualmente ese valor es cero. Sintaxis M: arreglo[m, n] de entero Var i, j : entero i = fila Desde j = 1 Hasta n M[i, j] = 0 Fin desde
Libro 1: Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos 90
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Ejemplo 5.6 Inicializar las ventas mensuales del año 3. 1. 2. 3. 4. 5. 6.
ventas: arreglo[5, 12] de entero Var i, j : entero i = 3 Desde j = 1 Hasta 12 M[i, j] = 0 Fin desde
En este caso, se le asignó el valor de cero a los elementos de la tercera fila de la matriz ventas. Fin del Ejemplo 5.6
4. Arreglos Multidimensionales: Matrices m x n x...z Un arreglo multidimensional es una matriz de 3 ó más dimensiones. Si se tiene un arreglo de N dimensiones, donde cada dimensión es de tamaño d1,d2,..,dN, el número de elementos del arreglo será d1xd2x..xdN. Para acceder a un elemento del arreglo se utilizan N índices, cada uno de los cuales referencia a una posición dentro de una dimensión, siempre según el orden de declaración. En memoria, el arreglo se sigue almacenando en posiciones consecutivas. La declaración de un arreglo multidimensional será: Nom_arreglo: arreglo[rangoI, rangoII, ..., rangoN] de tipo Ejemplo 5.7 Definir la matriz de ventas mensuales por cinco años para tres vendedores y asignar a las ventas del mes 10 del cuarto año para el vendedor 2, la cantidad de 120000.5. ventas : arreglo[3, 5, 12] de real ventas[2, 4, 10]= 120000.5 Fin del Ejemplo 5.7
5. 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 cual se asigna cuando se declara una variable del tipo arreglo.
Unidad 5: Estructura de Datos: Arreglos
Libro 1: Fundamentos de Programación 91
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
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. Por ejemplo, Arreglo[100] de carácter, si se asume que cada carácter necesita un byte para ser almacenado, entonces el arreglo necesita un total de 100 bytes de memoria: 1 byte x 100 elementos = 100 bytes. En el caso de un arreglo multidimensional, también se almacena en posiciones contiguas de memoria. Su tamaño será el producto de sus elementos por el tamaño requerido para representar cada elemento en memoria. Por ejemplo, Arreglo[3, 5, 12] de enteros, si se asume que cada entero necesita dos byte para ser almacenado y se tiene un total de 3 x 5 x 12 = 180 elementos, entonces el arreglo requiere un total de 360 bytes de memoria: 2 bytes x (3 x 5 x 12) elementos = 360 bytes.
Libro 1: Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos 92
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Resumen Ahora que ha completado esta unidad, usted 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 los arreglos multidimensionales.
•
Entender el almacenamiento de arreglos en memoria.
Unidad 5: Estructura de Datos: Arreglos
Libro 1: Fundamentos de Programación 93
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Unidad 5: Examen de Autoevaluación 1) Un vector es un conjunto finito, consecutivo y organizado de elemento heterogéneos. a) Verdadero b) Falso 2) Si se asume que el tipo de dato real requiere 4 bytes para su almacenamiento, ¿cuántos bytes se necesitan en memoria para almacenar la matriz Arreglo[2,3,5] de real? a) 10 bytes b) 30 bytes c) 120 bytes d) 120 bits 3) La representación lógica de un arreglo bidimensional es una matriz de dimensiones M x N donde M representa: a) El número de la dimensión del vector b) El número de filas de la matriz c) El número de columnas de la matriz d) Ninguna de las anteriores 4) Un índice puede ser un valor constante. a) Verdadero b) Falso 5) Con referencia a los vectores, ¿Cuáles de las siguientes afirmaciones son correctas? a) La longitud de un vector es dada por la multiplicación del rango del vector por el tamaño en bytes del tipo de datos. b) Se almacenan en posiciones lineales o contiguas de memoria. c) En los índices de un arreglo, por lo común, se utilizan tipos de datos enteros y caracteres. d) El tamaño máximo de un arreglo es el tamaño del tipo de datos al que pertenece menos uno. 6) Se puede utilizar un procedimiento que devuelva un valor entero como índice de un arreglo. a) Verdadero b) Falso
Libro 1: Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos 94
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
7) El siguiente algoritmo: M: arreglo [1..N,1..M] de entero Var i,j entero Desde i=1 hasta N Desde j=1 hasta M M [1,j]= 5 Fin desde Fin desde a) Inicializa a cinco todos los elementos del arreglo multidimensional b) Inicializa a cinco todas las filas del arreglo multidimensional c) Inicializa a cinco todas las columnas del arreglo multidimensional d) Ninguna de las anteriores 8) Todos los lenguajes de programación permiten declarar arreglos multidimensionales. a) Verdadero b) Falso 9) Al eliminar el primer elemento de un arreglo de cinco elementos, los restantes elementos deben ser desplazados hacia la izquierda. a) Verdadero b) Falso 10) Dado un arreglo X de M x N elementos, donde los elementos son números enteros, la dirección de comienzo del elemento 5º del arreglo sabiendo que se almacena a partir de la dirección 1200 y que en nuestra máquina los enteros ocupan 2 bytes es: a) 1200 b) 1204 c) 1206 d) 1208
Unidad 5: Estructura de Datos: Arreglos
Libro 1: Fundamentos de Programación 95
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Respuesta de la Unidad 5: Examen de Autoevaluación 1) b 2) c 3) b 4) a 5) b y c 6) b 7) d 8) b 9) a 10) d
Libro 1: Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos 96
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Unidad 6: Entrada y Salida Objetivos del Aprendizaje Al finalizar esta unidad, usted será capaz de: •
Describir los conceptos básicos de entrada y salida en un programa de computadora.
•
Listar algunas consideraciones específicas para imprimir la salida.
•
Describir los conceptos de registros de datos fijo, variable y bloqueado.
Unidad 6: Entrada y Salida
Libro 1: Fundamentos de Programación 97
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
1. Introducción La solución a problemas de la vida real mediante computadoras incluye el uso de programas especializados para resolver dichos problemas. Los programas generalmente usarán, leyendo y escribiendo, datos provenientes de fuentes externas. Para que esto sea posible, las computadoras ofrecen capacidades de entrada y salida que le permiten a las aplicaciones comunicarse con ese entorno que se encuentra fuera del programa mismo. En esta unidad se introducen los conceptos básicos de entrada y salida (E/S), mediante los cuales los programas de computadora pueden intercambiar, capturar y mostrar datos para la solución de problemas específicos.
2. Entrada y Salida de un Programa Un programa se carga en la computadora en el Procesador o Unidad Central de Procesamiento (CPU), cuando el programa se ejecute necesitará probablemente leer datos o escribir datos desde o hacia algún dispositivo. El lenguaje que se emplee para escribir un programa tendrá algunos comandos especiales o funciones que se pueden usar para realizar la entrada y salida de los datos. La entrada y salida, generalmente son las partes más complejas de cualquier programa o cualquier lenguaje de programación. La transferencia real de datos hacia o desde los dispositivos de E/S, suele ser la parte más lenta de un programa. Los comandos que se usan para la entrada son normalmente: read, get o scan. Los comandos de la salida son, por su parte: print, write o put. La Figura 6.1 muestra posibles entradas y salidas de un programa.
Impresora
Teclado
Archivo en disco
Archivo en disco ENTRADA
PROCESADOR (programa en ejecución)
SALIDA
Red
Pantalla
Red
Scanner Figura 6.1: Entrada/Salida
Libro 1: Fundamentos de Programación
Unidad 6: Entrada y Salida 98
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
3. Buffers de Entrada y Salida Los datos externos que se procesan en un programa se leen y escriben realmente en un buffer que maneja la computadora. Un buffer es un espacio de memoria que el sistema operativo reserva para operaciones específicas, con la finalidad de acelerar esas operaciones y así optimizar el rendimiento. El sistema lee físicamente los datos de algún dispositivo externo a 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, de tal forma que lee del buffer de entrada y escribe al buffer de salida. El manejo de estos buffers es total competencia del sistema operativo e ignorado por el programador. Cuando se empieza el procesamiento con una operación de entrada, el sistema lee los datos del dispositivo de entrada y llena el buffer de entrada. A medida que se vacían los datos del buffer de entrada, el sistema sigue la pista del buffer y llena el buffer desde el dispositivo cuando está vacío. Igualmente, las operaciones de escritura de un programa se realizan en el buffer de salida, también monitoreado por el sistema operativo. Cuando el buffer de salida está lleno, el sistema escribe el contenido del buffer de salida al dispositivo de salida designado, de forma transparente al programador. Todo este movimiento de datos externo, lo maneja la parte del sistema operativo denominada Sistema de Control de I/O (IOCS). El IOCS se ejecuta paralelamente a la ejecución del programa. Esto significa que el programa puede continuar haciendo lo que necesite a los datos y el sistema se ocupa de transportarlos hacia y desde los dispositivos de E/S. Observe la Figura 6.2.
Unidad 6: Entrada y Salida
Libro 1: Fundamentos de Programación 99
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Buffers Programa
... Disco
E N T R A D A
HACER MIENTRAS (MAS DATOS) LEER
LEER (READ)
/* PROCESAR */
ESCRIBIR (WRITE)
ESCRIBIR FINHACER ...
S A L I D A
Figura 6.2: Buffers de Datos
4. Imprimir Datos Imprimir la salida a una impresora requiere ciertas consideraciones especiales como: •
Definir los formatos de salida para las líneas de datos y las líneas de título.
•
Contar las líneas impresas para no exceder la hoja de papel.
•
Contar las páginas para imprimir el número de página.
•
Escribir encabezados de páginas para identificar los datos impresos.
•
Control físico del carro de la impresora para imprimir los datos en el lugar adecuado de la página.
Las situaciones enumeradas anteriormente deben ser manejadas en el programa. Se puede inferir que hay que considerar formatos especiales cuando se escriben datos a un dispositivo de impresión. Debe mantenerse un contador de líneas para tener seguimiento de cuántas líneas se han impreso, para que así se pueda tener control de cuándo saltar a una nueva página y colocar los encabezados en una nueva página de salida. Debe mantenerse un contador de páginas que permita colocar el número de la página en la nueva página y se incremente cada vez que se vaya a imprimir una nueva página. Por otra parte, hacen falta formatos específicos de impresión para imprimir las líneas de datos y las líneas de encabezado. Normalmente, el encabezado de la página requiere de
Libro 1: Fundamentos de Programación
Unidad 6: Entrada y Salida 100
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
formatos únicos de línea para las múltiples líneas de encabezado y los encabezados de columna. El control de carro le indica a la impresora dónde imprimir la próxima línea.
4.1 Control de Carro de Impresora La mayoría de los lenguajes de programación que proporcionan acceso directo a una impresora, también proporcionan 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. En la Tabla 6.1 se presentan los caracteres de control.
Caracteres
Acción de Control
espacio
Espaciar 1 línea
0
Espaciar 2 línea
_
Espaciar 3 línea
1
Saltar a una nueva página
+
Suprimir espaciado Tabla 6.1: Caracteres de Control
Los caracteres de control se colocan en la primera posición de la impresión de cada línea y no se verán en la copia impresa. Este carácter de control siempre se aplica a la línea que se va a imprimir a continuación. Cuando se usa el carácter de control “0” se da la apariencia de doble espacio. El “+” puede usarse para suprimir el espaciado de línea, para dar apariencia de sobreimpresión (overstrike) o negrita.
4.2 Imprimir Reportes Como se mencionó anteriormente, cuando se escriben los reportes a una impresora, el programador tiene que considerar aspectos tales como; encabezados de páginas, números de las páginas, además de contadores de línea y pie de páginas que serán necesarias para cada página impresa. Existen varios tipos de líneas que deben definirse: •
Línea de título: Contiene información que identifica al reporte: fecha, nombre del reporte y aparece en parte superior de cada página.
•
Líneas de encabezados: Los encabezados de las columnas deben ser alineados con el de los datos.
•
Líneas de datos: Son los datos del reporte.
Unidad 6: Entrada y Salida
Libro 1: Fundamentos de Programación 101
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
•
Líneas de resumen: Son los totales de página, totales finales o información complementaria.
•
Líneas de pie de página: Contiene los números de la página, información de seguridad, etc.
El programador define la información para las partes constantes de las líneas de título, encabezado y de pie de página. Estos registros constantes se imprimirán mediante rutinas que se deberán ejecutar cuando se alcanza el inicio de una nueva página o el fin de ésta, según corresponda. El fin de una página se determina contando las líneas y probando éste valor contra un número máximo deseado de líneas por página. Cuando se alcanza el límite de la página, el programa debe imprimir una línea de pie de página opcional en la página actual y, de haber una nueva página, imprimir una línea de título en la nueva página. Si se usan encabezados de columnas, éstos deben imprimirse antes de continuar la impresión y contar las líneas de detalle. Pueden tenerse una rutina o procedimiento, para manejar las líneas de encabezado y otra para el pie de página o puede ser una sola que se encargue de ambas situaciones.
4.3 Encabezados de Páginas El programador debe definir el tamaño de la página y una variable como contador de línea. El contador de línea se inicializa con el número máximo de líneas a imprimir, para permitir la invocación al procedimiento que imprime el encabezado del reporte. Las consideraciones para el contador de línea son: •
Después de imprimir cada línea de detalle debe compararse (>=) con el tamaño de página, 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 inicializar de nuevo el contador de línea.
El tamaño de la página es el número máximo de líneas a ser impresas en la página. El programador decide el número que será y lo fija como una constante en el programa. La rutina de encabezado de página también debe ocuparse de la variable contadora de página, la cual debe ser incrementada cada vez que se vaya a escribir en una nueva página. Esta variable puede ser parte de la línea del título o de pie de página, según el estilo del reporte.
Libro 1: Fundamentos de Programación
Unidad 6: Entrada y Salida 102
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
5. Entrada/Salida de Archivo: Formatos de Registros Los datos escritos o leídos desde un archivo, generalmente se manejan como un registro. Existen típicamente dos formas en que pueden procesarse los datos de un registro, estas son como registros de largo fijo o como registros de largo variable. Los registros también pueden formar bloques para lograr eficiencia en la transferencia hacia y desde el dispositivo de almacenamiento. La Figura 6.4 representa esto.
REGISTRO
REGISTRO
FIJO
REGISTRO
REGIST
BLOQUE FIJO BLOQUEADO
REGISTRO
REGISTRO
REGISTRO
VARIABLE
REGISTRO
REGISTRO
REGIST
REGISTRO Número de bytes en el registro
BLOQUE VARIABLE BLOQUEADO
REGISTRO
REGISTRO
REGISTRO
Número de bytes en el bloque
Figura 6.4: Formatos de Registros
Las operaciones de E/S que usan un archivo de disco o cinta, normalmente trabajan con registros de datos y requieren que el programador considere los formatos del registro. El tamaño de los registros fijos se establece generalmente, como un parámetro en el proceso de E/S. El tamaño de los registros variables es diferente para cada registro y se coloca en la cabecera del registro para indicar el número de bytes que éste ocupa. Esto también se cumple para bloques de datos. El número de registros en cada bloque de un conjunto de datos de bloque fijo, se da como un parámetro del sistema de E/S. El tamaño para bloques variables puede ser diferente para cada bloque, así que el tamaño también es embebido en una porción de la cabecera de cada bloque. Organizar datos en bloques es ventajoso, porque permite al sistema de control de E/S leer o escribir múltiples registros en cada transacción de flujo de los datos, según la cantidad de registros que contenga el bloque. Unidad 6: Entrada y Salida
Libro 1: Fundamentos de Programación 103
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Ejemplo 6.1: 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 el empleado trabajó más de cuarenta horas. El reporte debe contener un título y encabezados de columnas y debe manejar múltiples páginas. 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.
Registros Entrada: Anderson Andrews Appleton Arnold Astor
35 42 40 30 45
Formato del Reporte: Reporte de Horas Trabajadas Nombre Horas Anderson 35 Andrews 42 Appleton 40 Arnold 30 Astor 45
Libro 1: Fundamentos de Programación
Sobre tiempo si
si
Unidad 6: Entrada y Salida 104
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
A continuación se presenta el diagrama de flujo de la solución al problema de E/S: PROCESAR REGISTRO
INICIO INICIO
CONT_LINEA = MAX_LINEAS CONT_PG = 1
CONT_LINEA >= CONT PG
SI NUEVA PÁGINA
NO
LEER 1er. REGISTRO
SI
HORAS > 40
LEER SIGUIENTE REGISTRO
INDICADOR = ‘SI’
NO INDICADOR = ‘NO’
PROCESAR REGISTRO
NO FIN DE ARCHIVO
SI
ASIGNAR CAMPOS ENTRADA A CAMPOS SALIDA
NO ESCRIBIR REGISTRO
FIN
CONT_LINEA = CONT_LINEA + 1
FIN
Figura 6.5: Diagrama de Flujo del Ejercicio de E/S
Unidad 6: Entrada y Salida
Libro 1: Fundamentos de Programación 105
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
NUEVA PÁGINA INICIO
SALTAR A NUEVA PÁGINA
ESCRIBIR LINEA DE CABECERA
ESCRIBIR LINEA DE TÍTULO
CONT_LINEA = MAX LINEA
CON_PG = CONT_PG + 1
FIN
Figura 6.6: Diagrama de Flujo del Ejercicio de E/S
Fin del Ejemplo 6.1
Libro 1: Fundamentos de Programación
Unidad 6: Entrada y Salida 106
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Resumen Ahora que ha completado esta unidad, usted debe ser capaz de: •
Describir los conceptos básicos de entrada y salida para programas de computadora.
•
Listar algunas consideraciones específicas para imprimir la salida.
•
Describir los conceptos de registros de datos fijo, variable y bloqueado.
•
Crear un diseño de programa para manejar encabezados de página.
Unidad 6: Entrada y Salida
Libro 1: Fundamentos de Programación 107
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Unidad 6: Examen de Autoevaluación 1) Indique las sentencias correctas en referencia a entrada salida: a) Los comandos que se usan para escribir un programa incluyen funciones o procedimientos especiales que se pueden usar para realizar la entrada y salida. b) La entrada y salida generalmente son las partes más complejas de cualquier programa o cualquier lenguaje de programación c) La transferencia real de datos hacia o desde los dispositivos de E/S, será generalmente la parte más lenta de un programa. d) Sólo (a) y (c) 2) Los comandos que se usan para la entrada son normalmente: a) write b) get c) display d) scan 3) Los comandos que se usan para la salida son normalmente: a) print b) write c) put d) get 4) Los datos externos que se procesan en un programa se leen y escriben realmente en un buffer que maneja la computadora. a) Verdadero b) Falso 5) De las siguientes, ¿cuáles son consideraciones especiales requeridas para Imprimir la salida a una impresora? a) Separar los formatos de salida para las líneas de datos y las líneas del título b) Contadores de línea c) Contadores de páginas d) Encabezados de páginas e) Caracteres de control de carro en las líneas de salida
Libro 1: Fundamentos de Programación
Unidad 6: Entrada y Salida 108
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
6) El carácter de control para indicar espaciado de 2 líneas es: a) espacio b) – c) 0 d) 1 7) Existen típicamente dos formas en que pueden procesarse los datos de un registro, estas son: a) Registros encapsulados b) Registros fijos c) Registros variables d) Registros hash 8) El tamaño de los registros fijos, se establece generalmente como un parámetro en el proceso de E/S a) Verdadero b) Falso 9) El tamaño de los registros variables, varía para cada registro y se coloca en el registro en la cabecera para indicar el número de bytes que ocupa. a) Verdadero b) Falso 10) Organizar datos en los bloques permite al sistema de control de E/S leer o escribir múltiples registros (el valor de un bloque) para cada transacción en el flujo de los datos. a) Verdadero b) Falso
Unidad 6: Entrada y Salida
Libro 1: Fundamentos de Programación 109
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Respuesta de la Unidad 6: Examen de Autoevaluación 1) a, b y c 2) b y d 3) b y c 4) a 5) b, c, d y e 6) c 7) b y c 8) a 9) a 10) a
Libro 1: Fundamentos de Programación
Unidad 6: Entrada y Salida 110
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Unidad 7: Ejemplos de Programas Objetivos del Aprendizaje Al finalizar esta unidad, usted 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.
Libro 1: Fundamentos de Programación
Unidad 7: Ejemplos de Programas 111
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
1. Verificar la 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, esto implica que esos datos se han ordenado previamente y requieren una jerarquía de datos y un valor clave para determinar el orden correcto. Verificar la secuencia implica trabajar con un archivo de registros de datos que se ha ordenado previamente, generalmente en orden ascendente. 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.
2. 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 con una clave común. Normalmente, se usa para procesar registros en secuencia en un sistema que contiene múltiples actualizaciones a registros maestros. La ruptura de control, generalmente implica recolectar subtotales o imprimir los resúmenes parciales. 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 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 reinicializan todos los acumuladores para preparar el procesamiento del próximo estudiante.
Unidad 7: Ejemplos de Programas
Libro 1: Fundamentos de Programación 112
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
3. 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. Ver Figura 7.1 Archivo Maestro Transacciones
00120 01655 24898 59437 76990 98144
01655 59437 76990
Figura 7.1: Transacciones
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. Algunos ejemplos donde se aplica son: •
Las notas del estudiante de un semestre: Las transacciones son las notas que se emparejan contra los registros de notas permanentes para la cohorte que constituyen el archivo maestro.
•
La comprobación diaria y la actividad de depósito: Las transacciones son los movimientos diarios que se emparejan contra el registro de cuenta para la cuenta corriente, que conforma el archivo maestro.
•
Un almacén y el reabastecimiento diario: Las ventas diarias son las transacciones, emparejado contra la información detallada de inventario actual para un producto, que conforma el archivo maestro.
3.1 Ejercicio de Punto de Chequeo Hay que 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, se debe imprimir un mensaje de error, los resultados acumulados y terminar el programa. El informe debe contener las Libro 1: Fundamentos de Programación
Unidad 7: Ejemplos de Programas 113
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
cabeceras de las columnas y debe ocuparse de páginas múltiples. El título para el informe es optativo. La tarea será examinar los registros de entrada, 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.
•
Hacer 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: Entrada 1:
Entrada 2:
5 5 5 6 6 16 16
200.00 100.00 100.00 50.00 200.00 300.00 100.00
Salida 1: Dpto. No. 5 6 16
Ventas 400.00 250.00 400.00
5 5 5 16 16 9 6
200.00 100.00 100.00 300.00 200.00 50.00 200.00
Salida 2: Dpto. No. Ventas 5 400.00 16 500.00 Error de Secuencia Figura 7.2: Punto de Chequeo
Unidad 7: Ejemplos de Programas
Libro 1: Fundamentos de Programación 114
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
PUNTO DE CHEQUEO PROCESAR VENTAS
INICIO INICIO CONT_LINEA = MAX_LINEA CONT_PG = 1
DEPT < DEPT-LEIDO
RUPTURA
si
VENTAS_ACUM = 0 SW = 1
SW = 0
no LEER 1ER REGISTRO DEPT > DEPT-LEIDO DEPT = DEPT-LEIDO
no
VENTAS_ACUM = VENTAS_ACUM + VENTAS_LEIDAS
si LEER SIGUIENTE REGISTRO
SI NO FIN ARCHIVO Y SW = 1
PROCESAR VENTAS
ERROR
FIN
NO
ASIGNAR Y ESCRIBIR TOTAL DE VENTAS ÚLTIMO
SI SW = 0
MENSAJE DE ERROR DE SECUENCIA
NO
FIN
Figura 7.3: Diagrama de Flujo del Ejercicio de Punto de Chequeo
Libro 1: Fundamentos de Programación
Unidad 7: Ejemplos de Programas 115
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
RUPTURA INICIO
CONT_LINEA >= MAX_LINEA
INICIO
NO
SI NUEVA_PAGINA
SALTAR A NUEVA PÁGINA
ESCRIBIR LINEA DE CABECERA
ESCRIBIR LINEA DE TÍTULO ASIGNAR Y ESCRIBIR LINEA DE DAYTOS PARA EL DPTO.
CONT_LINEA = MAX LINEA
CON_PG = CONT_PG + 1 DEPT = DEPT-LEIDO
FIN CONT_LINEA = CONT_LINEA + 1
VENTAS_ACUM = VENTAS_LEIDAS
FIN
Figura 7.4: Diagrama de Flujo del Ejercicio de Punto de Chequeo
Unidad 7: Ejemplos de Programas
Libro 1: Fundamentos de Programación 116
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Resumen Ahora que ha completado esta unidad, usted 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.
Libro 1: Fundamentos de Programación
Unidad 7: Ejemplos de Programas 117
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Volumen 2: Complementos I
Libro 1: Fundamentos de Programación
Unidad 7: Ejemplos de Programas 119
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Unidad 1: Sentencias Simples 1. Conceptos Un algoritmo es una serie de pasos lógicos, que se estructuran para resolver un problema. Generalmente, un algoritmo se compone de sentencias simples y sentencias de control. Las sentencias simples son:
1.1 Declaración de Variables Consiste en escribir el tipo de datos y la lista de identificadores que se tendrán de dicho tipo, separando cada identificador por medio de comas (,). Para mejorar la claridad de la declaración se puede colocar dos puntos (:) para separar el tipo de datos de la lista de identificadores, por ejemplo: Entero: edad
Real: sueldo
estatura,
Cadena: dirección
peso,
nombre,
1.2 Asignación de Variables Asignar un valor a una variable equivale a decir que se guarda dicho valor en la posición de memoria reservada para la variable en mención. Ejm:
Edad = 10 Estatura = 1.80 Resultado = 2 * 3
1.3 Lectura de Variables La instrucción (LEER, OBTENER o ADQUIRIR) se utiliza para enviar información desde un dispositivo de entrada de datos hacia la memoria, por ejemplo:
edad
Libro 1: Fundamentos de Programación
Unidad 1: Sentencias Simples 121
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
Estatura, peso Para la leer u obtener datos desde un dispositivo de entrada hacia la memoria, frecuencia también se utiliza el símbolo:
edad
1.4 Escritura de Datos La instrucción (MOSTRAR, IMPRIMIR o ESCRIBIR) permite enviar datos desde la memoria hacia un dispositivo de salida como la pantalla. La información que se envía puede ser el calor de una constante o también el contenido de variables, por ejemplo:
Edad
“Su peso es: ” peso
Unidad 1: Sentencias Simples
Libro 1: Fundamentos de Programación 122
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Ejercicios Resueltos 1) Dada las horas trabajadas de una persona y la tarifa de pago por hora, calcule su salario e imprímalo. INICIO
entero horas real tarifa, salario
“Ingrese la cantidad de horas”
horas
“Ingrese la tarifa”
tarifa
salario = horas * tarifa
“El salario es: ”salario
FIN
Libro 1: Fundamentos de Programación
Unidad 1: Sentencias Simples 123
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
2) Dada la base y altura de un rectángulo, calcular el área y el perímetro del mismo. Las fórmulas a utilizar son: Area = base * altura y Perímetro = 2 * (base + altura) INICIO
real base, altura, area, perimetro
“Ingrese la base: ”
base
“Ingrese la altura: ”
altura
area = base * altura
perimetro = 2 * (base + altura)
“El area es:” area
“El perímetro es:” perimetro
FIN
Unidad 1: Sentencias Simples
Libro 1: Fundamentos de Programación 124
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
3) Obtener la edad de una persona en meses, si se ingresa su edad en años y meses. Por ejemplo, si se ingresan 3 años 4 meses debe mostrar 40 meses INICIO
entero meses, anios, totalM
“Ingrese los años de la persona”
anios
“Ingrese los meses de la persona”
meses
totalM = (anios * 12) + meses
“La edad en meses es: ” totalM
FIN
Libro 1: Fundamentos de Programación
Unidad 1: Sentencias Simples 125
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
4) Escriba un algoritmo que permita convertir un valor ingresado en pies a metros. La fórmula a utilizar es 1pie = 30.48 cm. INICIO
real pies, metros, centimetros
“Ingrese un valor en pies”
pies
centimetros = pies * 30.48
metros = centimetros / 100
pies “pies equivalen a ” metros “metros”
FIN
5)
Convertir una velocidad expresada en km/h a m/s. Si 1Km=1000 m y 1h=3600 seg. INICIO
real kmph, mps
“Ingrese la velocidad en Km/h”
kmph
mps = kmph * 5 / 18
kmph “Km/h equivales a: ” mps “M/s”
FIN
Unidad 1: Sentencias Simples
Libro 1: Fundamentos de Programación 126
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
6) Dada una cantidad de hombres y de mujeres, calcular el porcentaje de cada género dentro del grupo. INICIO
entero hombres, mujeres, total real porch, porcm
“Ingrese cantidad de hombres”
hombres
“Ingrese cantidad de mujeres”
mujeres
total = hombres + mujeres
porch = hombres / total
porcm = mujeres / total
“%hombres= ” porch
“% mujeres = ” porcm
FIN
Libro 1: Fundamentos de Programación
Unidad 1: Sentencias Simples 127
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
7) Un instructor prepara tres modelos de exámenes para tres salones en un curso de programación. El instructor sabe que tarda 5 min en el modelo del salón A, 8 min en el modelo del salón B y 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? INICIO
entero estA, estB, estC, tiempoA, tiempoB, tiempoC, tiempoT, horasT, minT
“Ingrese la cantidad de estudiantes de los salones A, B y C”
estA, estB, estC
tiempoA = estA * 5 tiempoB = estB * 8 tiempoC = estC * 6 tiempoT = tiempoA + tiempoB+tiempoC
horasT = tiempoT div 60
minT = tiempoT mod 60
“El instructor tardará ” horasT “horas y ” minT “minutos”
FIN
Unidad 1: Sentencias Simples
Libro 1: Fundamentos de Programación 128
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Ejercicios por Resolver 1) Determine el promedio de 3 números reales. 2) Calcular y mostrar el área de un triángulo si se ingresa por teclado la base y la altura. 3) Calcular el área y perímetro de un triángulo, conocidos sus lados. 4) Hacer un algoritmo que permita ingresar dos números enteros y calcule las 4 operaciones básicas (suma, resta, multiplicación, división). Además, calcular la potencia. El algoritmo debe mostrar los números y los resultados. 5) Escriba un algoritmo que lea la velocidad en km/h y el número de horas transcurridas por un móvil, para determinar la distancia recorrida. 6) Un corredor reporta el número de minutos que corre en un año. Escribir un programa que dé como salida la cantidad de tiempo equivalente en meses, semanas, días, horas y minutos. 7) Calcule el interés generado (interes), por un capital depositado (capdep) durante cierta cantidad de períodos (cp) a una tasa de interés determinada (tasa) expresada en porcentaje. Use las fórmulas: a) monto = (capdep)*(1+tasa/100)cp b) interes = monto – capdep 8) Dado un tiempo en minutos, calcular los días, horas y minutos que le corresponden.
Libro 1: Fundamentos de Programación
Unidad 1: Sentencias Simples 129
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Unidad 2: Estructuras de Decisión 1. Conceptos Las estructuras de decisión o también llamadas de selección, permiten que el algoritmo tome decisiones y ejecute u omita algunos procesos dependiendo del cumplimiento de una condición. Se pueden manejar tres tipos de decisiones: simple, doble y múltiple. Una decisión es simple, cuando sólo se tiene determinado los pasos a seguir si el resultado de la condición es verdadero, mientras que si es falso, la ejecución del algoritmo continúa después de la estructura condicional. Una decisión es doble, cuando se tiene un curso de acción para el caso que el resultado de la comparación sea verdadero y otro para cuando sea falso. La decisión múltiple determina el valor de una variable y dependiendo de éste sigue un curso de acción. Es importante tener en cuenta que sólo se verifica la condición de igualdad entre la variable y la constante.
Libro 1: Fundamentos de Programación
Unidad 2: Estructuras de Decisión 131
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
Ejercicios Resueltos 1) Solicite un número al usuario e imprima su valor absoluto. Recuerde que el valor absoluto de un número es el mismo valor si es positivo y es el valor cambiado de signo en caso de que sea negativo.
INICIO
entero numero
“Ingrese un número entero”
numero
si numero=numero * (-1) num ero <
0
no
“El valor absoluto es: “ numero
FIN
Unidad 2: Estructuras de Decisión
Libro 1: Fundamentos de Programación 132
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
2) Elabore un programa que imprima el mayor de dos números enteros introducidos por el usuario.
INICIO
entero a, b, mayor
“Ingrese el primer valor”
a
“Ingrese el segundo valor”
b
NO
a>b
mayor = b
SI
mayor = a
“El mayor es:” mayor
FIN
Libro 1: Fundamentos de Programación
Unidad 2: Estructuras de Decisión 133
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
3) Dados dos números introducidos por el usuario, identifique cuál es el mayor, cuál es el menor y si son iguales muestre un mensaje.
INICIO
entero a, b
“Ingrese el primer valor”
a
“Ingrese el segundo valor”
b
si
no a == b NO
a>b
SI
“El mayor es:” b
“El mayor es:” a
“El menor es:” a
“El menor es:” b
“Los números son iguales”
FIN
Unidad 2: Estructuras de Decisión
Libro 1: Fundamentos de Programación 134
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
4) Elabore un programa que solicite el salario de un empleado y calcule el nuevo salario de la siguiente forma: Si el empleado gana hasta de 500.000 tendrá un incremento del 10%, si devenga más de 500.000 y hasta 800.000 recibirá un aumento del 8% y si gana más de 800.000 un aumento del 5%. Muestre por pantalla el monto del aumento y el nuevo salario total del empleado. INICIO
real salario, porc, aumento, nuevosal
“Ingrese el salario: “
salario
no
si salario = 3 precioN=75000*0.95
precioN=75000*0.85 A
Libro 1: Fundamentos de Programación
Unidad 2: Estructuras de Decisión 137
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
7) Una aseguradora de vehículos tiene los siguientes porcentajes de prima dependiendo de los años de antigüedad del vehículo. Los vehículos de 1 año pagan el 5% de su valor, de dos años el 8%, de tres años el 10%, de cuatro años el 12% y de cinco 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. INICIO
Entero valor, anios Real porc, prima
“Ingrese el valor del vehículo y los años de antigüedad:”
valor, anios
anios
1 porc = 5
2
3
porc = 8
porc = 10
4 porc = 12
otro porc =15
prima = valor * porc/100
“El monto de la prima es: “ prima
FIN
Unidad 2: Estructuras de Decisión
Libro 1: Fundamentos de Programación 138
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Ejercicios por Resolver 1) Dados sus tres lados (a,b,c), determinar si un triangulo es: equilátero, isósceles o escaleno. 2) A un trabajador le pagan según sus horas y una tarifa de pago por horas. Si la cantidad de horas trabajadas es mayor a 40 horas, entonces la tarifa se incrementa en un 50% para las horas extras. Calcular el salario del trabajador dadas las horas trabajadas y la tarifa. 3) A un trabajador le descuentan de su sueldo el 10% si su sueldo es menor o igual a 1000. por encima de 1000 y hasta 2000 el 5% del adicional y por encima de 2000 el 3% del adicional. Calcular el descuento y sueldo neto que recibe el trabajador dado su sueldo. 4)
Dado un monto, calcular el descuento considerando que por encima de 100 el descuento es el 10% y por debajo de 100 el descuento es el 2%.
5)
Elabore un programa que permita emitir la factura correspondiente a una compra de un artículo determinado, del que se adquieren una o varias unidades. El IVA es del 15% y si el monto bruto (precio venta más IVA) es mayor de 50.00 pesetas se debe realizar un descuento del 5% sobre el monto total.
6)
Dado un tiempo en segundos, calcular los segundos restantes que le correspondan para convertirse exactamente en minutos. Por ejemplo, si el usuario introduce 340 el resultado debe ser 20.
Libro 1: Fundamentos de Programación
Unidad 2: Estructuras de Decisión 139
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Unidad 3: Estructuras de Repetición 1. Conceptos Un ciclo consiste en un grupo de acciones que se ejecutan repetidas veces dependiendo del cumplimiento de una condición. En algunos casos, el número de repeticiones se conoce con anterioridad, mientras que en otros depende de cálculos o estados de variables que se dan dentro de la solución del problema. Existen tres tipos de ciclos, los cuales se explican a continuación.
1.1 Ciclo Mientras .. Hacer (while .. do) Este ciclo consiste en un conjunto de instrucciones que se repiten mientras se cumpla una condición. De igual manera que en los condicionales, la condición es evaluada y retorna un valor lógico, que puede ser verdadero o falso. En el caso del ciclo mientras, las instrucciones contenidas en la estructura de repetición se ejecutarán solamente si al evaluar la condición se genera un valor verdadero; es decir, si la condición se cumple; en caso contrario, se ejecutará la instrucción que aparece después de fin mientras. El ciclo mientras, comienza evaluando la expresión condicional, si el resultado es verdadero se ejecutarán las instrucciones que estén entre el mientras y el fin mientras. Al encontrarse la línea fin mientras, se volverá a evaluar la condición, si se cumple se ejecutarán nuevamente las instrucciones y así sucesivamente hasta que la condición deje de cumplirse, en cuyo caso, el control del programa pasa a la línea que aparece después de fin mientras. Si en la primera pasada por el ciclo mientras la condición no se cumple las instrucciones que están dentro del ciclo no se ejecutarán ni una sola vez.
1.2 Ciclo Repetir .. Hasta (Repeat .. until) En este ciclo, se ejecutarán las sentencias, hasta que se cumpla la condición. Además, una diferencia con la sentencia de control anterior, es que en ésta por lo menos se entra una vez en el ciclo.
1.3 Ciclo Desde (for) Este ciclo, al igual que los demás, permite ejecutar repetidas veces una instrucción o un grupo de ellas, pero a diferencia de otras instrucciones de repetición, ésta maneja el valor inicial, el valor de incremento o decremento y el valor final de la variable de control como parte de la instrucción. Cuando al ejecutarse un algoritmo se encuentra una instrucción para la variable de control (contador) toma el valor inicial, se verifica que el valor inicial no sobrepase el valor final y luego se ejecutan las instrucciones del ciclo. Al encontrar la instrucción fin para, se produce el incremento y se vuelve a verificar que la variable de control no haya Libro 1: Fundamentos de Programación
Unidad 3: Estructuras de Repetición 141
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
superado el límite admitido y se vuelven a ejecutar las instrucciones que están dentro del ciclo, y así sucesivamente tantas veces como sea necesario hasta que se supere el valor final establecido. El ciclo termina en el momento en que la variable de control (contador) sobrepasa el valor final; es decir, que la igualdad está permitida y las instrucciones se ejecutan cuando el contador es igual al valor final.
Unidad 3: Estructuras de Repetición
Libro 1: Fundamentos de Programación 142
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Ejercicios Resueltos 1) Elabore un programa que muestre los números del 1 al 10. Ciclo Mientras..Hacer.
INICIO
Entero numero = 1
si numero = 10
nota
si i 6000000
2
9) Construya un algoritmo que reciba como entrada el sueldo actual de cada uno de los trabajadores y calcule el nuevo sueldo. Además, el algoritmo deberá indicar cuánto más gasta la empresa por concepto de sueldos, después del aumento. 10) Se dispone de una tabla con las temperaturas registradas a medio día durante el año 2003. Se desea determinar cuál fue la máxima, cuál fue la mínima y cuántas veces se repitió cada una de estas durante el año 2003. Además, se desea saber el promedio de dichas temperaturas. Volumen 1: Conceptos de Programación
Unidad 1: Funciones y Procedimientos 166
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Complementos II
Fundamentos de Programación
11) Construya un algoritmo que reciba como entrada un valor n y calcule una aproximación del valor de e, como la suma de la siguiente serie:
1+
1 1 1 1 1 1 + + + + + ... + 1! 2! 3! 4! 5! n!
Unidad 1: Funciones y Procedimientos
Volumen 1: Conceptos de Programación 167
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Complementos II
Volumen 3: Complementos II
Unidad 1: Funciones y Procedimientos
Volumen 1: Conceptos de Programación 169
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Complementos II
Unidad 4: Funciones y Procedimientos Ejercicios Resueltos 1) Escribir un programa que determine la mayor de tres cantidades enteras, utilizando una función que determine la mayor de dos cantidades enteras. 1. 2. 3. 4. 5. 6. 7.
funcion maximo ( x:entero, y:entero): entero var max: entero inicio si (x > y) entonces max = x sino max = y retorno max fin maximo
algoritmo calcular_max_tres_enteros var a,b,c,d: entero inicio mostrar “introduzca tres valores enteros” Leer a,b,c d = maximo(a,b) d = maximo(c,d) mostrar “El maximo es:”, d fin
2) Escribir una función que calcule el valor de xn siendo x real y n un valor entero 1. funcion potencia(n: entero, x: real): real 2. var y: real 3. i: entero 4. inicio 5. si x = 0 6. entonces y = 0 7. retornar y 8. sino 9. y = 1 10. desde i = 1 hasta i = abs(n) hacer 11. y = y*x 12. fin desde 13. si n > 0 14. entonces retornar y 15. sino retornar y = 1 / y 16. fin si 17. fin si 18. fin funcion
Unidad 1: Funciones y Procedimientos
Volumen 1: Conceptos de Programación 171
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Complementos II
3) Escribir funciones para convertir pies a pulgadas, pulgadas a centímetros y centímetros a metros. Escribir un algoritmo que le pida al usuario una medida en píe, lo convierta y lo muestre en metros. Se sabe que: 1 píe = 12 pulgadas 1 pulgadas = 2.54 cm 100 cm = 1 metro. 1. funcion pies_a_pulgadas(pies: real): real 2. var pulg: real 3. inicio 4. pulg= 12 * pies 5. retornar pulg 6. fin funcion 7. funcion pulg_a_centimetro(pulg: real): real 8. var cm: real 9. inicio 10. cm = 2.54 * pulg 11. retornar cm 12. fin funcion 13. funcion cm_a_metro(cm: real): real 14. var metro:real 15. inicio 16. metro = cm / 100.0 17. retornar metro 18. fin funcion 19. algoritmo conversion 20. var pies, pulgadas, cms, metros: real 21. inicio 22. mostrar “introduzca la medida en pie” 23. leer pies 24. pulgadas = pies_a_pulgadas(pies) 25. cms = pulg_a_centimetro(pulgadas) 26. metros = cm_a_metro(cms) 27. mostrar pies, “pies es igual a”, pulgadas, “pulgadas” 28. mostrar pies, “pies es igual a”, cms, “centimetros” 29. mostrar pies, “pies es igual a”, metros, “metros” 30.fin
Volumen 1: Conceptos de Programación
Unidad 1: Funciones y Procedimientos 172
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Complementos II
Fundamentos de Programación
4) Diseñar una función que dado como parámetro de entrada un número entero retorne su factorial. La función factorial se define como n! n! =1
si n = 0
n! = n x (n-1) x (n-2) x...x 3x 2 x 1
si n > 1
Resuelva el problema usando: a) Una función recursiva. b) Una función iterativa. c) Función factorial implementación recursiva: función factorial (n:entero): entero { calculo recursivo del factorial de n } inicio si (n = 0) entonces retornar (1) sino retornar (n * factorial(n-1)) fin si fin factorial d) Función factorial implementación iterativa: función factorial_iterativa (n:entero): entero { calculo iterativo del factorial de n } var f, i:entero inicio f = 1 si (n = 0) entonces retornar (f) sino desde i = 1 hasta n hacer f = f * i fin desde retornar (f) fin si fin factorial_iterativo
Unidad 1: Funciones y Procedimientos
Volumen 1: Conceptos de Programación 173
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Complementos II
5) Escribir un procedimiento que tenga como entrada la longitud de una cadena de caracteres, escriba la cadena en orden inverso. Ejemplo: Venezuela se obtiene aleuzeneV El programa debe usar la recursividad para la escritura inversa. procedimiento
invertir_recursivo (n:entero)
var car: char inicio si (n = B + C =B+C >B+C 2
Por tanto, F(3) = F(1) F(4) = F(3) F(5) = F(4)
+ F(2) = 1 + 1 = 2 + F(2) = 2 + 1 = 3 + F(3) = 3 + 2 = 5
Escribir una función que tome como entrada un entero positivo que indique la posición del término en la serie y retorne el valor del término en esa posición. Resuelva el problema usando: a) Una función recursiva. b) Una función iterativa.
Volumen 1: Conceptos de Programación
Unidad 1: Funciones y Procedimientos 178
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Complementos II
Unidad 5: Estructuras de Datos Arreglos Ejercicios Resueltos 1) Diseñar un algoritmo que lea las notas de una clase de “Introducción a la Programación” en un vector, calcule el promedio de notas e imprima las notas mayores al promedio. 1. Algoritmo Calificaciones 2. var 3. MAX = 100 {número máximo de estudiantes} 4. notas: arreglo[1..MAX] de real 5. numero, i:entero 6. suma, promedio:real 7. inicio 8. escribir “Introducir numero de calificaciones” 9. leer numero 10. si numero > MAX 11. entonces “no se puede procesar mas de” MAX “notas” 12. sino 13. suma = 0 14. escribir “Introducir las calificaciones” 15. desde i = 1 hasta numero 16. leer notas[i] 17. suma = suma + notas[i] 18. fin desde 19. promedio = suma / numero 20. escribir “el promedio de las notas es:” promedio 21. escribir “las notas mayores que el promedio son:” 22. desde i = 1 hasta numero 23. si notas[i] > promedio 24. entonces escribir notas[i] 25. fin si 26. fin desde 27. fin si 28. fin Calificaciones
Libro 1: Fundamentos de Programación
Unidad 5: Estructuras de Datos - Arreglos 179
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Complementos II
2) Diseñar un algoritmo que dados dos vectores ordenados A y B, de tamaño M y N respectivamente, produzca un tercer vector C ordenado, de tamaño M+N y formado a partir de los elementos de los vectores A Y B. Ejemplo: Vector A:
2 5
Vector B: -4 0 Vector C: -4 0
7
100 250
10 98 120 300 310 2
5
7
10
98
540 100 120
250 300
310 540
El algoritmo es el siguiente: a) Seleccionar el elemento de valor más pequeño en los vectores A y B, ubíquelo en el nuevo vector C. b) Para ello, se compara a[i] y b[j] y se coloca el elemento más pequeño en c[k], donde i, j , k, son los índices correspondientes en cada uno de los vectores. c) Se sigue la secuencia de comparaciones hasta que los elementos de uno de los vectores A ó B se hayan agotado y entonces se copia el resto del otro vector en el vector C. 1. Algoritmo Mezcla implementado como un procedimiento: 2. Procedimiento Mezcla (A,B,C:arreglos de enteros, M,N:enteros) 3. {A y B: entrada: Vectores ordenados} 4. {M y N: número de elementos de A y B respectivamente} 5. {C:salida. Vector resultado de la mezcla de A Y B} 6. {El vector C tiene una longitud mínima de M + N} 7. var 8. i, j, k, p:entero 9. inicio 10. i = 1 11. j = 1 12. k = 1 13. mientras (i 0 17. entonces SP = SP + tabla(i,j) 18. sino SN = SN + tabla(i,j) 19. fin si 20. fin desde 21. fin desde 22. escribir “la suma de elementos positivos es:” SP 23. escribir “la suma de elementos negativos es:” SN 24. fin
Libro 1: Fundamentos de Programación
Unidad 5: Estructuras de Datos - Arreglos 181
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Complementos II
4) Diseñar un algoritmo donde se declare una matriz M de enteros de dimensión 100 x 200, asignándose los siguientes valores: 1 0 1 0 1 0 1 0 … 0 1 0 1 0 1 0 1 … 1 0 1 0 1 0 1 0 … 0 1 0 1 0 1 0 1 … etc. 1. Algoritmo Inicializar_Matriz 2. var 3. M[100, 200] arreglo de enteros 4. I,j:entero 5. inicio 6. desde i=1 hasta 100 incremento 1 7. si (i mod 2 == 0) {Filas pares comienzan en 0} 8. entonces 9. desde j=1 hasta j = 200 incremento 2 10. M[i,j] = 0 11. M[i,j+1] = 1 12. fin desde 13. sino {Filas impares comienzan en 1} 14. desde j=1 hasta j = 200 incremento 2 15. M[i,j] = 1 16. M[i,j+1] = 0 17. fin desde 18. fin si 19. fin 20. j = 0 21. repetir 22. j = j + 1 23. si f[i,j] = 1 24. entonces 25. escribir “Existe un enlace con la ciudad” j 26. fin si 27. hasta ( j = n) 28.fin
Unidad 5: Estructuras de Datos - Arreglos
Libro 1: Fundamentos de Programación 182
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Complementos II
Fundamentos de Programación
Ejercicios Propuestos 1) Elaborar un algoritmo que llame a las siguientes funciones: 1.1 La función SIGMA que calcula la suma de los n elementos de un vector X donde X y n son los parámetros de la función. 1.2 La función PROD para calcular el producto de los n elementos de un vector X donde X y n son los parámetros de la función. 2) Diseñar un algoritmo que lea en un arreglo N números reales, determine el máximo, mínimo y el promedio. Para calcular estos valores debe hacer uso de funciones que retornan ese valor. Las funciones a definirse son: a) Max_vector: Retorna el valor máximo de un arreglo. b) Min_vector: Retorna el valor mínimo de un arreglo. c) Med_vector: Retorna el promedio de un arreglo de reales. Todas las funciones reciben el vector como parámetro de entrada. 3) Diseñar una función que devuelva VERDAD si dos arreglos dados como entrada son iguales y FALSO en caso contrario. 4) Se necesita una función para determinar si un valor dado existe en el vector. Asuma que los valores en el vector no están ordenados. La función debe aceptar dos parámetros: •
El nombre de un vector.
•
El valor que debe buscarse en ese vector.
La función debe regresar: •
1 si el valor se encuentra en el vector.
•
0 si la búsqueda es infructuosa.
Ni el vector ni el valor deben ser alterados. ¿Qué tipo de parámetros es preferible? ¿Por qué?. 5) Modifique la función anterior asumiendo que el vector está ordenado en forma creciente. 6) Dado un vector A de n números reales, obtener la diferencia más grande entre dos elementos consecutivos de ese vector. 7) Dado un vector A de n números reales, obtener la diferencia más grande y la menor diferencia entre dos elementos consecutivos de ese vector.
Libro 1: Fundamentos de Programación
Unidad 5: Estructuras de Datos - Arreglos 183
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Complementos II
8) En todo experimento existe cierta cantidad de incertidumbre asociada con cualquier medición. Una técnica conocida como ajuste de curvas puede utilizarse para reducir el error en el análisis de los resultados. Se supone que una serie de valores reales, ha sido registrada de N repeticiones de un experimento en particular, los cuales se almacenan en un vector llamado V. Antes de proceder al análisis de estos resultados experimentales, la siguiente operación de ajuste simple debe aplicarse a los valores de V: •
Para cada valor, excepto el primero y el último, que deben permanecer sin cambios, Vi debe reemplazarse por: Vi = (Vi-1 + Vi + Vi+1) / 3
Diseñar un algoritmo para leer las mediciones iniciales e imprimir los valores observados y los ‘ajustados’. Los valores ajustados deberán ser almacenados en otro vector. 9) Diseñar un algoritmo que dados dos vectores ordenados A y B de tamaño M y N respectivamente, produzca un tercer vector C ordenado de tamaño M+N, formado a partir de los elementos de los vectores A Y B y que no incluya los elementos repetidos en el vector de salida. 10) La moda de un arreglo de vocales, es la vocal que se repite más frecuentemente. Si varias vocales se repiten con la misma frecuencia máxima, entonces no hay moda. Escribir una función que acepte un vector de caracteres y devuelva su moda o una indicación de que la moda no existe. 11) Diseñar un procedimiento que acepte como parámetro un vector que pueda contener elementos repetidos. El procedimiento debe reemplazar cada elemento repetido por -1 y regresar al punto de llamada el vector modificado, además del número de modificaciones realizadas. 12) Diseñar un algoritmo que lea un vector desordenado A, compuesto de n enteros e imprima el vector en la misma secuencia, pero ignorando los valores duplicados que se encuentren en él. También se necesita saber el número de elementos m que permanecen en él. Por ejemplo, dado el vector siguiente: 18 32
23 18 75 23 45 18
32
90
compuesto de 10 enteros, el vector comprimido que resulta estará formado por 18 32
23 75
45 90
con m = 6. 13) Dadas las siguientes declaraciones de variables: a: arreglo[0..9] DE ENTEROS x, i, k: ENTERO
Unidad 5: Estructuras de Datos - Arreglos
Libro 1: Fundamentos de Programación 184
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Complementos II
Fundamentos de Programación
Donde el vector a se inicializa con los valores: 6, 3, 9, 7, 1, 8, 10, 2, 4 y 5, determinar el valor de x cuando se ejecutan los siguientes segmentos de código y comentar qué operación se realizan: a)
b)
x = 0 PARA i = 0 HASTA 9 CON INCREMENTO DE 1 x = x + a(i) FIN_PARA x = a(0) PARA i = 1 HASTA 9 CON INCREMENTO DE 1 SI x < a(i) ENTONCES x = a(i) FIN_SI FIN_PARA
c) k = 0 PARA i = 1 HASTA 9 CON INCREMENTO DE 1 SI a(k) < a(i) ENTONCES k = i FIN_SI FIN_PARA 14) Diseñar un algoritmo que lea la matriz: 1. 6 8 9
2
2. 5 1 0
8
3. 1
2 6 9
Cree y escriba una nueva matriz de la forma: 3
4
5
4.
5
1
8
1
2
9
0
6
2
8
9
Esto corresponde a la matriz traspuesta de la matriz original. 15) Realizar un procedimiento que acepte como parámetro un vector de elementos enteros y el tamaño del vector. El procedimiento debe ordenar los elementos y regresar el vector ordenado por medio del mismo parámetro. ¿Qué tipo de paso de parámetros se requiere? ¿Por qué?. Utilice el algoritmo de ordenación por selección, que consiste en buscar el elemento menor y colocarlo en la primera posición. Luego buscar el segundo elemento más pequeño y colocarlo en la segunda posición, y así sucesivamente. Libro 1: Fundamentos de Programación
Unidad 5: Estructuras de Datos - Arreglos 185
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Complementos II
Los pasos del algoritmo son: 1. Seleccionar el elemento menor del vector de n elementos. 2. Intercambiar dicho elemento con el primero. 3. Repetir esta operación con los n-1 restantes, seleccionando el segundo elemento. 4. Continuar con los n-2 restantes, y así sucesivamente, hasta que sólo quede el mayor. 16) Diseñar un algoritmo que dada 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 A que cumplen con i=j. 17) Diseñar un algoritmo que dada una matriz cuadrada determine la suma de todos los elementos que no pertenecen a la diagonal principal. 18) Una agencia de ventas automóviles distribuye 12 modelos diferentes y tiene 8 vendedores. Diseñar un algoritmo que produzca un informe mensual de: a) Las ventas por vendedor. b) Las ventas por modelo. c) El número de automóviles vendidos por todos los vendedores. d) El número total de cada modelo vendido por todos los vendedores. e) El vendedor que más vehículos ha vendido para la entrega del premio al mejor vendedor. Asuma que los datos están representados en una matriz, donde las filas representan a los vendedores y las columnas a los modelos de vehículos. 19) Diseñar diferentes procedimientos que tomen dos matrices cuadradas de dimensión N y realicen: a) La suma de dos matrices. b) La resta de dos matrices. c) El producto de dos matrices. 20) Un analista de imágenes posee una imagen digitalizada representada en una matriz bidimensional de enteros, con valores de colores entre 0 y 20, se desea convertirla a una imagen en blanco y negro y visualizarla por pantalla. Se debe considerar para convertir lo siguiente: •
Cada elemento (i,j) de la matriz representa un punto de la imagen.
•
Al elemento se le asigna el valor negro (20) si la suma del contenido del elemento (i,j) más el contenido de los elementos inmediatos a la derecha, a la izquierda, arriba y abajo de éste, al dividirla (la suma) entre 5 es mayor que 10, de lo contrario se le asigna 0. Suma = (elem(i,j) + elem(i+1,j) + elem( i -1,,j) + elem(i,j+1) + elem(i,j-1) ) / 5
Unidad 5: Estructuras de Datos - Arreglos
Libro 1: Fundamentos de Programación 186
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Complementos II
Fundamentos de Programación
Considere las condiciones de borde, es decir, cuando la posición del elemento está en los límites de la matriz. Diseñar un procedimiento que tome la imagen digitalizada inicial y devuelva la imagen en blanco y negro. 21) Diseñar un algoritmo dada una matriz de enteros (n x n), donde cada elemento (i,,j) de la matriz representa la distancia entre las ciudades i, j. Si el contenido es –1, indica que no existe camino entre esas dos ciudades. El algoritmo debe devolver los pares de ciudades entre los que la distancia es menor que una distancia dada como entrada.
Libro 1: Fundamentos de Programación
Unidad 5: Estructuras de Datos - Arreglos 187
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Ejercicios Propuestos
Volumen 4: Ejercicios Propuestos
Libro 1: Fundamentos de Programación
Unidad 5: Estructuras de Datos - Arreglos 189
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Ejercicios Propuestos
Unidad 1: Programas de Computadora 1) Evalúe las siguientes expresiones: A = (3*2^5 mod 1 + 8*(3-5) < (2+8-1 mod 1) A = A o (3+5*8) < 3 y ((-6/3 div 4)*2 < 2) B = 3 mod 2 div 3 C = (-B*2 8*3 mod 4) y (‘A’>’B’) A = C o no (3=5) y (8 3+B)
Unidad 1: Programas de Computadora
Libro 1: Fundamentos de Programación 191
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Respuestas de la Unidad 1: Ejercicios Propuestos 1) A = (3*2^5 mod 1 + 8*(3-5) < (2+8-1 mod 1) A = (3*32 mod 1 + (-16)) < 10 A = -16 < 10 A = Verdadero 2) A = A o (3+5*8) < 3 y ((-6/3 div 4)*2 < 2) A = Verdadero o 43 < 3 y (0*2 < 2) A = Verdadero o Falso y Verdadero A = Verdadero o Falso A = Verdadero 3) B = 3 mod 2 div 3 B = 1 div 3 B=0
4) C = (-B*2 8*3 mod 4) y (‘A’>’B’) C = (0 24 mod 4) y Falso C = Falso y Falso C = Falso 5) A = C o no (3=5) y (8 3+B) A = Falso o Verdadero y Verdadero A = Falso o Verdadero A = Verdadero
Libro 1: Fundamentos de Programación
Unidad 1: Programas de Computadora 192
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Ejercicios Propuestos
Unidad 2: Conceptos de Diseño Estructurado 1) Desarrollar un algoritmo que calcule el volumen de un paralelepípedo. 2) Desarrollar un algoritmo que dado un valor entero, que representa un monto en Bolívares, indique el número de billetes de 5000, 1000 y monedas de 100, 50, 10, 1, que equivalen al monto dado. 3) Desarrollar un algoritmo que dada la temperatura en grados Celsius, escriba en pantalla la temperatura equivalente en grados Fahrenheit. La fórmula es: °F = (9 * °C / 5)+32.
Unidad 2: Conceptos de Diseño Estructurado
Libro 1: Fundamentos de Programación 193
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Respuestas de la Unidad 2: Ejercicios Propuestos 1) Desarrollar un algoritmo que calcule el volumen de un paralelepípedo. Algoritmo para Calcular al Volumen de un Paralelepípedo Var altura, ancho, profundidad, volumen : real Inicio Escribir “Introducir Altura” Leer altura Escribir “Introducir Ancho” Leer ancho Escribir “Introducir Profundidad” Leer profundidad volumen = altura * profundidad * ancho Escribir “El volumen es: ” volumen Fin 2) Desarrollar un algoritmo que dado un valor entero, que representa un monto en Bolívares, indique el número de billetes de 5000, 1000 y monedas de 100, 50, 10, 1, que equivalen al monto dado. Algoritmo Calcular cambio Var bolivares: real Inicio Escribir “Introduce los bolívares” Leer bolivares Escribir bolivares div 5000 “billetes de 5000” bolivares = bolivares mod 5000 Escribir bolivares div 1000 “billetes de 1000” bolivares = bolivares mod 1000 Escribir bolivares div 100 “monedas de 100” bolivares = bolivares mod 100 Escribir bolivares div 50 “monedas de 50” bolivares = bolivares mod 50 Escribir bolivares div 10 “monedas de 10” bolivares = bolivares mod 10 Escribir bolivares Fin
Libro 1: Fundamentos de Programación
Unidad 2: Conceptos de Diseño Estructurado 194
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
3) Desarrollar un algoritmo que dada la temperatura en grados Celsius, escriba en pantalla la temperatura en grados Fahrenheit, el equivalente es: F = (9C/5)+32. La fórmula es: °F = (9 * °C / 5)+32 Algoritmo para Calcular dada la temperatura en °C el equivalente en °F Var fahrenheit, celsius: real Inicio Escribir “Introducir los grados Celsius:” Leer celsius fahrenheit = (9*celsius/5)+32 Escribir “La temperatura es: “ Fahrenheit Fin
Unidad 2: Conceptos de Diseño Estructurado
Libro 1: Fundamentos de Programación 195
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Ejercicios Propuestos
Unidad 3: Programación Estructurada. 1)
Desarrollar un algoritmo que determine los números primos comprendidos entre 1 y 1000.
2) Desarrollar un algoritmo para determinar el máximo valor entre un conjunto de números positivos, ingresados a través del teclado. Un número negativo indica que no existen más números. 3) Desarrollar un algoritmo para determinar cuáles son los múltiplos de 5 comprendidos entre 1 y N. 4) Desarrollar un algoritmo que al final de curso, que determine cuál es el alumno con el promedio de notas más alto del semestre. Se sabe que en el semestre están inscritos 150 alumnos y cursan 5 asignaturas. 5) Calcular la suma de los divisores de cada número ingresado a través del teclado. Se termina el proceso cuando se ingresa un número negativo ó 0. 6) Se coloca un capital C, a un interés I, durante M años y se desea saber en cuánto se habrá convertido ese capital en m años, sabiendo que es acumulativo.
Unidad 3: Programación Estructurada.
Libro 1: Fundamentos de Programación 197
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
Respuesta Unidad 3: Ejercicios Propuestos 1) Desarrollar un algoritmo que determine los números primos comprendidos entre 1 y 1000. Algoritmo para Determinar los números primos entre 1 y 1000 Const Primero=1 Limite=1000 Var cont, i, j: entero primo: boolean Inicio Cont = 0 Desde i= primero hasta limite primo = verdadero j=2 mientras (i>j) y (primo =verdadero) Si i mod j = 0 Entonces primo = falso Sino j = j + 1 Fin si Fin mientras Si primo = verdadero Entonces escribir i” “ Cont = cont + 1 Fin si Fin desde Escribir “Entre “primero” y “limite” hay “cont” nº primos” Fin
Libro 1: Fundamentos de Programación
Unidad 3: Programación Estructurada. 198
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
2) Desarrollar un algoritmo para determinar el máximo valor entre un conjunto de números positivos ingresados a través del teclado. Un número negativo indica que no existen más números. Algoritmo para Determinar el Valor Máximo entre un Conjunto de Números Positivos Var num, max: entero Inicio Max = 0 Escribir “Introduzca nº positivos y para acabar introduzca uno negativo” Leer num Mientras num >=0 hacer Si num >max Entonces max = num Fin si Leer num Fin mientras Escribir “El mayor número es” max Fin 3) Desarrollar un algoritmo para determinar cuáles son los múltiplos de 5 comprendidos entre 1 y N. Algoritmo Para Determinar los Múltiplos de 5 en un Rango de Números Dado Var i: entero Inicio Desde i=1 hasta n Si i mod 5 =0 Entonces escribir i Fin si Fin desde Fin
Unidad 3: Programación Estructurada.
Libro 1: Fundamentos de Programación 199
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Fundamentos de Programación
Guía del Estudiante
4) Desarrollar un algoritmo, que al final de curso, determine cuál es el alumno con el promedio de notas más alto del semestre. Se sabe que en el semestre están inscritos 150 alumnos y cursan 5 asignaturas. Algoritmo para Determinar el Alumno con el Promedio de Notas Más Alto del Semestre Const Alumnos=150 Asignaturas=5 Var Nombre, mejor_alum: cadena Nota, suma, media, acum: real I, j: entero Inicio Acum = 0 Desde i=1 hasta alumnos Suma = 0 Escribir “Introduzca el nombre del alumno” Leer nombre Desde j=1 hasta asignaturas Escribir “Introduzca la nota de la asignatura” Leer nota Suma = suma + nota Fin desde Media = suma / asignaturas Si media > acum Entonces acum = media Mejor_alum = nombre Fin si Fin desde Escribir “El mejor alumno es “mejor_alum Escribir “Su nota media es “acum Fin
Libro 1: Fundamentos de Programación
Unidad 3: Programación Estructurada. 200
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
5) Calcular la suma de los divisores de cada número introducido por teclado. Terminará cuando el número sea negativo ó 0. Algoritmo Para Calcular la Suma de Los Divisores de un Conjunto de Números Var Numero, i, suma :entero Inicio Escribir “Introduce un número y para terminar introduce un número negativo o 0” Leer número Mientras numero > 0 hacer Suma = 0 Desde i=1 hasta numero /2 Si numero mod i =0 Entonces suma = suma + i Fin si Fin desde Suma = suma + numero Escribir “La suma de los divisores del número es “suma Leer numero Fin mientras Fin 6) Se coloca un capital C, a un interés I, durante M años y se desea saber en cuánto se habrá convertido ese capital en m años, sabiendo que es acumulativo. Algoritmo para Calcular Final Var I, j, m: entero c, temporal: real Inicio repetir Escribir “Introduce el capital, el interés y el tiempo” Leer c, i, m Hasta (c>0) y ((i 2
2) Desarrollar un algoritmo que determine cuál es la primera potencia en base 2 mayor que un número que se pasa como parámetro, devolviendo el valor de dicha potencia y el exponente al que está elevado. 3) Desarrollar un algoritmo que calcule recursivamente en cuánto se convierte un capital C al final de N años y a un interés I.
Libro 1: Fundamentos de Programación
Unidad 4: Procedimientos y Funciones 203
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
Respuesta Unidad 4: Ejercicios Propuestos 1) Desarrollar un algoritmo para calcular los n primeros términos de la serie de Fibonacci: Los términos de la serie de Fibonacci están definidos como sigue: Fibonacci (1)= Fibonacci (2)=1
para n=1 y n=2
Fibonacci (n)= Fibonacci (n-1) + Fibonacci (n-2)
para n > 2
Algoritmo para Determinar los n Primeros Términos de la Serie de Fibonacci Var i, n: entero Inicio Escribir “Introduce un número” Leer n Desde i=1 hasta n Escribir “La serie de fibonacci de “i” es “fibonacci (i) Fin desde Fin Funcion fibonacci (num: entero): entero Inicio Si (num = 1) o (num = 2) Entonces retorno 1 Sino Retorno (fibonacci (num - 1) + fibonacci (num - 2) Fin si Fin fibonacci
Libro 1: Fundamentos de Programación
Unidad 4: Procedimientos y Funciones 204
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
2) Implementar un algoritmo que indique cuál es la primera potencia en base 2 mayor que un número que se pasa como parámetro, devolviendo el valor de dicha potencia y el exponente al que está elevado. Algoritmo elevar Var Numero, resp1, resp2: entero Inicio Escribir “Introduce un número” Leer numero Comprueba (numero, resp1, resp2) Escribir “2^”resp1”=”resp2” >”numero Fin Procedimiento comprueba (num: entero; ent-sal n: entero; ent-sal pot: entero) Inicio n =1 ********Valor inical de pot falta**************************** Mientras pot < n hacer pot = pot *2 n = n+1 Fin mientras Fin comprueba 3) Implementar un algoritmo que calcule recursivamente en cuánto se convierte un capital C al final de N años y a un interés I. Algoritmo Funcion calculo (c: entero; i: entero; n: entero): real Inicio Si m=0 Entonces retorno C Sino Retorno (c * (1 + i / 100) + calculo (c, i, n-1) Fin si Fin calculo
Libro 1: Fundamentos de Programación
Unidad 4: Procedimientos y Funciones 205
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Guía del Estudiante
Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos 1)
Un multicine tiene 5 salas y cada sala tiene una capacidad de 100 personas distribuidas en 5 filas de 20 asientos. Desarrolle un algoritmo que cuando un cliente solicite una entrada para una de las salas, indique si hay un asiento disponible.
2) Dado el siguiente algoritmo ¿Cuál es la salida que produce? Algoritmo Principal Var Datos: array [1..10] de entero i: entero inicio desde i=1 hasta 10 datos [i] = i fin desde P1 (datos,datos[3]) Desde i=1 hasta 10 Escribir datos [i] Fin desde Fin Procedimiento P1 (a: array [1..10] de entero; ent-sal x: entero) Inicio x=0 Desde i=1 hasta 10 x = x + a[i] Fin desde Fin P1 3) Dada una matriz A de M*N elementos, actualizar la matriz de manera que en la matriz resultante, los elementos de la diagonal principal sean el resultado de su valor inicial dividido entre la suma de los elementos que no forman parte de ella.
Libro 1: Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos 207
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fundamentos de Programación
Guía del Estudiante
Respuesta Unidad 5: Ejercicios Propuestos 1) Un multicine tiene 5 salas y cada sala tiene una capacidad de 100 personas distribuidas en 5 filas de 20 asientos. Desarrolle un algoritmo que cuando un cliente solicite una entrada para una de las salas indique si hay un asiento disponible. Algoritmo Disponibilidad de Asiento en la Sala de Cine Const Salas=5 Asientos=20 Filas=5 Var N_salas,j,k: entero Marca: boolean A: array [1..salas,1..asientos,1..filas] de entero Inicio Pedir_datos (n_salas) Mientras n_salas 0 hacer Marca = falso j=0 k=1 Repetir Si j > asientos Entonces j =1 k = k+1 Fin si Si (j=asientos) y (k>=filas) Entonces escribir “Sala llena” Marca = verdadero Sino si a [n_salas,j,k]=0 Entonces a[n_salas,j,k] = 1 Escribir “Asiento”j”fila”k Marca = verdadero Sino j = j + 1 Fin si Fin si Hasta (a[n_salas,j,k]=1) y (marca=verdadero) Pedir_datos (n_salas) Fin mientras
Libro 1: Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos 208
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Fin Procedimiento pedir_datos (ent-sal s: entero) Inicio Repetir Escribir “¿En qué sala quieres entrar?” Leer s Hasta (s>=0) y (s j Entonces s = s + matriz [i,j] Fin si Fin desde Fin desde Fin sumar
Libro 1: Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos 210
© Copyright IBM Corp. 2007 El material del curso no puede ser reproducido total ni parcialmente sin el permiso escrito previo de IBM.
Guía del Estudiante
Fundamentos de Programación
Procedimiento escribir (matriz: array [1..M,1..N] de real; s: real) Var I,j: entero Inicio Desde i=1 hasta M Desde j=1 hasta N Si i=j Entonces escribir a[i,j]/s Sino escribir a[i,j] Fin si Fin desde Fin desde Fin escribir
Libro 1: Fundamentos de Programación
Unidad 5: Estructura de Datos: Arreglos 211
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.