Autor Tema: Java operaciones con arrays (arreglos) y matrices calcular nota promedio función  (Leído 12121 veces)

Atlast

  • Sin experiencia
  • *
  • Mensajes: 3
    • Ver Perfil
Hola, me han puesto este ejercicio para resolver en Java:

Registrar 5 alumnos con su materia y 3 calificaciones nota_1, nota_2 y nota_3; pero la nota_3 es el calculo siguiente : (((((nota_1+nota_2)/2)+0.5))*2)/2 .

Utilizar un menú con la siguientes opciones:
1. Mostrar la nota promedio mas alta.
2. Mostrar las  3 notas mas bajas.
3. Ordenar de mayor a menor la nota_1.
4. Salir


Si alguien me pudiera ayudar con este ejercicio, ya llevo cabeceando dos días con este y nada he podido avanzar.
« Última modificación: 14 de Junio 2020, 18:05 por Ogramar »
Atlast

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Registrar 5 alumnos con su materia y 3 calificaciones
« Respuesta #1 en: 27 de Agosto 2019, 13:34 »
Sería interesante que mostrases aquí el código que hayas escrito, por muy incompleto y/o erróneo que pueda ser, para poder indicarte donde te equivocas y cómo corregirlo.

Además nos sirve para dar una idea de en que punto de aprendizaje te encuentras, para así resolverlo de una manera o de otra.
Por ejemplo, supongo que aún no has llegado a Programación Orientada a Objetos, por lo que crear una clase Alumno quedaría descartado.

Por el enunciado supongo que lo que se pretende es practicar operaciones con arrays y matrices.

El programa debería pedir datos para registrar 5 alumnos.
Nombres de alumno y materias se podrían guardar en arrays separados con longitud 5 (ya que son 5 alumnos) y de tipo String.
Aunque luego de todos modos no se va a hacer casi nada con estos datos.

Por cada alumno se piden 2 notas y con ellas se hace el calcula de una tercera nota.
Así que cada alumno tiene 3 notas. Estas notas se pueden guardar en una matriz de 5 x 3.
Es en esta matriz donde se harán todas las operaciones que pide el enunciado.

Empieza por crear esta parte del programa. Registro de 5 alumnos, nombre, materia y 2 notas para calcular la tercera.
Y guardarlo todo correctamente en arrays y matriz

Una vez tengas esto, se mostraría al usuario un menú de 4 opciones.
Se le pide al usuario que elija opción y según lo que pida se llama a la función/método correspondiente que se encargará de  hacer lo que se pida.
Habrá una función para:
- calcular Nota Promedio mas alta.
- mostrar las tres notas más bajas
- ordenar las Notas 1 de mayor a menor.

Cada función es independiente y tiene que encargarse únicamente de su cometido.



Te propongo aquí una solución en base a esto. Siempre será mejor que intentes resolverlo tú, aunque no lo consigas e ir preguntando como avanzar cuando te atasques.
Pero puedes ayudarte mirando mi código.
Si algo no lo entiendes, solo tienes que preguntarlo.

Pego aquí el código.

Código: [Seleccionar]
//https://aprenderaprogramar.com/foros/index.php?topic=7374.msg26903#new

package registrarAlumnos;

import java.util.Scanner;

public class Registros {

/*Variables principales*/

//Nombre de los alumnos
static String[] nombres = new String[5];
//Materias que cursan los alumnos
static String[] materias = new String[5];
//Matriz con las 3 notas de los 5 alumnos
static double[][] notas = new double[5][3];

/*Método main*/
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);

//Registramos 5 alumnos
for (int i = 0; i < 5; i++) {
System.out.println("Registrando alumno #" + (i+1));
System.out.print("Nombre: ");
nombres[i] = teclado.nextLine();
System.out.print("Materia: ");
materias[i] = teclado.nextLine();
System.out.print("Nota 1: ");
notas[i][0] = Double.parseDouble(teclado.nextLine());
System.out.print("Nota 2: ");
notas[i][1] = Double.parseDouble(teclado.nextLine());
//La Nota 3 se autocalcula según formula.
notas[i][2] = (((((notas[i][0]+notas[i][1])/2)+0.5))*2)/2;
System.out.println("Valor autocalculado para Nota 3: " + notas[i][2]);
System.out.println("Alumno registrado...\n");
}

