Vous êtes sur la page 1sur 13

15

1.8. Problemas resueltos

1.8.

Problemas resueltos
Calcular el valor decimal del nmero binario 11000001. u

Problema 1.1 Solucin o

v = 1 * 2^7 + 1 * 2^6 + 0 * 2^5 + 0 * 2^4 + 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = 1 * 128 + 1 * 64 + 0 * 32 + 0 * 16 + 0 * 8 + 0 * 4 + 0 * 2 + 1 * 1 = 193

Problema 1.2 Solucin o

Obtener la representacin en binario del nmero decimal 58. o u

58 29 14 7 3 1

/ / / / / /

2 2 2 2 2 2

= = = = = =

29 14 7 3 1 0

resto resto resto resto resto resto

0 1 0 1 1 1

De donde el n mero binario resultante de convertir 58 es 010111, como se puede comprobar convirtindolo u e a decimal.

Problema 1.3 decimal. Solucin o

Convertir el nmero binario anterior (11000001) a base octal y calcular su valor u

Su valor en base octal ser 301, resultante de obtener los bits en grupos de 3 empezando por la derecha: a 001 -> 1 000-> 0 11-> 3

El valor decimal obtenido a partir del octal es: v = 3 * 8^2 + 0 * 8^1 + 1 * 8^0 = 3 * 64 + 1 = 193

Problema 1.4 valor decimal. Solucin o

Convertir el nmero binario anterior (11000001) a base hexadecimal y calcular su u

Su valor en base hexadecimal ser C1, resultante de obtener los bits en grupos de 4 empezando por la a derecha: 0001 -> 1 1100 -> C

El valor decimal obtenido a partir del hexadecimal es:

Cap tulo 1. Fundamentos de programacin o


v = C * 16^1 + 1 * 16^0 = 12 * 16 + 1 = 193

16

Problema 1.5 magnitud. Solucin o


4 -5 0 -17 127 -127 -> -> -> -> -> ->

Convertir a binario los nmeros 4, -5, 0, -17, 127 y -127 usando 8 bits en signou

00000100 10000101 00000000 10010001 01111111 11111111

Problema 1.6 mento a 2. Solucin o


4 -5 0 -17 127 -127 -> -> -> -> -> ->

Convertir a binario los nmeros 4, -5, 0, -17, 127 y -127 usando 8 bits en compleu

00000100 11111011 00000000 11101111 01111111 10000001

Problema 1.7 Solucin o


0011 1101 -----0000

Hacer la suma de 3 y -3.

3 -3 --0

Problema 1.8 Sea una mquina como un interruptor electrnico con distintas intensidades, que a o tiene unicamente cuatro instrucciones como las siguientes: Descripcin de la Instruccin o o Reiniciar el interruptor Registrar pulsacin encendido o Registrar pulsacin apagado o Apagar el interruptor Codificacin Binaria o 0000 0000 0001 XXXX 0010 0000 0011 0000

Escriba un programa que encienda y apague el interruptor de la mquina anterior con distintas a intensidades, suponiendo que las intensidades estn a partir de la posicin de memoria 1100. a o Solucin o
Un resumen del programa pedido ser como el siguiente: a

17

1.8. Problemas resueltos

Posicin de o Memoria 0000 0001 0010 0001 0010 0010 ... 1101 1102 ...

Instruccin o 00000000 00011101 00100000 00011102 00100000 00110000

Comentarios Reiniciar la mquina a Encender con intensidad de FF01 Apagar el interruptor Encender con intensidad de FF02 Apagar el interruptor Apagar la mquina a

00000010 00000101

Intensidad 2 Intensidad 5

Problema 1.9 Cuntas instrucciones de ensamblador ser necesarias para codicar programas a an para el interruptor anterior? Solucin o
Para el interruptor anterior ser suciente con un ensamblador de cuatro instrucciones, que podr ser a an las siguientes: Cdigos o Instruccin o Comentarios ensamblador mquina a --------------------------------------------------------RESET 00000000 Reiniciar la mquina a ON MEM 0001XXXX Encender con la intensidad en MEM OFF 00100000 Apagar el interruptor HALT 00110000 Apagar la mquina a

Problema 1.10

Identique clases, objetos y mtodos a partir de la siguiente descripcin: e o

