Documente Academic
Documente Profesional
Documente Cultură
PROGRAMACIÓN I
UDC003 Parte II
Módulo 1: Modularización
Métodos y parámetros…..……………….............................................……………. 06
Introducción …………………………………………………………………………………………………… 07
1.01 Modularización …….……….………………………………………………………………................. 08
1.01.01 Ventajas de la modularización …………………………………………................... 08
Actividad 1 …………………………………………………………………………………………………….. 19
Banco de Ejercicios 1 ……………………..………………………………………………………………… 20
Autoevaluación 1 …………………………………………………………………………………………….. 23
Actividad 2 …………………………………………………………………………………………………….. 31
Página 4
Fundamentos de Programación I
Actividad 3 …………………………………………………………………………………………………….. 58
Banco de Ejercicios 3 ……………………………………………………………………………………….. 59
Autoevaluación 3 ……………………………………………………………………………………………. 61
Referencias ………………………………………………………………………………. 64
Página 5
1 MODULARIZACIÓN:
MÉTODOS Y PARÁMETROS
1. Analizar un problema que puede ser resuelto con un algoritmo y descomponerlo en problemas
más específicos.
2. Formular algoritmos usando métodos para resolver los sub-problemas específicos resultantes de
la descomposición de un problema general.
3. Explicar las técnicas necesarias para declarar e invocar métodos.
4. Introducir nociones básicas acerca del ámbito de una variable en un método.
CONTENIDO
Introducción
1.1 Modularización
1.01.1 Ventajas de la modularización
1.01.2 Ejemplo de un algoritmo modularizado
1.2 Métodos
1.02.1 Métodos y Lenguajes de Programación
1.02.2 Declaración de un método
1.02.3 El cuerpo de un método
1.02.04 Invocación de un método
1.02.5 Almacenamiento en memoria de los argumentos
Página 6
Fundamentos de Programación I
I NT RODUCC IÓ N
La experiencia ha demostrado que la mejor manera de desarrollar y mantener (brindar soporte y
garantizar el acceso a actualizaciones específicas) un sistema informático extenso (programa), es
construirlo mediante la integración de componentes simples y pequeños. El término genérico utilizado
dentro del contexto de PROGRAMACIÓN para designar a cada una de estas partes o componentes es
módulo y el proceso de dividir un programa en diferentes módulos se denomina modularización.
Por lo que, el proceso de modularización es una parte trascendental dentro del diseño de la solución a
un problema mediante un programa de computadora, debido a que ésta permite al desarrollador
generar un programa con una estructura apropiada, que sea fácil de adaptar y mantener, además de
entendible y eficiente en cuanto a su ejecución (Deitel y Deitel, 2012).
Página 7
Fundamentos de Programación I
1.01 MODULARIZACIÓN.
Por lo que, modularizar un programa hace que el desarrollo de dicho programa sea más manejable,
mediante la construcción del mismo usando segmentos mucho más pequeños y simples (Fig. 1), un hecho
que a la vez facilita la corrección de errores y el mantenimiento del mismo.
Fig. 1 Modularización.
Un principio básico que debe aplicarse y que facilita la modularización de un programa y por ende la
reutilización de código, es que todo método debe limitarse a ejecutar una sola tarea claramente
definida2, debido a que un método que ejecuta una sola tarea es más fácil de probar y depurar que
uno que ejecuta muchas tareas.
2 Este es uno de los principios básicos de la filosofía de desarrollo del sistema operativo U NIX (do one thing and do it well).
Página 8
Fundamentos de Programación I
Pero ésta idea de utilizar métodos para resolver problemas no debería resultarnos para nada
compleja, debido a que muy probablemente nos encontremos altamente familiarizados de forma
inconsciente con el uso de métodos en nuestra vida cotidiana y mientras desarrollamos determinadas
tareas para nosotros habituales sin siquiera habernos percatado de ello. Por ejemplo, cuando escribimos
un texto en la pantalla del computador o cuando calculamos la raíz cuadrada de un número, de hecho,
estamos empleando métodos predefinidos en una librería específica del lenguaje de programación con
el cual la aplicación que estamos utilizando fue desarrollada.
En el siguiente enlace se encuentra disponible un video que presenta una explicación básica de un
ejemplo de modularización aplicado a la vida real que esperamos le sea de gran utilidad.
Algoritmo
Algoritmo numero_mayor
Escribir(“Ingrese 3 números: “)
Leer(a, b, c)
mayor = max(a, b, c)
Escribir(“El número mayor es “, mayor)
Fin Algoritmo
Método
Numero max (Numero num1, Numero num2, Numero num3)
num_max = num1
Si num2 > num_max Entonces
Retornar num_max
Fin Metodo
Página 9
Fundamentos de Programación I
1.02 MÉTODOS.
Sin embargo, un desarrollador puede escribir sus propios métodos según lo requiera el procedimiento
diseñado para la solución del problema. Por lo tanto y desde ésta perspectiva, un programa de
computadora se convierte en una combinación coherente de métodos tanto predefinidos en una librería
como desarrollados por el programador (Gómez y Fernández, 2013).
A continuación, se detalla cada uno de los componentes que intervienen en la declaración de un método.
• Tipo de dato de retorno: Indica el tipo de dato que retorna o da como resultado el método y que será
utilizado por el código en el que fue invocado. Por ejemplo, el tipo de retorno puede indicar que el
resultado del método es un número entero, un número decimal, una cadena de texto, etc. Cabe aclarar
que, un método puede retornar sólo un o ningún valor. El no retornar ningún valor, implica que el
método se limita a cumplir con una tarea específica sin que haya necesidad de que retorne un valor en
específico, por lo que en éste caso, obviamente, no es necesario especificar el tipo de valor
Página 10
Fundamentos de Programación I
de retorno. Por ejemplo, tomando como referencia al algoritmo planteado anteriormente en la Fig.
2, el tipo de retorno del método max indica que devolverá un valor numérico, posiblemente
incluyendo una parte decimal.
Algoritmo
Algoritmo numero_mayor
Escribir(“Ingrese 3 números: “)
Leer(a, b, c)
mayor = max(a, b, c)
Método
Numero max (Numero num1, Numero num2, Numero num3)
num_max = num1
Si num2 > num_max Entonces
Retornar num_max
Fin Metodo
• Nombre del método: Especifica el nombre que se utilizará para llamar o invocar al método que se
está declarando, motivo por el que, es extremadamente importante que el nombre escogido sea
significativo, es decir, que exprese claramente la tarea que cumple. Este principio se aplica
también a los nombres de variables y, en general, a todos los nombres que defina el programador
dentro de su código. Si es difícil encontrar un nombre conciso que exprese claramente la
funcionalidad de un método, muy probablemente esto podría significar que dicho método intenta
ejecutar demasiadas tareas y que, por lo tanto, se debe pensar en fragmentar el método en partes
más pequeñas que cumplan funciones específicas y fáciles de definir.
Para definir el nombre de un método es factible utilizar letras minúsculas y/o MAYÚSCULAS,
números y el guion bajo (_). Por otra parte, no se permite utilizar caracteres especiales como
vocales tildadas, la ñ, el guion medio (-), llaves, corchetes, entre otros, así como no es permitido
empezar el nombre de un método con un número.
• Lista de parámetros: A continuación del nombre del método se incluye la lista de parámetros
delimitada por paréntesis. Esta lista puede contener uno o más parámetros separados por comas o
simplemente puede no contener parámetros, según lo requiera el diseño del método. La lista de
parámetros consiste en información adicional que se le proporciona al método en el momento de su
Página 11
Fundamentos de Programación I
invocación, en donde, cada parámetro con su tipo de dato correspondiente es suministrado como
una variable que puede ser referenciada y utilizada en el cuerpo del método.
Si la lista de parámetros está vacía, significa que el método declarado no requiere ninguna
información adicional para ejecutar su tarea. En el caso específico del algoritmo presentado en la
Fig. 2 la lista de parámetros del método max está conformada por tres variables numéricas (que
posiblemente incluirán una parte decimal) llamadas num1, num2 y num3.
Algoritmo
Algoritmo numero_mayor
Escribir(“Ingrese 3 números: “)
Leer(a, b, c)
mayor = max(a, b, c)
Método
Numero max (Numero num1, Numero num2, Numero num3)
num_max = num1
Si num2 > num_max Entonces
Retornar num_max
Fin Metodo
Página 12
Fundamentos de Programación I
A fin de aclarar este concepto, retomamos la Fig. 2, en donde claramente podemos observar la tarea
específica que cumple el método max dentro del algoritmo (encontrar el mayor de tres números) y como
las operaciones que se ejecutan dentro del mismo son únicamente conocidas por el método.
Algoritmo
Algoritmo numero_mayor
Escribir(“Ingrese 3 números: “)
Leer(a, b, c)
mayor = max(a, b, c)
Escribir(“El número mayor es “, mayor)
Fin Algoritmo
Método
Numero max (Numero num1, Numero num2, Numero num3) Encabezado
num_max = num1
Si num2 > num_max Entonces
Ejemplo de la vida real: Para ilustrar el concepto de método tomaremos como ejemplo una práctica
cotidiana de la vida real, como es el proceso de aceleración de un vehículo. La forma de invocar este
método sería ejerciendo presión sobre el pedal de aceleración. Un ejemplo de parámetro en este caso,
sería la cantidad de aceleración que se requiere, información adicional que es proporcionada por la
persona que presiona el acelerador, dependiendo de si lo presiona sólo ligeramente o con fuerza.
Página 13
Fundamentos de Programación I
Algoritmo
Algoritmo numero_mayor
Escribir(“Ingrese 3 números: “)
Leer(a, b, c)
mayor = max(a, b, c) Invocación del método
Escribir(“El número mayor es “, mayor)
Fin Algoritmo
Método
Numero max (Numero num1, Numero num2, Numero num3)
num_max = num1
Si num2 > num_max Entonces
Ejemplo de la vida real: Una analogía tomada de la vida real para esta
situación sería por ejemplo, la gestión jerárquica del trabajo dentro de
una empresa manufacturera. En éste contexto, el jefe departamental (en
programación representaría el método que invoca) solicita a un obrero (el
método que es invocado) realizar una tarea e informar su resultado luego
de que la haya terminado (retorno). El jefe no necesita saber la forma
en que el obrero ejecutó la tarea asignada, ya que el obrero pudo
haber llamado por ejemplo a otros obreros (invocar otros métodos) sin
que el jefe se haya enterado.
Igualmente, dentro del contexto de PROGRAMACIÓN, existe una relación jerárquica entre los diferentes
métodos que componen un programa, de tal forma que el programa divide sus tareas entre varios
métodos, en donde, cada método se encarga de realizar subtareas y de sus detalles de implementación
propios.
Página 14
Fundamentos de Programación I
Es sumamente transcendental que el orden, el número y el tipo de dato de los valores o variables
proporcionados como argumentos en la invocación de un método, deban corresponder exactamente
a la lista de parámetros en la declaración del método.
Para ver un resumen de lo hasta ahora analizado, le recomendamos visitar el siguiente enlace.
Página 15
Fundamentos de Programación I
Por ejemplo, las variables parámetro del método max (Fig. 2) se crean en memoria en el momento en que
max es invocado, y se borrarán luego de que la última instrucción del método (Retornar num_max) se haya
ejecutado. Lo mismo ocurrirá con las variables declaradas en el cuerpo del método (p.e., num_max).
Algoritmo
Algoritmo numero_mayor
Escribir(“Ingrese 3 números: “)
Leer(a, b, c)
mayor = max(a, b, c) Creación en memoria de las
variables
Escribir(“El número mayor es “, mayor)
Fin Algoritmo
Método
Numero max (Numero num1, Numero num2, Numero num3)
num_max = num1
Una vez que la ejecución del método max haya terminado, el valor almacenado en la variable num_max
se retorna y se almacena en la variable mayor del algoritmo principal. La ejecución del algoritmo
principal continúa en la instrucción subsiguiente a la invocación del método max, la cual se encarga de
mostrar el valor de la variable mayor.
Página 16
Fundamentos de Programación I
Algoritmo
Algoritmo numero_mayor
Escribir(“Ingrese 3 números: “)
Leer(a, b, c)
mayor = max(a, b, c) Creación en memoria de las
variables.
Escribir(“El número mayor es “, mayor)
Fin Algoritmo
Método
Numero max (Numero num1, Numero num2, Numero num3)
La Fig. 4 ilustra claramente que las variables locales del algoritmo principal (a, b y c) de la Fig. 2
corresponden a espacios en memoria distintos con respecto a las variables locales del método max (num1,
num2 y num3).
Página 17
Fundamentos de Programación I
Por lo tanto, una forma simple de comunicación entre métodos consiste en utilizar variables globales, de
tal forma que cuando un método quiere comunicar un valor a otro u otros métodos, simplemente asigna
un valor específico a la variable global correspondiente, de tal forma que cuando un método acceda a
la variable global, le es factible leer el valor asignado por el otro método. A pesar de esta simplicidad,
se recomienda evitar el uso de variables globales siempre que sea posible, debido a que su
inapropiada utilización suelen conducir a errores sutiles de lógica, los cuales son muy complicados de
detectar y posteriormente corregir.
Página 18
Fundamentos de Programación I
ACTIVIDAD1
Siguiendo con este proceso de enseñanza, lo invitamos a revisar el siguiente recurso bibliográfico
acompañado de un banco de ejercicios y una actividad lúdica como parte de las actividades
programadas en ésta sección. Sección que busca profundizar tanto en temas como en conceptos que
podrían ser de su interés y que le serán de gran utilidad mientras se divierte y aprende, dentro de éste
proceso de transferencia del conocimiento.
El recurso bibliográfico (lectura 1), al igual que el banco de ejercicios 1, los puede encontrar
claramente identificados en la sección de lecturas y en la sección de banco de ejercicios respectivamente.
2. Banco de Ejercicios 1: Para todos los ejercicios propuestos, desarrollar un algoritmo para la
solución y expresarlo en pseudocódigo y diagrama de flujo. Además realizar la respectiva
prueba de escritorio.
Página 19
FUNDAMENTOS DE
PROGRAMACIÓN I
Parte II
BANCO DE EJERCICIOS 1
Para todos los ejercicios propuestos, desarrollar un algoritmo para la solución y expresarlo en
pseudocódigo y diagrama de flujo. Además realizar la respectiva prueba de escritorio.
Ejemplo:
Entrada: "3, 4, 11, 15, 7, 6"
Salida: La suma de los números primos es 3 + 11 + 7 = 2
2. Frase Capitalizada
Escribir una función que permita ingresar una cadena. Dicha función recibirá como parámetro una
frase cualquiera y retornará la misma frase "Capitalizada", es decir, la misma frase en donde
cada palabra comenzará con una letra mayúscula. Para hacer la capitalización de las palabras
deberá escribir una función adicional que reciba una palabra como entrada y devuelva la palabra
capitalizada.
Página 20
Fundamentos de Programación I
Ejemplo:
Entrada: "Este es un ejemplo ejercicio de capitalización de frases"
Salida: "Este Es Un Ejercicio De Capitalización De Frases".
4. Número perfecto
Escriba un programa que lea un número entero positivo n y muestre en pantalla si dicho número es o
no perfecto. Utilice 2 funciones para resolver el presente ejercicio, la primera denominada
numeroPerfecto, para visualizar en pantalla si el número es o no perfecto y la segunda,
denominada esDivisor para indicar si el número es o no divisor de otro número. Esta última deberá
ser usada dentro de la primera. Mostrar la salida tal y como se ve en el ejemplo.
Ejemplo 1
Entrada: 6
Salida: El número 6 es un número perfecto debido a que la suma de sus divisores (1, 2,
3) es igual a 6.
Ejemplo 2
Entrada: 8
Salida: El número 8 no es un número perfecto.
Recuerde que, un número perfecto es un entero positivo que es igual a la suma de todos los enteros
positivos (excluido él mismo número) que son divisores del número. El primer número perfecto es 6,
ya que los divisores de 6 son 1, 2, 3 y 1 + 2 + 3 = 6.
Página 21
Fundamentos de Programación I
5. Serie de Fibonacci
Escribir una función que permita al usuario ingresar un número n. Para dicho número elabore un
algoritmo que muestre los términos de la serie de Fibonacci que sean menores al número ingresado.
Ejemplo:
Entrada: 35
Salida: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.
Ejemplo
Entrada: “Hola Mundo”
Salida: Hola: 2 vocales y 2 consonantes
Mundo: 2 vocales y 3 consonantes
Página 22
AUT O E V A L U A C I ÓF N 1
u
n
d
a
m
e
n
t
o
s
d
e
P
r
o
g
r
a
m
Debes leer y comprender el Módulo 4 ubicado en la Unidad 4a para poder responder a la
c
Autoevaluación 4 del curso donde encontrarás un cuestionario conformado
i por 10 Preguntas
cerradas de elección única (Dicotómicas) o de elección múltiple. óCada pregunta consta de un
n
enunciado y de 2 o más alternativas de respuesta, así que lea cuidadosamente el enunciado y
I
seleccione la o las alternativas que corresponden a la respuesta correcta.
U
2 ARREGLOS Y
MATRICES:
ESTRUCTURAS DE DATOS
CONTENIDO
Introducción
2.1 Arreglos
2.01.1 Esquema de un arreglo de datos en memoria RAM
2.01.2 Componentes de un arreglo de datos
2.01.3 Arreglos en PSeInt
2.2 Matrices
2.02.1 Componentes de una matriz
2.02.2 Matrices en PSeInt
INTRODUCCIÓN
En el presente módulo nos centraremos a estudiar las denominadas Estructuras de Datos, las cuales
hacen referencia a un conjunto de datos que son del mismo tipo y poseen el mismo nombre, además que
pueden ser caracterizados por su organización y por las operaciones que sobre ellas se definen.
Página 27
Fundamentos de Programación I
2.01 ARREGLOS.
El segundo concepto involucrado es el llamado índice, el cual permite identificar de manera única a un
elemento dentro el arreglo, es decir, cada elemento del arreglo tiene asociado un índice. Se debe tener
muy en cuenta que el índice de un arreglo podría comenzar en cero o en uno, dependiendo del lenguaje
de programación que se esté utilizando para la codificación (por ejemplo, en C++ y Java comienza en
cero).
Página 28
Fundamentos de Programación I
La Fig. 6 muestra un arreglo de dimensión 8 cuyo primer elemento tiene el índice cero y la flecha apunta
al elemento de índice 3. Si el lenguaje de programación utilizado para codificar hace referencia al
primer elemento con el índice cero y la dimensión del arreglo es N, el último elemento es el elemento N-
1. Tenga en cuenta que independientemente del lenguaje de programación la dimensión no varía (es
decir, siempre es igual al número total de elementos).
A pesar de que los arreglos en PSeInt pueden comenzar desde cero o uno, (todo depende de cómo se
configure el programa) se recomienda sea desde 0, debido a que muchos de los lenguajes de
programación trabajan con arreglos en base 0, cuyos elementos válidos van desde 0 hasta N-1 para un
tamaño de arreglo igual a N, lo que permitiría a futuro, una rápida familiarización con respecto al uso
de arreglos en múltiples leguajes de programación.
Con el objetivo de profundizar lo hasta ahora analizado, en el siguiente enlace podrá encontrar un video en
donde se realiza la declaración de un arreglo que permite almacenar un conjunto de datos utilizando PSeInt,
mismo que esperamos le sea de gran utilidad y le permita aclarar cualquiera de sus dudas.
2.02 MATRICES.
Si una matriz tiene m filas y n columnas, decimos que la matriz es de orden o tamaño m x n. Por
ejemplo, en la Fig. 7 se muestra una matriz de 3 filas x 4 columnas.
Fila 1
Fila 2
Página 29
Fundamentos de Programación I
De manera similar que con los arreglos, para referenciar o identificar un elemento de la matriz, se
deben de especificar dos subíndices: el primero indica la fila y el segundo la columna. Por ejemplo, en
la Fig. 8 se identifican los elementos de la siguiente manera:
Con el objetivo de profundizar lo hasta ahora analizado, en el siguiente enlace podrá encontrar un
video en donde se retoma y razona acerca del uso de matrices utilizando la herramienta PSeInt, mismo
que esperamos le sea de gran utilidad y le permita aclarar cualquiera de sus posibles dudas.
Página 30
Fundamentos de Programación I
ACTIVIDAD2
Siguiendo con este proceso de enseñanza, lo invitamos a revisar el siguiente recurso bibliográfico
acompañado de un banco de ejercicios y el subsecuente material audiovisual, como parte de las
actividades programadas en éste punto. Actividades que le permitirán profundizar tanto en temas como
en conceptos que podrían ser de su interés y que le serán de gran utilidad dentro de este proceso de
aprendizaje.
El material audiovisual está conformado por un conjunto de 3 video ejemplos, en donde, cada video
aborda una temática diferente y específica. Durante la reproducción de los mismos, está en total
libertad de pausar, retroceder o simplemente proseguir con la reproducción del material audiovisual, lo
importante es que cada video le ayude a despejar cualquier inquietud en cuanto a la temática
analizada hasta el momento.
2. Banco de Ejercicios 2: Para todos los ejercicios propuestos, desarrollar un algoritmo para la solución
y expresarlo en pseudocódigo y diagrama de flujo. Además realizar la respectiva prueba de
escritorio.
3. Video Ejemplo 1 - Creación de dos arreglos utilizando PSeInt, el primero permitirá almacenar dos
nombres y el segundo permitirá almacenar 3 números:
https://www.youtube.com/embed/lvcZ2pDR_Yg
Página 31
Fundamentos de Programación I
4. Video Ejemplo 2 - Creación de dos arreglos utilizando PSeInt, el primero permitirá almacenará n
nombres de personas y el segundo permitirá almacenar n números:
https://www.youtube.com/embed/j5GRFTjq2O4
5. Video Ejemplo 3 - Creación de una matriz de n filas x n columnas con números que el usuario desee,
utilizando PSeint y posteriormente sumar todos los números de la primera columna:
https://www.youtube.com/embed/CCKwAEl82eU
Página 32
FUNDAMENTOS DE
PROGRAMACIÓN I
Parte II
BANCO DE EJERCICIOS 2
Para todos los ejercicios propuestos, desarrollar un algoritmo para la solución y expresarlo en
pseudocódigo y diagrama de flujo. Además realizar la respectiva prueba de escritorio.
Consideraciones:
• Tras la ejecución de cada una de las acciones del menú, éste deberá de reaparecer en
pantalla, a menos que la opción seleccionada sea la número 9.
Página 33
Fundamentos de Programación I
• Las opciones 4, 6 y 8 del menú pueden proporcionar resultados distintos en función del orden de
los operandos, por lo que, si se selecciona cualquiera de éstas opciones, deberá mostrarse un
nuevo menú que permita seleccionar el orden de los operandos. Por ejemplo, la opción 4
mostrará el siguiente menú:
• La opción 8 del menú principal conducirá también a un submenú para que el usuario decida
sobre cuál de los dos vectores se aplica el cálculo de longitud.
Tenga en cuenta que el programa deberá de contemplar y controlar toda posible situación
excepcional: divisiones para cero, raíces con argumento negativo, etcétera.
En caso de que necesite recordar algunos conceptos referentes a los cálculos a realizar, lo invitamos
a revisar la siguiente tabla:
Operación Cálculo
Suma:
(x1, y1, z1) + (x2, y2, z2) (x1+x2, y1+y2, z1+z2)
Diferencia:
(x1, y1, z1) - (x2, y2, z2) (x1-x2, y1-y2, z1-z2)
Producto escalar:
(x1, y1, z1) . (x2, y2, z2) x1x2 + y1y2 + z1z2
Producto vectorial:
(x1, y1, z1) x (x2, y2, z2) y1z2 - z1y2, z1x2-x1z2, x1y2-y1x2
Angulo entre
(x1, y1, z1) , (x2, y2, z2)
Longitud de
(x, y, z)
Nota: La función arco coseno se encuentra disponible en el módulo math y su identificador es acos.
Página 34
Fundamentos de Programación I
1 1 1 1 1
2 2 2 2 0
3 3 3 0 0
4 4 0 0 0
5 0 0 0 0
b. Diagonal 2
0 0 0 0 1
0 0 0 2 2
0 0 3 3 3
0 4 4 4 4
5 5 5 5 5
c. Diagonal 3
1 1
2 2
3
4 4
5 5
3. Ejercicios Prácticos
Con la ayuda de la herramienta PSeInt desarrollar el siguiente conjunto de ejercicios planteados:
a. Crear un arreglo llamado num que almacene los siguientes datos: 20, 14, 8, 0, 5, 19 y 24.
b. Crear un arreglo llamado num que almacene los siguientes datos: 20, 14, 8, 0, 5, 19 y 24,
posteriormente mostrar todos los datos con un sólo mensaje utilizando la estructura de repetición
PARA.
c. Crear un arreglo de 5 posiciones y llenarlo con los números que el usuario desee.
e. Crear un arreglo de n posiciones y llenarlo con los números que el usuario desee.
f. Crear dos arreglos uno que almacene 2 nombres y otro que almacene 3 números.
Página 35
Fundamentos de Programación I
i. Llenar un vector de 10 posiciones con números aleatorios entre 1 y 100 (utilizar la función Azar).
j. Llenar un vector con números enteros (números positivos y negativos) y posteriormente mostrar la
cantidad de números positivos que hay en dicho arreglo.
l. Crear una matriz 2x2 que almacene los siguientes valores: 10, 20, 30, 40.
m. Crear una matriz de n filas y n columnas, en donde le es permitido al usuario llenar la matriz
con los números que desee.
n. Crear una matriz n x n y llenarla con los números que el usuario desee. Sumar todos los números
que conformen la columna 1.
4. Ejercicios Complementarios
Deitel, P. J., & Deitel, H. M. (2012). Java: How to Program (9a ed.). Upper Saddle River, N.J: Prentice
Hall. – Ejercicios del Capítulo 7: Arrays and ArrayLists.
Página 36
Fundamentos de Programación I
AUTOEVALUACIÓN2
Debes leer y comprender el Módulo 4 ubicado en la Unidad 4 para poder responder a la Autoevaluación 4 del
curso donde encontrarás un cuestionario conformado por 10 Preguntas cerradas de elección única
(Dicotómicas) o de elección múltiple. Cada pregunta consta de un enunciado y de 2 o más alternativas de
respuesta, así que lea cuidadosamente el enunciado y seleccione la o las alternativas que corresponden a la
respuesta correcta.
3 BÚSQUEDAS Y
ORDENAMIENTOS:
EN ESTRUCTURAS DE DATOS
1. Introducir los conceptos más importantes relacionados con el ordenamiento y las búsquedas
básicas dentro de una estructura de datos.
2. Conocer los algoritmos de ordenamiento y búsquedas básicas basados en el intercambio de
elementos.
3. Analizar la eficiencia de los métodos de ordenamiento y búsqueda.
CONTENIDO
Introducción
3.1 Búsquedas
3.01.1 Porqué son importantes las búsquedas
3.01.2 Algoritmos de búsqueda
3.01.3 Análisis de los algoritmos de búsqueda
3.2 Ordenamientos
3.02.1 ¿Qué es ordenar?
3.02.02 Algoritmos de ordenamiento
3.02.03 Análisis de los métodos de ordenamiento
Página 42
Fundamentos de Programación I
INTRODUCCIÓN
Muchas actividades humanas requieren que en ellas, las diferentes colecciones de elementos utilizados se
ubiquen en un orden determinado, por ejemplo, las oficinas de correo y las empresas de mensajería
proceden a disponer en un orden en específico las cartas y los paquetes recibidos, este ordenamiento
suele estar definido de acuerdo a una serie de códigos postales, lo que permite un almacenamiento y
una posterior entrega eficiente tanto de sobres como de paquetes. De igual manera, los estudiantes en
una clase se ordenan por sus apellidos y nombres, permitiendo al docente buscar e identificar
rápidamente a un alumno en específico dentro de dicha lista, un criterio que de manera similar es
utilizado al momento de ordenar a los abonados del servicio telefónico dentro de un directorio; así como
este ejemplo, podemos encontrar incontables ejemplos más dentro de nuestra vida cotidiana, en donde,
sin siquiera habernos percatado, es inevitable que la información se encuentre ordenada en base a un
criterio. Por tal motivo, una de las tareas que más frecuentemente realizan las computadoras en el
procesamiento de datos es el ordenamiento y la búsqueda.
Considerando a los métodos de ordenamiento como la distribución de una serie de elementos en base a
una regla específica y a la búsqueda, como la localización de un elemento en específico dentro de un
conjunto, siendo en ambos casos, métodos o algoritmos desarrollados para ser ejecutados únicamente en
la memoria principal del computador.
Página 43
Fundamentos de Programación I
3.01 BÚSQUEDAS.
Esto es factible debido a que el diccionario se encuentra alfabéticamente ordenado, caso contrario,
habría que examinar cada una de las hojas, recorriendo cada una de las palabras que se hallarían en
cada hoja, hasta encontrar la palabra buscada. Esto sin duda conllevaría muchísimo más tiempo y
resultaría en una labor sumamente extenuante y casi interminable, tan solo por el hecho de que el
diccionario no está ordenado.
Tomando como referencia el par de ejemplos expuestos anteriormente y en base a la lógica aplicada
individualmente en cada caso, podemos mencionar que dentro del presente módulo se estudiarán dos
tipos de búsquedas. El primer caso (búsqueda en un diccionario ordenado) corresponde a una búsqueda
binaria y en el segundo caso (búsqueda en un diccionario desordenado) corresponde a una búsqueda
secuencial.
En esta sección se examinarán dos técnicas ampliamente utilizadas que permitirán realizar la búsqueda de
elementos almacenados en una estructura de datos localizada en la memoria principal del computador: la
primera, llamada búsqueda lineal o secuencial, que es la técnica más sencilla, y la segunda, denominada
búsqueda binaria o dicotómica, que en cambio corresponde a la técnica más eficiente.
Página 44
Fundamentos de Programación I
Este algoritmo de búsqueda secuencial compara cada elemento del arreglo con la clave de búsqueda,
pero debido a que el arreglo no está en un orden determinado, es probable que el elemento a buscar
pueda ser el primero, el último, cualquier otro elemento o simplemente no encontrarse presente dentro
de la estructura.
A continuación (Fig. 9) se describe el uso del algoritmo de búsqueda secuencial, dentro de un contexto
en el que se tiene un arreglo de 5 elementos, los cuales no disponen un orden específico y el valor
buscado es el elemento con valor igual a 10.
Pseudocódigo
Algoritmo busqueda_lineal
Dimension arreglo[10]
arreglo[0]=2
arreglo[1]=5
arreglo[2]=4
arreglo[3]=10
arreglo[4]=1
buscado=10
i=0
encontrado=Falso
Mientras encontrado == Falso y i<5 Hacer
Si arreglo[i]==buscado Entonces
encontrado=Verdader
o Fin Si posicion=i
i=i+1
Fin Mientras
Si encontrado == Verdadero Entonces
escribir "El elemento buscado se encuentra en la posición: ", posicion
Sino
escribir "El elemento buscado NO se encuentra en el vector"
Fin Si
FinAlgoritmo
Diagrama de Flujo
Página 45
Fundamentos de Programación I
Con la finalidad de ayudarlo a aclarar cualquier duda respecto a cómo funciona el algoritmo de
búsqueda lineal o secuencial, lo invitamos a observar el video disponible en el siguiente enlace.
Página 46
Fundamentos de Programación I
Por ejemplo, si la palabra comienza con la letra J y nos encontramos ubicados en la sección en donde se
encuentran localizadas el conjunto de palabras que empiezan con la letra L, necesitaremos regresar
algunas hojas, pero si por el contrario, nos encontrásemos ubicados en la sección en donde se encuentran
localizadas el conjunto de palabras que empiezan con la letra D, necesitaremos adelantar algunas
hojas. Este proceso es finito y culminará cuando se encuentre la palabra buscada o hasta que se
concluya que la palabra buscada no está en el diccionario.
Esto nos lleva a concluir dos aspectos importantes al momento de querer aplicar ésta técnica, el primero,
la lista debe encontrarse previamente ordenada (ascendente o descendente), y segundo, que es
necesario conocer el número de elementos que conforman la estructura de datos a fin de poder
aplicar efectivamente la técnica de búsqueda binaria.
A continuación se detallan los pasos necesarios para encontrar un elemento en un arreglo utilizando la
búsqueda binaria:
En seguida (Fig. 10) se describe el uso del algoritmo de búsqueda binaria, dentro de un contexto en el
que se tiene un arreglo de 5 elementos ordenados de manera ascendente, y el valor buscado es el
elemento con valor igual a13.
Pseudocódigo
Algoritmo busqueda_binaria
inicio=0
final =4
Dimension
vec[5] vec[0]=3
vec[1]=8
vec[2]=11
vec[3]=13
vec[4]=22
encontro=Falso
buscado = 13
Mientras (encontro==falso y inicio<=final) Hacer
mitad=trunc((inicio+final)/2)
Si buscado==vec[mitad] Entonces
encontro=Verdadero
Sino
Si buscado<vec[mitad] entonces
final=mitad-1
Sino
Fin Mientras
Página 47
Fundamentos de Programación I
Si encontró = Verdadero Entonces
Escribir "El valor buscado se encuentra en la posición: ", mitad
Sino
Escribir "El valor buscado no se encuentra"
Fin Si
FinAlgoritmo
Diagrama de Flujo
Con la finalidad de ayudarlo a aclarar cualquier duda respecto a cómo funciona el algoritmo de
búsqueda binaria, lo invitamos a observar el video disponible en el siguiente enlace.
Página 48
Fundamentos de Programación I
Página 49
Fundamentos de Programación I
3.02 ORDENAMIENTOS.
Los datos ordenados ofrecen la ventaja de que son mucho más fáciles de encontrar, lo que conlleva
menos operaciones y por lo tanto menos tiempo de búsqueda. Para ordenar los datos, existen una serie
de algoritmos que, dependiendo de la estrategia a utilizar, servirán en mayor o menor grado al
momento de organizar los datos, a estas estrategias de ordenamiento se las denomina algoritmos de
ordenamiento.
Entre las principales estrategias o algoritmos de ordenamiento tenemos: burbuja, inserción y selección,
en donde, dentro de este contexto, el que un algoritmo sea ingenioso significa que va a intentar ordenar
un conjunto desorganizado de datos haciendo uso del menor número de comparaciones posible.
1. Se toma el primer elemento del arreglo, como el primer elemento de lo que llamaremos el
arreglo ordenado.
2. Se toma el próximo número del arreglo y se compara con los elementos del arreglo ordenado,
hasta encontrar su posición.
3. Se repite el proceso para todos los elementos del arreglo.
A continuación (Fig. 11), se describe el uso del algoritmo de ordenamiento por inserción.
Página 50
Fundamentos de Programación I
Pseudocódigo
Proceso Ordenamiento_Insercion
n<-1;
Dimension Num[100];
Escribir "Introduce los números (de una cifra) que quieras
ordenar."; Escribir "Para terminar pulsa Enter.";
Repetir
Leer dato;
Num[n]<-dato;
n<-n+1;
Hasta Que dato=""
Para i<-2 Hasta n-2 Hacer
j<-i-1;
Mientras (j>=1) y Num[j]>Num[j+1] Hacer
temp<-Num[j+1]; Num[j+1]<-
Num[j];
Num[j]<-temp;
j<-j-1;
FinParaFinMientras
Para i<-1 Hasta n-2 Hacer
FinParaEscribir Num[i];
FinProceso
Diagrama de Flujo
Página 51
Fundamentos de Programación I
En seguida (Fig. 12) se presenta un ejemplo de ordenamiento por el método de inserción para un
arreglo desordenado de 5 elementos.
Con la finalidad de ayudarlo entender y a aclarar cualquier duda respecto a cómo funciona el algoritmo de
ordenamiento por inserción, lo invitamos a observar el video disponible en el siguiente enlace.
Por lo que, la estrategia utilizada por el algoritmo de ordenamiento por el método de la burbuja se
puede resumir en los siguientes pasos:
A continuación (Fig. 13), se describe el uso del algoritmo de ordenamiento por el método de la burbuja.
Página 52
Fundamentos de Programación I
Pseudocódigo
Proceso Ordenamiento_Burbuja
n<-1;
Dimension Num[100];
Escribir "Introduce los números (de una cifra) que quieras
ordenar."; Escribir "Para terminar pulsa Enter.";
Repetir
Leer dato;
Num[n]<-dato;
n<-n+1;
Hasta Que dato=""
Para i<-1 Hasta n-3 Hacer
Para j<-1 Hasta n-2-i Hacer
Si Num[j]>Num[j+1] Entonces
temp<-Num[j+1];
Num[j+1]<-Num[j];
FinSiNum[j]<-temp;
FinPara
FinPara
Para i<-1 Hasta n-2 Hacer
FinParaEscribir Num[i];
FinProceso
Diagrama de Flujo
Página 53
Fundamentos de Programación I
En seguida (Fig. 14) se presenta un ejemplo de ordenamiento por el método de la burbuja para un
arreglo desordenado de 6 elementos.
Con la finalidad de ayudarlo entender y a aclarar cualquier duda respecto a cómo funciona el
algoritmo de ordenamiento por el método de la burbuja, lo invitamos a observar el video disponible en
el siguiente enlace.
Es decir, la estrategia utilizada por el algoritmo de ordenamiento por el método de selección se basa en
una serie de iteraciones que intercambian el elemento más pequeño sucesivamente con el primer
elemento de la lista, A[0] en la primera pasada, por lo que, la estrategia utilizada por el algoritmo de
ordenamiento por el método de selección se puede resumir en los siguientes pasos:
Página 54
Fundamentos de Programación I
A continuación (Fig. 15), se describe el uso del algoritmo de ordenamiento por el método de selección.
Pseudocódigo
Proceso Ordenamiento_Seleccion
n<-1;
Dimension Num[100];
Escribir "Introduce los números (de una cifra) que quieras
ordenar."; Escribir "Para terminar pulsa Enter.";
Repetir
Leer dato;
Num[n]<-dato;
n<-n+1;
Hasta Que dato=""
Para i<-1 Hasta n-3 Hacer
pos_min<-i;
Para j<-i+1 Hasta n-2 Hacer
Si Num[j]<Num[pos_min] Entonces
pos_min<-j;
FinParaFinSi
temp<-Num[i];
Num[i]<-Num[pos_min];
FinParaNum[pos_min]<-temp;
Para i<-1 Hasta n-2 Hacer
FinParaEscribir Num[i];
FinProceso
Diagrama de Flujo
Página 55
Fundamentos de Programación I
En seguida (Fig. 16) se presenta un ejemplo de ordenamiento por el método de selección para un
arreglo desordenado de 5 elementos.
Página 56
Fundamentos de Programación I
Con la finalidad de ayudarlo entender y a aclarar cualquier duda respecto a cómo funciona el
algoritmo de ordenamiento por el método de selección, lo invitamos a observar el video disponible en el
siguiente enlace.
Sin embargo, no siempre es fácil efectuar la medición de estos parámetros, debido a que, puede no
disponerse de instrucciones que permitan medir el tiempo de ejecución de un algoritmo (aunque éste no
sea el caso en algunos lenguajes de programación), o que el número de instrucciones utilizadas para
implementar un determinado algoritmo se modifique (dependiendo del lenguaje y del propio estilo de
implementación del programador). Por esta razón, el mejor criterio para medir la eficiencia de un
algoritmo, es aislar una operación específica (considerada esencial) en el ordenamiento y contar el
número de veces que se ejecuta. Así, en el caso de los algoritmos de ordenamiento, es factible utilizar
como medida de eficiencia el número de comparaciones efectuadas, es decir, el algoritmo de
ordenamiento A será más eficiente que el B, si requiere de un menor número de comparaciones que el
algoritmo B al momento de ordenar un mismo arreglo de datos.
Página 57
Fundamentos de Programación I
ACTIVIDAD3
Siguiendo con este proceso de enseñanza, lo invitamos a revisar el siguiente recurso bibliográfico
acompañado de un banco de ejercicios y el subsecuente material audiovisual, como parte de las
actividades programadas en éste punto. Actividades que le permitirán profundizar tanto en temas como
en conceptos que podrían ser de su interés y que le serán de gran utilidad dentro de este proceso de
aprendizaje.
El recurso bibliográfico (lectura 3), al igual que el banco de ejercicios 3, los puede encontrar
claramente identificados en la sección de lecturas y en la sección de banco de ejercicios respectivamente.
El material audiovisual está conformado por un conjunto de 3 video ejemplos, en donde, cada video
aborda una temática diferente y específica. Durante la reproducción de los mismos, está en total
libertad de pausar, retroceder o simplemente proseguir con la reproducción del material audiovisual, lo
importante es que cada video le ayude a despejar cualquier inquietud en cuanto a la temática
analizada hasta el momento.
2. Banco de Ejercicios 3: Para todos los ejercicios propuestos, desarrollar un algoritmo para la solución
y expresarlo en pseudocódigo y diagrama de flujo. Además realizar la prueba de escritorio.
Página 58
FUNDAMENTOS DE
PROGRAMACIÓN I
Parte II
BANCO DE EJERCICIOS 3
Para todos los ejercicios propuestos, desarrollar un algoritmo para la solución y expresarlo en
pseudocódigo y diagrama de flujo. Además realizar la respectiva prueba de escritorio.
b. Proporcionado el siguiente conjunto de números 2; 21; 1; 91; 3; 18; 11; 27; 3; 2; 44; 55
indicar las pasadas que se deben realizar para encontrar el número 3, adicionalmente indicar
el número de comparaciones realizadas.
c. Proporcionado el siguiente conjunto 9; 11; 43; 51; 31; 12; 1; 7; 33; 2; 49; 55 indicar las
pasadas que se deben realizar para encontrar el número 55, adicionalmente indicar el número
de comparaciones realizadas.
e. Aplicar la búsqueda binaria sobre el siguiente conjunto de números -8; 4; 5; 9; 12; 18; 25; 40;
60 e indica las pasadas que se deben realizar para encontrar el número 40.
Página 59
Fundamentos de Programación I
Página 60
Fundamentos de Programación I
AUTOEVALUACIÓN3
Debes leer y comprender el Módulo 4 ubicado en la Unidad 4 para poder responder a la Autoevaluación 4 del
curso donde encontrarás un cuestionario conformado por 10 Preguntas cerradas de elección única
(Dicotómicas) o de elección múltiple. Cada pregunta consta de un enunciado y de 2 o más alternativas de
respuesta, así que lea cuidadosamente el enunciado y seleccione la o las alternativas que corresponden a la
respuesta correcta.
Fundamentos de Programación I
REFERENCIAS
• Arellano Pimentel, J. J., Nieva García, O. S., Solar González, R., & Arista López, G. (2012).
Software para la enseñanza-aprendizaje de algoritmos estructurados. Revista
Iberoamericana de Educación en Tecnología y Tecnología en Educación N°8, 23-33.
• Böhm, C., & Jacopini, G. (1966). Flow diagrams, Turing machines and languages with
only two formation rules. Communications of the ACM, 9(5), 366–371.
http://doi.org/10.1145/355592.365646
Página 64
Fundamentos de Programación I
• Deitel, P. J., & Deitel, H. M. (2012). Java: How to Program (9a ed.). Upper Saddle River,
N.J: Prentice Hall. Recuperado a partir de http://goo.gl/M3fc8
• Editorial Macro. (2001). Turbo Pascal 7.0 Paso a Paso. Lima, Perú: Editorial Macro.
• Madoz, M., Bertone, R., Naiouf, M., Lanzarini, L., Gladis, G., Russo, C., & Champredonde, R.
(2001). Algortimos, datos y Programas con aplicaciones en Pascal, Delphi y Visual Da Vinci.
Buenos Aires: Prentice Hall.
• RSI - Run Stone Iteractive. (s.f.). Recuperado el 10 de 04 de 2016, de Problem Solving with
Algorithms and Data Structures:
http://interactivepython.org/runestone/static/pythonds/Introduction/WhatIsComputerScienc
e.html
Página 65
Fundamentos de Programación I
Programador Universitario:
http://weblidi.info.unlp.edu.ar/catedras/ingreso/Material2016/IAI/GuiaIAI.pdf
Página 66