Sie sind auf Seite 1von 7

Coleccin de problemas de C# (v1.0) 1. Escribe un programa que muestre el mensaje "Hola Mundo" por pantalla.

Cuntas clases necesitar definir para conseguir la funcionalidad deseada? Cuntos mtodos habr que definir como mnimo?

2. Realiza un programa que lea una cadena y la vuelva a escribir por pantalla indicando su longitud. 3. Realiza un programa que calcule la suma de dos reales introducidos por el teclado y representa la salida por pantalla. 4. Realiza una funcin que cuente el nmero de ocurrencias en una cadena de las 5 vocales en 5 variables diferentes: a, e, i, o, u 5. Realiza una funcin que compare dos cadenas. 6. Realizar una funcin que calcule el mximo comn divisor (MCD) de dos nmeros. 7. Realiza un programa comando que se invoque de la forma: comando param1 param2 param3 ... paramN . Y que saque por pantalla: param1 param2 param3 ... paramN 8. Realiza dos funciones que calculen si un nmero es par o impar. 9. Calcula si un ao, que ha recibido como argumento en la llamada al programa, es bisiesto. La regla completa para saber si un ao es bisiesto, es que sea divisible por 4, excepto que si es divisible por 100 lo sea tambin por 400. Realice la comprobacin mediante una sola operacin lgica e imprima en la pantalla un mensaje con el resultado. 10. Defina un programa que reciba como argumento un valor de temperatura en grados Celsius e imprima por pantalla su valor en grados Farenheit. Recuerde la frmula de conversin: F = 9/5 * C + 32. 11. Escribe un programa en el que se definan dos variables booleanas con los valores true y false. Con ayuda de estas variables, imprima la tabla de verdad de los operadores lgicos AND y OR.

12. Escribe un programa que calcule la capacidad de un disco duro de un ordenador que tiene 12000 cilindros, 16 pistas, 8 sectores por pista y sectores de 512 bytes. Expresa su tamao en bytes, kilobytes, megabytes y gigabytes. El tamao del disco se calcula de acuerdo con la siguiente frmula: capacidad = cilindros * pistas * sectores * bytes Un kilobyte son 1024 byts. Un megabyte son (kilobyte * 1024) bytes. Un gigabyte es (megabyte * 1024) bytes. 13. Escribe un programa que calcule la distancia recorrida por un mvil que se mueve a velocidad constante de 3.2 m/s y que ha recorrido un espacio inicial de 7.3 m en un tiempo de t segundos. El valor de t se introducir como argumento en la llamada del programa. 14. Realiza un pequeo programa calculadora con las operaciones aritmticas bsicas. Hazlo con nmeros reales. 15. Escribe un mtodo que transponga matrices cuadradas de nmeros reales.
// tabla[f][c] <-> tabla[c][f] void transponer(double[][] tabla) throws Exception;

16. Escriba un mtodo que ordene arrays de nmeros enteros de menor a mayor valor. En la posicin cero quedar el valor ms pequeo despus de la ordenacin.
void ordena(int[] tabla);

17. Escribe una clase C# que represente un crculo; el crculo queda perfectamente definido si se conoce su radio. Define adems, para esta clase, dos mtodos pblicos que permitan calcular el rea del crculo y el permetro de la circunferencia que delimita el crculo. Para probar la funcionalidad antes definida, escribe un pequeo programa que cree un crculo con un radio dado, y que calcule (y muestre por pantalla) el rea y el permetro de su circunferencia. 18. Define una clase que sirva para representar el estado de una bombilla (encendido o apagado). Define, asimismo, dos mtodos que permitan encender (on) y apagar (off) la luz de la bombilla. Para probarlo, crea un pequeo mtodo main que cree un objeto de la clase definida, que haga uso de los mtodos previamente definidos y vaya mostrando el estado de la bombilla.