Todo paciente de hospital tiene una historia clnica en la que se incluye su nombre, apellidos, direccin y edad como datos identicativos. Adems, incluye una lista de enfermedades posibles y de o a actos mdicos realizados sobre dicho paciente. La historia se puede crear, destruir y archivar. Adems, e a se puede modicar y actualizar. Solucin o
Aplicando la tcnica descrita brevemente, se observan en la descripcin los siguientes elementos: e o Clases: hospital, paciente, historia cl nica, enfermedades, actos mdicos. e Atributos del paciente: nombre, apellidos, direccin, edad e historia. o Atributos de la historia: lista de enfermedades y actos mdicos. e Mtodos de la historia: crear, destruir, modicar, archivar y actualizar. e

Problema 1.11

Qu hereda una subclase de una superclase? e

Cap tulo 1. Fundamentos de programacin o Solucin o

18

Una subclase heredar todo de su superclase. No se puede decir que se quiere que una clase herede el 50 a Sin embargo, es posible que una subclase redena componentes heredados. Por ejemplo, la clase Paciente puede tener varias subclases, como PacientePublico y PacientePrivado y puede denir dene una variable de clase SeguroMinimo de 10000,00 euros. Pero la clase PacientePrivado redene este valor a una cantidad de 25000,00 euros. Otros componentes heredados tambin pueden ser redenidos. As la clase PacientePrivado puede redenir e , el mtodo heredado Facturar a adiendo instrucciones aplicables a las instancias de la clase como, por ejemplo, e n cargar 100 euros por cada d de estancia de estancia en el hospital que supere los 10 d a as. Igualmente, una subclase puede aadir mtodos y valores de datos a aquellos heredados de su superclase. n e As la clase PacientePrivado puede aadir un nuevo mtodo para determinar qu actos mdicos puede recibir n e e e este paciente como parte de su seguro.

Problema 1.12 Solucin o

Programa Java que incluya comentarios de los tres tipos posibles en Java.

/* * * Programa que ilustra el uso de comentarios. * Este es javadoc. Los * de estas lneas son * innecesarios, pero acotan bien el comentario. * La siguiente lnea cierra el comentario. */ import java.io.*; // importa la parte de E/S de Java. public class Comentarios { public static void main(String args[]) { // Parte ejecutiva del programa // Slo imprime mensajes por salida estndar o a System.out.println ("\n Formatos de comentarios: "); System.out.println ("\n javadoc /** ... */, //, /* ... */ "); /* * Comentario de bloque o multilnea. */ } }

Problema 1.13 Solucin o

Programa Java que ilustra el uso de la sentencia import.

/* * * Programa que ilustra el uso de la sentencia import. * Como se ve se puede usar con y sin ambiguedad.

19
*/

1.8. Problemas resueltos

import java.io.*; // importa la parte de E/S de Java. import CuentaCorriente.*; // exporta abrirCuenta(nombre, cantidad) import CuentaAhorro.*; // exporta abrirCuenta(nombre, cantidad) public class Ambiguedad { public static void main(String args[]) { // Parte ejecutiva del programa System.out.println ("\n Uso con ambiguedad: abrirCuenta("Juan Lopez", 1200); abrirCuenta("Antonio Perez", 135);

");

System.out.println ("\n Uso sin ambiguedad: "); CuentaCorriente.abrirCuenta("Juan Lopez", 1200); CuentaAhorro.abrirCuenta("Antonio Perez", 135); } }

Problema 1.14 Solucin o

Programa que realiza entrada y salida bsica de distintos tipos de datos a

// Entrada/salida sencilla desde consola import java.io.*; public class EntradaSalida { // Instanciacin de una clase para leer de la consola o private static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); public static void main(String args[]) throws IOException { // Declaracin de variables o int i = 0; float f = 0.0F; double d = 0.0; char c; String input; // lectura de nmeros desde la consola u System.out.print ("\n Escriba un numero entero: "); input = stdin.readLine(); // lo lee como un string i = Integer.parseInt(input); // lo convierte a entero System.out.println ("\n El numero es " + i); System.out.print ("\n Escriba un numero flotante: "); input = stdin.readLine(); // lo lee como un string f = Float.parseFloat(input); // lo convierte a float

Cap tulo 1. Fundamentos de programacin o


System.out.println ("\n El numero es " + f); System.out.print ("\n Escriba un numero double: "); input = stdin.readLine(); // lo lee como un string d = Double.parseDouble(input); // lo convierte a double System.out.println ("\n El numero es " + d); // lectura de strings desde la consola System.out.print ("\n Escriba un string: "); input = stdin.readLine(); // lo lee como un string System.out.println ("\n El string es " + input); } }