//Finalizado registro, abrimos menú de opciones
int opcion = 0;
do {
System.out.println("\n\n\t\tMENU OPCIONES\n");
System.out.println("[1] Mostrar nota promedio más alta.");
System.out.println("[2] Mostrar las 3 notas más bajas.");
System.out.println("[3] Ordenar de mayor a menor Nota 1.");
System.out.println("[4] SALIR.");
System.out.print("Elija opcion: ");
opcion = Integer.parseInt(teclado.nextLine());
switch(opcion) {
case 1:
notaPromedioMasAlta();
break;
case 2:
tresNotasMasBajas();
break;
case 3:
ordenaNota1();
break;
case 4:
System.out.println("\n\t\tFIN DE PROGRAMA");
break;
default:
System.out.println("\nOpcion equivocada. Escoja entre [1-4]");
}
}while(opcion != 4);

teclado.close();
}

/*Métodos para funciones del menú*/

private static void notaPromedioMasAlta() {
/*
* Calculamos el promedio de cada Alumno
* y nos quedaremos con la más alta.
*/
double masAlta = 0;
int alumno = 0;

for (int i = 0; i < notas.length; i++) {
double sumaNotas = notas[i][0] + notas[i][1] + notas[i][2];
double promedio = sumaNotas / 3;
if (promedio > masAlta) {
masAlta = promedio;
alumno = i;
}
}

System.out.printf("\nNota promedio más alta: %.2f\n", masAlta);
System.out.println("Alumno: " + nombres[alumno]);
}

private static void tresNotasMasBajas() {
/*
* Una forma de obtener las tres notas más bajas
* sería construir un array unidimensional con todas
* las notas, ordenarlo de menor a mayor, y mostrar
* las tres primeras tras haber ordenado.
*/

//Construimos array con todas las notas
double[] todasNotas = new double[15]; //5 alumnos, 3 notas: 5x3 = 15 notas
int z = 0; //Indice para el array unidimenional
for (int i = 0; i < notas.length; i++)
for (int j = 0; j < notas[0].length; j++) {
todasNotas[z] = notas[i][j];
z++;
}
//Array construido, ordenamos de menor a mayor
for (int i = 0; i < todasNotas.length -1; i++) {
for (int j = 0; j < todasNotas.length-i-1; j++) {
if (todasNotas[j + 1] < todasNotas[j]) {
double aux = todasNotas[j + 1];
todasNotas[j + 1] = todasNotas[j];
todasNotas[j] = aux;
}
}
}
//Array ordenado, mostramos los tres primeros

System.out.println("\nLas tres notas más bajas son:");
for (int i = 0; i < 3; i++) {
System.out.println("- " + todasNotas[i]);
}
}

private static void ordenaNota1() {
/*
* Construimos array solo con notas 1
* y ordenamos de mayor a menor
*/

double[] notas1 = new double[5];
for (int i = 0; i < 5; i++)
notas1[i] = notas[i][0];
//Ordenamos
for (int i = 0; i < notas1.length -1; i++) {
for (int j = 0; j < notas1.length-i-1; j++) {
if (notas1[j + 1] > notas1[j]) {
double aux = notas1[j + 1];
notas1[j + 1] = notas1[j];
notas1[j] = aux;
}
}
}

//Mostramos
System.out.println("\nNotas 1 de MAYOR a MENOR:");
for (int i = 0; i < 5; i++)
System.out.print(notas1[i] + " ");
}
}
« Última modificación: 14 de Junio 2020, 17:59 por Ogramar »
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Atlast

  • Sin experiencia
  • *
  • Mensajes: 3
    • Ver Perfil
Re:Registrar 5 alumnos con su materia y 3 calificaciones
« Respuesta #2 en: 27 de Agosto 2019, 14:45 »
Hola soy nuevo. Aunque la programación orientada a objetos no es parte de las asignaturas del semestre en el que me encuentro, sí hacemos uso de clases.

La próxima vez que publique en el foro trataré de hacer una mejor formulación de problema que tenga. Gracias por la ayuda, ya con eso me puedo guiar.


« Última modificación: 14 de Junio 2020, 18:00 por Ogramar »
Atlast

Atlast

  • Sin experiencia
  • *
  • Mensajes: 3
    • Ver Perfil
Re:Registrar 5 alumnos con su materia y 3 calificaciones
« Respuesta #3 en: 27 de Agosto 2019, 20:19 »
Usando tu código me quedó así:

La clases notas:

Código: [Seleccionar]
package deber1;

import java.util.Scanner;

public class notas {

    Scanner teclado = new Scanner(System.in);

    static String[] nombres = new String[5];

    static String[] materias = new String[5];

    static double[][] notas = new double[5][3];