19. Define una clase Punto que tendr dos atributos, de tipo real, x e y, que representarn las coordenadas del punto dentro del plano. Define un mtodo que tenga como argumento otro objeto de la clase punto y que calcule la distancia entre los dos puntos. Para probar esta funcionalidad, escriba un mtodo main en el que se creen dos puntos, el primero de los cuales deber tener las coordenadas 100.0, 200.0 y el segundo deber tener las coordenadas 400.0, 800.0 y calcule e imprima la distancia entre ambos. 20. Define una clase factorial, que permita calcular el factorial de un nmero entero; utilice un algoritmo recursivo. 21. Escribe una clase que permita imprimir por pantalla todas las variaciones (con repeticin) posibles de los nmeros del 0 al 9, tomados de n en n. Ejemplo, para n=2: 00 01 02 03 ... 98 99 22. Escribe una clase con un mtodo recursivo capaz de calcular el nmero de fibonacci de un entero. El nmero de fibonacci se define as: 1 para el nmero 1 2 para el nmero 2 la suma de los nmeros de fibonacci de sus dos anteriores para el resto Calcula el nmero de fibonacci de algunos enteros no muy grandes en un programa que use esta clase. 23. Escribe una clase con un mtodo pblico que permite dibujar una pirmide como la de la figura: * *** ***** ******* ********* El mtodo tendr que recibir como argumento la altura de la pirmide. 24. Define una clase que ofrezca tres mtodos para imprimir, respectivamente, las cifras del 0 al 9, las letras maysculas y las letras minsculas; al lado de cada cifra o letra, deber aparecer, entre parntesis, su cdigo ASCII. Escriba un mtodo main que haga uso de los tres mtodos previamente definidos. 25. Define una clase factorial, que permita calcular el factorial de un nmero entero; utiliza un bucle no recursividad. 26. Escribe un mtodo que calcule el valor de la funcin de Ackermann. Esta funcin se define para nmeros enteros no negativos como: n+1 si m=0 A(m,n) = A(m-1,1) si m>0 y n=0 A(m,n) = A(m-1,A(m,n-1)) si m>0 y n>0

27. Escribe un programa que calcule todos los nmeros primos entre 1 y un nmero dado. Para ello, crea el mtodo "boolean EsPrimo(int n)" que indicar si n es primo o no. Este mtodo comprobar si n es divisible por algn nmero entero entre 2 y la raz cuadrada de n. 28. Escribe una clase que permita calcular el nmero PI con una precisin de "n" decimales. El parmetro "n" deber introducirse por teclado. Puede utilizar la siguiente frmula para aproximar el valor de PI/4: PI/4 = 1 - 1/3 + 1/5 - 1/7 + ... = Suma(n=0,infinito){(-1)^n/(2n+1)} 29. Defina una clase que permita calcular la suma, media y el mximo de una lista de nmeros enteros positivos que se introducen por teclado; la entrada acabar cuando se introduzca un nmero entero negativo. 30. Define una clase con un mtodo que muestre por pantalla la tabla de multiplicar para un nmero (entero) dado (nx1, nx2 ... nx10). Para probar este mtodo, define un mtodo main que imprima por pantalla la tabla de multiplicar del 1 al 9; separe la salida entre tabla y tabla con una lnea en blanco. 31. Se desea llevar un control del estado de una cuenta corriente; la cuenta corriente est caracterizada por su saldo y sobre ella se pueden realizar tres tipos de operaciones:

saldo: devuelve el saldo de la cuenta (puede ser negativo). imposicin (cantidad): ingresa en la cuenta una cantidad de dinero. reintegro (cantidad): saca de la cuenta una determinada cantidad de dinero.

Supn que la cuenta inicialmente tiene un saldo de cero. Escribe una clase CuentaCorriente que implemente la funcionalidad descrita; escribe un pequeo programa principal para probar su funcionamiento. 32. Escribe una clase que permita manejar nmeros complejos; defina mtodos para las cuatro operaciones fundamentales. 33. Define una clase que permita representar una serie aritmtica; una serie aritmtica viene caracterizada por el primer elemento de la serie y el incremento o diferencia entre dos elementos sucesivos de la serie. Implementa un mtodo en esta clase que permita calcular la suma de los n primeros elementos de la serie (utilice un bucle para realizar esta operacin). 34. Se quiere definir una clase que permita controlar un sintonizador digital de emisoras FM; concretamente, lo que se desea es dotar al controlador de una interfaz que permita subir (up) o bajar (down) la frecuencia (en saltos de 0.5 MHz) y mostrar la frecuencia sintonizada en un momento dado (display). Supondremos que el rango de frecuencias a manejar oscila entre los 80 Mhz y

