Fecha y hora actual: Lunes 23 Sep 2019 09:40
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Ayuda ejercicio

Responder al Tema

Índice del Foro > Java > Ayuda ejercicio

Autor Mensaje
davidleon
Usuario Iniciado


Registrado: 22 Mar 2013
Mensajes: 16

Mensaje Publicado: Sábado 20 Abr 2013 19:16

Título del mensaje: Ayuda ejercicio

Responder citando

HE INTENTADO HACERLO CON UN BUCLE DE 2 FOR CON UNA MATRIZ BIDIMENSIONAL Y LUEGO DARLE A CADA ELEMENTO [X][Y] UN VALOR QUE SERÍA LA NOTA, PERO NO ME HA SALIDO Y NO SÉ SI ES LA FORMA CORRECTA DE HACERLO.

UN SALUDO Y GRACIAS.




La primera parte del ejercicio (la cual no entiendo como hacer el código) es la siguiente:Un instituto desea controlar los resultados de los alumnos en las diferentes asignaturas de sus estudios en Informática. Para ello desea construir un programa que lea las calificaciones obtenidas en las distintas asignaturas por cada alumno y que visualice en pantalla los resultados obtenidos por el estudiante así como los resultados por asignatura.

La entrada al programa vendrá dada siguiendo el siguiente formato:

En la primera línea aparecerá el número de estudiantes y a continuación el número de asignaturas.
En las siguientes líneas aparecerán tres números: el primero será un número entero identificando al estudiante, el segundo un número entero identificando la asignatura y por último un número float entre 0 y 10 dando la nota obtenida por el estudiante en esa asignatura.
Ejemplo:

Entrada

3 2 (es decir, 3 alumnos con 2 asignaturas cada uno)

1 1 2,5 ( el primer alumno en la primera asignatura ha sacado 2.5)


1 2 7,5 (el primer alumno en la segunda asignatura ha sacado 7.5)

2 1 7

2 2 8

3 1 5

3 2 4

Volver arriba
Ver perfil del usuario Enviar mensaje privado
RompePC
Usuario Activo


Registrado: 04 Mar 2013
Mensajes: 227

Mensaje Publicado: Sábado 20 Abr 2013 20:32

Título del mensaje: Re: Ayuda ejercicio

Responder citando

No lo he probado (me da pereza cambiar a Ubuntu), pero creo que funcionará.
Vas bien encaminado con esa matriz bidimensional. El problema es que te falta una dimensión (es decir, has de hacer una tridimensional).
Tienes que dar, para cada alumno (X), en cada una de las asignaturas (Y), una nota (Z), de tal forma que:
Código:
Matriz tridimensional=new Matriz tridimensional[X][Y][Z]

(Obviamente, Z es uno, porque solo has de asignar una nota en cada asignatura).
¿Dónde está el problema? Que X e Y son int, pero Z es float. Y esa matriz puede ser de un único tipo. Eso se arregla con el tipo de variable Number, que es el padre de los diferentes tipos de variables numéricas (int, float, byte...) y, por tanto, permite crear diferentes tipos de variables en el mismo vector. Por lo tanto:
Código:
Number nTridimensional=new Number[new Integer(X)][new Integer(Y)][new float(Z)];

Si sigues teniendo dudas, te intentaré pasar el código si lo ves más claro (y si alguien ve un fallo, que corrija).

Volver arriba
Ver perfil del usuario Enviar mensaje privado
davidleon
Usuario Iniciado


Registrado: 22 Mar 2013
Mensajes: 16

Mensaje Publicado: Sábado 20 Abr 2013 21:06

Título del mensaje: Re: Ayuda ejercicio

Responder citando

Muchas gracias, ya veo ahora si funciona Risa
Pero tengo el problema que por ejemplo debo meter esos valores X, Y y Z que me dices por consola y eso no sé como relacionarlo con lo de las matrices .
Se que por ejemplo:
Int X = consola.next.Int(); siendo X el numero de alumnos
Int Y = consola.next.Int(); siendo Y el numero de asignaturas
float Z = consola.nextFLoat(); ---------->en este caso, y desconozco porque al meter un decimal por consola me da error.

