Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Mac en 19 de Septiembre 2013, 15:59
-
Hola comunidad quisiera que me ayudaran con este programa ! le agradecería muchísimo de antemano ... les presento el problema y es el siguiente , resulta que e echo gran parte del código y me falta corregir algunas cosa que so la siguiente.
- el programa arroja números aleatoria de N estudiantes que son las notas no se por que me arroja en todas las matrices 4.0 en ves de 4.2 , osea quiero que me de números aleatorios con decimales y que me muestre bien la matriz definitiva que me sale desordenada.
- otro caso seria creando un procediendo llamado estadística me saque que un alumno pierde el semestre si pierde al menos 3 asignaturas, si pierde 2 o 1, podrá habilitarlas. De acuerdo con esto, determine en otro procedimiento quienes perdieron el semestre, quienes habilitaron, y quienes no perdieron ninguna
les colocare el código !
----------------------------------------------------------------------------------------------------------------import javax.swing.*;
import java.util.Random;
public class Menu_matriz {
public static void main(String[] args){
String menu=" Notas Estudiantes\n ";
int n=Integer.parseInt(JOptionPane.showInputDialog(" Digite La Cantidad De Numeros De Estudiantes "));
double p1 [][]=new double [n][6];
double p2 [][]=new double [n][6];
double p3 [][]=new double [n][6];
double def[][]=new double [n][6];
llenar_matrices(p1,p2,p3,n);
int op=0;
menu+="1. Calcular Y Guardar Notas. \n";
menu+=" 2. Calcular Y Guardar Definitiva. \n";
menu+=" 3. Perdieron,Habilitaron Y Quienes No Perdieron Ninguna. \n";
menu+=" 4. Fin Del Menu \n";
menu+=" Escoja Opción : \n";
while (op!=4){
op=Integer.parseInt(JOptionPane.showInputDialog(menu));
switch (op){
case 1:
sumar(p1,p2,def,p3,n);
break;
case 2:
imprime_definitiva(def,n,"--- MATRIZ DEFINITIVA ---");
break;
case 3:
estadistica( );
break;
case 4:
break;
}
}
}// cierre del public static void main !!!!
static void sumar(double p1[][], double p2[][],double def[][],double p3[][], double n1){
for (int i=0;i<n1;i++){
for (int j=0;j<6;j++){
def[i][j]=(((p1[i][j]*0.3)) + ((p2[i][j]*0.3)) + ((p3[i][j]*0.4)));
}
}
System.out.println(" ");
System.out.println(" ------------ MATRIZ PRIMER PARCIAL --------------\n\n ");
//System.out.println("#\tMatematicas\tFisica\tInformatica\tEspañol\tFilosofia\tEstadistica");
imprime_definitiva(p1,n1," ------------ MATRIZ PRIMER PARCIAL --------------");
System.out.println(" ------------ MATRIZ SEGUNDO PARCIAL --------------\n ");
//System.out.println("#\tMatematicas\tFisica\tInformatica\tEspañol\tFilosofia\tEstadistica");
imprime_definitiva(p2,n1," ------------ MATRIZ SEGUNDO PARCIAL --------------");
System.out.println(" ------------ MATRIZ PARCIAL FINAL ---------------\n ");
// System.out.println("#\tMatematicas\tFisica\tInformatica\tEspañol\tFilosofia\tEstadistica");
imprime_definitiva(p3,n1," ------------ MATRIZ PARCIAL FINAL ---------------");
System.out.println("\n --- MATRIZ DEFINITIVA --- ");
System.out.println(" ");
}
static void llenar_matrices(double p1[][], double p2[][], double p3[][],double n1){
Random rnd = new Random();
for (int i=0;i<n1;i++){
for (int j=0;j<6;j++){
p1[i][j]=(int)(rnd.nextDouble()* 5)+1;
p2[i][j]=(int)(rnd.nextDouble()* 5)+1;
p3[i][j]=(int)(rnd.nextDouble()* 5)+1;
}
}
}
static void estadistica ( ){
}
static void imprime_definitiva(double def[][],double n,String mensaje){
String salida="";
for (int i=0;i<n;i++){
for(int j=0;j<6;j++){
salida=salida+def[i][j]+" \t\t ";
}
salida=salida+"\n\n";
}
System.out.println(salida+"\t");
JTextArea area= new JTextArea();
area.setText(salida);
JOptionPane.showMessageDialog(null,area,mensaje,JOptionPane.PLAIN_MESSAGE);
}
}/// cierre class !!!
-
Hola, el motivo por el que te arroja números como 4.0 en vez de 4.2 lo tienes en el método llenar_matrices:
static void llenar_matrices(double p1[][], double p2[][], double p3[][],double n1){
Random rnd = new Random();
for (int i=0;i<n1;i++){
for (int j=0;j<6;j++){
p1[i][j]=(int)(rnd.nextDouble()* 5)+1;
p2[i][j]=(int)(rnd.nextDouble()* 5)+1;
p3[i][j]=(int)(rnd.nextDouble()* 5)+1;
}
}
}
Si te fijas la instrucción (int)(rnd.nextDouble()* 5)+1; al llevar el (int) delante lo que hace es redondear el número obtenido a un entero, por eso siempre te sale 4.0, 5.0, etc.
Para redondear un número tipo double a cierto número de decimales puedes usar lo siguiente:
Por ejemplo para una variable x = 3.235645678;
x = (double)Math.round(x * 1000) / 1000; En este caso lo que haces es primero multiplicar por 1000 para obtener 3235.645678. Luego redondeas aplicando el método round de la clase Math que te devuelve 3236. Luego divides 3236 entre 1000 para obtener 3.2336 que es el resultado. El número de ceros que pongas en la multiplicación es el número de decimales que obtienes.
Si haces x = (double)Math.round(x * 10) / 10; obtendrás 3.2
Si haces x = (double)Math.round(x * 100) / 100; obtendrás 3.23
En el método llenar_matrices el cambio podría hacerse así para que te muestre los números con un decimal:
static void llenar_matrices(double p1[][], double p2[][], double p3[][],double n1){
Random rnd = new Random();
for (int i=0;i<n1;i++){
for (int j=0;j<6;j++){
p1[i][j]=(rnd.nextDouble()* 5)+1; p1[i][j]=(double)Math.round(p1[i][j] * 10) / 10;
p2[i][j]=(rnd.nextDouble()* 5)+1; p2[i][j]=(double)Math.round(p2[i][j] * 10) / 10;
p3[i][j]=(rnd.nextDouble()* 5)+1; p2[i][j]=(double)Math.round(p3[i][j] * 10) / 10;
}
}
}
-
Gracias por tu respuesta es muy buena
-Quisiera saber como hacer para que en la matriz definitiva no me salga desordenada
- otro caso seria creando un procediendo llamado estadística me saque que un alumno pierde el semestre si pierde al menos 3 asignaturas, si pierde 2 o 1, podrá habilitarlas. De acuerdo con esto, determine en otro procedimiento quienes perdieron el semestre, quienes habilitaron, y quienes no perdieron ninguna
les colocare el código !
-
¿A qué te refieres con que la matriz definitiva sale desordenada?
-
si la matriz donde dice MATRIZ PARCIAL FINAL sale a si 2.9999999 en todas las columnas obviamente con números distintos y la MATRIZ DEFINITIVA sale también así desordenada !
- otro caso seria creando un procediendo llamado estadística me saque que un alumno pierde el semestre si pierde al menos 3 asignaturas, si pierde 2 o 1, podrá habilitarlas. De acuerdo con esto, determine en otro procedimiento quienes perdieron el semestre, quienes habilitaron, y quienes no perdieron ninguna
les colocare el código !
-
No entiendo lo que quieres decir con desordenada, si te refieres a que se muestran los números con muchos decimales ¿ese es el mismo problema que te he indicado antes que se resolvía con x = (double)Math.round(x * 1000) / 1000; ? Si es el mismo problema te basta con aplicar esto pero no sé si te refieres a otra cosa.