UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN SEMESTRE II-2014 PRÁCTICA #1 INTRODUCCIÓN AL LENGUAJE JAVA 1. Considere la sucesión de números de Fibonacci que se inicia con los siguientes elementos: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … La sucesión de números de Fibonacci se define matemáticamente por la siguiente relación de recurrencia: Fn+2 = Fn+1 + Fn- para n 0, con F0 = 0 y F1 = 1 A continuación se presenta un algoritmo en pseudocódigo para calcular y escribir los elementos de esta sucesión. Clase Fibonacci { /* Imprimir por consola los primeros public main () { Entero i, n, a, b, c; n = 5; // la variable n representa a= 0; // la variable a representa b = 1; // la variable b representa // la variable c representa a Fn+2 i = 1; Escribir("La sucesión de fibonacci Mientras (i n) Hacer Si (i == 1) entonces c = a; Sino Si (i == 2) entonces c = b; Sino c = a + b; a = b; b = c; Fsi; Fsi; Escribir( c ); i = i+1; FMientras; n valores en la secuencia de Fibonacci */ el número de elementos de la sucesión a F n en la relación recursiva a F n+1 en la relación recursiva en la relación recursiva es:"); Realice lo que se indica a continuación: a) Generar un programa en Java que implemente el pseudocódigo utilizando una estructura de control while. b) Modifique el programa que obtuvo en la parte (a) de manera que el valor de la variable n se introduzca por consola. c) Modifique el programa que obtuvo en la parte (b) para obtener un programa equivalente utilizando una estructura de control for en lugar de la estructura de control while. d) Modifique el programa que obtuvo en la parte (c) para obtener un programa equivalente que utilice una estructura de selección múltiple switch en lugar de la estructura de selección compuesta anidada. 2. Para la estimación del esfuerzo de desarrollo cuando aun no se ha desarrollado el código de un producto de software, una manera de estimar el esfuerzo de desarrollo se basa en el concepto conocido como puntos de función. Los puntos de función miden el número de funcionalidades que tiene un sistema de acuerdo con lo que se describe en su especificación. En la especificación de un sistema, los elementos de interés para la estimación del esfuerzo son: entradas externas (data o información de control que se genera en el exterior del sistema. Por ejemplo, número de archivos que no se generan en el sistema, pero que el sistema requiere); salidas externas (un proceso elemental, es decir un conjunto de acciones dentro del sistema, que genera data o información de control para utilizarla en el exterior del sistema. Por ejemplo, número de reportes y/o mensajes al usuario); información externa (número de entradas interactivas que requieren una respuesta como resultado de recuperar la data. La respuesta no contiene data derivada, es decir transformaciones sobre la data, que reside en el sistema); archivos externos (número de archivos que se generan para otros sistemas); archivos internos (número de archivos que no son visibles ni utilizados fuera del sistema). Es fundamental determinar el número de cada uno de los elementos de interés. A cada uno de estos, se le asigna una complejidad subjetiva en términos de si esta es simple (s), promedio (p) o compleja (c). Dada la variedad de elementos de interés, es usual que cada elemento tenga un factor de peso diferente dependiendo de la complejidad. En la Tabla 1 se presentan los valores del factor de peso de la complejidad para cada uno de los elementos de interés. Tabla 1. Factores de pesos. Elemento de interés Simple Promedio Compleja (s) (p) (c) entradas externas 3 4 6 salidas externas 4 5 7 información externa 3 4 6 archivos externos 5 7 10 archivos internos 7 10 15 Una vez que se ha cuantificado cada elemento de interés (EI), se le asocia el factor de peso (peso) correspondiente y se calcula los puntos de función no ajustados UFC que se define a través de la siguiente expresión: UFC = archivos _ int ernos ∑ EI i i = entradas _ externas x pesoi De manera informativa, para calcular el número de puntos de función FP se multiplica UFC por lo que se conoce como factor de complejidad técnica TCF. Sin embargo, para este ejercicio el interés se centra en automatizar el cálculo de UFC. Para esto asuma lo siguiente: Sea un archivo factorDePesos.txt que contiene números enteros positivos, separados por un espacio, que representan los factores de pesos según la Tabla 1. Es decir, tres números consecutivos en el archivo (a b c)i representan el valor del factor de peso de la complejidad simple (a), promedio (p) y compleja (c) de un elemento de interés i, donde i se refiere al i-ésimo elemento del conjunto de tipos de elementos de interés. Los tipos de elementos de interés son: {entradas externas, salidas externas, información externa, archivos externos, archivos internos}. Ejemplo: factorDePesos.txt = {3 4 6 4 5 7 3 4 6 5 7 10 7 10 15}. a) Se requiere un programa en Java que lea desde el archivo los números que representan las complejidades de los elementos de interés y los almacene en un arreglo. b) Modifique el programa que obtuvo en la parte (a) de manera que utilice las clases definidas en el paquete java.util, que usted considere convenientes, por ejemplo Vector, ArrayList o List, para la implementación del arreglo. c) Incorpore en el programa que obtuvo en la parte (b) instrucciones para solicitar la entrada por consola de los números de elementos de cada tipo de elemento de interés i y su complejidad j asignada, donde j puede ser ‘s’ (simple), ‘p’ (promedio) o ‘c’ (compleja) y almacénelo en un archivo especificacionData.txt. d) Incorpore en el programa que obtuvo en la parte (c) instrucciones para calcular UFC. e) Ejecute el programa que obtuvo en (d) con las siguientes entradas: 4 archivos de entradas externas y de complejidad p, 5 salidas externas de complejidad p, 4 información externa de complejidad s, 10 archivos externos de complejidad c y 7 archivos internos de complejidad p. Muestre el resultado del cálculo de UFC por consola. 3. Se requiere de un programa en Java que implemente la autenticación de usuarios. El sistema solicita por consola el login del usuario que es un campo de 6 caracteres alfanuméricos. Una vez que el usuario suministro su login. Si el login es válido, el sistema le solicita la clave y verifica que la clave coincida con la clave que tiene almacenada. Si coincide, el sistema imprime por consola el mensaje “autenticación exitosa”, en caso contrario “clave invalida”. Si el login no es válido, el sistema imprime por consola “login inválido”. El sistema mantiene el conjunto válido de login-clave. a) Defina un objeto que implemente el conjunto valido de login-clave del sistema. b) Defina una clase Cliente con el método estático main(). c) En el cuerpo del método estático main() incluya instrucciones para: i) ingresar por consola una secuencia de 6 caracteres que representa el login. ii) ingresar por consola una secuencia de 6 caracteres alfanuméricos que representa la clave. iii) crear instancia de la clase Autenticacion. La clase Autenticacion define como atributos login y clave y los métodos verificarLogin y verificarClave. El método verificarLogin tiene el parámetro login y retorna un booleano. El método verificarClave tiene dos parámetros: login y clave y retorna un booleano. iv) Imprimir por consola el resultado de cada autenticación. d) Ejecute el programa con varios pares login-clave de manera que se imprima al menos cada uno de los tres mensajes indicados en el enunciado.