Problemas para hacer en Java

Problema 7.1

Construya un programa Dado.java que tire un dado. Es decir que cada vez que lo lancemos elija aleatoriamente un numero del 1 al 6 y lo imprima por pantalla

$ java Dado
3
$ java Dado
1
$ java Dado
6

Modifiquelo para que se le pueda indicar con un argumento el numero de tiradas a efectuar. Si no se le indica el argumento haga una sola.

$ java Dado 3
1
6
5
$ java Dado
3

Problema 7.2

A partir del ejemplo Dado.java. Construya un programa Prob7.java que calcule la probabilidad de sacar 7 en una tirada de dos dados de 6 caras. Para ello tendra que hacer cambios en el programa

  • Escribir una funcion para que tire dos dados y devuelva como resultado la suma de los dos
  • Escribir una funcion que se le indique un numero de intentos (N) y haga N experimentos de tirar dos dados contando cuantas veces el resultado es 7. La funcion debera devolver el numero de veces que ha salido 7
  • Escribir un programa que lea un numero N del usuario, haga N expermimentos de tirar dos dados e imprima el porcentaje de las veces que ha salido 7

Debera obtener como resultado algo asi

$ java Prob7 10
Ham salido 4 sietes en 10 intentos. P=0.4
$ java Prob7 10
Ham salido 3 sietes en 10 intentos. P=0.3
$ java Prob7 8
Ham salido 2 sietes en 8 intentos. P=0.25

Problema 7.3

Se trata de construir un programa Stats.java que lea un fichero que tenga un numero en cada linea y calcule la media de todos los que hay. El funcionamiento del programa tiene que ser algo asi

$ more f
1
2
4.0
$ java Stats f
la media es 2.333333
$

Pistas: para hacerlo debera

  • Leer cada linea del fichero acumulando la suma
  • Contar el numero de lineas
  • Dividir una cosa por la otra

Problema 7.4

Construya un programa que abra un fichero y cuente el numero de lineas y palabras que contiene

$ java texto.txt
El fichero contiene 3 lineas y 32 palabras

Problema 7.5

Construya un programa Colstats.java que lea un fichero que contien texto con columnas de numeros flotantes y obtenga el minimo, maximo y la media de la columna que se le indique.

$ cat unfichero
asd123 1.0 3.2
aaa111 2.0 3.0
bbb 1.0 3.0
$ java Colstats unfichero 2
col 2 min 1.0 max 2.0 avg 1.333

Modifíquelo para que se le pueda indicar mas de una columna y proporcione los datos de cada columna

Problema 7.6

Tenemos el ejemplo Dados.java visto en clase o una version mejorada llamada DadosN.java. Con dichos programas podemos realizar experimentos de tirar varios dados y guardar sus resultados en fichero

Con el programa dados puede indicar el numero de experimentos y el programa genera en un fichero de nombre resultados el numero indicado (5 en el ejemplo) de experimentos de lanzar 2 dados

$ java Dados 5
$ cat resultados
6 4 
6 5 
1 2 
6 6 
3 3 

El programa DadosN es igual solo que deja introducir el nombre del fichero de resultados y el numero de veces que se tira el dado en cada experimento. Por ejemplo asi hacemos 5 experimentos de tirar 3 dados y los guardamos en el fichero r

$ java DadosN r 5 3
$ cat r
1 6 6 
2 1 4 
1 4 1 
2 2 2 
2 5 4 

El problema consiste en hacer el programa DadoStats.java a partir del programa Cuenta.java realizado en clases anteriores. El programa DadoStats aceptara un nombre de fichero por linea de comandos y un numero de columnas (para saber cuantos posibles resultados tendra en cada experimento). El prgrama debe hacer las mismas estadisticas que hacia cuenta pero en lugar de tirar el los dados, leera los resultados de los anteriores, es decir un fichero de lineas en las que hay tantos numeros como tiradas hemos hecho en cada experimento.

Por ejemplo con los ficheros resultados y r antriores obtendriamos

$ java DadoStats resultados 2
leidos 5 experimentos
0 : 0 : 0.0
1 : 0 : 0.0
2 : 0 : 0.0
3 : 1 : 0.2
4 : 0 : 0.0
5 : 0 : 0.0
6 : 1 : 0.2
7 : 0 : 0.0
8 : 0 : 0.0
9 : 0 : 0.0
10 : 1 : 0.2
11 : 1 : 0.2
12 : 1 : 0.2

