1ra. Edición-2018
AL GOR I TM OS
Mg. Mg . Hugo Case Caselli Gismond Gismondii
1
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Semana 01
ALGORTIMOS ¿Qué es un algoritmo? Es la secuencia de pasos (método) que nos permite resolver un problema determinado Además, debe cumplir cumplir estas condiciones: condiciones:
Finito: E l 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 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. Los recursos que utiliza un algoritmo en relación a un computador son principalmente: El tiempo: período transcurrido entre el inicio y la finalización del algoritmo. La memoria: la cantidad (la medida varía según la máquina) que necesita el algoritmo para su ejecución. Obviamente, la capacidad y el diseño de la máquina pueden afectar al diseño del algoritmo.
AL GOR I TM OS
Mg. Mg . Hugo Case Caselli Gismond Gismondii
2
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 Construc ción del algoritmo c) Verificación Verificac ión del Algoritmo. Recordando reunir las siguientes características para los algoritmos: Preciso: Los pasos a seguir en el algoritmo deben ser indicados claramente. Definido : El algoritmo, si se sigue dos veces con un conjunto de datos idénticos de entrada, siempre debe arrojar los mismos resultados. resultados. Finito: El algoritmo, independientemente de la complejidad del mismo, siempre debe ser de longitud definida es decir debe tener un fin.
a) Análisis del problema Para poder identificar y definir bien un problema es conveniente responder a las siguientes preguntas: 1) ¿Qué entradas se requieren? (tipo de datos con los cuales se trabaja y cantidad). 2) ¿Cuál es la salida deseada? (tipo de datos de los resultados y cantidad). 3) ¿Qué método produce la salida deseada? 4) Requisitos o requerimientos adicionales y restricciones a la solución. En esta etapa se determina que hace el programa
b) Diseño y construcción del algoritmo algoritmo En esta siguiente etapa se determina como hace el programa la tarea solicitada. 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) Para el diseño y construcción del algoritmo se utilizan herramientas tales como los diagramas de flujo, los diagramas de Nassi-Shneiderman, los pseudocódigos, pseudocódigos, entre otros.
AL GOR I TM OS
Mg. Mg . Hugo Case Caselli Gismond Gismondii
3
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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:
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
4
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Ejemplo de Diagrama N-S:
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
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
5
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 Si condiciónn entonces Sentencia(s)n1 Caso contrario Sentencia(s)n2 Fin_si
Selección Múltiple de CASOS 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
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
6
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Estructura repetitiva (FOR) desde i 0 hasta n hacer Sentencia(s) Fin_desde o Para i 0 hasta n hacer Sentencia(s) Fin_para
Estructura repetitiva (WHILE-DO) Mientras condición hacer Sentencia(s) Fin_mientras
Estructura repetitiva (DO-WHILE) Hacer Sentencia(s) Mientras condición
c) Verificación del algoritmo Una vez que se ha terminado de escribir un algoritmo es necesario comprobar que realiza las tareas para las que se ha diseñado y produce el resultado correcto y esperado. El modo inicial de comprobar un algoritmo es mediante su ejecución manual, usando datos significativos que abarquen todo el posible rango de valores y anotando en una hoja de papel las modificaciones que se den estos datos y en los del resto del algoritmo, en las diferentes fases hasta la obtención de los resultados. Este proceso se conoce como prueba de escritorio, que nos va a permitir depurar los errores del algoritmo y corregir y/o eliminar dichos errores. Siendo los errores lógicos los que suelen estar en el diseño del algoritmo. Estos errores son los más difíciles de detectar, ya que más adelante el programa puede funcionar y no producir errores de compilación ni de ejecución, y sólo puede advertirse el error por la obtención de resultados incorrectos. En este caso se debe volver a la fase de diseño del algoritmo, modificar el algoritmo, cambiar el programa fuente y compilar y ejecutar una vez más. 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.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
7
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Semana 02
Estructura general de un programa Luego de analizar el problema y de plantear una solución algorítmica lógica vía cualquiera de las herramientas antes mencionadas (diagramas de flujo, diagramas Nassi-Shneiderman y/o pseudocódigo), debemos trasladar esa solución a código del lenguaje de programación con el cual vamos a trabajar (en nuestro caso el lenguaje de programación seleccionado será JAVA), el diseño de la estructura general de un programa tiene los siguientes componentes que se muestran en la figura siguiente: Entrada
PROCESO
Salida
Programa (algoritmo de solución)
La entrada de datos se puede proporcionar desde teclado y/o disco principalmente, existen otras formas de proporcionar entradas como los scanner y otros periféricos que no son de interés para el curso. Con estas entradas alimentaremos al algoritmo que los procesara, para enseguida obtener datos de salida que se presentaran en dispositivos periféricos de salida como pantalla, disco, impresoras, etc. La salida se puede contextualizar como el acto de escribir de manera genérica. Antes de abordar la estructura secuencial, es necesario que nos familiaricemos con ciertos conceptos que participaran en la implementación de un algoritmo en un lenguaje de programación.
Conceptos fundamentales a) Tipos de datos Empezaremos reconociendo los datos a procesar por un computador que se clasifican en: • Simples • Estructurados La principal característica de los datos simples es que hacen referencia a un único valor a la vez. Dentro de este grupo de datos se encuentran: los números enteros, los números reales, los caracteres, los booleanos, los enumerados Los datos estructurados se caracterizan por el hecho de que con un nombre (identificador de variable estructurada) se hace referencia a un grupo de casillas de memoria. Es decir, un dato estructurado tiene varios componentes. Cada uno de los componentes puede ser a su vez un dato simple o estructurado.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
8
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
A continuación, trataremos los datos simples: enteros, reales, caracteres y booleanos; y el dato estructurado: cadena de caracteres. Posteriormente estudiaremos los datos estructurados arreglos.
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. Un dato tipo carácter contiene un solo carácter, y se escribe entre apostrofes. ‘b’ ‘A' ‘$’ ‘8' Por ejemplo: Un dato tipo cadena de caracteres contiene un conjunto de caracteres, y se escribe entre comillas. La longitud de una cadena depende de los lenguajes de programación, aunque normalmente se acepta una longitud máxima de 255. “ABCD” “$5_6” “Char ly García” Por ejemplo:
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 id entificador 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.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
9
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 Altera orden de Mayor () 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
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
10
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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.
Esta estructura puede contener cualquiera de las siguientes instrucciones o sentencias: Declaración de variables Asignación de valores Entrada de datos Procesamiento de datos (operaciones) Reporte de resultados.
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. Solución Constantes Nombre = Juan NotaEE = 9 NotaPR = 14 Variable Promedio
Diagrama de flujo
(tipo: Cadena) (tipo: entero) (tipo: entero)
(tipo: real)
Proceso (operación) Obtener el promedio: (NotaEE*2+NotaPR)/3.0 Salida Nombre y Promedio
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
11
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática 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 NotaPR
9 14 Promedio (NotaEE*2+NotaPR)/3 Escribir Nombre, Promedio
Fin
Ejercicios 2.1 Determine el producto de tres enteros cualquiera. 2.2 Determinar la suma de las N primeros números enteros de acuerdo a la siguiente formula:
2.3 Estimar el número de páginas de un texto que puede almacenar en la memoria de un computador. A un promedio de 300 palabras por página y 10 caracteres por palabra. Asumir que un carácter ocupa un (1) Byte. El tamaño de la memoria del computador debe ingresarse expresado en Kilobytes. Recuerde que un Kilobyte = 1024 bytes. 2.4 Dado la base y la altura de un rectángulo, calcule el área y el perímetro del mismo. 2.5 Determine y muestre el cuadrado y el cubo de un número. 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.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
12
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Semana 03
A medida que avanzamos, encontramos que la mayoría de los problemas no se logran resolver con estructuras secuenciales, pues siempre hemos de tomar una decisión, hay diversas alternativas por las cuales elegir sobre la base de evaluar una condición determinada. Para poder conseguir solucionar estos problemas utilizaremos las estructuras selectivas o condicionales o de selección y en este primer momento la estructura de selección simple, la cual gráficamente se representa con un rombo. Diagrama de flujo Cuando la condición es verdadera, se ejecutan las instrucciones (acciones) que están incluidas en el rectángulo del proceso, caso contrario, no se ejecuta nada y se continúa con el resto del programa.
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í.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
13
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Para la condición que es una expresión booleana, iniciaremos utilizando los operadores relacionales que se detallan a continuación: Operador
Nombre
Ejemplo
<
menor que mayor que igual a no igual a menor que o igual a mayor que o igual a
a
>
==
!= <= >=
Significado
es menor que b a es mayor que b a es igual a b a no es igual a b a es menor que o igual a b a es menor que o igual a b a
a>b a==b a!=b a<=5 a>=b
En JAVA el operador de igualdad es ==, no confundir con el simple = que es asignación.
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: Tabla de verdad del operador lógico AND x
y
resultado
true true false false
true false true false
true
false false false
Tabla de verdad del operador lógico OR y
x
resultado
true true true false false true false false
true true true
false
Tabla de verdad del operador lógico NOT
AL GOR I TMOS
x
resultado
true false
false true
Mg. Hugo Caselli Gismondi
14
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática Ejemplos:
Los operadores AND y OR combinan expresiones relacionales cuyo resultado viene dado por la última columna de sus tablas de verdad. Por ejemplo: (a
=b) La expresión "NO a es igual a b" !(a==b) es verdadera si a es distinto de b, y es falsa si a es igual a b. Esta expresión es equivalente a (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 Constantes Nombre = Juan NotaEE = 09 NotaPR = 14
(tipo: Cadena) (tipo: entero) (tipo: entero)
Variable Promedio Condicion = “”
(tipo: real) (tipo: Cadena)
AL GOR I TMOS
Proceso (operaciones) Obtener el promedio: (NotaEE*2+NotaPR)/3.0 Condición Promedio>=11.0 Salida Nombre, Promedio y condición
Mg. Hugo Caselli Gismondi
15
Diagrama de Flujo
Diagrama de Nassi-Shneiderman
Pseudocódigo
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
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
16
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 DNIazul”.
2. Diseñar el algoritmo que luego de ingresar el nombre y el sueldo de un trabajador, se evalué si el sueldo es menor al sueldo mínimo en cuyo caso se le aplica una bonificación del 15%. Debe imprimir el nombre, el sueldo y su sueldo incrementado. 3. Construya un algoritmo que solicite ingresar dos números enteros distintos cualquiera, si el primer número ingresado es mayor que el segundo, entonces se debe imprimir la diferencia, la multiplicación y la división entre ellos. 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
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
17
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 flujo
Pseudocódigo
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 Nombre = Juan NotaEE = 9 NotaPR = 14
AL GOR I TMOS
(tipo: Cadena) (tipo: entero) (tipo: entero)
Variable Promedio (tipo: real) Condición = “” (tipo: Cadena) Proceso (operaciones) Obtener el promedio: (NotaEE*2+NotaPR)/3.0
Mg. Hugo Caselli Gismondi
18
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Condición Promedio>=11
Salida 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
Solución Diagrama de Nassi-Shneiderman
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
19
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 2. Diseñar el algoritmo que luego de ingresar el nombre y el sueldo de un trabajador, se evalué si el sueldo es menor o igual al sueldo mínimo en cuyo caso se le aplica una bonificación del 15% caso contrario solo le debe aplicar una bonificación de 5% Debe imprimir el nombre, el sueldo y el sueldo incrementado. 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.
4. La empresa de turismo “El Holandés Errante”, nos solicita que le facilitemos un pequeño programa para poder orientar mejor a sus clientes con respecto a la oferta que están promocionando, con respecto al precio de los viajes de ida y vuelta de los tours que deben ser calculados según la distancia (2.35 Soles/km) los días de permanencia en el sitio a visitar, con una reducción del 35% si la permanencia supera los 7 días y la distancia los 1000 Km. 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.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
20
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 (.........)
Caso contrario Si condiciónn entonces Sentencia(s)n1 Caso contrario Sentencia(s)n2 Fin_si
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
21
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
22
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Pseudocódigo Inicio a = 1, b = 2, c = 3 mayor = 0 si (a>b y a>c) entonces mayor = a caso contrario si (b>a y b>c) entonces mayor = b Caso contrario si (c>a y c>b) entonces mayor = c fin_si Imprimir “El número mayor es: “ mayor
Fin
Nassi-Shneiderman
----------- Implemente su solución -----------------
Otra solución(2)
Diagr ama de flujo
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
23
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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
----------- Implemente su solución -----------------
Otra solución(3)
Diagrama de flujo
Pseudocódigo y Nassi-Shneiderman
----- Implementar solución -----
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
24
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 Según expresión hacer
Nassi-Shneiderman
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 AL GOR I TMOS
Mg. Hugo Caselli Gismondi
25
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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”
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
26
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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.2 Construya un algoritmo utilizando selección múltiple de casos, que luego de ingresar la categoría y el sueldo de un trabajador, calcule la bonificación correspondiente por cumplimiento de metas, de acuerdo con el siguiente cuadro: Categoría Tasa Bonificación A 20% B 15% C 10% D 5% Al final debe imprimir la categoría, sueldo, bonificación y sueldo incrementado. 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. 4.7 El costo de las llamadas telefónicas internacionales depende de la tarifa por la distancia geográfica entre los países de origen y destino, así como de los minutos hablados. Los costos respectivos a los diversos destinos desde Perú a cada continente o región se muestran a continuación: AL GOR I TMOS
Mg. Hugo Caselli Gismondi
27
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Código Continente/región Tarifa (S/.) 15 América 1.25 20 Europa 1.75 25 Asia 2.25 30 África 2.00 35 Oceanía 2.50 Ingrese nombre de usuario, código y minutos hablados, determine el costo.
Iniciamos el procesamiento de más de un dato, utilizando la estructura repetitiva desde la cual es muy útil cuando se conoce el número de veces que se desea procesar un conjunto de instrucciones, es decir el número de iteraciones es constante o fijo. Esta estructura luego de ejecutar las sentencias que contiene en el número indicado, de manera automática sede el paso a las siguientes instrucciones que continúan en el programa Diagrama de Flujo
Pseudocódigo desde i 0 hasta n hacer Sentencia(s) Fin_desde
o Para i 0 hasta n hacer Sentencia(s) Fin_para
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
28
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática 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
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
29
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática 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.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
30
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Semana 05
Estructuras repetitivas La ventaja de tener un computador es que puede resolver problemas que conllevan manejar operaciones que son repetitivas para cuando una persona lo realiza, es por ello que los lenguajes de programación nos brindan sentencias que permiten realizar estas tareas de una manera mucho más sencilla, de allí el gran auge que tuvieron las aplicaciones informáticas que automatizaron el trabajo para hacerlo más rápido y eficiente. Estas estructuras se conforman como bucles o rizos (loops), denominándose iteración el conjunto de sentencias que se ejecutan repetidas veces.
La estructura mientras (while) es aquella que primero evalúa la condición y luego ejecuta el conjunto de sentencias que contiene, si la condición es falsa, no se ejecuta ninguna sentencia dentro del cuerpo de la sentencia while y se prosigue con la siguiente sentencia después del bucle mientras. Diagrama de flujo
Pseudocódigo
Estructura repetitiva (WHILE-DO) Mientras condición hacer Sentencia(s) Fin_mientras
Nassi-Shneiderman
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
31
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 contador = contador + 1
cont = 0 cont = cont – 1
// se inicializa // se decrementa
En ambos casos el contador incrementa o decrementa en un valor constante igual a 1.
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 Total = Total + X
// se inicializa // 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 LG ORI TMOS
Mg. Hugo Caselli Gismondi
32
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
33
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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. Diagrama de flujo
Pseudocódigo
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 AL GOR I TMOS
Mg. Hugo Caselli Gismondi
34
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Diagrama de Nassi-Shneiderman
Diagrama de Flujo
Ejercicios Resuelva los ejercicios de la semana 07 con la estructura do … while, de igual manera
los ejercicios siguientes: 1.
Un vendedor de golosinas ha hecho varias ventas en el día las cuales lleva anotado en una libreta, ayúdele a determinar cuántas ventas fueron menores o iguales a S/.10.00, cuantas fueron mayores a S/.10.00 pero menores a S/.20.00 y cuántas fueron iguales o mayores a S/.20.00, haga los ingresos necesarios indicando terminar cuando ingrese un número negativo.
2.
A continuación, presentamos la conjetura de ULAM (En honor del matemático S. Ulam) que dice: a) Empezar con cualquier número positivo b) Si es par divídalo entre 2; si es impar multiplíquelo por 3 y agréguele 1. c) Obtener enteros sucesivamente repitiendo el proceso. Al final se debe obtener el número 1, independiente del entero inicial.
3.
Desarrolle el algoritmo que lea un número entero N y calcule la suma de la siguiente serie: 11 + 22 + 33 + . . . + Nn
AL GOR I TMOS
(N número de términos de la serie)
Mg. Hugo Caselli Gismondi
35
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
4.
Construya el algoritmo que calcule el término 150 de la serie de Fibonacci. Recuerde que los 2 primeros términos de la serie son 0 y 1. El resto se calculan como la suma de los 2 números inmediatos que le preceden. Ejemplo: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ……….
5.
En la última elección de congresistas de nuestra región 4 candidatos en una mesa quieren el reconteo de los votos (identificarlos con los números 1, 2, ,3 y 4). Elabore el algoritmo que le permita al Presidente de mesa agilizar el conteo a medida que el secretario le va dictando en el orden que los va sacando del ánfora, para terminar, utilice el valor 0.
6.
Con un algoritmo ayude a determinar a una empresa de N empleados, el trabajador de mayor sueldo de la empresa, al final debe imprimir el código del empleado, su nombre y sueldo.
7.
El SENAMHI lleva los registros de los promedios mensuales de las lluvias caídas en las principales regiones agrícolas del país. Ellos las han divido en 3 regiones: Norte, Centro y Sur, calcule: a) El promedio anual de la región Centro b) El mes y registro con menor lluvia en la región Sur c) La región con mayor lluvia anual Considere que los registros anuales de las regiones son diferentes)
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
36
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
37
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática Solución
Pseudocódigo (1)
Inicio //Programa principal Escribir “Ingrese valor 1: “ Leer n1 Escribir “Ingrese valor 2: “ Leer n2 Escribir “La suma de “,n1,“ + “,n2,“ = “,Suma2Num(n1, n2) Fin 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 AL GOR I TMOS
Mg. Hugo Caselli Gismondi
38
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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. Variables locales y globales 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.
Fuente: (Joyanes Aguilar, 2008)
Ejemplo 6-3 Elabore el algoritmo que determine las raíces reales de una Ecuación Cuadrática.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
39
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informá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) Escribir “Las Raíces Reales son: “ Escribir “X1 = “, x1 Escribir “X2 = “, x2 caso_contrario Escribir “La ecuación NO tiene raíces reales“ Fin_si Fin Solución_2 // Con métodos y valores constantes de prueba
real discriminante real a 1.0, b -4.0, c 4.0 Inicio //Programa principal Escribir “Raíces Ecuación Cuadrática“ Discrimina() RaicesReales() Fin Inicio Discrimina discriminante Fin_discrimina
b*b-4*a*c
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
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
40
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
msgRaizNOreal() 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 funciones matemáticas matemáticas se definen de de manera recursiva. recursiva. Tal es el caso caso del factorial de un número entero, que se define como sigue: n! = 1 x 2 x 3 x ….. x (n-1) x n
1
si n=0
(n-1)!*n
si n>0
o también tener presente que
0! = 1
n! =
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
AL GOR I TM OS
Mg. Mg . Hugo Case Caselli Gismond Gismondii
41
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
INICIO //Programa principal Escribir “Ingrese número para calcular factorial: “ Leer n F factorial(n) Escribir “El factorial de “, n, ” es = “, F FIN 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 aplic ación que calcule calc ule 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 Areatriángulo
radio2 *
base * altura 2
Areacuadrado lado *lado 1.2 Construya el algoritmo para una aplicación que convierta c onvierta un número 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.
AL GOR I TM OS
Mg. Mg . Hugo Case Caselli Gismond Gismondii
42
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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.6 Construya un u n algoritmo recursivo que q ue permita invertir in vertir un número. Ejemplo: Ejemplo : Entrada: 123, Salida: 321 1.7 Elabore un algoritmo alg oritmo recursivo recur sivo que permita perm ita sumar los lo s dígitos de un número. Ejemplo: Entrada: 123, Resultado: 6
AL GOR I TM OS
Mg. Mg . Hugo Case Caselli Gismond Gismondii
43
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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.1
Construya el algoritmo que muestre un pequeño menú de 4 opciones con números, cada que se seleccione uno nos diga que opción se eligió. Se debe restringir al usuario para que solo pueda digitar esos números. Solución
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
44
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
45
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
1.3
Diagrama de flujo maqueta de Proyecto de Producción de la asignatura.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
46
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
EJERCICIOS
7.1
Elabore el algoritmo que solo permita leer S o N.
7.2
Construya el algoritmo que cuente e imprima los múltiplos de 3 partiendo de la unidad hasta un valor máximo ingresado.
7.3
Elaborar el algoritmo que cuente e imprima los números que son múltiplo de 2 o de 3 para valores a partir de 1 y un número leído no mayor o igual que 200.
7.4
Generar el algoritmo que imprima el mayor y el menor de 5 números leídos.
7.5
Construya el algoritmo que cuente, sume e imprima los múltiplos de 2 que hay entre dos valores, siendo el segundo valor mayor que el primero.
7.6
Escriba el algoritmo que permita ingresar horas, minutos y segundos y que permita indicar la hora correcta. Ejemplo se ingresa 3 horas, 121 minutos 121 segundos la respuesta debe ser 5 horas 03 minutos 01 Segundo.
7.7
Generar el algoritmo que solicite leer un número menor o igual a 2000 luego del cual se debe escribir su equivalente en números romanos.
7.8
Escriba la línea en pseudocódigo equivalente, a las siguientes fórmulas matemáticas: a)
2
Z
c)
7.9
Y
b)
2
AB A B x y
an
p p ( )(1 ) N 1200 L m 1200 p (1 ) N 1 1200
n n1 n(n 1) n 2 2 n(n 1)(n 2) n 3 3 a b a b a b 1 1.2 1.2.3
Dado el siguiente algoritmo en pseudocódigo que incluye una función recursiva, diga qué valor se produciría para N=5. Efectué la prueba de escritorio para ello. INICIO //Programa principal Leer N Escribir N, “ sumado a 5 hasta “, N, “ veces es = “, sumaXT(N)
FIN SumaXT(entero x) Si x==0 entonces Retornar 5 Caso contrario Retornar sumaXT(x-1)+5 Fin_si Fin_sumaXT
Semana 08.- Examen de 1era Unidad
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
47
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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:
Declaración : Creación :
Tipo_dato[] Nombre_Arreglo nuevo Tipo_dato[tamaño] Nombre_Arreglo
Declaración y creación en la misma línea: Tipo_dato[] Nombre_Arreglo
AL GOR I TMOS
nuevo Tipo_dato[tamaño]
Mg. Hugo Caselli Gismondi
48
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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.
Tamaño del arreglo
Ejemplos Declaración : Creación:
entero[] notas notas nuevo entero[15]
Declaración y creación en la misma línea: entero[] notas
nuevo entero[15]
Se puede declarar e inicializar el arreglo con valores de la si guiente manera: entero notas
{11, 15, 18, 12, 10}
Luego puede ser manipulado dentro del código de solución en su forma simple: notas[índice]
Operaciones con Arreglos Un arreglo al ser un dato estructurado, es posible darle mantenimiento a través de una serie de operaciones como el recorrido, búsqueda, modificación, altas y bajas entre las más básicas y esenciales. 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.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
49
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática RPTA
EJEMPLO 9-1
RPTA
EJEMPLO 9-2
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
50
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática RPTA
EJEMPLO 9-3
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
AL GOR I TMOS
EE
NP
PROM
CONDICION
Juan
10
15
11.67
APROBADO
Luis
19
13
17.00
APROBADO
José
5
10
6.67
Iván
17
19
17.67
Adán
11
9
DESAPROBADO APROBADO
10.33 DESAPROBADO
Mg. Hugo Caselli Gismondi
51
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 06 - xxx
02 – 4,33 07 – yyy
03 – 5,67 08 – zzz
04 – 7,00 09 – www
05 – 8,33 10 – qqq
(…)
(…)
(…)
(…)
(…)
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
52
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
JAVA Java es un lenguaje de programación de propósito general orientado a objetos que fue diseñado por James Gosling de Sun Microsystems (posteriormente adquirida por la compañía Oracle). Su característica principal es permitir que los desarrolladores de aplicaciones escriban el programa una vez y lo ejecuten en cualquier dispositivo ("write once, run anywhere") cuyo acrónimo en inglés es WORA, significa que el código que es ejecutado en una plataforma no tiene que ser recompilado para correr en otra. Java se ha convertido en uno de los lenguajes de programación más populares en uso, con unos 10 millones de usuarios reportados. Oracle tiene dos productos que implementan Java Platform Standard Edition (Java SE) 7: Java SE Development Kit (JDK) 7 y Java SE Runtime Environment (JRE) 7. JDK 7 es un superconjunto de JRE 7, y contiene todo lo que está en JRE 7, además de herramientas tales como los compiladores y depuradores necesarios para el desarrollo de applets y aplicaciones. JRE 7 proporciona las bibliotecas, la Máquina Virtual de Java (JVM), y otros componentes para ejecutar applets y aplicaciones escritas en el lenguaje de programación Java. El siguiente diagrama conceptual ilustra los componentes de los productos de Oracle Java SE:
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
53
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
NETBEANS NetBeans es un entorno de desarrollo integrado (integrated development environment: IDE), hecho principalmente para el lenguaje de programación Java, es un producto libre y gratuito sin restricciones de uso. NetBeans es un proyecto de código abierto fundado por Sun MicroSystems en junio de 2000, actualmente Sun Microsystems es administrado por Oracle Corporation. 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. Las aplicaciones pueden instalar módulos dinámicamente. La plataforma ofrece servicios reusables comunes para las aplicaciones de escritorio, permitiendo a los desarrolladores centrarse en la lógica de sus aplicaciones. Algunas de las características de la aplicación son:
Gestión de la interfaz de usuario (menús y barras de herramientas)
Gestión de configuración de usuario
Gestión de almacenamiento (guardar o cargar algún tipo de dato)
Gestión de ventana
Marco Asistente (soporta diálogos para a paso)
Librería visual de Netbeans
Herramientas de desarrollo integrado
Podemos descargarlo desde: https://netbeans.org/downloads/ Teniendo las siguientes posibilidades:
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
54
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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.
La interface de Netbeans tiene la siguiente apariencia:
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
55
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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:
En la ventana contextual nos muestra las diferentes categorías de proyecto que se pueden trabajar, seleccionamos simplemente Java, porque es la que utilizaremos para las necesidades del curso y en el lado derecho Projects, seleccionamos Java
Application y le damos siguiente (next)
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
56
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 GOR I TMOS
Mg. Hugo Caselli Gismondi
57
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Al hacer click en Finish tenemos acceso al editor de Netbeas que nos permitirá escribir código JAVA:
Explorador de proyectos
AL GOR I TMOS
Menú principal
Navegador entre objetos
Mg. Hugo Caselli Gismondi
Editor de sentencias
58
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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. De igual manera para poder utilizar un arreglo bidimensional 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:
Declaración : Creación :
Tipo_dato[][] Nombre_matriz nuevo Tipo_dato[m][n] Nombre_Matriz
Declaración y creación en la misma línea: Tipo_dato[][] Nombre_Matriz
tamaño nuevo Tipo_dato[m][n]
Ejemplos:
Matriz A =
fila 0
col 0 dato00
col 1 dato01
col 2 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
Se puede declarar e inicializar el arreglo con valores de la si guiente manera: entero[][] A
{{1, 2, 3, 4},{5, 6, 7, 8}}
Operaciones con Arreglos Bidimensionales De igual manera que los arreglos unidimensionales, es posible darle mantenimiento a través de operaciones como el recorrido, búsqueda, modificación, altas y bajas entre las más básicas y esenciales.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
59
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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:
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
60
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Horas extra trabajadas por cada obrero en la semana: día 1 día 2 día 3 día 4 día 5 día 6
día 7
obrero 1
3
2
1
4
5
3
3
obrero 2
4
5
2
3
2
4
1
obrero 3
2
3
2
4
1
4
5
obrero 4
1
4
5
3
3
3
2
obrero 5
3
2
1
3
2
4
1
obrero 6
4
5
2
4
5
3
3
Categoría de cada obrero:
Precio horas extras:
Categoría obrero 1
C
obrero 2
A
obrero 3
B
obrero 4
B
obrero 5
C
obrero 6
A
Categoría
Precio
A
100
B
80
C
50
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.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
61
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Tipos Primitivos en Java Los resumimos en la siguiente tabla: TIPO DE DATO
PRIMITIVOS
NOMBRE
TIPO
OCUPA
Rango Notación Cientifica
byte short
Entero Entero
1 byte 2 bytes
-27 a 27-1 -215 a 215-1
int
Entero
4 bytes
-231 a 231-1
long
Entero
8 bytes
-231 a 231-1
4 bytes
2-149 a (2-2-23)*2127
Muy grande
8 bytes
2-107 a (2-252)*21023
Muy grande
2 bytes
\u0000' a '\uFFFF'
---
Decimal
float
simple
double
Decimal
doble Carácter
char
simple
boolean
Valor true
o false
RANGO en DECIMAL
-128 a 127 -32768 a 32767 -2147483648 a 2147483647 9223372036854775808 a
9223372036854775807
1 byte
---
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 boolean break byte strinctfp case catch char class const continue
default do double Else enum extends false final finally for goto
if implements import instanceof int interface long native new null package
private protected public return short static super swtich synchronized this threadsafe
throw throws trasient true try void while
cast
future
generic
inner
byvalue
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
62
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 : para especificación de objetos Clases 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 E jemplos 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 “. “Hola Mundo” , “” (cadena vacía) Ejemplos:
Operadores en Java
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
63
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Aritméticos y de conversión
De comparación
Lógicos
De asignación
i,f
+
i
&
i,f
==
b &
=
i,f
-
i
|
i,f
!=
b |
+=
i,f
*
i
^
i,f
<
b ^
-=
i,f
/
i
<<
i,f
<=
b &&
*=
i,f
%
i
>>
i,f
>
b |
/=
i,f
++
i
>>>
i,f
>=
b !
%=
i,f
--
b ==
&=
i
-
b !=
|=
i
~
b ?:
^=
Tipos válidos de los operandos i = Entero (byte, small, int, long) f = Punto Flotante (float, double) b = Lógico (boolean)
Delimitadores ( ) PARÉNTESIS: Listas de parámetros en la definición y llamada a métodos, precedencia en expresiones, expresiones para control de flujo y conversiones de tipo. { } LLAVES: Inicialización de arrays, bloques de código, clases, métodos y ámbitos locales. [ ] CORCHETES: Arrays. ; PUNTO Y COMA: Separador de sentencias. , COMA: Identificadores consecutivos en una declaración de variables y sentencias encadenadas dentro de una sentencia for. . PUNTO: Separador de nombres de paquetes, subpaquetes y clases; separador entre variables y métodos/miembros. Comentarios En Java hay tres tipos de comentarios: Comentarios de una sola línea ( // ) Ejemplo: // La fórmula es correcta Comentarios de una o más líneas ( /* */ ) Ejemplo: /* El área de un cuadrado es lado por lado sus unidades se nombran al cuadrado */ Comentarios de documentación ( /** */ ) Ejemplo: /** El área de un cuadrado es lado por lado
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
64
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
sus unidades se nombran al cuadrado */ La herramienta javadoc genera automáticamente en HTML la documentación del código a partir de los comentarios /** … */
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: identificador; lista_de_identificadores ; final identificador = ; //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 J A VA
Implementación en Java del ejemplo 2.1 promedio de notas de la semana 02.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
65
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Implementación del programa en JAVA que multiplica 3 números, ejercicio 2.1 de la semana 02.
Impresión por consola En JAVA a través del System.out. disponemos de un método llamado println que nos permite imprimir algo por pantalla en una ventana de consola. Sintaxis JAVA System.out.println ("Texto a mostrar"); La primera S de System.out es mayúscula. Si la escribes minúscula obtendrás un error de compilación. Si queremos incluir variables concatenamos usando el símbolo + de esta manera: System.out.println ("El promedio es " + promedio + " puntos");
ESTRUCTURA CONDICIONAL SIMPLE EN JAVA 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); } Esta sentencia utiliza las llaves para agrupar la(s) instrucción(es)
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
66
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Codificación de Ejemplo 3-1 de la semana 03 de este Manual
ESTRUCTURA CONDICIONAL MULTIPLE EN JAVA 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; } else { Instrucción(es) 2; }
Esta sentencia utiliza las llaves para agrupar la(s) instrucción(es).
Codificación de Ejemplo 3-2 de la semana 03 de este Manual
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
67
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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. Ejemplo de Sintaxis JAVA
if (condición){ if (condición){ Instrucción(es) 1; } else { Instrucción(es) 2; } } else { if (condición){ Instrucción(es) 1; } else { Instrucción(es) 2; } } Codificación de Ejemplo 4-1 solución (b) de la semana 04 de este Manual
Si desea indentar su código y este sea ordenado por Netbeans (herramienta de edición de código JAVA), click derecho en el editor de código y utilice la opción format o su ruta corta.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
68
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Entrada y Lectura de Datos con JAVA Scanner La clase Scanner está disponible a partir de Java 5 y facilita la lectura de datos en los programas Java. Para utilizar Scanner en el programa tendremos que hacer lo siguiente: 1. Indicar el import La clase Scanner se encuentra en el paquete java.util por lo tanto se debe incluir al inicio del programa la instrucción: import java.util.Scanner; 2. Crear un objeto Scanner Tenemos que crear un objeto de la clase Scanner asociado al dispositivo de entrada. Si el dispositivo de entrada es el teclado escribiremos: Scanner teclado = new Scanner(System.in); Se ha creado el objeto teclado asociado al teclado representado por System.in Una vez hecho esto podemos leer datos por teclado. 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.
Lectura por teclado de un número entero: int n; System.out.print("Introduzca un número entero: "); n = teclado.nextInt();
Lectura de un número de tipo double: double x; System.out.print("Introduzca número de tipo double: "); x = teclado.nextDouble(); Lectura de una cadena de caracteres: String s; System.out.print("Introduzca texto: "); s = teclado.nextLine();
EJERCICIOS Implementar en JAVA los ejercicios de semana 02 y semana 03 de este manual.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
69
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 Se inicializa tamaño arreglo e N 8;K 2 Repetir hasta K=N inicio inspección TEMP A[K] PTR K-1 Mientras TEMP
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
70
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática Ejemplo: sea el siguiente arreglo A[8] = { 7, 3, 4, 1, 8, 2, 6, 5 }, N=8 Prueba de Escritorio
A[0] -999
0 1 2 3 4 5 6 7 8
-999 7 3 4 1 8 2 6 5
N 8
K TEMP 2 3 3
4
4
1
5 6
8 2
-999 3 7 4 1 8 2 6 5
-999 3 4 7 1 8 2 6 5
PTR 1 0 2 1 3 2 1 0 4 5 4
-999 1 3 4 7 8 2 6 5
A[PTR] 7 -999 7 3 7 4 3 -999 7 8 7
-999
-999
A[PTR+1] 7 3 7 4 7 4 3 1 8 8 7
-999
-999
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_ repetir_J TEMP A[K] A[K] A[POS] A[POS] TEMP Fin_desde_K Fin
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
71
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática Prueba de escritorio
K 1 1 1 1 1 1 1 2 2 2 2 2
MIN 7 3 3 1 1 1 1 3 3 3 3 2
1 7 1 1
2 3 3 2
POS 1 2 2 4 4 4 4 2 2 2 2 6
3 4 4 4
J A[J] TEMP 2 3 3 4 4 1 5 8 6 2 7 6 8 5 7 3 4 4 7 5 8 6 2 7 6 8 5 3 4 1 7 7
5 8 8 8
6 2 2 3
A[K] A[POS]
7 6 6 6
1
7
2
3
8 5 5 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.
Tarea: Implementar el método de la burbuja en JAVA
Búsqueda La búsqueda es una de las operaciones que aparecen con más frecuencia en programación de ordenadores. Básicamente, se trata de buscar un elemento determinado dentro de una colección de N datos, que generalmente se representa mediante una estructura de tipo vector A[N], donde los tipo de datos pueden ser entero, real, etc. Esto significa, que dado un argumento de búsqueda, X, se trata de encontrar el índice i del vector A para el cual se verifica A(i)=X.
1. Búsqueda lineal Es la solución más obvia y que se aplica cuando no hay ninguna información adicional acerca de los datos buscados. Consiste en recorrer secuencialmente el
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
72
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
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 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)
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 m1)
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.
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
73
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática Pseudocódigo
INICIO Leer X i 1; j n-1; m (i+j)\2 /* \ división entera */ Mientras (a[m] <> X y 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 ){ case valor1: acción 1; break; case valor2: acción 2; break; case valor3: acción 3; break; ... case valorN: acción N; break; [default: acción D; ]
El valor de la expresión debe ser byte, char, short o int. No puede ser boolean, long, double, float, String o cualquier otra clase de objeto. El valor de la expresión se compara contra la etiqueta de los case, si se encuentra un valor que se empareja, las sentencia que siguen a la etiqueta se ejecutan hasta que se encuentre una sentencia break, la cual nos lleva en secuencia a la siguiente sentencia luego del switch. Si no se encuentra pareja con ninguna etiqueta, se ejecuta la acción por default siempre y cuando esta haya sido considerada, sino se continúa con la siguiente sentencia luego del switch.
}
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
74
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Codificación de Ejemplo 4-2 solución de la semana 04 de este Manual
Sentencia for (desde) La sentencia for 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. La forma general de la instrucción for puede expresarse como sigue: Sintaxis JAVA
for (inicialización; termino; incremento) { instrucción(es) }
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
75
Universidad Nacional del Santa Facultad de Ingeniería Escuela Académico Profesional de Ingeniería de Sistemas e Informática
Cuando se utiliza esta versión de la instrucción for, tener en cuenta que: La expresión de “ inicialización ” da inicio al bucle y se ejecuta una vez, luego continúa con “incremento” , cuando la expresión de “termino” se evalúa como falsa, el bucle termina. La expresión de “incremento” se invoca después de cada iteración a través del lazo; es perfectamente aceptable para esta expresión para incrementar o reducir un valor. Codificación de Ejemplo 4-3 solución de la semana 04 de este Manual
Codificación de Ejercicio 4-8 solución de la semana 04 de este Manual
AL GOR I TMOS
Mg. Hugo Caselli Gismondi
76