Muchas gracias de nuevo Risa

Volver arriba
Ver perfil del usuario Enviar mensaje privado
davidleon
Usuario Iniciado


Registrado: 22 Mar 2013
Mensajes: 16

Mensaje Publicado: Sábado 20 Abr 2013 21:25

Título del mensaje: Re: Ayuda ejercicio

Responder citando

Lo puse así, pero me da error en el float:

import java.util.Scanner;
public class PRUEBA {
public static void main (String[] args){


Scanner consola = new Scanner(System.in);
int alumnos = consola.nextInt();
int asignaturas = consola.nextInt();
float nota = consola.nextFloat();

Number nTridimensional= new Number[new Integer(alumnos)][new Integer(asignaturas)][new float(nota)];

}
}

Volver arriba
Ver perfil del usuario Enviar mensaje privado
RompePC
Usuario Activo


Registrado: 04 Mar 2013
Mensajes: 227

Mensaje Publicado: Sábado 20 Abr 2013 23:13

Título del mensaje: Re: Ayuda ejercicio

Responder citando

Código:
import java.io.*;

public class calificacion
{
   public static void main (String[] args) throws IOException
   {
      //==========VARIABLE(S)==========
      BufferedReader brLector=new BufferedReader(new InputStreamReader(System.in));
      int iX=0,iY=0;
      //==========PROGRAMA==========
      System.out.print("Introduzca el número de alumnos => ");
      iX=Integer.parseInt(brLector.readLine());
      System.out.print("Introduzca el número de asignaturas => ");
      iY=Integer.parseInt(brLector.readLine());
      Number nMatriz[][][]=new Number[iX][iY][1];
      for (int iI=0; iI<nMatriz.length; iI++)
         for (int iJ=0; iJ<nMatriz[iI].length; iJ++)
         {
            System.out.print("Introduzca la nota del alumno ["+iI+"] en la asignatura ["+iJ+"] => ");
            nMatriz[iI][iJ][0]=Float.parseFloat(brLector.readLine());
         }
      for (int iI=0; iI<nMatriz.length; iI++)
      {
         for (int iJ=0; iJ<nMatriz[iI].length; iJ++)
         System.out.println("Alumno ["+iI+"], asignatura ["+iJ+"] => "+nMatriz[iI][iJ][0]);
         System.out.println();
      }
   }
}

-Lo de [new float()] parece ser que estaba mal Risa tonta .
-La tercera dimensión de nMatriz es 1 porque solo necesitamos introducir una nota, no varias (y en los mensajes es 0 porque siempre empezamos en 0 hasta el tope del vector que sería N-1).
-Number se debe a que no podríamos introducir un float si declararamos dicha matriz como int.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
davidleon
Usuario Iniciado


Registrado: 22 Mar 2013
Mensajes: 16

Mensaje Publicado: Domingo 21 Abr 2013 11:50

Título del mensaje: Re: Ayuda ejercicio

Responder citando

Muy bien elaborado.

Ahora si tengo que hacer la media de las notas de cada alumno, ¿Cómo se haría?
Sé que es con un for que recorres el array de las notas, y luego con una variable auxiliar las sumas y las dic¡vides entre el número de ellas. Pero no sé como llevarlo acabo.

Además, ¿Cómo accedo a los elementos del array donde estás guardadas las notas? Esto es para imprimir todas las notas de un alumno específico seguidas.
Por ejemplo si el alumno es A y tiene 7.5 y 5 que imprima 7.50 5.00 y que pare ahí.

Un saludo y gracias de nuevo.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
RompePC
Usuario Activo


Registrado: 04 Mar 2013
Mensajes: 227

Mensaje Publicado: Domingo 21 Abr 2013 17:17

Título del mensaje: Re: Ayuda ejercicio

Responder citando

davidleon escribió:
Ahora si tengo que hacer la media de las notas de cada alumno, ¿Cómo se haría?
Sé que es con un for que recorres el array de las notas, y luego con una variable auxiliar las sumas y las dic¡vides entre el número de ellas. Pero no sé como llevarlo acabo.