20

Problema 1.15 Especique los requisitos de un programa que busque un nmero dentro de un vector u de 1000 elementos enteros. Para comprobar su eciencia debe imprimir el nmero de pasos necesarios u para la bsqueda. u Solucin o
El programa debe ser capaz de leer el n mero a buscar por la consola (entrada estndar). u a El programa debe ser capaz de calcular los pasos de b squeda y de imprimirlos por la consola (salida u estndar). a El programa debe terminar cuando se haya encontrado el nmero buscado. u El vector se rellena de 0 a 1000. El programa debe recorrer el vector para encontrar el nmero objetivo. u

Problema 1.16 Partiendo del anlisis anterior disee un programa que busque un nmero dentro a n u de un vector de 1000 elementos enteros. Solucin o
En este caso, el dise o es sencillo. Slo hace falta la clase principal y no se hereda de nada, excepto de las n o clases de entrada y salida. El vector puede declarase como: int[] vector; vector = new int[1000]; // crea un vector de 1000 enteros Para resolver el problema se elige un algoritmo de b squeda lineal, con un pseudocdigo como el siguiente: u o vueltas = 1 contador = 0 numero = leerNumeroEntero mientras (contador < numero) repetir Si (numero == vector[contador]) Imprimir "Encontrador el numero " numero " en vueltas "vueltas" En otro caso incrementar vueltas fin repetir Como se puede ver, el dise o es sucientemente detallado para pasar directamente a la codicacin. n o

21

1.8. Problemas resueltos

Problema 1.17 Solucin o

Codique el diseo anterior usando bsqueda lineal de un nmero. n u u

// Bsqueda lineal de un nmero mediante un bucle u u import java.io.*; public class BusquedaLineal { // Instanciacin de una clase para leer de la consola o private static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); public static void main(String args[]) throws IOException { // Declaracin de variables o int i = 0; int[] vector; int numero = 546; int encontrado = -1; String input; vector = new int[1000]; // crea un vector de 1000 enteros // lectura del nmero a buscar de la consola u System.out.print ("\n Escriba el numero: "); input = stdin.readLine(); // lo lee como un string numero = Integer.parseInt(input); // lo convierte a entero // algoritmo de bsqueda del nmero u u for (i=0; i < 1000; i++) vector[i] = i; /* Asigna valor al vector */ i = 0; while (encontrado < 0) /* Bucle de bsqueda */ u { if (vector[i] == numero) { System.out.println ("\n Encontrado numero " + numero + " en " + i + " vueltas"); encontrado = 1; } else i = i+1; } } }

Problema 1.18 Solucin o

Pruebas a realizar en la codicacin anterior usando bsqueda lineal de un nmero. o u u

1. Codicacin de la lectura del valor de entrada. o Pruebe que es correcta leyendo varios n meros enteros e imprimindolos por la salida. u e

Cap tulo 1. Fundamentos de programacin o


Compruebe que si introduce un valor que no es entero no es admitido. 2. Codicacin de la lectura del valor de salida. o Pruebe que es correcta escribiendo varios n meros enteros. u 3. Codicacin del algoritmo de b squeda lineal. o u

22

Pruebe que es correcta leyendo varios n meros enteros e imprimiendo el resultado del algoritmo. u Pruebe que hace los bucles bien imprimiendo un mensaje a cada vuelta del bucle.

Problema 1.19 Solucin o

Pruebas a realizar en la codicacin anterior usando bsqueda lineal de un nmero. o u u

1. Pruebas con valores entre 1 y 5. 2. Pruebas con valores entre 300 y 350. 3. Pruebas con valores entre 700 y 350. 4. Pruebas con valores entre 900 y 1000. 5. Pruebas con valores negativos (-1 y -20). 6. Pruebas con valores mayores que 1000 (2500 y 3450).

Problema 1.20 ciones. Solucin o

Optimice el programa anterior para que encuentre los nmeros con menos operau

Analice este programa. Ver que hace 546 iteraciones del bucle for para encontrar el nmero 546. Pero si a u numero fuera 999, necesitar 1000 iteraciones. No parece un algoritmo muy optimizado. a Hay alternativas? S las hay. Se puede usar un algoritmo que intente optimizar la bsqueda reduciendo , u en cada paso el rango de b squeda. Un forma de acotar el rango de bsqueda podr ser dividir el campo por u u a dos sucesivamente. El programa siguiente muestra este algoritmo. // Bsqueda rpida de un nmero en un vector u a u import java.io.*; public class BusquedaRapida { // Instanciacin de una clase para leer de la consola o private static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); public static void main(String args[]) throws IOException { // Declaracin de variables o int i = 0; int vueltas = 1; int numero = 546; int elComienzo = 0; int elFinal = 1000; int[] vector;

