Manual Algoritmos 2018
Manual Algoritmos 2018
Manual Algoritmos 2018
Edición-2018
ALGORTIMOS
¿Qué es un algoritmo?
Es la secuencia de pasos (método) que nos permite resolver un problema determinado
Además, debe cumplir estas condiciones:
• Finito:
El algoritmo debe acabar tras un número finito de pasos. Es más, es casi
fundamental que sea en un número razonable de pasos.
• Definible: el algoritmo debe definirse de forma precisa para cada paso, es
decir, hay que evitar toda ambigüedad al definir cada paso. Puesto que el
lenguaje humano es impreciso, los algoritmos se expresan mediante un
lenguaje formal, ya sea matemático o de programación para un computador.
Esto significa que ejecutando 2 veces el mismo algoritmo con los mismos datos
de entrada debe darnos el mismo resultado.
• Efectivo: se entiende por esto que una persona sea capaz de realizar el
algoritmo de modo exacto por que se indica el orden de realización de cada
paso
También debe contar de las 3 partes siguientes:
• Entrada: el algoritmo tendrá cero o más entradas, es decir, cantidades dadas
antes de empezar el algoritmo. Estas cantidades pertenecen además a
conjuntos especificados de objetos. Por ejemplo, pueden ser cadenas de
caracteres, enteros, naturales, fraccionarios, etc. Se trata siempre de
cantidades representativas del mundo real expresadas de tal forma que sean
aptas para su interpretación por el computador.
• Proceso: Donde se describe la transformación de los datos de entrada en un
resultado válido.
• Salida: el algoritmo tiene una o más salidas, en relación con las entradas.
Algo de historia
Uno de los algoritmos más antiguos conocidos es el algoritmo del matemático
griego Euclides. El término algoritmo proviene del matemático Mohammed ibn Musa
al-Khowarizmi, matemático persa (actual Irán), que vivió aproximadamente entre los
años 780 y 850 d.C. (Siglo IX) El describió la realización de operaciones elementales
en el sistema de numeración decimal. De al-Khwarizmi se obtuvo la derivación
algoritmo.
ANÁLISIS DE PROBLEMAS
En nuestra vida cotidiana, cada que realizamos una actividad o tarea tomamos
decisiones, que en definitiva es la manera de resolver micro problemas, que en su
suma resuelven nuestros quehaceres diarios de manera inadvertida, es más, al
comienzo, por ejemplo de muy niños aprendemos a lavarnos los dientes y esta
actividad responde a una serie de tareas o actividades, que a medida que lo hemos
resuelto una primera vez, el hecho se vuelve repetitivo y cada vez vamos mejorando la
manera en como realizamos tal actividad y de igual manera ocurre para cualquier otra
actividad que realicemos por primera vez.
De acuerdo con Cairo, para solucionar un problema debemos seguir las 3 siguientes
etapas:
a) Análisis profundo del problema
b) Diseño y Construcción del algoritmo
c) Verificación del Algoritmo.
Y por lo general optamos por dividir el problema y resolverlo por partes, luego
juntamos esas partes en un todo integrado, bajo la técnica de diseño
descendente de arriba hacia abajo (diseño top-down)
1) Diagramas de Flujo
En ingles se le conoce como flowchart, y es una representación gráfica del
algoritmo. Los símbolos que emplean han sido normalizados por el ANSI
(American National Standards Institute) y son los siguientes:
2) Diagramas de Nassi-Shneiderman
Es un diagrama de flujo en base a cajas o bloques contiguos, donde se
omiten las flechas, de igual amanera estos diagramas se leen de arriba
hacia abajo. Los siguientes son los símbolos principales:
3) Pseudocódigo
O falso lenguaje, es una descripción de alto nivel compacta e informal del
principio operativo de un algoritmo que luego se traducirá en un programa
computacional. Normalmente, el pseudocódigo omite detalles que no son
esenciales para la comprensión humana del algoritmo. No existe una
sintaxis estándar para el pseudocódigo, pero nosotros utilizaremos las
siguientes convenciones:
Asignación
x y
Estructura secuencial
Sentencia1
Sentencia2
(.........)
Sentencian
Selección Simple
Si condición entonces
Sentencia(s)
Fin_si
Selección doble
Si condición entonces
Sentencia(s)1
Caso contrario
Sentencia(s)2
Fin_si
Selección múltiple
Si condición1 entonces
Sentencia(s)1
Caso contrario Si condición2 entonces
Sentencia(s)2
(.........)
Caso contrario
Sentencia(s)n
Fin_según
Referencias
Cairó Battistutti, O. (2005). Metodología de la Programación. Algoritmos, diagramas
de flujo y programas. México: Alfaomega.
Joyanes Aguilar, L. (2008). FUNDAMENTOS DE PROGRAMACIÓN. Algoritmos,
estructura de datos. Madrid. España: McGRAW-HILL/INTERAMERICANA
DE ESPAÑA, S. A. U.
López García, J. (2009). Algoritmos y Programación. Guía para docentes. Bogota,
Colombia: Fundación Gabriel Piedrahita Uribe.
Semana 02
Conceptos fundamentales
a) Tipos de datos
Empezaremos reconociendo los datos a procesar por un computador que se
clasifican en:
• Simples
• Estructurados
Datos numéricos
Dentro de los tipos de datos numéricos encontramos los números enteros y los
números reales. Los enteros son números que pueden estar precedidos del
signo + o y que no tienen parte decimal. Por ejemplo:
128 256 -2114 18580
Los reales son números que pueden estar precedidos del signo + o y que tienen
una parte decimal. Por ejemplo:
9.3 256.0 -71.568 16000.50
Datos alfanuméricos
Dentro de este tipo de datos encontramos los de tipo carácter (simple) y cadena
de caracteres (estructurado). Son datos cuyo contenido pueden ser letras del
abecedario (a,b,c,...,z; A. B, C, ….. , Z), dígitos (0, 1, 2 ..... 9) o símbolos
especiales (#, $, * ,* , %, /,..., etc.). Es necesario indicar que, si bien este tipo de
datos pueden contener números, no pueden ser utilizados para realizar
operaciones aritméticas.
Datos lógicos
Dentro de este tipo de datos encontramos los booleanos. Son datos que sólo
pueden tomar dos valores: verdadero (true) o falso (false).
Identificadores
Los datos que se procesan en un lenguaje de programación, sean simples o
estructurados, tienen un nombre que permite su identificación, es por ello que se
denominan identificadores y se forman de acuerdo a ciertas reglas (las mismas
pueden variar dependiendo del lenguaje de programación utilizado):
El primer carácter que forma un identificador debe ser una letra (a, b, c,…, z, A,
B, C,… Z), el subrayado (_) o e símbolo dólar ($). Los demás caracteres pueden
ser letras (a, b, c...,z, A, B, C,….Z), dígitos (0,1,2,...,9). La longitud del
identificador varía en cada lenguaje de programación.
Por ejemplo: SUMA Nota_01 color
Constantes
Las constantes son datos que no cambian durante la ejecución de un programa.
Para nombrar las constantes utilizamos los identificadores que mencionamos
anteriormente.
Existen tantos tipos de constantes como tipos de datos, por lo tanto, puede
haber constantes de tipo entero, real, carácter, cadena de caracteres, etc.
Es muy importante que los nombres de las constantes sean representativos de la
tarea que desempeñan dentro del programa de tal manera que no tenemos que
adivinar que significan.
Por ejemplo: PI = 3.141516 radio = 20
Variables
Las variables son objetos que pueden cambiar su valor durante la ejecución de
un programa. Para nombrar las variables utilizaremos los identificadores que
hemos explicado con anterioridad. Al igual que las constantes, pueden existir
tantos tipos de variables como tipos de datos. De igual manera el nombre de las
variables que incorporamos e un programa deben ser representativas de la tarea
que desempeñan dentro del programa de tal manera que no tenemos que
adivinar que significan.
Por ejemplo: Suma radio nota_01
Operaciones aritméticas
Para poder realizar operaciones aritméticas empleamos los operadores
aritméticos entre operandos (números, constantes o variables). El resultado de
una operación aritmética será un número.
Los operadores aritméticos básicos son: potencia (^) 1, multiplicación (*), división
(/), suma (+), resta (-).
Las expresiones aritméticas se evalúan de izquierda a derecha teniendo en
cuenta la jerarquía de los operadores aritméticos, los operadores de igual nivel
también su evaluación es de izquierda a derecha, si deseamos alterar el orden
de cálculo utilizamos los paréntesis ejecutándose primero los paréntesis más
interiores.
Jerarquía de los operadores aritméticos
Jerarquía Operador Operación
Mayor Altera orden de
()
cálculo
^ Potencia
Multiplicación –
* /
división
menor + - Suma - resta
Por ejemplo:
Sí n1 = 12 y n2 = 14
Promedio = n1 + n2 / 2
Promedio = 19.
Que es muy distinto a:
Promedio = (n1 + n2) / 2
Promedio = 13.
1
El circunflejo (^) debe ser reemplazado por la función adecuada en JAVA
Estructura Secuencial
La estructura de control secuencial conocida también como estructura lineal. Se
compone de instrucciones que deben ejecutarse en forma consecutiva, una tras otra,
siguiendo una línea de flujo. Aplica para problemas muy sencillos. Esta estructura
forma parte de soluciones de problemas complejos en las que se la utiliza mezclada
con estructuras iterativas y condicionales.
Ejemplo
Dado el nombre y las notas de examen escrito y de prácticas de la primera
unidad de un alumno de la Escuela de Educación Secundaria, elabore un
algoritmo que imprima el nombre y el promedio de las calificaciones de Juan
quien tuvo 09 en examen escrito y 14 en prácticas, tenga en cuenta que el
examen escrito tiene peso 2.
Variable
Promedio (tipo: real)
Proceso (operación)
Obtener el promedio:
(NotaEE*2+NotaPR)/3.0
Salida
Nombre y Promedio
Diagrama Nassi-Shneiderman
Inicio
Nombre = “Juan”
NotaEE = 9
NotaPR = 14
Promedio = (NotaEE*2+NotaPR)/3
Escribir Nombre, Promedio
Fin
Pseudocódigo
Inicio
Nombre “Juan”
NotaEE 9
NotaPR 14
Promedio (NotaEE*2+NotaPR)/3
Escribir Nombre, Promedio
Fin
Ejercicios
1. Determine el producto de tres enteros cualquiera.
6. Suponga que está a cargo de una veterinaria, y se tienen los datos de las
mascotas: nombre, peso (en libras) y longitud (en pies). Muestre el nombre
de la mascota, su peso expresado en Kilogramos y su longitud expresada
en metros. Recuerde: 1 libra = 0.453592 Kilogramo y 1 pie = 0.3047
Referencias
Cairó Battistutti, O. (2005). Metodología de la Programación. Algoritmos, diagramas
de flujo y programas. México: Alfaomega.
Joyanes Aguilar, L. (2008). FUNDAMENTOS DE PROGRAMACIÓN. Algoritmos,
estructura de datos. Madrid. España: McGRAW-HILL/INTERAMERICANA
DE ESPAÑA, S. A. U.
Semana 03
Estructuras Condicionales simples y dobles.
Diagrama de flujo
Nassi-Shneiderman
Pseudocódigo
Si condición entonces
Sentencia(s)
Fin_si
Sentencia Sí
Evalúa una condición que es una expresión booleana, que de ser verdadera ejecuta
la(s) sentencia(s), de otro modo se continúa con las sentencias que siguen a la
instrucción Sí.
Operadores lógicos
Los operadores lógicos son:
&& AND (el resultado es verdadero si ambas expresiones son verdaderas)
|| OR (el resultado es verdadero si alguna expresión es verdadera)
! NOT (el resultado invierte la condición de la expresión)
AND y OR trabajan con dos operandos y retornan un valor lógico basadas en las
denominadas tablas de verdad. El operador NOT actúa sobre un operando. Estas
tablas de verdad son conocidas y usadas en el contexto de la vida diaria, por ejemplo:
"si llueve Y tengo clases, utilizaré chompa", "si NO llueve, saldré a pasear", "si hay una
buena película O tengo compañía, iré al cine". Las tablas de verdad de los operadores
AND, OR y NOT se muestran en las tablas siguientes:
Ejemplos:
En cambio, la expresión
(a<b) || (b<c)
(a>=b)
Ejemplo 3-1
Del ejemplo anterior, que permitía obtener el promedio ponderado de las notas de un
alumno, agregar la consideración si acaso tiene un promedio mayor o igual que 11, se
debe enviar el mensaje de Aprobado.
Solución
Inicio
Nombre = “Juan”
NotaEE = 9
NotaPR = 14
Condición = “”
Promedio =(NotaEE*2+NotaPR)/3
Si Promedio >= 11 entonces
Condición = “Aprobado”
Fin_si
Imprimir Nombre, Promedio
Imprimir Condición
Fin
Ejercicios
1. Elabore el algoritmo que solicite ingresar la edad de una persona y si es mayor o
igual a 18 años se debe imprimir el mensaje “Es tu obligación obtener DNI azul”.
4. Desarrolle la solución que nos muestre como resultado si una persona es adulta,
para ello se debe ingresar el nombre y la edad de la persona. Considerar persona
adulta a aquellos comprendidos entre los 20 y 40 años.
Referencias Bibliográficas
Cairó Battistutti, O. (2005). Metodología de la Programación. Algoritmos, diagramas
de flujo y programas. México: Alfaomega.
Joyanes Aguilar, L. (2008). FUNDAMENTOS DE PROGRAMACIÓN. Algoritmos,
estructura de datos. Madrid. España: McGRAW-HILL/INTERAMERICANA
DE ESPAÑA, S. A. U.
Vasco, U. d. (1 de Abr de 2016). Operadores Lógicos y Relacionales. Obtenido de
http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/introduccion/operado
res1.htm
Reconociendo que la estructura selectiva simple tiene sus limitaciones pues solamente
maneja una sola posibilidad, cuando la mayor parte de las veces necesitamos manejar
dos alternativas de solución.
La estructura selectiva doble permite al programa elegir entre dos opciones, si la
condición es verdadera se ejecutará el grupo de instrucciones 1, caso contrario de ser
falso se ejecutará el grupo de instrucciones 2.
Es necesario precisar que solamente se ejecuta una de las 2 opciones o bien el
conjunto de sentencias cuando la condición es Verdadera o bien el conjunto de
sentencias cuando la condición es Falsa, pues ambas son mutuamente excluyentes.
Diagrama de Nassi-Shneiderman
Ejemplo 3-2
Continuando con el ejemplo anterior, en el cual se obtenía el promedio ponderado de
las notas de un alumno, que cuando tenía un promedio mayor o igual que 11, se
enviaba el mensaje de “Aprobado”, ahora hay que considerar enviar el mensaje
“Desaprobado” si el promedio es el caso contrario menor que 11.
Solución
Constantes Variable
Nombre = Juan (tipo: Cadena) Promedio (tipo: real)
NotaEE = 9 (tipo: entero) Condición = “” (tipo: Cadena)
NotaPR = 14 (tipo: entero) Proceso (operaciones)
Obtener el promedio:
(NotaEE*2+NotaPR)/3.0
Condición Salida
Promedio>=11 Nombre, Promedio y condición
Diagrama de Flujo
Solución (Diagrama de Flujo)
Solución Pseudocódigo
Inicio
Nombre = “Juan”
NotaEE = 9
NotaPR = 14
Condición = “”
Promedio =(NotaEE*2+NotaPR)/3
Si Promedio >= 11 entonces
Condición = “Aprobado”
Caso contrario
Condicion = “Desaprobado”
Fin_si
Imprimir Nombre, Promedio
Imprimir Condición
Fin
Ejercicios
1. Elabore el algoritmo que solicite ingresar la edad de una persona y si es mayor o
igual a 18 años se debe imprimir el mensaje “Es tu obligación obtener DNI azul”
caso contrario le debe decir cuántos años le falta para ser mayor de Edad
3. Para verificar que 3 valores dados (lados) forman un triángulo, se debe probar si se
cumple la siguiente condición: “La suma de cualquiera de dos lados deberá ser
mayor que el tercer lado”. Enviar mensaje sino forman un triángulo.
5. Elabore el algoritmo que permita determinar las raíces reales de una ecuación de
2do grado (ecuación cuadrática), solo se debe enviar un mensaje si acaso las
raíces son imaginarias.
Referencias Bibliográficas
Joyanes Aguilar, L. (2008). FUNDAMENTOS DE PROGRAMACIÓN. Algoritmos,
estructura de datos. Madrid. España: McGRAW-HILL/INTERAMERICANA
DE ESPAÑA, S. A. U.
Semana 04
Muchas veces es necesario atender más de una condición para obtener un resultado
que está sujeto a múltiples posibilidades, es por ello que podemos anidar en un primer
momento las estructuras de selección simple y dobles para encontrar y ofrecer el
resultado esperado.
Diagrama de flujo
Pseudocódigo
Si condición1 entonces
Sentencia(s)1
Caso contrario Si condición2 entonces
Sentencia(s)2
(.........)
Nassi-Shneiderman
Ejemplo 4-1
Elabore el algoritmo que determine cuál es el mayor de tres números dados.
Solución:
Diagrama de flujo
Pseudocódigo
Inicio
a = 1, b = 2, c = 3
mayor = 0
Nassi-Shneiderman
Otra solución(2)
Diagrama de flujo
Pseudocódigo
Inicio
a = 1, b = 2, c = 3
mayor = 0
si (a>b) entonces
si (a>c) entonces
mayor = a
caso contrario
mayor = c
fin_si
caso contrario
si (b>c) entonces
mayor = b
caso contrario
mayor = c
fin_si
fin_si
Imprimir “El número mayor es: “ mayor
Fin
Nassi-Shneiderman
Otra solución(3)
Diagrama de flujo
Pseudocódigo y
Nassi-Shneiderman
Como se habrá dado cuenta a medida que hay más valores entre las cuales elegir, el
uso de las sentencias si (if) anidadas, le da mayor complejidad a nuestras soluciones,
es por ello tenemos en los lenguajes de programación una alternativa para que
nuestro código sea más legible a través de la selección múltiple de casos, en la cual
se evaluará una expresión que puede tomar valores distintos, de tal manera que si la
expresión es 1 se ejecutará el juego de sentencias 1 para ese caso, si toma valor 2 el
juego de sentencias 2 para este caso, así sucesivamente, luego de lo cual se
proseguirá con las demás sentencias del programa.
Diagrama de flujo
Pseudocódigo Nassi-Shneiderman
Según expresión hacer
Caso valor1
Sentencia(s)1
Caso valor2
Sentencia(s)2
Caso valor3
Sentencia(s)3
(.........)
Caso contrario
Sentencia(s)n
Fin_según
Ejemplo 4-2
Luego de ingresar el nombre de la persona, solicitar ingresar un número entre 1 y 7,
luego de lo cual en usuario debe recibir el mensaje de que día de la semana se trata.
Solución
Diagrama de Flujo
Diagrama de Nassi-Shneiderman
Pseudocódigo
Inicio
Leer nombre, numDia
Según numDia hacer
Caso 1: diaSemana=”Lunes”
Caso 2: diaSemana=”Martes”
Caso 3: diaSemana=”Miércoles”
Caso 4: diaSemana=”Jueves”
Caso 5: diaSemana=”Viernes”
Caso 6: diaSemana=”Sábado”
Caso 7: diaSemana=”Domingo”
Por defecto: diaSemana=””
Fin_según
Imprimir nombre, diasemana
Fin
Ejercicios
Diagrama de Flujo
Pseudocódigo
Nassi-Shneiderman
La sentencia desde proporciona una forma compacta para iterar sobre un rango de
valores. Los programadores a menudo se refieren a él como el "bucle" debido a la
forma en la que se realiza un bucle varias veces hasta que una condición particular
está satisfecha.
Ejemplo 4-3
Obtenga la suma de los 100 primeros números enteros.
Solución
Diagrama de Flujo
Pseudocódigo
Inicio
suma 0
desde x 1 hasta n con paso 1 hacer
suma suma+x
Fin_desde
Escribir suma
Fin
Nassi-Shneiderman
Ejemplo 4-4
Obtenga la tabla de multiplicar del 5
Pseudocódigo
Inicio
desde x 1 hasta 12 con paso 1 hacer
Escribir x, “ * 5 = “, 5*x
Fin_desde
Fin
Implementar solución en Diagrama de flujo y Nassi-Shneiderman
Ejercicios
1. Modifique el ejemplo 4-4 de tal manera que se pueda ver la tabla de multiplicar del
número que uno indique.
2. Amplié el ejercicio anterior de forma que se pueda ver las tablas de multiplicar del 0
al 12.
3. Teniendo en cuenta que un número es perfecto si “la suma de sus divisores
excepto el mismo es igual al propio número”. Elabore el algoritmo que calcule e
imprima los números perfectos menores o iguales a N.
4. Elabore el algoritmo que permita ingresar 10 valores enteros positivos cualquiera
utilizando el teclado, luego debe mostrar la suma de los valores ingresados y el
promedio.
5. Construya el algoritmo que lea la nota de 10 alumnos, al final nos debe reportar
cuantos alumnos hay aprobados y cuantos desaprobados.
6. Desarrolle el algoritmo que lea 10 números enteros, debe reportar cuantos de los
valores ingresados son múltiplo de 3 y 5, debe tener en cuenta que hay ciertos
números que son múltiplos de 5 y de 3 a la vez.
Semana 05
Estructuras repetitivas
Nassi-Shneiderman
Contadores
En las estructuras repetitivas se hace necesario contar las acciones que ocurren en
cada iteración del bucle, para ello se utilizan los contadores que contendrá las sumas
parciales sucesivas de los diferentes valores que pueden ser de incremento o
decremento que debe ser constante tanto positivo como negativo. En definitiva, el
contador es una variable de tipo entero.
Ejemplo:
contador = 0 cont = 0 // se inicializa
contador = contador + 1 cont = cont – 1 // se decrementa
Acumuladores
De igual manera en las estructuras repetitivas será necesario mantener cantidades
variables de sumas sucesivas, a esto se denomina acumulador, que se diferencia del
contador por que los incrementos o decrementos no son constantes sino variables.
Ejemplo:
Total = 0 // se inicializa
Total = Total + X // X es variable no constante
Ejemplo 5-1
Obtenga la suma de los 100 primeros números enteros.
Solución
Diagrama de Flujo
Diagrama de Nassi-Shneiderman
Pseudocódigo
Inicio
x = 0, suma = 0
mientras (x<100) hacer
x = x + 1
suma = suma + x
fin_si
Imprimir “La suma es: “ suma
Fin
Ejercicios
1. Imprimir los números enteros comprendidos entre -50 y 50
2. Imprimir los números del 2 al 200 pero de 2 en 2.
3. Imprimir los números del 100 al 0
4. Suponga que tenemos que calcular la suma de los gastos que hicimos cuando
fuimos de compras al hipermercado La Perla, tenemos todo un listín anotado por
lo que tendremos la precaución de indicar el termino de los cálculos con un valor
negativo (al final no podemos tener gastos negativos).
5. Elabore el algoritmo que permita ingresar un número entero positivo cualquiera
entre 1 y 20, calcule e imprima el cubo de ese número, utilice -1 para indicar que
no quiere calcular más.
6. Desarrolle un algoritmo que dado un número entero positivo cualquiera, menor
que 1000, nos muestre la suma de los números pares e impares.
7. Construya el algoritmo que obtenga la suma e imprima los términos de la siguiente
serie:
2, 5, 7, 10, 12, 15, 17, …….. , 1800
8. Resuelva el siguiente problema que tiene el jefe de personal de una constructora,
tiene que pagar a una lista no conocida de operarios que laboraron en un día
feriado, teniendo en cuenta lo siguiente:
Si el sueldo es menor o igual a S/. 850 se le aumenta 18%
Si el sueldo es mayor a S/. 850 se le aumenta 12%
Al final debe imprimir el sueldo nuevo de cada trabajador y el total de la planilla de
ese día.
9. Dado N números enteros obtenga:
Cuantos números ingresados fueron mayores que cero
El promedio de los números positivos
El promedio de todos los números
10. Construya el algoritmo que dado N números enteros como dato, calcule el mayor
y el menor de estos números.
Dentro de las estructuras repetitivas, encontramos la estructura hacer ... mientras (do
... while), que a diferencia del hacer … mientras, esta estructura primero evalúa el
conjunto de sentencias o instrucciones contenidos dentro del cuerpo de la sentencia,
para luego evaluar la condición, que de ser verdadera se prosigue con la ejecución de
las sentencias, de ser falsa la condición, se prosigue con las demás sentencias o
instrucciones del programa.
Hacer
Sentencia(s)
Mientras condición
Nassi-Shneiderman
Ejemplo
Obtenga la suma de los 100 primeros números enteros.
Solución
Pseudocódigo
Inicio
x = 0, suma = 0
hacer
x = x + 1
suma = suma + x
mientras (x<100)
Imprimir “La suma es: “ suma
Fin
Diagrama de Nassi-Shneiderman
Diagrama de Flujo
Ejercicios
Semana 06
A medida que vamos avanzando, encontramos que los problemas a resolver son cada
vez más complejos, ante ello la manera más fácil de abordar su solución es separarlo
en pequeños problemas (divide y vencerás) de tal manera que en conjunto uno puede
tener una solución que puede ser depurada de manera más sencilla, es decir los
posibles errores se pueden detectar más rápido. En los lenguajes de programación
estos pequeños problemas se les reconocen como subprogramas que su vez se
identifican como funciones y procedimientos o subrutinas, los cuales pueden ser
invocados desde cualquier parte del programa. Esta facilidad nos permite evitar la
redundancia de código.
Funciones
Las funciones son una operación o método que recibe uno o más valores los cuales se
denominan argumentos, que luego de procesarlos nos retornan un resultado.
Todos los lenguajes de programación nos proporcionan funciones predefinidas tanto
numéricas como de cadenas, de ellas hemos presentado en tema anterior un listado
de las principales funciones matemáticas. Pero estas funciones predefinidas quedan
cortas para solucionar la gran variedad de problemas, los lenguajes de programación
nos permiten generar nuestras propias funciones.
De manera general una función responde a la siguiente estructura:
tipo_dato nombre_funcion(parámetros)
instrucción(es)
retorna valor
fin_función
Ejemplo 6-1
Elaborar el algoritmo que mediante una función obtenga la suma de 2 números
enteros positivos
Solución
Pseudocódigo (1)
Función Suma2Num(x, y)
Suma x+y
Fin_función
Pseudocódigo (2)
Función Suma2Num(x, y)
Suma x+y
Fin_función
Ejemplo 6-2
Elaborar el algoritmo que mediante una función obtenga la potencia n de un número x.
Considere la posibilidad de que los exponentes puedan ser positivos y negativos.
Pseudocódigo
Función Potencia(x, n)
Y 1
Desde i 1 hasta ABS(n) con paso 1 hacer
Y Y*x
Fin_desde
Si n<0 entonces
Y 1/Y
Fin_si
POT Y
Fin_función
Procedimientos
Las funciones son muy útiles, pero tienen limitaciones al devolver un solo resultado,
por lo general es necesario que el procesamiento devuelva más de un resultado, y es
ahí que utilizaremos los procedimientos o subrutinas, los cuales resolverán un proceso
particular, este procedimiento no necesita que algún valor se asocie a él o que lo
devuelva como único resultado.
Ejemplo 6-3
Elabore el algoritmo que determine las raíces reales de una Ecuación Cuadrática.
Solución_1 // Simple con valores constantes de prueba
Inicio //Programa principal
a 1.0, b -4.0, c 4.0
discri b*b-4*a*c
Si discri>=0 entonces
x1 (-b+RAIZ(discri))/(2*a)
x2 (-b-RAIZ(discri))/(2*a)
caso_contrario
Escribir “La ecuación NO tiene raíces reales“
Fin_si
Fin
Inicio Discrimina
discriminante b*b-4*a*c
Fin_discrimina
Inicio RaicesReales
Si discriminante>=0 entonces
x1 (-b+RAIZ(discri))/(2*a)
x2 (-b-RAIZ(discri))/(2*a)
msgRaicesReales()
caso_contrario
msgRaizNOreal()
Fin_si
Fin_RaicesReales
msgRaicesReales()
Escribir “Las Raíces Reales son: “
Escribir “X1 = “, x1
Escribir “X2 = “, x2
Fin_msgRaicesReales
msgRaizNOreal()
Escribir “La ecuación NO tiene raíces reales“
Fin_msgRaizNOreal
RECURSIVIDAD
Sabemos que un subprograma puede llamar a otro subprograma, esto es una función
puede llamar a otra función y así sucesivamente consiguiéndose el anidamiento de
funciones o subprogramas. También ocurre que un subprograma puede llamarse así
mismo, entonces cuando una función o procedimiento se llama a si mismo se llama
recursión, es decir que estas funciones o procedimientos son recursivos. La recursión
se utiliza para evitar las estructuras repetitivas, aun así, debemos tener el cuidado de
incluir una condición de termino, para que la ejecución no se vuelva un bucle (loop)
infinito.
Ejemplo 6-4
Algunas funciones matemáticas se definen de manera recursiva. Tal es el caso del
factorial de un número entero, que se define como sigue:
Solución NO Recursiva
INICIO
fact 1
Escribir “Ingrese número para calcular factorial: “
Leer n
Si n=0 entonces
fact 1
caso_contrario
Desde i 1 hasta n con paso 1 hacer
fact fact*i
Fin_desde
Fin_si
Escribir “El factorial de “, n, ” es = “, fact
FIN
Solución Recursiva
Función factorial(x)
Si x=0 entonces
return 1
caso_contrario
return n*factorial(n-1)
Fin_si
Fin_función
Ejercicios
6.1 Elaborar el algoritmo e implementar en JAVA, una aplicación que calcule el área
de un circulo, triangulo o cuadrado. Se debe solicitar que figura geométrica se va
a evaluar, luego de lo cual debemos ingresar los datos que sean necesarios.
Generar una función para cada caso.
Areacírculo = radio 2 * π
base * altura
Areatriángulo =
2
6.3 Elabore el algoritmo e implemente en JAVA, una aplicación que cuente el número
de cifras de un número entero positivo que debemos ingresar por el teclado.
Devolver el número de cifras con una función a la cual se le pasará el número.
6.4 Construya el algoritmo que a través de un menú de opciones permita obtener las
áreas de un cuadrado, triángulo y círculo cada una de ellas en un procedimiento
distinto que será invocado al elegir la opción que le corresponde. Debe dar la
posibilidad de poder continuar con el cálculo de otra área.
6.5 Elabore el algoritmo recursivo que permita resolver una división por el método de
restas sucesivas.
6.7 Elabore un algoritmo recursivo que permita sumar los dígitos de un número.
Ejemplo: Entrada: 123, Resultado: 6