¿La media? ¿Te refieres a todas las asignaturas juntas? Pues sumas todos los Z de ese alumno X (guardándola en una variable) y la divides entre Y(es decir, en el print pondrías sumaNotas/Y).
Es obvio que tras finalizar el FOR de las asignaturas Y deberías igualar sumaNotas a 0.
davidleon escribió:
Además, ¿Cómo accedo a los elementos del array donde estás guardadas las notas? Esto es para imprimir todas las notas de un alumno específico seguidas.
Por ejemplo si el alumno es A y tiene 7.5 y 5 que imprima 7.50 5.00 y que pare ahí.

Pues un FOR que recorra la parte X de la matriz tridimensional (antes insertada en una petición). Aquí solo usarías un FOR (Y), puesto que el valor de X será el introducido, y el de Z 1 (como en todos los FOR), imprimiendo por pantalla en un print nMatriz[elValorDeseado][Y][1].

Volver arriba
Ver perfil del usuario Enviar mensaje privado
davidleon
Usuario Iniciado


Registrado: 22 Mar 2013
Mensajes: 16

Mensaje Publicado: Domingo 21 Abr 2013 17:55

Título del mensaje: Re: Ayuda ejercicio

Responder citando

Al final cambié el código, porque no conseguí entender lo de la 3º dimensión;
import java.util.Scanner;

public class Evaluando {
public static void main (String[] args){
Scanner consola = new Scanner(System.in);
int alumnos = consola.nextInt();
int asignaturas = consola.nextInt();
float matriz[][] = new float [alumnos][asignaturas];
float matrizA[][] = new float [alumnos][asignaturas];

for (int i=0; i<matriz.length; i++){
for (int j=0; j<matriz[i].length; j++){
matriz [i][j] = consola.nextFloat();
System.out.println("Alumno ["+i+"], asignatura ["+j+"]: "+matriz[i][j]);

matrizA= matriz;
}

}

}
}

No entiendo lo que quieres decir con "petición".
Un ejemplo es este. Teniendo la entrada : (pongo la misma que al principio)
3 2

1 1 2,5

1 2 7,5

2 1 7

2 2 8

3 1 5

3 2 4


Que la salida sea:
1 5,00 2,50 7,50 //siendo 1 el 1º alumno en el caso nuestro como el array comienza en la posición [0] sería 0 5.00 2.50 7.50. 5.00 sería la media de las dos notas, y 2.50 y 7.50 las respectivas notas.

2 7,50 7,00 8,00

3 4,50 5,00 4,00


Para el caso único de estos datos sé hacerlo, lo que no me sale es para uno general.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
RompePC
Usuario Activo


Registrado: 04 Mar 2013
Mensajes: 227

Mensaje Publicado: Domingo 21 Abr 2013 22:43

Título del mensaje: Re: Ayuda ejercicio

Responder citando

Usa la etiqueta code la próxima vez, así el código es imposible de leer Risa .
Lo de la 3ª dimensión.. a ver, ¿que es un vector[]? Un vector simple. ¿Y vector[][]? Uno bidimensional (filas y columnas). ¿Y vector[][][]? Pues tridimensional (filas, columnas y caras). Piensa en este último como si fuera un cubo de rubik. Este tiene filas y columnas (3x3) en cada cara (6), por lo que si el cubo fuera un vector, sería [6][3][3]. Es decir, por cada cara, tendrá 3 filas y 3 columnas.
Te vuelvo a poner el código con comentarios a ver si te aclaras, porque no tiene más dificultad. Además, lo que tu has hecho (lo de dos matrices[][]) no sirve para el propósito de tu ejercicio, puesto que quieres almacenar una nota por asignatura por alumno, por lo que necesitas algo donde guardar dicho dato (y no puedes ponerte a crear variables sueltas a cascoporro).
Ah, y lo de poner 0 para buscar el alumno es tan fácil como lo he puesto yo en el bucle WHILE o empezar el bucle desde el 1 (por lo que el tamaño deberá ser de una unidad más).
Código:
import java.io.*;

