Академический Документы
Профессиональный Документы
Культура Документы
Programación
Código del Curso: CY300
Versión 4.0
Libro 1: Fundamentos
de Programación
Esta publicación ha sido producida usando Microsoft Word 2000 y Microsoft PowerPoint
2000 para Windows.
Marcas Registradas
DB2 Informix
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
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
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
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.
Agenda
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.
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.
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.
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.
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.
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.
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.
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.
Sin embargo, hay una serie de pasos que permiten resolver un problema de la forma
más conveniente, estos son:
• Análisis del problema.
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.
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.
• 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.
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.
Sistema Operativo: Es una colección organizada de software que se usa para ayudar y
controlar las operaciones de una computadora.
La Figura 1.2 presenta en forma esquemática los pasos para crear un programa de
computadora.
Programa Librerías de
Compilación Objeto enlace
Programa Compilación
fuente
Compilador Enlazador
Programa
Ejecutable
Enlace
9.1 Dato
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.
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.
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.
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.
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.
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.
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”.
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.
Algunos de los operadores aritméticos más comunes son: +, -, *, / , los cuales equivalen
a las operaciones suma, resta, multiplicación y división respectivamente.
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:
(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.
1. ^
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).
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.
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.
Y (and, &&)
O (or, ||)
No (not, ~, !)
O exclusivo (xor, ^)
Y, O y O exclusivo son operadores binarios.
Estos operadores trabajan bajo el esquema: <Operando 1> Operador <Operando 2>
NOT Operando
V F
F V
Tabla 1.6: Tabla de Verdad para el operador unario “No”
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:
1. NOT x : ___________
2. x AND y : ___________
3. y OR x : ___________
4. (NOT x) AND y : ___________
5. x XOR y : ___________
Las más comunes son las librerías de soporte matemático y las de entrada / salida.
Las formas más comunes del operador de asignación se resumen en la Tabla 1.8:
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.
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.
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
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.
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.
• 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.
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.
Alquilar
una
Película
Preguntar Ingresar
identifica- identifica- Examinar
ción ción perfil
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.
Impresora
Inicio
NO
¿Diagrama Flujo OK?
SI
Fin
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:
INICIO
P=1
LEER NUM
SI P = P x NUM
NUM > 0
NO
ESCRIBIR P
FIN
Condición
SI NO
<Acciones> <Acciones>
Mientras <Condición>
<Acciones> Desde Var = V1 Hasta V2
INICIO
p = 1
Leer num
p = p x num
Leer num
Escribir p
FIN
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.
do while( count = 0 )
do process
count = count - 1
end
Ejemplo 2.2
Ejemplo de palabras claves en pseudocódigo:
1. Inicio y Fin: Por donde empieza y termina el algoritmo.
2. Si <condición>
3. Entonces <acciones>
4. Sino <acciones>
5. Mientras <condición> hacer
6. Repetir / hasta <condición>
7. Desde / hasta
8. 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:
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.
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.
Leer num
Leer num Leer num num = num * 2
Escribir num
num=num*2
num=num*2
Escribir num
Escribir num
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.
Condición Si <condición>
Condición no SI NO entonces
<acciones>
Acciones Fin si
si
Acciones
Acciones
|
Figura 3.2: Estructura Selectiva Simple
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.
condición
No
condición acciones Si <condición>
Si No entonces
<acciones>
Si Sino
acciones acciones <acciones>
acciones
Fin si
acciones
Expresión
Expresión Según sea <expresión>
V1 V2 V3 V4 <valor1>:<acciones>
<valor2>:<acciones>
<valor3>:<acciones>
<valor4>:<acciones>
V1 V2 V3 V4 [<otro> :<acciones>]
Fin según
acciones
Escribir un programa que dada una nota entera presente por pantalla un mensaje acorde
a la nota suministrada según un rango de valores.
1. Mientras-hacer (while)
Mientras <cond.>
No Hacer Mientras <condición>
condición Hacer
<acciones>
<acciones>
Si Fin mientras
acciones
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.
Acciones Repetir
<Acciones> <acciones>
Hasta <condición>
No
condición Repetir hasta
<condición>
Si
Ejemplo 3.2
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
í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.
no
5. Estructuras Anidadas
Las estructuras selectivas, como los bucles, se pueden escribir unas dentro de otras. Esto
se conoce como estructuras anidadas.
En otras palabras, por ejemplo un ciclo ‘desde’ puede tener dentro de sus sentencias otro
ciclo ‘desde’ o cualquier otra estructura estudiada anteriormente. También se pueden
presentar anidaciones de estructuras condicionales.
Sintaxis:
Si <condicion1>
Entonces <sentencia1>
Sino si <condicion2>
Entonces <sentencia2>
Sino si <condicion2>
Entonces <sentencia3>
Fin si
Fin si
Fin si
La forma común de realizar el anidamiento es colocar la condición en la parte ‘no’ (else)
de la sentencia.
La sentencia ‘según sea’ (case) siempre equivale a una anidación de condicionales, pero
lo contrario no es cierto.
Al igual que se pueden colocar unas expresiones dentro de otras, los bucles pueden estar
unos dentro de otros. Al anidar bucles hay que tener en cuenta que el bucle interno
funciona como una sentencia más en el bloque del bucle externo, por lo tanto, en cada
iteración del bucle externo se van a ejecutar todas las iteraciones del bucle interno.
Los bucles deben estar bien formados y ser sintácticamente correctos para que pueda
haber un anidamiento válido, en otras palabras, nunca pueden cruzarse las sentencias de
los bucles. Si se tiene un ciclo ‘desde’ que internamente posee un ciclo ‘mientras hacer’,
es necesario finalizar las sentencias o instrucciones del ciclo más interno, en este caso
‘mientras-hacer’ antes de colocar la culminación del ciclo externo ‘desde’.
Si el bucle externo se repite n veces y el interno se repite m veces y por cada iteración del
externo se repite el interno, entonces el número total de iteraciones será el producto de m
x n. Los bucles que se anidan pueden ser de igual o distinto tipo.
Ejemplo 3.3
Note como cada ciclo interno termina antes de cerrar el más externo. No existen
limitaciones formales en cuanto al número de sentencias y estructuras anidadas que se
pueden colocar en un mismo bloque de código, esto depende del lenguaje de
programación que se está usando. No obstante, no es conveniente abusar de los
anidamientos de estructuras, ya que resultan en un código difícil de leer y por lo tanto
difícil de mantener.
Ejemplo 3.4
1. centinela = 9
2. Leer opcion
3. Mientras (opcion <> centinela) hacer
4. <acciones>
5. Leer opcion
6.Fin mientras
Fin del Ejemplo 3.4
Los datos de entrada pueden estar en un archivo, el cual debe ser leído desde el primer al
último registro para recuperar todos los datos, para ello se realiza una lectura secuencial
de todos los registros del archivo.
Una estrategia común de lectura para un archivo con acceso secuencial es:
abrir el archivo
1. Archivo mi_archivo
2. Abrir_Archivo(mi_archivo)
3. Leer_Archivo(mi_archivo)
4. Mientras (No (Fin_de_Archivo(mi_archivo))) Hacer
5. <acciones con los datos del archivo>
6. Leer_Archivo(mi_archivo)
7.Fin mientras
Fin del Ejemplo 3.5
6.3 Cuando se Sabe el Número Exacto de Veces que se Ejecuta una Acción o
Proceso
Cuando se sabe el número exacto de veces que se ejecuta una acción o proceso, la
opción natural para realizar el control de entrada es utilizar un ciclo o bucle
‘Desde...Hasta’.
Ejemplo 3.6
1. Var i : Entero
2. Mostrar “Ingrese el numero da materias a registrar: ”
3. Leer numero_materias
3. Desde i = 1 Hasta numero_materias
4. Mostrar “Ingresar datos Materia numero ” ,i, “ : ”
5. Leer materia
6. <acciones a realizar con materia>
7.Fin desde
Fin del Ejemplo 3.6
El control de ingreso de datos para evitar datos de entrada erróneos, se usa cuando se
controla al usuario para que introduzca los datos válidos. Por ejemplo: ‘un valor numérico
dentro de un rango determinado’, en estos casos, se recomienda usar un ciclo
‘Repetir...Hasta’.
Ejemplo 3.7
Resumen
Ahora que ha completado esta unidad, Ud. debe ser capaz de:
• Conocer las técnicas de programación estructurada.
• Trabajar con las estructuras secuenciales.
• Trabajar con las estructuras selectivas.
• Trabajar con las estructuras repetitivas.
• Conocer la anidación de bucles y condicionales.
• Realizar el control de datos de entrada.
2) Todo bucle tiene asociada dos condiciones: Una que determina si se ejecuta el bucle
y otras hasta cuando.
a) Falso
b) Verdadero
5) ¿Cuáles de las siguientes afirmaciones son correctas con respecto a los centinelas?
a) Se recomienda utilizar una estructura Repetir
b) La primera lectura se va a realizar fuera del bucle
c) El bucle se va a repetir mientras no se lea un valor determinado
d) Se utiliza únicamente con lenguajes orientados a objetos
1. Introducción
La programación modular es una de las técnicas fundamentales de la programación. Se
apoya en el diseño top down y en la filosofía de “divide y vencerás”. La programación
modular toma el problema y lo divide en problemas más simples o más pequeños y cada
uno de estos se implementa como un módulo independiente. A cada uno de estos
módulos se le llama subprogramas. El objetivo es tener tanto subprogramas como sea
necesario para resolver un problema mayor y cada subprograma debe cumplir
cabalmente una tarea específica.
Un ejemplo de programación modular puede ser un sistema que realice el cálculo de los
impuestos, donde el problema del cálculo de los impuestos puede ser dividido a su vez en
4 subproblemas, que se implementarán como 4 módulos o subprogramas, para ilustrarlo
gráficamente observe la Figura 4.1:
Cálculo de
Impuesto
Calcular Calcular
Impuesto Impuesto
sobre la Renta Activos
2. Funciones
Desde el punto de vista matemático, una función es una operación que toma uno o varios
operando (parámetros) y devuelve un resultado. Desde el punto de vista algorítmico, una
función es un subprograma que toma uno o varios parámetros como entrada y devuelve
un único resultado.
Este único resultado irá asociado al nombre de la función, es por ello que es una práctica
común el hecho de que al invocar una función, su valor de retorno se le asigne a una
variable u expresión adecuada.
Sintaxis
En las variables locales se declaran las variables que se desea utilizar dentro de la
función.
Dentro del cuerpo de la función, se escriben todas las acciones o sentencias de código
destinadas a cumplir el propósito de la función. Es necesario para las funciones, que entre
las acciones escritas en su cuerpo, se incluya una del tipo ‘retorno <valor>’. Esta
sentencia pondrá fin a la ejecución de la función y devolverá el valor de la función al
programa que la invocó. El valor de retorno tiene que ser del mismo tipo, que el tipo de
dato que se ha indicado al declarar la función en la parte final de la cabecera.
Por definición, una función siempre debe devolver algún valor. Algunos lenguajes de
programación declaran un tipo de dato nulo para permitir así que las funciones “no
retornen” valores, aunque en realidad retornan un tipo no utilizado.
Para llamar o invocar una función, se coloca el nombre de la función y entre paréntesis se
añaden los parámetros reales que necesita la función. Los parámetros reales pueden ser
variables, expresiones e incluso constantes, pero siempre deben corresponder al mismo
tipo de dato que los parámetros formales asociados con la función.
1. Var
2. resultado : Entero
3. numero : Entero
4.Inicial
5. resultado= sumarEnteros(8, 9)
6. Mostrar “8 + 9 es: ” resultado
7. numero= 12;
8. resultado= sumarEnteros(numero, 5)
9. Mostrar “12 + 5 es: ” resultado
10. Mostrar “2 + 2 es: ” sumarEnteros(2, 2)
11.Fin
Para que una función pueda ser invocada desde cualquier parte de un programa, es
necesario que la definición de dicha función ya sea del conocimiento previo del
compilador antes de usarla. Esto último, es así porque usualmente la mayoría de los
lenguajes de programación requieren que la función, procedimiento o subrutina, esté
definida antes de permitir su uso. En otras palabras, la firma de la función que
corresponde a su nombre, tipo y número de argumentos debe estar presente en algún
lugar válido del programa antes de poder invocarla.
Como regla general el parámetro real y su correspondiente parámetro formal deben ser
del mismo tipo. Si el parámetro formal no es del mismo tipo que el parámetro real, en
algunos lenguajes, como Pascal, se produce un error de compilación; en otros lenguajes,
como el lenguaje C, ocurre una conversión implícita de tipos, si es posible.
Ejemplo 4.1
Se necesita una función que calcule la mitad del valor que recibe como parámetro.
Suponga que el parámetro es un valor entero.
7. Algoritmo calcular_mitad
8. Var num: entero
9. Inicio
10. Escribir “Introduzca un número entero para hallar su
mitad: ”
11. Leer num
3. Procedimientos
Un procedimiento es un subprograma que realiza una determinada tarea, pero que tras
ejecutar esa tarea no tiene ningún valor asociado a su nombre, como ocurre en las
funciones. Si un procedimiento devuelve información, lo hace a través de parámetros de
entrada-salida o de salida.
Las funciones están diseñadas para devolver un único valor y un procedimiento puede
devolver ningún o muchos valores por medio de sus argumentos o parámetros.
Mientras que la llamada a una función siempre puede formar parte de una expresión, la
llamada a un procedimiento es una instrucción aislada, que por sí sola no puede formar
parte de una expresión.
3.2 Sintaxis
En el cuerpo del procedimiento se colocan todas las sentencias necesarias para cumplir
con su tarea y no habrá ninguna sentencia de tipo ‘retorno <valor>’. Ahora bien, si el
procedimiento devuelve resultados a través de sus parámetros, cosa que sólo podrá
hacer a través de los parámetros que se pasan por referencia, tendrán que existir
sentencias de asignación de valores a estos parámetros pasados por referencia para
devolver los resultados.
Ejemplo 4.2
1. Procedimiento mitad (num:entero, ent-sal med:real)
2. Inicio
3. med = num / 2
4. Fin mitad
5. Algoritmo calcular_mitad
6. Var
7. n: entero
8. mit: real
9. Inicio
10. Escribir “Introduzca un número”
11. Leer n
12. mitad (n, mit)
13. Escribir “La mitad es” mit
14. fin
En el ejemplo anterior ent-sal med: real, se usa para indicar que el parámetro del tipo real
med es de entrada-salida o que es un parámetro por referencia. Cada lenguaje de
programación definirá su propia sintaxis para indicar cuándo los parámetros son por valor
o por referencia.
El ámbito es importante cuando se trabaja con variables, por lo que se tienen variables
locales y globales
Una variable local es aquella que está declarada y definida dentro de un subprograma o
sub-bloque de código, por lo tanto, su ámbito coincidirá con el ámbito del subprograma en
la que esté definida.
Esto quiere decir que la variable no tiene ningún significado, no se conoce y no se puede
acceder a ella desde fuera del subprograma o bloque de código. Tiene una posición de
memoria distinta a la de cualquier otra variable del programa, incluso si es de una variable
que tiene el mismo nombre pero que está definida fuera del subprograma.
Si se tiene una variable local con el mismo identificador que una variable global, las
referencias que se hacen dentro del bloque de código en que se declara la variable local,
harán referencia a dicha variable local y no a la variable global.
Una variable global es aquella que está definida a nivel del programa, es decir, su ámbito
es el programa o algoritmo principal y todos los subprogramas que dependen de éste
último.
Una variable global se puede acceder desde cualquiera de los subprogramas y cualquier
parte del programa principal, salvo que alguno de esos subprogramas tenga definida una
variable local con el mismo nombre que la variable global. En este caso, si se utiliza el
nombre de esa variable se va referir a la local, nunca a la global, ya que ambas variables
tienen ubicaciones de memoria diferentes.
Hay que ser cuidadosos a la hora de usar variables globales, ya que como todos los
subprogramas las pueden modificar, es posible que se pueda hacer un uso indebido o se
produzcan efectos indeseados cuando un subprograma utilice una variable global sin
saber que otro subprograma ya ha modificado su valor. Esta es la razón por la cual no se
deben utilizar variables globales para pasar información entre los subprogramas, para tal
fin, se recomienda usar variables locales por medio de parámetros reales.
PP
P1 Var a, b
Var a, c, d
P1.1
Var d, e, f
P2
Var c, d
Existen dos métodos para realizar la correspondencia entre parámetros formales y reales,
los cuales se explican a continuación:
Si se tiene el procedimiento:
Proc(x : entero, y : real)
En la llamada, se coloca el nombre del parámetro formal, separado por dos puntos (:) y
seguido por el nombre del parámetro real que se pasa, de esta forma no importa la
posición en la que se colocan los argumentos del procedimiento o función.
Para el ejemplo anterior y bajo este enfoque las siguientes llamadas son válidas:
Proc(x : 8, y : a)
Proc(y : a, x : 8)
ADA es un lenguaje de programación que permite la correspondencia de parámetros por
nombre implícito.
Existen tres tipos básicos de parámetros según su uso como entrada de datos o para
obtener resultados. Estos son:
• De Entrada: Son parámetros que sólo aportan el valor que tienen, como entrada
al subprogama al que pertenecen como parámetros. En el caso de las funciones,
todos sus parámetros son de este tipo. Como sólo sirven como entrada, sólo
pueden ser leídos, pero no modificados. Aunque sean modificados dentro de un
subprograma, esa modificación no va a tener efecto fuera del subprograma.
• De Salida: Se usan sólo y exclusivamente para devolver resultados a través de
ellos. Su valor al hacer la llamada al subprograma no es de relevancia. Ese valor
sólo va a tener sentido cuando termine la ejecución del subprograma. Un
parámetro de este tipo teóricamente nunca se puede leer, sólo se va actualizar o
modificar.
• De Entrada y Salida: El valor del parámetro tiene importancia tanto a la entrada
como a la salida del subprograma. Aporta dato cuando se llama al subprograma y
por otra parte, devuelve a través de él los resultados cuando se termina el
subprograma. En este caso, tiene sentido tanto poder leer como actualizar el
parámetro.
ADA es un lenguaje que soporta los tres tipos de pase de parámetros suministrados. Se
ponen como In, Out e In-Out respectivamente.
La mayoría de otros lenguajes sólo permiten dos tipos de parámetros: de entrada sólo
para leer datos y de entrada-salida para leer datos y devolver resultados.
Existe una variedad de métodos definidos para el paso de parámetros, para efectos de
este manual sólo se estudiarán dos de ellos por ser los más utilizados y conocidos en las
herramientas de programación.
El parámetro real puede ser: una constante, expresión o variable. Como ya se sabe,
nunca se va a usar para devolver resultados a través de él; por esa razón, puede ser una
constante o una expresión, porque al no devolver resultados a través del parámetro, no
necesita tomar ninguna ubicación de memoria para almacenarlo.
Ejemplo 4.3
6. Algoritmo CopiaValor
7. Var a : entero
8. Inicio
9. a = 3
10. Duplicar(a)
11. Escribir a
12. Fin
El valor de ‘a’ será 3 y el de ‘x’ será 6.
Fin del Ejemplo 4.3
El parámetro real no puede ser ni constantes ni expresiones. Sólo pueden ser variables.
Para indicar que el tipo de paso de parámetro es por referencia, se va a utilizar la palabra
clave ent-sal precediendo al parámetro que se pasa por referencia.
Procedimiento Duplicar(ent-sal x : entero)
Inicio
x = x * 2
Fin Duplicar
Algoritmo Referencia
Var a
Inicio
a = 3
Duplicar(a)
Escribir(a)
Fin
Al finalizar el algoritmo, el valor de ‘a’ será igual a 6, valor asignado a ‘x’ en el
subprograma Duplicar().
De acuerdo a lo estudiado en los dos puntos anteriores se puede resumir que en el paso
de parámetros por:
6. Recursividad
Se dice que un subprograma es recursivo cuando se llama a sí mismo. La recursividad se
puede utilizar en subprogramas que se pueden definir en términos recursivos, es decir, en
términos de sí mismo, como procesos de alguna manera repetitivos.
Hay que ser cuidadosos al utilizar la recursividad e incluso evitarla siempre que sea
posible utilizando algoritmos iterativos. Cada vez que un subprograma se llama a sí
mismo, hay que almacenar en la pila del sistema (un lugar de memoria especial) la
dirección de retorno de ese subprograma. De esta forma, si se efectúan muchas llamadas
recursivas se irá llenando la pila del sistema, existiendo la posibilidad de que se agote la
memoria disponible. Esta situación se conoce como desborde de la pila del sistema.
Todo programa recursivo tiene que tener alguna condición que ponga fin a la recursividad,
un punto en el que el subprograma deje de llamarse a sí mismo cuando se cumpla la
condición. De otra forma, se genera un bucle infinito con el consecuente error de
desbordamiento de pila mencionado anteriormente.
De aquí:
si (x > 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
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
Ejemplo 4.4
1. Funcion FactorialIterativa(x : entero): entero
2. Var
3. res : entero
4. i : entero
5. Inicio
6. res = x
7. Si (x > 1) entonces
8. Desde i = x - 1 hasta 1
9. res = res * i
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.
a) I, II, IV
b) II, III, IV
c) I, II, III, IV
d) Ninguna de las anteriores
a) I, II, IV
b) II, III
c) I, IV
d) II, III, IV
a) I, II
b) II, III, IV
c) III, IV
d) Ninguna de las anteriores
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
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
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.
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.
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.
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:
<nom_arreglo>: arreglo [rango] de <tipo>
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’.
1 2 3 4 5 6 7 8 9 10 11 12
Leer <nom_arreglo>[indice]
Escribir <nom_arreglo>[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
1. Desde i = 1 Hasta 12
2. Ventas[i] = ventas[i] + 1000000
3. Fin Desde
• 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.
C E F J M O
C E F G J M O
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.
C E F J M O
C E F M O
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
1 2 3 4 5 6 7 8 9 10 11 12
1
2
3
4 120
5
ventas[4, 3] = 120
En memoria se almacenan los elementos en forma consecutiva:
1,1 1,2 1,3 1,4 ... 1,12 2,1 2,2 2,3 … 5,1 ... 5,12
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
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
Ejemplo 5.6
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.
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.
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.
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.
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.
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
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
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.
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.
Impresora
Teclado
Archivo
Archivo en en disco
disco
PROCESADOR
ENTRADA (programa en SALIDA
ejecución)
Red Pantalla
Red
Scanner
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.
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.
Buffers
Programa
...
Disco E LEER HACER
N (READ) MIENTRAS
T (MAS DATOS)
R LEER
A
D /*
A ESCRIBIR PROCESAR */
(WRITE)
S ESCRIBIR
A FINHACER
L ...
I
D
A
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
formatos únicos de línea para las múltiples líneas de encabezado y los encabezados de
columna.
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.
BLOQUE
FIJO
BLOQUEADO REGISTRO REGISTRO REGISTRO REGIST
BLOQUE
VARIABLE
BLOQUEADO REGISTRO REGISTRO REGISTRO
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.
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.
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 35
Andrews 42
Appleton 40
Arnold 30
Astor 45
Formato del Reporte:
Reporte de Horas Trabajadas
Nombre Horas Sobre tiempo
Anderson 35
Andrews 42 si
Appleton 40
Arnold 30
Astor 45 si
INICIO
INICIO
SI
CONT_LINEA = CONT_LINEA
MAX_LINEAS
NUEVA PÁGINA
>=
CONT_PG = 1 CONT PG
LEER 1er. NO
REGISTRO
SI INDICADOR = ‘SI’
HORAS
> 40
LEER SIGUIENTE NO
REGISTRO
INDICADOR = ‘NO’
PROCESAR
REGISTRO
NO FIN DE SI
ARCHIVO ASIGNAR CAMPOS ENTRADA A
CAMPOS SALIDA
NO
ESCRIBIR REGISTRO
FIN
CONT_LINEA = CONT_LINEA + 1
FIN
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
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.
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
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
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
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.
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.
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
01655
24898
59437
59437
76990
76990
98144
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
Entrada 1: Entrada 2:
5 200.00 5 200.00
5 100.00 5 100.00
5 100.00 5 100.00
6 50.00 16 300.00
6 200.00 16 200.00
16 300.00 9 50.00
16 100.00 6 200.00
Salida 1: Salida 2:
Dpto. No. Ventas Dpto. No. Ventas
5 400.00 5 400.00
6 250.00 16 500.00
16 400.00
Error de Secuencia
Figura 7.2: Punto de Chequeo
PROCESAR VENTAS
INICIO
INICIO
CONT_LINEA = MAX_LINEA
CONT_PG = 1
DEPT si RUPTURA
<
DEPT-LEIDO
VENTAS_ACUM = 0
SW = 1
SW = 0
no
LEER 1ER REGISTRO
no VENTAS_ACUM =
DEPT
> VENTAS_ACUM +
DEPT-LEIDO VENTAS_LEIDAS
DEPT = DEPT-LEIDO
si
SI
FIN
NO FIN ARCHIVO Y PROCESAR
SW = 1 VENTAS
NO
ASIGNAR Y ESCRIBIR
TOTAL DE VENTAS
ÚLTIMO
SI MENSAJE DE
SW = 0 ERROR DE
SECUENCIA
NO
FIN
RUPTURA
INICIO
INICIO
NO SALTAR A NUEVA
CONT_LINEA >=
MAX_LINEA
PÁGINA
SI ESCRIBIR LINEA DE
CABECERA
NUEVA_PAGINA
ESCRIBIR LINEA DE
TÍTULO
CON_PG = CONT_PG + 1
DEPT = DEPT-LEIDO
FIN
CONT_LINEA = CONT_LINEA + 1
VENTAS_ACUM = VENTAS_LEIDAS
FIN
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.
Volumen 2: Complementos I
Entero: edad
Cadena: nombre,
dirección
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
edad
Estatura, peso
edad
Edad
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
FIN
INICIO
“Ingrese
la base:
”
base
“Ingrese
la
altura: ”
altura
perimetro = 2 *
(base + altura)
“El perímetro
es:”
perimetro
FIN
INICIO
anios
meses
FIN
INICIO
“Ingrese un valor en
pies”
pies
FIN
INICIO
“Ingrese la
velocidad en Km/h”
kmph
mps = kmph * 5 / 18
kmph “Km/h
equivales a: ” mps
“M/s”
FIN
INICIO
“Ingrese cantidad
de hombres”
hombres
“Ingrese cantidad
de mujeres”
mujeres
“%hombres= ”
porch
“% mujeres = ” porcm
FIN
INICIO
“Ingrese la cantidad
de estudiantes de
los salones A, B y
C”
tiempoA = estA * 5
tiempoB = estB * 8
tiempoC = estC * 6
tiempoT = tiempoA + tiempoB+tiempoC
“El instructor
tardará ” horasT
“horas y ” minT
“minutos”
FIN
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.
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
INICIO
entero a, b, mayor
“Ingrese el
primer valor”
“Ingrese el
segundo
valor”
NO a>b SI
mayor = b mayor = a
“El mayor
es:” mayor
FIN
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”
“Ingrese el
segundo valor”
no si
a == b
NO SI
a>b “Los
números son
iguales”
“El mayor “El mayor
es:” b es:” a
FIN
INICIO
“Ingrese el
salario: “
salario
no si
salario <= 500000 porc = 10
no si
porc = 5 salario <= porc = 8
800000
FIN
5) Elaborar un programa que lea tres notas y calcule el promedio. Si éste es menor
a 10, imprimir: “Nota deficiente”. Si es mayor o igual a 10 y menor o igual a 15,
imprimir: “Nota regular”. Si es mayor que 15, imprimir: “Nota excelente”.
INICIO
“Ingrese 3 notas: “
promedio = (nota1+nota2+nota3)/3
no
promedio < 10
no si “Nota deficiente”
promedio <= 15
FIN
6) Una tienda que vende televisores, lavadoras y neveras tiene una promoción. Si
el cliente compra tres artículos iguales o más, recibe un descuento del 15% sobre el
precio de dicho artículo; de lo contrario sólo recibe un descuento del 5%. Calcular el
monto total a pagar por el cliente y mostrarlo por pantalla. Los televisores cuestan
25.000, las lavadoras 30.000 y las neveras 75.000.
INICIO A
“Ingrese cantidad
de TV’s, lavadoras totalN = cantN * precioN
y neveras”
“Monto a pagar”
“Televisores: “ totalT
no si “Lavadoras: “ totalL
cantT >= 3 “Neveras: “ totalN
“Monto Total: “ total
precioT=25000*0.95 precioT=25000*0.85
FIN
cantL >= 3
precioL=30000*0.95 precioL=30000*0.85
cantN >= 3
precioN=75000*0.95 precioN=75000*0.85
INICIO
valor, anios
anios
1 2 3 4 otro
“El monto de la
prima es: “ prima
FIN
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.
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.
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.
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 numero
numero = numero + 1
no
FIN
INICIO
n=n+1
si “Ingrese un
n <= 10 numero” numero
no
promedio = suma / 10
FIN
INICIO
Entero numero,
mayor = 0, contador =
“Ingrese un numero
entero positivo”
numero
si
numero > mayor mayor = numero
no
contador = contador + 1
si
contador < 10
no
“El mayor es “
mayor
FIN
INICIO
Entero a = 1, b = 1, n = 2, c
“1, 1”
n = n +1
b=c
a=b
“, “ c
si c=a+b
n < 10
FIN
acum_des = acum_aprob =
acum_des + nota acum_aprob + nota FIN
no si
nota >= 10
nota
si
i <= n “Ingrese nota”
no
Ejercicios Propuestos
1. Construya un algoritmo que reciba como entrada un cierto valor n y genere como
salida n veces la palabra “hola".
2. Construya un algoritmo que reciba como entrada un cierto valor n y genere como
salida el valor de la serie: 1 + 2 + 3 + 4 + : : : + n
3. Dado un número determinar la suma de sus dígitos.
4. Realizar un algoritmo que permita pedir 20 números naturales y determine e imprima
cuántos son pares, impares, positivos y negativos.
5. Desarrollar un algoritmo para calcular e imprimir el factorial de un número.
6. Elaborar un programa que lea N cantidad de notas, calcule el promedio. Si éste es
menor que 10, imprimir: “Reprobado”. Si es mayor o igual a 10, imprimir:”Aprobado”.
7. En un evento público donde entran N cantidad de personas y las entradas cuestan S
cantidad de bolívares, hay un descuento para adultos de 25%, para menores de 12
años de 50% y para menores de 6 años de 70%. Elaborar un programa que solicite
el valor de las entradas y las edades de N personas y calcule el monto a pagar.
8. Calcular y visualizar la suma y el producto de los números pares comprendidos entre
20 y 400 ambos inclusive.
9. Hacer un programa que al ingresar un número indique si es o no es un número
Ámstrong, si no lo es que indique que vuelva a intentar (un número es Ámstrong si la
suma de los dígitos que lo componen, elevados al cubo, es igual al número. Ejemplo:
153 es Ámstrong porque 13 + 53 + 33 = 1 + 125+ 27).
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.
1. algoritmo comparar
2. var a, b: entero
3. inicio
4. mostrar “Ingrese el primer valor: ”
5. leer a
6. mostrar “Ingrese el segundo valor: ”
7. leer b
8. si a == b entonces
9. mostrar “Los números son iguales. ”
10. sino
11. si a > b entonces
12. mostrar “El mayor es: ” a
13. mostrar “El menor es: ” b
14. sino
15. mostrar “El mayor es: ” b
16. mostrar “El menor es: ” a
17. fin si
18. fin si
19. fin comparar
14. fin si
15. aumento = salario * porc / 100
16. nuevosal = salario + aumento
17. mostrar “Ud. ha recibido un aumento de: ” aumento
18. mostrar “Su nuevo salario es: ” nuevosal
19.fin aumento
5. Elaborar un programa que lea tres notas y calcule el promedio. Si éste es menor
a 10, imprimir: “Nota deficiente”. Si es mayor o igual a 10 y menor o igual a 15,
imprimir: “Nota regular”. Si es mayor que 15, imprimir: “Nota excelente”.
1. algoritmo promedio
2. var nota1, nota2, nota3: entero
3. promedio: real
4. inicio
5. mostrar “Ingrese las tres notas: ”
6. leer nota1, nota2, nota3
7. promedio = (nota1 + nota2 + nota3) / 3
8. si promedio < 10 entonces
9. mostrar “Nota deficiente”
10. sino
11. si promedio <= 15 entonces
12. mostrar “Nota regular”
13. sino
14. mostrar “Nota excelente”
15. fin si
16. fin si
17. fin promedio
7. Una tienda que vende televisores, lavadoras y neveras tiene una promoción. Si el
cliente compra tres artículos iguales o más recibe un descuento del 15% sobre el
precio de dicho artículo; de lo contrario sólo recibe un descuento del 5%. Calcular el
monto total a pagar por el cliente y mostrarlo por pantalla. Los televisores cuestan
25.000, las lavadoras 30.000 y las neveras 75.000.
1. algoritmo tienda
2. var cantT, cantL, cantN: entero
3. precioT, precioL, precioN, totalT, totalL, totalN,
total: real
4. inicio
5. mostrar “Ingrese la cantidad de TV’s, Lavadoras y Neveras: ”
6. leer cantT, cantL, cantN
7. si cantT >= 3 entonces
8. precioT = 25000 * 0.85
9. sino
10. precioT = 25000 * 0.95
11. fin si
12. si cantL >= 3 entonces
13. precioL = 30000 * 0.85
14. sino
15. precioL = 30000 * 0.95
16. fin si
17. si cantN >= 3 entonces
18. precioN = 75000 * 0.85
19. sino
20. precioN = 75000 * 0.95
21. fin si
22. totalT = cantT * precioT
23. totalL = cantL * precioL
24. totalN = cantN * precioN
25. total = totalT + totalL + totalN
26. mostrar “Monto a pagar”
27. mostrar “Televisores: ” totalT
28. mostrar “Lavadoras: ” totalL
29. mostrar “Neveras: ” totalN
30. mostrar “Monto total: ” total
31.fin tienda
9. 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.
1. algoritmo salario
2. var horas_trabajadas: entero
3. tarifa,horas_extras,salario,tarifa_extra: real
4. inicio
5. mostrar “Ingrese las horas trabajadas y la tarifa normal: ”
6. leer horas_trabajadas,tarifa
7. si horas_trabajadas <= 40 entonces
8. salario = horas_trabajadas * tarifa
9. sino
10. tarifa_extra = tarifa + 0.50 * tarifa
11. horas_extras = horas_trabajadas - 40
12. salario = horas_extras * tarifa_extra + 40 * tarifa
13. fin si
3. Dada las horas trabajadas de n personas y la tarifa general de pago por hora,
calcule el salario de todos los trabajadores y muéstrelo por pantalla. Muestre
además la suma de todos los salarios.
1. algoritmo nomina
2. var N, I, suma, tarifa, horas, sueldo: entero
3. inicio
4. mostrar “¿Cuantos trabajadores desea introducir?”
5. leer: N
6. mostrar “¿Cual es la tarifa general? ”
7. leer tarifa
8. I = 1
9. suma = 0
10. mientras I <= N hacer
11. mostrar “Ingrese las horas trabajadas: ”
12. Leer horas
13. sueldo = horas * tarifa
14. mostrar “El sueldo es: ” sueldo
15. suma = suma + sueldo
16. I = I + 1
17. fin mientras
18. mostrar “El monto total de la nómina es: ” suma
19.fin nomina
1. algoritmo notas
2. var n, i=1, nota, naprob = 0, ndes = 0, acum_aprob = 0,
acum_des = 0: entero
3. promaprob, promdes, promtotal: real
4. inicio
5. mostrar “Cuantas notas desea introducir?”
6. leer n
7. mientras I <= n hacer
8. mostrar “Ingrese nota: ”
9. leer nota
10. si nota >= 10 entonces
11. naprob = naprob + 1
12. acum_aprob = acum_aprob + nota
13. sino
14. ndes = ndes + 1
15. acum_des = acum_des + nota
16. fin si
17. I = I + 1
18. fin mientras
19. promaprob = acum_aprob / naprob
20. promdes = acum_des / ndes
21. promtotal = (acum_aprob + acum_des) / n
22. mostrar “Notas aprobadas: ” acum_aprob
23. mostrar “Notas desaprobadas: ” acum_des
24. mostrar “Promedio total: ” promtotal
25. mostrar “Promedio aprobadas: ” promaprob
26. mostrar “Promedio desaprobadas: ” promdes
27. fin notas
1. algoritmo naturales
2. var pares = 0, impares = 0, positivos = 0, negativos =
0, I, numero: entero
3. inicio
4. desde I = 1 hasta 100
5. mostrar “Ingrese un numero entero: ”
6. leer numero
7. si numero mod 2 == 0 entonces
8. pares = pares + 1
9. sino
10. impares = impares + 1
11. fin si
12. si numero > 0 entonces
13. positivos = positivos + 1
14. sino
15. negativos = negativos + 1
16. fin si
17. fin desde
18. mostrar “Pares: ” pares
19. mostrar “Impares : ” impares
20. mostrar “Positivos: ” positivos
21. mostrar “Negativos: ” negativos
22.fin naturales
1. algoritmo sumayprod
2. var suma, producto, I: entero
3. inicio
4. suma = 0
5. producto = 1
6. I = 20
7. mientras I <= 400 hacer
8. suma = suma + I
9. producto = producto * I
10. I = I + 2
11. fin mientras
12. mostrar “Suma: ” suma
13. mostrar “Producto: ” producto
14.fin sumayprod
Ejercicios Propuestos
1) Hacer un programa que al ingresar un número de Amstrong escriba si es o no un
número de Amstrong, si no es, indique que vuelva a intentar.
2) Construya un algoritmo que reciba como entrada dos valores: a y b, donde a < b.
Este algoritmo debe generar como salida los múltiplos de a, que son menores que
b.
3) Construya un algoritmo que reciba como entrada varios montos de depósito y
despliegue la suma de ellos. Considere que un valor negativo, significa que no hay
más datos y no debe ser considerado como dato válido.
4) Construya un algoritmo que reciba como entrada una secuencia de valores
numéricos y genere como salida la suma de los valores pares y la multiplicación de
los impares. Considere que un valor negativo significa que no hay más datos y no
debe ser considerado como dato válido.
5) Construya un algoritmo que reciba como entrada una secuencia de valores de
temperaturas y genere como salida el total de veces que la temperatura fue 0±.
Considere que un valor de temperatura negativo significa que no hay más datos y
no debe ser considerado como válido.
6) Construya un algoritmo que reciba como entrada una secuencia de valores de
temperaturas y genere como salida el total de veces que se registró una
temperatura menor que 0±, el total de veces que fue 0± y el total de veces que fue
mayor que 0±. Considere que una temperatura con valor 99± ó (°99)± es una
temperatura no válida e indica el término de los datos.
7) Construya un algoritmo que genere como salida los términos de la siguiente serie:
2; 5; 7; 10; 12; 15; 17; : : : ; 1800
8) Los n superamigos del “Salón de la Justicia" lograron obtener un aumento de
sueldo en el último mes. Este aumento de sueldo se determinó por niveles, de
acuerdo a la siguiente tabla:
nivel sueldo %aumento
A 0 - 1000000 8
B 1000001 – 6
3000000
C 3000001 – 4
6000000
D > 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.
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!
Volumen 3: Complementos II
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
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.
Ejercicios Propuestos
1) Escribir una función salario que calcule el salario de un trabajador. Esta función
recibe como parámetros el número de horas trabajadas y el salario por hora.
Las horas extras serán calculadas con un salario/hora 1,5 veces mayor al salario/
hora establecida. Se consideran horas extras las trabajadas por encima de las 40
horas.
Presente el algoritmo para calcular y mostrar el salario de 50 empleados usando la
función salario.
2) Escribir una función que convierta una temperatura dada en grados Celsius a grados
Fahrenheit.
La fórmula de conversión es:
F = (9/5) * C + 32
5) Escribir un algoritmo que permita ingresar dos números enteros y calcule las 4
operaciones básicas suma, resta, multiplicación y división, además de calcular la
potencia. Cada una de las operaciones deben implementarse como una función. El
algoritmo debe mostrar los números y los resultados.
8) Diseñar un algoritmo que lea las longitudes de los tres lados de un triángulo
(L1,L2,L3) y determine el tipo de triángulo al que corresponde.
Suponga que A detona el mayor de los tres lados y B y C corresponden a los otros
dos lados, entonces:
Si A >= B + C No se trata de un triángulo
Si A =B+C Es un triángulo rectángulo
Si A >B+C Es un triángulo obtusángulo
Si A <B+C Es un triángulo acutángulo
Desarrolle funciones para cada tipo de triángulo, que tomen como parámetros de
entrada los lados del triángulo y devuelvan un valor booleano si el triángulo
pertenece o no a ese tipo.
inicio
si (n = 1)
entonces
escribir “listo”
sino
escribir “vuelta”
listar(n-1)
fin si
fin listar
Algoritmo demo
inicio
listar(4)
fin
11) Escribir un procedimiento recursivo que tome como entrada un número entero y
escriba el número invertido.
12) Escribir un algoritmo que llame a una función recursiva para encontrar la suma de
los enteros pares hasta N.
13) Escribir una función recursiva que permita multiplicar dos enteros m y n por medio
de sumas sucesivas.
15) Escribir una función que dado el entero positivo x devuelva verdadero si y sólo si x
es una potencia de 2.
Resuelva el problema usando:
a) Una función recursiva.
b) Una función iterativa.
16) Los números de Fibonnacci son una secuencia de números, donde cada término de
la secuencia se define como:
F (1)= F (2)=1 para n=1 y n=2
F (n)= F (n-1) + F (n-2) para n > 2
Por tanto,
F(3) = F(1) + F(2) = 1 + 1 = 2
F(4) = F(3) + F(2) = 2 + 1 = 3
F(5) = F(4) + 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.
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
9. inicio
10. i = 1
11. j = 1
12. k = 1
13. mientras (i <= M) && (j <= N) hacer
14. si A[i] <= B[j]
15. entonces
16. C[k] = A[i]
17. i = i + 1
18. sino
19. C[k] = B[j]
20. j = j + 1
21. fin si
22. k = k + 1
23. fin mientras
1. Algoritmo Suma
2. var
3. M = 10: entero
4. N = 8: entero
5. tabla: arreglo[M,N] de entero
6. SP, SN, i, j:entero
7. inicio
8. { leer elementos de la tabla}
9. escribir “Introducir elementos de la tabla”
10. SP = 0
11. SN = 0
12. desde i = 1 hasta M
13. desde j = 1 hasta N
14. escribir “Introducir elemento (“ i “,” j “)”
15. leer tabla(i,j)
16. si tabla(i,j) > 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
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
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.
a) x = 0
PARA i = 0 HASTA 9 CON INCREMENTO DE 1
x = x + a(i)
FIN_PARA
b) 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.
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.
3) B = 3 mod 2 div 3
B = 1 div 3
B=0
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
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
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
Fin
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
Algoritmo div_matriz
Var
A: array [1..M,1..N] de real
Suma: real
Inicio
Pedir_datos (a)
Sumar (a,suma)
Escribir (a)
Fin