23
String input;

1.8. Problemas resueltos

vector = new int[1000]; // declara un vector de 1000 enteros // lectura del nmero a buscar de la consola u System.out.print ("\n Escriba el numero: "); input = stdin.readLine(); // lo lee como un string numero = Integer.parseInt(input); // lo convierte a entero // algoritmo de bsqueda rpida del nmero u a u for (i=0; i < 1000; i++) vector[i] = i; /* Asigna valor al vector */ i = (elFinal - elComienzo) / 2; while (elComienzo != numero) /* Bucle de bsqueda */ u { if (vector[i] <= numero) elComienzo = i; else elFinal = i; i = (elFinal - elComienzo) / 2 + elComienzo; System.out.println ("\n El numero bucle es " + i); vueltas = vueltas + 1; } i = elComienzo; System.out.println ("\n Encontrado numero " + numero + " en " + i + " vueltas"); } } Si analiza este programa ver que necesita muchas menos iteraciones (slo 7) que el anterior y que su a o rendimiento slo depende del logaritmo del tama o del vector y no de la posicin del elemento. Es un algoritmo o n o muy optimizado, cuya traza del programa es: i i i i i i i = = = = = = = 500 750 625 562 531 554 546 < 546; > 546; > 546; > 546; < 546; > 546; == 546;

Aunque puede no ser el caso, gran parte de los programas se basan en algoritmos. Por lo tanto, es necesario disear bien los algoritmos antes de abordar las programacin. n o

Problema 1.21 Solucin o

Discutir los errores que aparecen en el programa siguiente.

/* * Ejemplo de programa con errores / public class ComentariosErrores

Cap tulo 1. Fundamentos de programacin o


{ public static void Main( ) { // Declaracin de variables o float PI = 3.1416 // constante PI int area = 0;

24

// variables auxiliares

// Parte ejecutiva del programa // Area de un crculo a rea = PI * Radio * Radio; /** * Clculo del area a */ System.out.println ("El area de crculo de radio = 5 es }

+ area);

A continuacin se enumeran los errores que aparecen en el programa anterior: o 1. No se ha cerrado el primer comentario. 2. El mtodo main se ha escrito con la primera letra en mayscula (Main). e u 3. El mtodo main necesita argumentos y no los tiene. e 4. Se declaran variables despus de un comentario de l e nea. No se vern. a 5. La cadena utilizada en println (El area del circulo de radio = 5 es ) no naliza con ". 6. Comentarios javadoc dentro del texto mal etiquetados. 7. Falta la llave de cierre del mtodo principal. e

1.9.

Ejercicios propuestos
Identique los cinco componentes principales de un computador. Cual es la diferencia entre memoria voltil y no voltil? a a Qu signica el acrnimo UCP? e o

Ejercicio 1.1 Ejercicio 1.2 Ejercicio 1.3

Ejercicio 1.4 Cuntos bytes tiene una memoria RAM de 64 KB? a Ejercicio 1.5 Cul es la diferencia entre memoria voltil y no voltil? a a a Ejercicio 1.6 Entre en los computadores de los laboratorios de su escuela o en el computador de una tienda e identique los distintos componentes de el computador que se pueden ver. Nota algunos dispositivos de entrada y salida unicos?. Ejercicio 1.7 Entre el laboratorio de computadores de su escuela y busque la velocidad de la UCP, el tamao de la RAM y la capacidad de disco duro de sus computadores. n Ejercicio 1.8 Convierta los siguientes nmeros binarios a nmeros decimales: 1010, 110011, 110,01 u u y 111111. Ejercicio 1.9 Convierta los siguientes nmeros decimales a n meros binarios: 35, 125, 567 y 98. u u

25

1.9. Ejercicios propuestos