public class calificacion
{
   public static void main (String[] args) throws IOException
   {
      //==========VARIABLE(S)==========
      //Método de entrada de datos.
      BufferedReader brLector=new BufferedReader(new InputStreamReader(System.in));
      //Variable que almacenará la 1ª y 2ª dimensión, respectivamente.
      int iX=0,iY=0;
      //Variable que guardará la sumatoria de notas.
      float fMedia=0.0f;
      //==========PROGRAMA==========
      //Introducimos el valor de la 1ª dimensión (cara).
      System.out.print("Introduzca el número de alumnos => ");
      iX=Integer.parseInt(brLector.readLine());
      //Introducimos el valor de la 2ª dimensión (fila).
      System.out.print("Introduzca el número de asignaturas => ");
      iY=Integer.parseInt(brLector.readLine());
      //Creamos una matriz tridimensional de valores iX,iY y 1 (este último porque solo necesitamos una nota por asignatura.
      Number nMatriz[][][]=new Number[iX][iY][1];
      //Primer FOR que representa el nº de alumno (cara) actual.
      for (int iI=0; iI<nMatriz.length; iI++)
         //Segundo FOR que representa el nº de asignatura (fila) actual.
         for (int iJ=0; iJ<nMatriz[iI].length; iJ++)
         {
            //Aquí introducimos la nota. Date cuenta de que no hay un tercer FOR para columnas, ya que solo existe una nota (columna).
            System.out.print("Introduzca la nota del alumno ["+iI+"] en la asignatura ["+iJ+"] => ");
            nMatriz[iI][iJ][0]=Float.parseFloat(brLector.readLine());
         }
      //Un salto de línea para dejarlo bonito.
      System.out.println();
      //Primer FOR que representa el nº de alumno (cara) actual.
      for (int iI=0; iI<nMatriz.length; iI++)
      {
         //Segundo FOR que representa el nº de asignatura (fila) actual.
         for (int iJ=0; iJ<nMatriz[iI].length; iJ++)
            //Aquí mostramos la nota del alumno I en la asignatura J que tendrá una determinada nota.
            System.out.println("Alumno ["+iI+"], asignatura ["+iJ+"] => "+nMatriz[iI][iJ][0]);
         System.out.println();
      }
      //Ahora vamos con las consultas de notas (bucle infinito).
      while (true)
      {
         //Pedimos que nos diga un nº de alumno.
         System.out.print("Introduzca el alumno a consultar => ");
         iX=Integer.parseInt(brLector.readLine());
         //Si es negativo, que salga del bucle.
         if (iX<0)
            break;
         //Primer y único FOR que nos muestra la nota del alumno en esa asignatura. La sumamos en una variable para luego hacer la media.
         for (int iI=0; iI<iY; iI++)
         {
            //Mostramos la nota en la asignatura y la sumamos a la media.
            System.out.println("Nota en la asignatura ["+(iI+1)+"] => "+nMatriz[iX][iI][0]);
            fMedia+=(Float)nMatriz[iX][iI][0];
         }
         //Imprimimos la media total y la inicializamos a 0 otra vez por si se hace otra consulta.
         System.out.println("Media total del alumno en el curso => "+fMedia/iY+"\n");
         fMedia=0.0f;
      }
   }
}

Copialo en tu código y ves como funciona.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Ayuda urgente con tarea de programa en lenguaje C

dominicanvictor C, C#, Visual C++ 0 Lunes 05 Ago 2019 18:04 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Hola, necesito ayuda para esto, algun programad...

Lino Romero Programación en general 0 Jueves 11 Jul 2019 06:52 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Por favor ayuda!!!!!!

Enzo89 Temas generales 1 Jueves 23 May 2019 01:08 Ver último mensaje
El foro no contiene ningún mensaje nuevo

AYUDA CON BUCLES ABIERTOS Y CERRADOS PARA VISUA...

Fabricio Esteban P Visual Basic y VBA 0 Miércoles 08 May 2019 05:21 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,