    public void datos() {

        for (int i = 0; i < 5; i++) {
            System.out.println("Registrando alumno #" + (i + 1));
            System.out.print("Nombre: ");
            nombres[i] = teclado.nextLine();
            System.out.print("Materia: ");
            materias[i] = teclado.nextLine();
            System.out.print("Nota 1: ");
            notas[i][0] = Double.parseDouble(teclado.nextLine());
            System.out.print("Nota 2: ");
            notas[i][1] = Double.parseDouble(teclado.nextLine());
            //La Nota 3 se autocalcula según formula.
            notas[i][2] = (((((notas[i][0] + notas[i][1]) / 2) + 0.5)) * 2) / 2;
            if(notas[i][2]>10){
                notas[i][2] =notas[i][2]- (notas[i][2] - 10);
                System.out.println("Valor autocalculado para Nota 3: " + notas[i][2]);
            }else{
                System.out.println("Valor autocalculado para Nota 3: " + notas[i][2]);
               
            }
           
            System.out.println("Alumno registrado...\n");
        }

    }

    public  void notaPromedioMasAlta() {
        /*
* Calculamos el promedio de cada Alumno
* y nos quedaremos con la más alta.
         */
        double masAlta = 0;
        int alumno = 0;

        for (int i = 0; i < notas.length; i++) {
            double sumaNotas = notas[i][0] + notas[i][1] + notas[i][2];
            double promedio = sumaNotas / 3;
            if (promedio > masAlta) {
                masAlta = promedio;
                alumno = i;
            }
        }

        System.out.printf("\nNota promedio más alta: %.2f\n", masAlta);
        System.out.println("Alumno: " + nombres[alumno]);
    }

    public  void tresNotasMasBajas() {
       

        //Construimos array con todas las notas
        double[] todasNotas = new double[15]; //5 alumnos, 3 notas: 5x3 = 15 notas
        int z = 0; //Indice para el array unidimenional
        for (int i = 0; i < notas.length; i++) {
            for (int j = 0; j < notas[0].length; j++) {
                todasNotas[z] = notas[i][j];
                z++;
            }
        }
        //Array construido, ordenamos de menor a mayor
        for (int i = 0; i < todasNotas.length - 1; i++) {
            for (int j = 0; j < todasNotas.length - i - 1; j++) {
                if (todasNotas[j + 1] < todasNotas[j]) {
                    double aux = todasNotas[j + 1];
                    todasNotas[j + 1] = todasNotas[j];
                    todasNotas[j] = aux;
                }
            }
        }
        //Array ordenado, mostramos los tres primeros

        System.out.println("\nLas tres notas más bajas son:");
        for (int i = 0; i < 3; i++) {
            System.out.println("- " + todasNotas[i]);
        }
    }

    public  void ordenaNota1() {
        /*
* Construimos array solo con notas 1
* y ordenamos de mayor a menor
         */

        double[] notas1 = new double[5];
        for (int i = 0; i < 5; i++) {
            notas1[i] = notas[i][0];
        }
        //Ordenamos
        for (int i = 0; i < notas1.length - 1; i++) {
            for (int j = 0; j < notas1.length - i - 1; j++) {
                if (notas1[j + 1] > notas1[j]) {
                    double aux = notas1[j + 1];
                    notas1[j + 1] = notas1[j];
                    notas1[j] = aux;
                }
            }
        }

        //Mostramos
        System.out.println("\nNotas 1 de MAYOR a MENOR:");
        for (int i = 0; i < 5; i++) {
            System.out.print(notas1[i] + " ");
        }
    }
}


Y la clase donde esta el menu "Deber1" :

Código: [Seleccionar]
package deber1;

import java.util.Scanner;

public class Deber1 {

    public static void main(String[] args) {
        int opcion;
        notas obj = new notas();
        Scanner teclado = new Scanner(System.in);

        do {
            System.out.println("\n\n\t\tMENU OPCIONES\n");
            System.out.println("[1] Ingresar los datos");
            System.out.println("[2] Mostrar nota promedio más alta.");
            System.out.println("[3] Mostrar las 3 notas más bajas.");
            System.out.println("[4] Ordenar de mayor a menor Nota 1.");
            System.out.println("[5] SALIR.");
            System.out.print("Elija opcion: ");
            opcion = Integer.parseInt(teclado.nextLine());
            switch (opcion) {
                case 1:
                    obj.datos();
                    break;
                case 2:
                    obj.notaPromedioMasAlta();
                    break;
                case 3:
                    obj.tresNotasMasBajas();
                    break;
                case 4:
                    obj.ordenaNota1();
                    break;
                case 5:
                    System.out.println("\n\t\tFIN DE PROGRAMA");
                    break;
                default:
                    System.out.println("\nOpcion equivocada. Escoja entre [1-4]");
            }
        } while (opcion != 5);

    }

}
« Última modificación: 14 de Junio 2020, 18:01 por Ogramar »
Atlast

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".