Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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 2.1
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
2.1 Determine el producto de tres enteros cualquiera.
2.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
4.1 Desarrolle el algoritmo que solicite ingresar 2 datos en variables de tipo entero,
enseguida evalúe la siguiente función
25 * Y Si X = 1
25 ^ Y Si X = 2
Valor = 25 / Y Si X = 3
1. Para cualquier valor de X
Utilice selección múltiple de casos.
4.3 Para este ejercicio previo, se solicita elaborar un algoritmo de solución utilizando
selección múltiple de casos. Que solicite ingresar nombre y nota del Estudiante,
se evalúe de tal manera que, si tiene entre 20 y 18 se le considere Excelente,
entre 17 y 15 se considera Bueno, entre 14 y 11 se considera Regular, entre 10 y
6 Malo y finalmente entre 5 y 0 Pésimo. Se debe imprimir el nombre del
estudiante y su condición.
4.4 Desarrolle el algoritmo que luego de ingresar 3 números enteros diferentes, los
muestre de manera descendente. (Selección múltiple)
4.5 Construya e algoritmo que solicite ingresar un número entero, se debe determinar
e imprimir este número es positivo, negativo o nulo.
4.6 Elabore el algoritmo que solicite ingresar un numero entero, se debe determinar si
es par o impar.
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
4.8 Modifique el ejemplo 4-4 de tal manera que se pueda ver la tabla de multiplicar
del número que uno indique.
4.9 Amplié el ejercicio anterior de forma que se pueda ver las tablas de multiplicar
del 0 al 12.
4.10 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.11 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.
4.12 Construya el algoritmo que lea la nota de 10 alumnos, al final nos debe reportar
cuantos alumnos hay aprobados y cuantos desaprobados.
4.13 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
5.1 Imprimir los números enteros comprendidos entre -50 y 50
5.2 Imprimir los números del 2 al 200 pero de 2 en 2.
5.3 Imprimir los números del 100 al 0
5.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.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.
5.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.
5.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
5.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.
5.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
5.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 5-2
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.
• Funciones predefinidas
Todos los lenguajes de programación nos proporcionan funciones predefinidas
tanto numéricas, cadenas, de fechas.
Funciones matemáticas. - podemos enumerar las siguientes: valor absoluto,
exponencial, potencia, raíz cuadrada, redondear, etc. A ellas se suman las
funciones trigonométricas: seno, coseno, tangente y sus correspondientes arcos.
Funciones de cadenas. – se tiene: de información básica, de comparación de
cadenas, de búsqueda de caracteres, de búsqueda de subcadenas, convertir
mayúsculas a minúsculas y viceversa, etc.
Funciones de fecha y hora.- que devuelven la fecha y hora del sistema, que
suman y restan fechas, que comparan fechas, etc.
• Funciones del usuario
Las funciones predefinidas quedan cortas para solucionar la gran variedad de
problemas, es por ello que los lenguajes de programación nos permiten generar
nuestras propias funciones.
De manera general cualquier 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
retornar Suma
Fin_función
Pseudocódigo (2)
Inicio //Programa principal
Escribir “Ingrese valor 1: “
Leer n1
Escribir “Ingrese valor 2: “
Leer n2
S Suma2Num(n1, n2)
Escribir “La suma de “,n1,“ + “,n2,“ = “,S
Fin
Función Suma2Num(x, y)
Suma x+y
retornar Suma
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
Inicio //Programa principal
Escribir “Ingrese la base: “
Leer B
Escribir “Ingrese valor de la potencia: “
Leer VP
P = potencia(B, VP)
Escribir B, “ elevado a la “, VP, “ es = “, P
Fin
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
retornar 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.
1. Las variables locales son aquellas que se declara y definen dentro del cuerpo de
un método y ese es su ámbito de alcance
2. Las variables globales se declaran en el algoritmo principal y están disponibles
para todos los subprogramas.
Ejemplo 6-3
Elabore el algoritmo que determine las raíces reales de una Ecuación Cuadrática.
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
retornar 1
caso_contrario
retornar x*factorial(x-1)
Fin_si
Fin_función
Ejercicios
1.1 Elaborar el algoritmo para 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
1.2 Construya el algoritmo para una aplicación que convierta un número en base
decimal a binario, para ello utilice una función a la cual se le pasará el número,
dicha función devolverá el número convertido a binario en una cadena. Sabemos
que, para convertir un número decimal a binario, debemos dividir entre 2 y
sucesivamente el resultado también entre 2 hasta que no se pueda dividir más, el
residuo de cada división formará el número binario que se almacenará en una
cadena.
1.3 Elabore el algoritmo para, 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.
1.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.
1.5 Elabore el algoritmo recursivo que permita resolver una división por el método de
restas sucesivas.
1.7 Elabore un algoritmo recursivo que permita sumar los dígitos de un número.
Ejemplo: Entrada: 123, Resultado: 6
Semana 07
Alcanzamos una serie de ejemplos que combinan las diversas estructuras de tal
manera que podamos controlar el ingreso de ciertos valores válidos
Ejemplos
1.2 Modifique el algoritmo anterior, que luego de elegida cualquier opción permita
preguntar si se desea continuar, de elegirse la opción desea continuar debe
mostrarse el menú de opciones nuevamente, caso contrario darle un mensaje de
despedida al usuario.
EJERCICIOS
Semana 09
El trabajar con variables simples a medida que tenemos que evaluar más datos sería
muy complicado, pues debemos incluir tantas variables para su procesamiento como
datos incluyamos, es por ello que los lenguajes de programación incluyen tipos de
datos estructurados como los arreglos (del inglés arrays) que están asociados a los
conceptos matemáticos de vector y por extensión matriz, que nos van a permitir
manipular juegos de valores del mismo tipo, pero definiendo una sola variable, como
veremos a continuación.
ARREGLOS
Un arreglo es una estructura de datos interna por cuanto su manejo se da a nivel de la
memoria RAM del computador, reconociéndose los siguientes tipos: Unidimensionales
(vector), Bidimensionales (matrices) y Multidimensionales (cubos), cualquiera de ellos
es en un conjunto finito de elementos del mismo tipo de datos primitivos, los cuales se
pueden identificar por su posición en el arreglo. Un arreglo puede ser de tipo entero,
todos sus elementos serán valores enteros; o puede ser de tipo cadena y contendrá
solo elementos de cadenas, nunca una combinación de tipos de datos. Esto significa
que pueden ser: Numéricos y Alfanuméricos. Cada elemento puede tener un elemento
simple, los elementos pueden ser primitivos, la longitud del arreglo se fija cuando se
crea. La desventaja de trabajar con arreglos es que al manejarse a nivel de memoria
RAM, cuando uno apague el computador toda la data se perderá.
ARREGLOS UNIDIMENSIONALES
O vectores, también conocidos como listas o arrays son un conjunto de datos
homogéneos de tamaño n, para acceder a cada dato del arreglo hay que referenciarlo
a través de un índice o subíndice.
Para poder utilizar un arreglo debemos separarle espacio en la memoria, de acuerdo
con la necesidad del tratamiento de datos de un problema particular, para ello es
necesario declarar y crear el arreglo de la siguiente manera:
Un error común es manipular un arreglo no válido, que puede ser un valor negativo o
un número mayor a la longitud del arreglo.
Ejemplos Tamaño del arreglo
Luego puede ser manipulado dentro del código de solución en su forma simple:
notas[índice]
RECORRIDO
Por ahora iniciaremos con el recorrido que nos será de utilidad para poder resolver
una serie de casos básicos. El recorrido consiste en visitar cada celda del arreglo de
manera secuencial, utilizando cualquier estructura de control repetitiva, siempre
debemos tener en cuenta de no rebasar los límites del arreglo, los índices no pueden
ser menores que cero (underflow) o superiores al tamaño máximo definido para dicho
arreglo (overflow).
EJEMPLO 9-1
Se tienen las notas de examen escrito de 5 alumnos: 15, 9, 17, 8, 14. Elabore el
diagrama de flujo que presente las 5 notas a través de la pantalla.
EJEMPLO 9-2
Sobre la base del ejercicio anterior, determinar la mayor nota y reportarla, elabore el
diagrama Nassi-Shneiderman correspondiente.
EJEMPLO 9-3
De los datos de los ejercicios previos determine la mayor nota, la menor nota y el
promedio de los 5 estudiantes. Elabore el pseudocódigo de solución.
INICIO
entero notaEE[] {14, 11, 7, 18, 9}
entero may 0, men 999, suma 0
real prom 0.0
desde i 0 hasta i=longitud(notaEE)-1 con paso 1 hacer
Escribir notaEE[i]
suma suma + notaEE[i]
si (notaEE > may) entonces
may notaEE[i]
fin_si
si (notaEE < men) entonces
men notaEE[i]
fin_si
fin_desde
prom suma/longitud(notaEE)
Escribir “El mayor valor de la lista es: “, may
Escribir “El menor valor de la lista es: “, men
Escribir “El promedio de las notas es: “, prom
FIN
EJERCICIOS
9.1 Elabore el algoritmo en diagrama de flujo, que procese los datos de 5 alumnos:
Juan, Luis, José, Iván y Adán, que tiene las siguientes notas de Examen Escrito:
10, 19, 5, 17, 11 y sus notas de prácticas: 15, 13, 10, 19, 11 respectivamente, se
debe obtener su promedio teniendo en cuenta que el examen escrito tiene peso 2.
Si su promedio es menor que 11 se debe indicar la condición de Desaprobado,
caso contrario debe decir Aprobado, como se muestra a continuación:
Alumno EE NP PROM CONDICION
Juan 10 15 11.67 APROBADO
Luis 19 13 17.00 APROBADO
José 5 10 6.67 DESAPROBADO
Iván 17 19 17.67 APROBADO
Adán 11 9 10.33 DESAPROBADO
9.2 Generar un arreglo de 100 elementos, inicialice los datos de cada elemento del
arreglo con la siguiente formula: i*2/3+3, donde i es la posición de cada dato del
arreglo. Luego debe imprimir solo los elementos pares del arreglo, teniendo la
precaución de numerar consecutivamente los datos impresos partiendo de 1.
9.3 Partiendo de la solución del ejercicio anterior, realizar las modificaciones
pertinentes que permitan imprimir los resultados en 5 columnas, de manera muy
similar a lo que se muestra a continuación:
01 – 3,00 02 – 4,33 03 – 5,67 04 – 7,00 05 – 8,33
06 - xxx 07 – yyy 08 – zzz 09 – www 10 – qqq
(…) (…) (…) (…) (…)
JAVA
NETBEANS
Plataforma
El marco de trabajo (framework) simplifica el desarrollo de aplicaciones para escritorio
en Java Swing. El paquete de NetBeans IDE para Java SE contiene lo necesario para
desarrollar plugins y aplicaciones basadas en la plataforma NetBeans; no se requiere
un SDK adicional.
NETBEANS
• Permite compilación incremental
• Es un editor de Composición visual
• Es un Ambiente de Desarrollo Integrado (IDE), que incluye:
Depurador
Editor de código fuente
Explorador de Proyectos y Archivos
Explorador de Servidores y procesos en ejecución
Control de Versiones
Repositorio de Drivers JDBC y ejecutor de comandos SQL
• Tiene Herramientas avanzadas de edición de código que incluyen formato
automático, completado automático e importación de paquetes y corrección
sensitiva.
Para elaborar un programa Java, debemos crear un proyecto, para ello seleccionamos
en el menú principal la opción FILE, enseguida New Project …, tal como se ve en el
gráfico que sigue:
Enseguida le damos nombre al proyecto (Project name) en nuestro caso Prueba, y nos
fijamos que la casilla Create Main Class tenga un check, porque necesitamos que
nuestro proyecto tenga una clase principal que es la que ejecutará el programa que
resuelva un problema en particular.
Al hacer click en Finish tenemos acceso al editor de Netbeas que nos permitirá
escribir código JAVA:
Menú principal
Semana 10
Las matrices o tablas son arreglos bidimensionales, estos arrays de igual manera son
un conjunto de datos homogéneos de tamaño m x n, esto implica que se deben
referenciar a través de dos índices o subíndices i, j, los cuales deben estar dentro de
los límites: 0 <= i < m y 0 <= j < n.
Ejemplos:
col 0 col 1 col 2
Matriz A = fila 0 dato00 dato01 dato02
fila 1 dato10 dato11 dato12
Luego puede ser manipulado dentro del código de solución en su forma simple:
A[i][j]
índice de fila índice de columna
RECORRIDO
Partiremos con el recorrido para la solución de casos básicos. Esto implica el visitar
cada celda fila por fila completando el número de columnas declaradas o inicializadas.
El resultado de la corrida:
EJERCICIOS
10.1 Generar una matriz de 6 x 6, donde sus filas pares sean múltiplos de 2 y las
impares sean múltiplos de 5. Se debe imprimir está tabla. Debe hallar la suma de
todos sus elementos, imprimir los elementos de su diagonal principal.
10.2 Una empresa tiene 6 obreros distribuidos en 3 categorías, ellos conservan la
data de horas extras trabajadas por los 6 obreros cada día durante una semana.
Se sabe la categoría de cada obrero y se conoce el precio de las horas extras
por categorías. Se debe calcular cuánto cobrará cada obrero por horas extras en
la semana y el total pagado por dichas horas.
La data se presenta a continuación:
Categoría
obrero 1 C
Categoría Precio
obrero 2 A
A 100
obrero 3 B
B 80
obrero 4 B
C 50
obrero 5 C
obrero 6 A
10.3 Una empresa de sondeo de opinión, ha elaborado una encuesta para saber la
intención de voto de los 5 candidatos para la alcaldía provincial, para ellos ha
seccionado en cuatro sectores marcados: norte sur, este y oeste, de los 115
encuestados los resultados ha sido para el candidato 1: 11, 5, 4, 3 por sector
respectivamente, candidato 2: 1, 4, 3, 12, candidato 3: 2, 6, 12, 3, candidato 4:
10, 3, 5, 6, candidato 5: 2, 9, 5, 9. Determine quien tiene el más alto porcentaje
de aceptación y es el probable próximo alcalde de la ciudad. Utilice matrices y
vectores.
Elementos Léxicos
Son las palabras reservadas, identificadores, literales, operadores, delimitadores,
comentarios.
Palabras reservadas
Palabras que tiene un significado concreto en el lenguaje de programación, por lo
que el programador debe evitar el utilizarlos para evitar confusiones y/o errores.
abstract default if private throw
boolean do implements protected throws
break double import public trasient
byte Else instanceof return true
strinctfp enum int short try
case extends interface static void
catch false long super while
char final native swtich
class finally new synchronized
const for null this
continue goto package threadsafe
cast future generic inner byvalue
operator outer rest var
Identificadores
Se utilizan para nombrar variables, funciones, clases y objetos.
• Variables : para almacenamiento de datos
• Métodos : para especificación de funciones
• Clases : para especificación de objetos
• Interfaces : para especificación de protocolos
• Paquetes : para agrupación de clases
Características
El primer símbolo del identificador será un carácter alfabético (a, …, z, A, …, Z,
‘_’, ‘$’) pero no un dígito.
Después del primer carácter, pueden seguir caracteres alfanuméricos (a, …, z)
y (0, 1, …, 9), signos de dólar ‘$’ o guiones de subrayado ‘_’.
Los identificadores no pueden coincidir con las palabras reservadas.
Se hace diferencia entre mayúsculas y las minúsculas (case sensitive).
El signo de dólar y el guion de subrayado se interpretan como una letra más.
No hay una longitud máxima establecida para el identificador
Ejemplos válidos
a, z124, tu_pila, CoLa, cola, usd$, _miNota
Ejemplos no válidos
134abz, mi nota, Nombre.com
Variables
En Java las variables deben tener un tipo declarado. Para declarar una variable se
coloca en primer lugar el tipo primitivo de dato, seguido del nombre que la
identificará.
Ejemplos:
int valorMaximo; float valorMinimo; char letra1, aula2;
Literales
Existen literales para:
• Números enteros: Secuencia de dígitos en decimal, octal o hexadecimal
Ejemplos: 124 345667
• Números reales: Secuencia de dígitos con punto decimal o en notación
científica
Ejemplos: 3.1415 3e15
• Valores booleanos: true o false
• Caracteres: un carácter entre comillas simples ‘. Ejemplo: ‘c’
• Cadenas de caracteres: Secuencia de caracteres entre comillas dobles “.
Ejemplos: “Hola Mundo” , “” (cadena vacía)
Operadores en Java
i,f - i | i,f != b | +=
Declaración/Inicialización de variables
• Para usar una variable en un programa hay que declararla.
• El ordenador conoce así cómo codificar la información que se va a almacenar
en la posición de memoria correspondiente.
• Al declarar una variable, se reserva el espacio de memoria necesario para
almacenar un valor del tipo de la variable.
• El identificador asociado a la variable se puede utilizar para acceder al dato
almacenado en memoria y para modificarlo.
• Las variables se han de declarar antes de poder usarlas.
• Los identificadores de las variables son los nombres que utilizaremos para
referirnos a ellas.
• Al declarar una variable, hay que definir su tipo: la variable sólo admitirá valores
del tipo especificado.
En una misma declaración se pueden declarar varias variables, siempre que sean
del mismo tipo. En este caso, los identificadores de las variables se separan por
comas. Sintaxis:
<tipo> identificador;
<tipo> lista_de_identificadores ;
final <tipo> identificador = <valor> ; //para constantes
Ejemplo:
Declaración e inicialización en líneas separadas:
int x;
x = 101;
Declaración e inicialización en la misma línea:
int x = 101;
Múltiple Declaración e inicialización en la misma línea:
int i, j = 1, x;
Codificando en JAVA
Implementación en Java del ejemplo 2.1 promedio de notas de la semana 02.
Sintaxis JAVA
System.out.println ("Texto a mostrar");
Sentencia if
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 if. Para la condición emplear los operadores relacionales y lógicos,
presentados en la semana 03 de este manual.
Sintaxis JAVA
if (condición){
Instrucción(es);
}
Sentencia if doble
Ampliamos la sintaxis, luego de evaluar la condición (expresión booleana), que de ser
verdadera ejecuta la(s) Instrucción(s) 1, caso contrario (else) se ejecuta la(s)
Instrucción(es) 2. Luego de la evaluación de cualquiera de los casos se sigue con las
instrucciones que siguen en el programa.
Sintaxis JAVA
if (condición){
Instrucción(es) 1; Esta sentencia utiliza las
} else { llaves para agrupar la(s)
Instrucción(es) 2; instrucción(es).
}
Sentencia if múltiple
Para el sí condicional múltiple debemos ampliar la sintaxis del condicional doble,
consiguiendo anidar tantas sentencias if como sean necesarias al interior del entonces
o del caso contrario, se sugiere indentar correctamente para mantener la legibilidad del
programa y pueda ser depurado o corregido con mayor facilidad.
Ejemplos de lectura:
Para leer podemos usar el método nextXxx() donde Xxx indica en tipo, por ejemplo
nextInt() para leer un entero, nextDouble() para leer un double, etc.
EJERCICIOS
Semana 11
ORDENAMIENTO
Es la operación de organizar datos en algún orden secuencial de acuerdo a un criterio
que puede ser creciente o decreciente para los números o ascendente o descendente
(alfabéticamente) para datos de caracteres. El propósito principal de un ordenamiento
es el de facilitar las búsquedas de los miembros del conjunto ordenado.
Ejemplos de ordenamientos: Directorios telefónicos, índices de contenidos, bibliotecas
y diccionarios, etc.
¿Cuándo conviene usar un método de ordenamiento?
Cuando se requiere hacer una cantidad considerable de búsquedas y es importante el
factor tiempo.
1. Método de Inserción Directa
Este método toma cada elemento del arreglo para ser ordenado y lo compara con
los que se encuentran en posiciones anteriores a la de él dentro del arreglo. Si
resulta que el elemento con el que se está comparando es mayor que el elemento
a ordenar, se recorre hacia la siguiente posición superior. Si por el contrario,
resulta que el elemento con el que se está comparando es menor que el elemento
a ordenar, se detiene el proceso de comparación pues se encontró que el
elemento ya está ordenado y se coloca en su posición (que es la siguiente a la del
último número con el que se comparó).
Pseudocódigo
Este procedimiento recibe el arreglo de datos a ordenar A[] y altera las posiciones
de sus elementos hasta dejarlos ordenados de menor a mayor. N representa el
número de elementos que contiene A[ ].
Inicio
A[0] -999 Se inicializa bandera
N 8;K 2 Se inicializa tamaño arreglo e
Repetir hasta K=N inicio inspección
TEMP A[K]
PTR K-1
Mientras TEMP<A[PTR]
A[PTR+1] A[PTR]
PTR PTR-1
Fin_mientras
A[PTR+1] TEMP
K K+1
Fin repetir hasta
Fin
Prueba de Escritorio
A[0] N K TEMP PTR A[PTR] A[PTR+1]
-999 8 2 3 1 7 7
0 -999 3
3 4 2 7 7
1 3 4
4 1 3 7 7
2 4 4
1 3 3
0 -999 1
5 8 4 7 8
6 2 5 8 8
4 7 7
2. Método De Selección
El método de ordenamiento por selección consiste en encontrar el menor de todos
los elementos del arreglo e intercambiarlo con el que está en la primera posición.
Luego el segundo más pequeño, y así sucesivamente hasta ordenar todo el
arreglo.
Pseudocódigo
Inicio
Desde K = 1 hasta N-1 con paso 1 hacer
MIN A[K]
POS K
Desde J = K+1 hasta N con paso 1 hacer
Si MIN>A[J] entonces
MIN A[J]
POS J
Fin _ si
Fin_desde_J
TEMP A[K]
A[K] A[POS]
A[POS] TEMP
Fin_desde_K
Fin
Prueba de escritorio
1 2 3 4 5 6 7 8
7 3 4 1 8 2 6 5
1 3 4 7 8 2 6 5
1 2 4 7 8 3 6 5
3. Método Burbuja
El bubble sort, también conocido como ordenamiento burbuja, funciona de la
siguiente manera: Se recorre el arreglo intercambiando los elementos adyacentes
que estén desordenados. Se recorre el arreglo tantas veces hasta que ya no haya
cambios. Prácticamente lo que hace es tomar el elemento mayor y lo va
recorriendo de posición en posición hasta ponerlo en su lugar.
Búsqueda
1. Búsqueda lineal
vector hasta encontrar el dato buscado, siendo por tanto las condiciones de
parada: A(i)=X se halló el elemento buscado ó i=N se llegó al final del vector. Se
debe comprobar después si la operación tuvo éxito, o simplemente se llegó al final
del vector.
Pseudocódigo
Inicio
POS 0
Desde i = 1 hasta N con paso 1
Si A[i] = t entonces
POS i
Fin_ si
Fin_desde_i
Fin
2. Búsqueda binaria
La operación de búsqueda puede ser mucho más eficiente si se sabe que los
datos están previamente ordenados. Basta considerar como ejemplo un
diccionario, en el que hacemos una búsqueda gracias a la ordenación alfabética
de las palabras. En otro caso, sería algo completamente inutilizable.
La idea clave consiste en inspeccionar un elemento cualquiera, de índice m
(normalmente en la mitad), y compararlo con el argumento X. Los posibles casos
son:
A(m)=X.- ha terminado la búsqueda y el índice buscado es m
A(m)<X.- sabemos que todos los elementos a la izquierda de m son menores
que X, y por tanto pueden ser eliminada esta región de la zona de búsqueda y
considerar sólo la zona derecha (desde m+1 hasta N)
A(m)>X.- sabemos que todos los elementos a la derecha de m son mayores
que X, y considerar para la búsqueda sólo la zona izquierda (desde 1 hasta m-
1)
La repetición de este proceso de forma iterativa constituye este algoritmo. Para
ello, se utilizan dos variables de índice, I y D, que marcan los extremos
Izquierdo y Derecho de la zona de búsqueda considerada.
Pseudocódigo
INICIO
Leer X
i 1; j n-1;
m (i+j)\2 /* \ división entera */
Mientras (a[m] <> X y i<j ) hacer
Si X < a[m] entonces
j m-1
caso contrario
i m+1
fin_si
m (i+j)/2 ;
Fin_mientras
Si i >= j entonces
Escribir “Dato buscado no se encuentra”
Caso contrario
Escribir “Dato fue encontrado en
posición “, m;
Fin_si
FIN
SELECCIÓN MULTIPLE
Sentencia Switch … case
La estructura de selección múltiple para casos, que se mostraron tanto en diagrama de
flujo, pseudocódigo y/o diagrama de Nassi-Shneiderman, se implementan en código
Java de acuerdo con la siguiente sintaxis:
Sintaxis JAVA
switch( expresión ){ El valor de la expresión debe ser byte, char,
case valor1: short o int. No puede ser boolean, long,
acción 1; double, float, String o cualquier otra clase de
break; objeto.
case valor2: El valor de la expresión se compara contra
acción 2; la etiqueta de los case, si se encuentra un
break; valor que se empareja, las sentencia que
case valor3: siguen a la etiqueta se ejecutan hasta que
acción 3; se encuentre una sentencia break, la cual
break; nos lleva en secuencia a la siguiente
... sentencia luego del switch.
case valorN: Si no se encuentra pareja con ninguna
acción N; etiqueta, se ejecuta la acción por default
break; siempre y cuando esta haya sido
considerada, sino se continúa con la
[default: siguiente sentencia luego del switch.
acción D; ]
}
2. Indicar el import
import java.io.BufferedReader;
Lee texto de un flujo de caracteres de entrada, almacenando
caracteres a fin de proporcionar lectura eficiente de caracteres, matrices
y líneas.
import java.io.IOException;
Señala que se ha producido una excepción de E/S de algún tipo.
Esta clase es la clase general de excepciones producidas por las
operaciones fallidas o interrumpidas de E / S.
import java.io.InputStreamReader;
Es el puente de flujo de bytes de datos, lee los bytes y los decodifica en
caracteres.
Ejemplos de lectura:
Cadenas
String nombre = br.readLine();
Enteros
String entrada = br.readLine();
int edad = Integer.parseInt(entrada);
Reales
double sueldo = Double.parseDouble(br.readLine());
EJERCICIOS
Semana 12
Sentencia While
NOTA. - Recordar que, con las estructuras repetitivas, son muy útiles los
contadores y acumuladores (ver Semana 05 de este Manual).
EJERCICIOS
Como en cualquier otro lenguaje de programación JAVA también facilita una lista de
funciones matemáticas predefinidas, cuya sintaxis genérica es la siguiente:
Sintaxis
Nombre_función(argumento(s))
Dónde:
Nombre_función.- es el nombre de la función matemática, y
Argumento(s).- es la lista de valores necesario(s) que puede ser un
número, una variable u otro función
Todas las funciones matemáticas pertenecen a la clase Math, la cual debe estar en la
cabecera del programa como: import java.lang.math ;
Se invocan siempre de la siguiente manera: Math.Nombre_funcion(argumentos).
Las funciones relacionadas con ángulos (atan, cos, sin, tan, etc.) trabajan en radianes.
Por tanto, para operar con grados, tendremos que realizar la conversión oportuna. La
propia clase Math facilita los métodos toRadians para transformar grados
sexagesimales en radianes y toDegrees para transformar radianes en grados
sexagesimales, aunque las conversiones pueden no ser totalmente precisas. Por
ejemplo cos(toRadians(90.0)) debería devolver 0, pero es probable que devuelva un
valor aproximadamente cero pero no exactamente cero debido a que la precisión
decimal no es absoluta.
La función random, permite generar números aleatorios en el rango ]0,1[. Por tanto, el
0 y el 1 están excluidos.
import java.util.Random;
2) La segunda forma es más directa de utilizar dentro del cuerpo del programa
EJERCICIO
1) Generar 10
números
aleatorios
distintos, que
simule el
sorteo de las
preguntas de un
examen que
cuenta con 10
preguntas.
Semana 13
ARREGLOS UNIDIMENSIONALES
Sintaxis en JAVA
Un arreglo es un medio de guardar un conjunto de objetos de la misma clase. Se
accede a cada elemento individual del arreglo mediante un número entero
denominado índice. 0 es el índice del primer elemento y n-1 es el índice del último
elemento, siendo n, la dimensión del arreglo. Los arreglo son objetos en Java que
debemos Declarar, Crear, Inicializar y Usar
Error Común:
Intentar manipular un elemento con un índice no válido, por ejemplo: Si índice es
negativo o si índice >= length, se lanzará la excepción
ArrayIndexOutOfBoundsException
Ejemplo 13-1
Codificación del Ejemplo 9-3 de este manual.
ARREGLOS BIDIMENSIONALES
De manera similar a los arreglos unidimensionales, hay que declararlos y crearlos,
como sigue:
Ejemplo 13-2
Implementación base con matrices del Ejemplo 13-1 de este manual.
Ejemplo 13-3
Complete la codificación del ejemplo 13-2, de tal forma de conseguir el promedio de
notas de cada estudiante y reportar su condición de aprobado desaprobado, complete
el cuadro de resultados considerando obtener el promedio de los promedios.
A través del método System.out.printf, se pueden presentar los datos con un formato
preciso en la salida, esto ayuda a tener reportes de resultados más legibles. Podemos
“formatear” el redondeo, alineación de números con valores decimales, justificar a
derecha o izquierda, fijar ancho del campo de presentación, etc.
Sintaxis
Donde:
Indicadores de formato
- Alinear a la izquierda (por defecto a la derecha)
+ El dato tiene signo + o -
0 Rellena con ceros a izquierda hasta completar ancho indicado
, Presenta datos con separador decimal
( Para encerrar números negativo
Caracteres de conversión
b boolean
c char
d integer, long, short, byte
f float, double
s string, char[]
Ejemplos:
int notaEE=9; double promedio=12.666 Resultado
System.out.printf("\t%02d\t%5.2f\t", notaEE, promedio); 09 12.67
Secuencias de escape
\n Cambio de carro, nueva línea \b Borrado a la izquierda
\t Tabulador \\ Carácter barra inversa
\r Retroceso de carro \’ Carácter apostrofe
\f Comienzo de página \” Carácter comillas
EJERCICIOS