los 108 MHz y que al inicio, el controlador sintoniza a 80 MHz. Si durante una operacin de subida o bajada se sobrepasa uno de los dos lmites, la frecuencia sintonizada debe pasar a ser la del extremo contrario. 35. Queremos modelar una casa con muchas bombillas, de forma que cada bombilla se puede encender o apagar individualmente. Para ello haremos una clase Bombilla con una variable privada que indique si est encendida o apagada, as como un mtodo que nos diga si una bombilla concreta est encendida. Adems queremos poner un interruptor general de la luz, tal que si saltan los fusibles, todas las bombillas quedan apagadas. Cuando el fusible se repara, las bombillas vuelven a estar encendidas o apagadas, segn estuvieran antes del percance. Para modelar en C# esta caracterstica usaremos una variable de clase (static) que nos diga si hay luz en el edificio o no. Cada objeto Bombilla se enciende y se apaga individualmente; pero slo responde que est encendida si su interruptor particular est activado y adems hay luz general. El cdigo C# tiene esta estructura:
class Bombilla { private static ...; // interruptor general private ...; // interruptor particular public static void activaGeneral() { ... } public static void desactivaGeneral() { ... } public void enciende() { ... } public void apaga() { ... } public boolean encendida () { ... } }

36. Si (x1,y1), (x2,y2) y (x3,y3) son las coordenadas de tres puntos del plano, entonces el siguiente fragmento de programa calcula el centro (x,y) y el radio (r) de la circunferencia que pasa por ellos.

double double double double double double

a b c d e f

= = = = = =

2*(x2-x1); 2*(y2-y1); x1*x1+y1*y1-x2*x2-y2*y2; 2*(x3-x1); 2*(y3-y1); x1*x1+y1*y1-x3*x3-y3*y3;

y = (f*a-c*d)/(b*d-e*a); x = -b/a*y-c/a; r = Math.Sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));

Crea una clase llamada Circunferencia, que tenga como atributos las coordenadas de su centro (x,y) y su radio (r), y con un constructor que tome como argumentos las coordenadas de tres puntos por los que pase. Redefine tambin el mtodo toString para que represente las circunferencias como Strings de la forma "<(x,y),r>" Utiliza el siguiente mtodo main para probar esta clase:
public static void Main(String argv[]) { double x1 = 9, y1 = 0, x2 = 2, y2 = -7, x3 = -3, y3 = 5; Console.WriteLine(" Console.WriteLine (" Console.WriteLine (" punto 1 = ("+x1+","+y1+")"); punto 2 = ("+x2+","+y2+")"); punto 3 = ("+x3+","+y3+")");

Circunferencia cir = new Circunferencia(x1,y1,x2,y2,x3,y3); Console.WriteLine (" Circunferencia = "+cir);

37. El programa Circunferencia desarrollado en el ejercicio anterior, falla en algunos casos, dependiendo de cuales sean las coordenadas de los puntos elegidos. En este ejercicio intentaremos detectar todas las posibles situaciones de error, y manejarlas adecuadamente. En primer lugar se pide modificar el constructor de Circunferencia, para que lance una excepcin cuando detecte que algunos de los puntos son iguales entre s, o estn demasiado alineados. Tambin ocurre que las ecuaciones propuestas para calcular la circunferencia no funcionan cuando x1 y x2 son iguales. Modifique el constructor para que si ocurre esto, intercambie las coordenadas de los puntos (x1,y1) y (x3,y3) antes de hacer los clculos. Compruebe primero que x1 y x3 no coincidan, ya que si lo hacen, todos los puntos estarn alineados en la misma vertical, y el contructor deber lanzar una excepcin explicando el problema.

Modifica tambin el mtodo main, para que los valores de las coordenadas se introduzcan por lnea de comandos. Imprima los mensajes que considere oportuno cuando no se introduzcan exactamente los seis valores de las coordenadas, o estos no sean numricos. Si se te ocurren nuevos casos problemticos, comntelos e intente solucionarlos. 38. Define una clase libro que pueda ser utilizada para representar los libros que hay en una biblioteca. Suponga que cada libro tiene los siguientes atributos:

Ttulo Autor Ao de publicacin Editorial

Escribe un mtodo main donde crear dos objetos de la clase libro, y al final, muestre los datos de cada uno de ellos. 39. Escribe una clase llamada Inventario, para almacenar referencias a todos los animales existentes en una tienda de mascotas. Esta clase debe cumplir con los siguientes requisitos:

Los animales deben almacenarse en un array privado de tamao 100 dentro de la clase Inventario. El tamao del array debe definirse como una constante en la clase. En la tienda existirn diferentes tipos de animales: perros, gatos, conejos, etc. La clase debe tener un constructor que inicialice el inventario a vaco, y mtodos para insertar y eliminar animales del inventario. Debe existir otro mtodo que imprima el nombre, la raza y la edad de todos los animales de la tienda. Cree tambin un mtodo que devuelva un IEnumerator con todos los perros de la tienda. Utilice siempre que pueda interfaces y polimorfismo para realizar este ejercicio.