$ java DadoStats r 3
leidos 5 experimentos
0 : 0 : 0.0
1 : 0 : 0.0
2 : 0 : 0.0
3 : 0 : 0.0
4 : 0 : 0.0
5 : 0 : 0.0
6 : 2 : 0.4
7 : 1 : 0.2
8 : 0 : 0.0
9 : 0 : 0.0
10 : 0 : 0.0
11 : 1 : 0.2
12 : 0 : 0.0
13 : 1 : 0.2
14 : 0 : 0.0
15 : 0 : 0.0
16 : 0 : 0.0
17 : 0 : 0.0
18 : 0 : 0.0

Problema 7.7

Construya un programa Transmision.java que simule el envio de un paquete en un canal con probabilidad de perdida de paquetes. El programa tendra dos parametros de entrada. El primero sera el numero de paquetes a enviar, el segundo es la probabilidad de que un envio se pierda. El resultado del programa tiene que ser un linea por cada paquete. En cada linea aparecera una letra por cada intento de envio del paquete. Si el paquete se envía correctamente aparecera una 'o'. Si el paquete se perdio aparecera una 'x'. Asi que si un paquete se perdio dos veces y consiguió llegar a la tercera aparecera una linea con 'x x o'. El resutlado sera algo asi

$ java Transmision 6 0.3
o
o
x x o
o
x o
o
$ java Transmision 6 0.8
x x x o
x o
x x x x x o
x x o
o
x x x x o

Problema 7.8

Construya un programa TransmisionStats.java que analice el resultado del programa anterior y obtenga a partir del fichero anterior las estadisticas del numero de envios necesarios para que un paquete sea entregado. Debe mostrar el maximo y minimo numero de intentos que ha visto, asi como el numero medio y la desviacion estandar.

Por ejemplo con esto hacemos 10000 experimentos de enviar un paquete con una probabilidad de perdida de 0.4
Y lo guardamos en el fichero datos
$ java Transmision 10000 0.4 >datos

Y con esto analizamos los resultados
$ java TransmisionStats datos
min: 1 envio
max: 8 envios
media: 1.8 envios
desviacion: 0.8 envios

Mas dificil: Modifiquelo para que ademas del numero de envios indique cual es la probabilidad que ha visto de que sea necesario 1 envio, 2 envios, 3 envios... el programa aceptara un parametro que le diga cuantos envios hace falta que considere

$ java TransmisionStats datos 4
min: 1 envio
max: 8 envios
media: 1.8 envios
desviacion: 0.8 envios
p: 0.598 0.235 0.096 0.037
[ que esto significaria que un 59% ha sido 1 envio un 23.5% 2 envios y asi... ]

Problema 7.9

Se pretende guardar la información de un grafo en un fichero. Un grafo está formado por una serie de puntos que estarán numerados de 0 a N y entre dichos puntos pueden existir enlaces o no. Por ejemplo los puntos podrian ser ciudades y los enlaces serian carreteras directas entre ciudades. En este problema la informacion del grafo se almacenara en un fichero con una serie de lineas de texto. La primera linea contendra el numero de puntos que existen. A continuacion cada linea extra indicara la existencia de un enlace entre el punto i y j con una lina de texto que contendra i-j. Por ejemplo un mapa con 4 ciudades se almacenara así

En el fichero x.mapa el contenido es
4
0-1
1-2
2-3
1-3

Ese fichero representa este mapa

1--2
|\ |
| \|
0  3

Escriba una funcion leeMapa que a partir del nombre del fichero, lea el mapa y lo almacene en un array de dos dimensiones boolean[][] donde la posicion i,j sea true si hay un enlace entre i y j .

public static boolean[][] leeMapa(String nombre) throws Exception {
    boolean[][] resultado;

    // escriba el contenido de esta funcion

    return resultado;
}

La funcion se pretende utilizar en el siguiente programa

public static void main(String[] args) throws Exception {
    boolean[][] mapa;
    int i,j;
    int n;

    mapa = leeMapa("x.mapa");

    n=mapa.length;
    System.out.printf("Mapa de %d puntos\n",n);

    j=0;
    System.out.printf("  ",j);
    while (j<n) {
            System.out.printf("%d ",j);
            j=j+1;
    }
    System.out.printf("\n");
    i=0;
    while (i<n) {
            System.out.printf("%d ",i);
            j=0;
            while (j<n) {
                    if (mapa[i][j]) {
                            System.out.printf("x ");
                    } else {
                            System.out.printf("  ");
                    }
                    j=j+1;
            }
            System.out.printf("\n");
            i=i+1;
    }
}

De forma que cuando se lance el programa imprima la matriz de enlaces como se ve a continuación

$ java ExaminaMapa
Mapa de 4 puntos
  0 1 2 3
0   x
1 x   x x
2   x   x
3   x x
Última modificación: miércoles, 21 de octubre de 2015, 21:19