Ejercicio 1.10 Cul es el mximo nmero decimal que se puede representar con 4 bits? Y con 16 a a u bits? Y con n bits? Ejercicio 1.11 Si un computador tiene 48 MB de RAM, Cuntos bytes son? a Ejercicio 1.12 En qu se diferencian los lenguajes de programacin de alto nivel de los lenguajes e o de programacin de bajo nivel? o Ejercicio 1.13 Considere un lenguaje de programacin hipottico con el que se puede escribir un o e programa para calcular la suma e imprimir la suma de 20 enteros introducidos por el usuario como:
Let sum = 0; repeat 20 times { let X = next input; add X to sum; } printout sum;

Es un lenguaje de alto nivel? Por qu o por qu no? e e Ejercicio 1.14 Un computador tiene 640 K bytes de memoria. Cuntos bytes de memoria tiene a exactamente? Ejercicio 1.15 Busque un anuncio de una compa de venta de computadores por correo. Averige na u lo que signican acrnimos y trminos en el anuncio. Algunos de estos trminos y acrnimos que podr o e e o a ver son cache, Enchufar-y-Usar (Plug-and-Play), SCSI, EIDE, modo de rfaga, EDO, EPP y 56 K. a Ejercicio 1.16 La capacidad de los discos duros se duplica cada tres aos mientras que el coste n permanece constante. Los discos duros actuales de 3.5 pulgadas tienen una capacidad de aproximadamente 9 gigabytes y cuestan $250. En 3 aos ms, cunto esperar n a a amos pagar por 18 gigabytes? Ejercicio 1.17 En el sistema operativo que est usando, diga el nombre de los mandatos que a manipulan archivos. En particular, nombre los mandatos que llevan a cabo las siguientes acciones: Borrar un archivo. Renombrar un archivo. Copiar un archivo. Mover un archivo. Crear un directorio. Borrar un directorio. Ejercicio 1.18 y A32E16. Ejercicio 1.19 Obtenga el valor decimal de los siguientes nmeros: 010012, 03748, 01101002, 40335 u Convierta los nmeros siguientes a la base especicada: u

7778 a hexadecimal AD1116 a binario 010010112 a octal

Cap tulo 1. Fundamentos de programacin o 111116 a octal 010011112 a hexadecimal 010011112 a octal 37718 a binario 435616 a octal Ejercicio 1.20
a) b) c) d) e) f)

26

D el valor decimal de los nmeros de 8 bits en complemento a dos siguientes: e u

101011002 100000012 110000002 101001012 111111112 100000002

Ejercicio 1.21 Considere un cajero automtico en un banco. Cules son algunas de las propiedades a a relevantes del cajero para las siguientes personas? Un usuario. Una persona de mantenimiento. Un empleado del banco. El presidente del banco. Ejercicio 1.22 telefnico. o D un ejemplo de encapsulacin en el funcionamiento de un contestador automtico e o a

Ejercicio 1.23 La mayor parte de los sistemas son orientados a objetos. Nombre alguno de los objetos de los siguientes sistemas: equipo de m sica, televisin, lavadora, v u o deo y bicicleta. Ejercicio 1.24 La mayor parte de las organizaciones tienen una estructura jerrquica. Elija una a organizacin a la que pertenezca y dibuje un diagrama de objetos que ilustre su jerarqu o a. Ejercicio 1.25 Dibuje un diagrama de objetos de una clase Avin, sus subclases Airbus 340 y o Boeing 757 y tres objetos Avin denominados quijote, mallorca y baroja (los dos primeros son 340 el o ultimo es un 757). Ejercicio 1.26 Considere un programa que mantiene una agenda electrnica. Disee una jerarqu o n a de herencia para las clases tales como Persona, ContactoProfesional, Amigo y Estudiante que pueda ser usada para implementar dicho programa. Ejercicio 1.27 Denomine los tres componentes de un programa Java. Ejercicio 1.28 Describa los pasos a seguir para ejecutar una aplicacin Java y las herramientas a o usar en cada paso. Qu son los archivos fuente y los archivos objeto? Qu tipos de errores distintos e e se pueden detectar en cada paso? Ejercicio 1.29 Describa el objetivo de los comentarios. Nombre los tipos de comentarios disponibles. Se podr incluir marcas de comentario dentro de un comentario? an

27

1.9. Ejercicios propuestos

Ejercicio 1.30 Cul es el objetivo de la sentencia import? Tienen siempre los programas Java a que incluir una sentencia import? Ejercicio 1.31 Identique todos los errores en el siguiente programa:
/* Programa EjercicioErrores Un programa con muchos errores. // import java.awt.*; class EjercicioErrores { public void Main( ) { Window ventana; ventana.show( ) } }

Vous aimerez peut-être aussi