ayuda con ejercicio para calcular las notas medias

Iniciado por mortimernox, 12 Noviembre 2019, 01:02 AM

0 Miembros y 1 Visitante están viendo este tema.

mortimernox

Hola acabo de empezar a estudiar DAM y en programacion son bastantes malos apenas no dan soporte y nos dejan mucho a nuestra bola y que busquemos informacion, tengo que hacer un ejercicio para calcular las notas medias, de momento tengo este codigo pero no consigo que me haga los calcullos de los puntos extras ni de las medias.. me podeis ayudar???

import java.util.*;

public class borrar{
    public static void main(String[] args){
   
        // Scanner leerTeclado = new Scanner(System.in);
         Parcial();
         System.out.pirntln(nota);       
         
   }         
   
    public static void Parcial() {
         Scanner leerTeclado = new Scanner(System.in);     
         System.out.println("Parcial:");
         System.out.print("Introduce el peso del examen (0-100): ");
         double peso = leerTeclado.nextDouble();
         System.out.print("Introduce la calificación del examen (0-100): ");
         double clasificacion = leerTeclado.nextDouble();
         System.out.print("¿Has obtenido puntos extra (1=Si, 2=No)?");
         int respuesta = leerTeclado.nextInt();
         if (respuesta == 1) {
         System.out.print("Introduce el total de puntos extra: ");
            int puntos = leerTeclado.nextInt();
            } else {
         System.out.println("");
         }
        nota = peso * clasificacion;
        return nota;
     }


}

K-YreX

Bueno pues digamos que los nombres de las clases/métodos no son muy descriptivos.
Tampoco sé cómo es la fórmula que necesitas para calcular la media.
No puedes hacer un <return> a un método de tipo <void> (<void> significa justamente que no devuelve nada)
Y la línea del <else> sobra un poco (bastante) yo creo.

Y por favor, los códigos entre etiquetas de Código GeSHi
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

mortimernox

El ejercicio dice asi.

calcular la nota parcial y mostrará tanto la nota final como la nota final ponderada tal y como se muestra a continuación. Pedirá el peso que tiene el parcial en la nota final, la nota sobre 100 que obtenido el estudiante y si tiene puntos extra o no. Los puntos extra se sumarán a la nota del examen hasta llegar a 100 que será el valor máximo para este concepto. Es decir, si alguien tiene una nota de 95 y 10 puntos extra, el valor que obtendrá será 100 y no 105 que sería lo que realmente le correspondería. La nota final ponderada la calculará multiplicando la nota por el peso entre 100:

lo que ido haciendo  a sido sacar esos datos por el metodo Scanner, pero luego necesito hacer unos calculos con ellos, si tienes razon no cambiado el void para que haga el return. el problema es sacar el dato del if bueno uno de ellos, poco a poco vamos..

@XSStringManolo

Código (java) [Seleccionar]
package com.testMedia;

import java.util.*;

public class Main
{

  public static void main(String[] args)
  {
 
   Scanner leerTeclado = new Scanner(System.in);
   
   /* No cierras nunca leerTeclado, está malgastando recursos */
   

/* Errores empiezan aquí:

*System.out.pirntln(nota);

Nota no la definiste y escribirste mal print. Te añado el tipo double dentro del cuerpo de Parcial.

Al definir la variable dentro de la clase sin especificar, a primeras no vas a poder trabajar con ella desde fuera.

Limítate a imprimir dentro de Parcial o  asigna el valor de nota en retorno de la llamada a Parcial a una variable para imprimirla. O como hago yo, directamente con meter la llamada dentro del println ya ves el valor de retorno nota.
System.out.println( Parcial() );



Estás intentando retornar la variable double nota en void Parcial.

Parcial debe ser del mismo tipo de dato que el de retorno. Como quieres retornar double nota, pues declaras double Parcial.

void es solo para cuando no hagas return dentro del cuerpo.

Haciendo esos cambios, el programa ya compila.
*/  
 
 
 
  /*Esto es para la media: */
  double media = 0;
 
  while(true)
  {
  System.out.println("1.Ingresar notas\n2.salir");
 
  int opcionBucle = leerTeclado.nextInt();
 
  if (opcionBucle == 2)break;
 
 
  if (media != 0)
  {
  media = (media+Parcial())/2;
  }
 
  else
  {
  media = media+Parcial();
  }
 
 
 
 
 
  System.out.println("Media de valores: " + media + "\n");
 
 
 

 
  }
 
  /* Recuerda que Parcial(); Equivale a su valor de retorno nota */
  }
 
 
   
   
  public static double Parcial()
  {
 
  Scanner leerTeclado = new Scanner(System.in);    
 
  System.out.println("Parcial:");
       
  System.out.print("Introduce el peso del examen (0-100): ");
 
  double peso = leerTeclado.nextDouble();
 
  System.out.print("Introduce la calificación del examen (0-100): ");
       
  double clasificacion = leerTeclado.nextDouble();
       
  System.out.print("¿Has obtenido puntos extra (1=Si,  2=No)?");
       
  int respuesta = leerTeclado.nextInt();
       
     if (respuesta == 1)
     {
     System.out.print("Introduce el total de puntos extra: ");
     
     int puntos = leerTeclado.nextInt();
      }
     
     
/* No entiendo para que multiplicas, o que intentas hacer. Pero esto ya es tema de matemáticas y no de programación. Que en mi opinión son temas a parte.

double nota = peso * clasificacion;

*/

/*Me imagino que peso es la nota máxima posible del examen. Y clasificación la nota que sacó el alumno?

En ese caso te pongo un ejemplo.
El alumno sacó un 4 de clasificación. Y la nota máxima era 8.
Tienes la fracción: 8/4.
8 dividido entre 4 son 2.

Ahora si quieres calcular la equivalencia de si el examen fuesen 100 puntos, divides 100 entre el resultado de la fracción: 100/2 = 50.

O sobre 10 -> 10/2 = 5
El alumno sacó un 5 sobre 10.


O que peso es la relevancia de ese examen con respecto al resto. En ese caso no sé que equación sería adecuada aplicar para que todas las notas tengan relevancia. Usaré la multiplicación como en tu ejemplo. Pero no le veo sentido.
*/
 
/*
Para hacer la nota media necesitas obtener varias notas del usuario. Esto lo puedes hacer de muchas formas distintas. Yo lo haría con un bucle for o un bucle while.

La logica es:

mientras(condicion)
{
guarda notas del usuario en un array. O ve calculando la media a con cada nueva nota utilizando solo 1 variable.
Puedes hacerlo incluso con el valor de retorno de Parcial, pero deberían compartir todas la misma nota máxima sobre la cual calcular, por ejemplo 10.
}

Una vez tengas más de 1 nota. Para calcular la media aritmética simplemente sumas las notas y divides la suma de ellas, por la cantidad de sumandos/notas sumadas. */
 
  double nota = peso * clasificacion;
  return nota;
  }
}


Tienes muchos errores, te los arreglé y te comenté un poco el código.
Deberías seguir algún curso de Java o libro. Tienes en las páginas web de W3schools y de tuts4you cursos de Java. En la web de pdfdrive puedes descargar libros de Java.

El código que te hice es bastante batiburrillo, se puede hacer mucho más simple y sencillo.

Leyendo el título del ejercicio, deberías olvidarte de la programación, realizar el ejercicio en papel para tener claro que debes hacer, y una vez organizados todos los pasos/operaciones que tienes que realizar para completar el ejercicio, entonces haces el programa en Java.

K-YreX

Cita de: mortimernox en 12 Noviembre 2019, 11:48 AM
El ejercicio dice asi.

calcular la nota parcial y mostrará tanto la nota final como la nota final ponderada tal y como se muestra a continuación. Pedirá el peso que tiene el parcial en la nota final, la nota sobre 100 que obtenido el estudiante y si tiene puntos extra o no. Los puntos extra se sumarán a la nota del examen hasta llegar a 100 que será el valor máximo para este concepto. Es decir, si alguien tiene una nota de 95 y 10 puntos extra, el valor que obtendrá será 100 y no 105 que sería lo que realmente le correspondería. La nota final ponderada la calculará multiplicando la nota por el peso entre 100:

lo que ido haciendo  a sido sacar esos datos por el metodo Scanner, pero luego necesito hacer unos calculos con ellos, si tienes razon no cambiado el void para que haga el return. el problema es sacar el dato del if bueno uno de ellos, poco a poco vamos..
Bueno lo que yo entiendo de esto es que te piden el porcentaje de la nota final que vale dicho examen (por ejemplo un 50%), la nota de dicho examen (que si es 100 pues la nota final sería 50 porque faltarían otros exámenes o cosas con el otro 50% de la nota y unos puntos extra que se pueden sumar al examen hasta llegar a 100.

Podrías pedir al usuario que introduza si tiene o no puntos extra y después si sí que los tiene pedirle la cantidad exacta o directamente pedir la cantidad y quien no tenga puntos extra que ponga 0.

INICIO
    PEDIR porcentaje
    PEDIR notaExamen
    PEDIR puntosExtra
    notaExamen = notaExamen + puntosExtra
   
    SI notaExamen > 100 ENTONCES
        notaExamen = 100
    FIN SI
   
    notaFinal = notaExamen * porcentaje / 100
    MOSTRAR notaFinal
FIN

Este sería el pseudocódigo si pides directamente la cantidad de puntos extra. El porcentaje se introduce en tanto por ciento (0 - 100) para dividirlo por 100 en la última línea. Si se introduce en tanto por uno (0 - 1) entonces no hay que dividir por 100.


INICIO
    PEDIR porcentaje
    PEDIR notaExamen
    PEDIR hayPuntosExtra

    SI hayPuntosExtra ENTONCES
        PEDIR puntosExtra
        notaExamen = notaExamen + puntosExtra
    FIN SI

    SI notaExamen > 100 ENTONCES
        notaExamen = 100
    FIN SI

    notaFinal = notaExamen * porcentaje / 100
    MOSTRAR notaFinal
FIN

Y este sería el pseudocódigo para la versión en la que primero preguntas si hay o no puntos extra. El condicional para corregir los números superiores a 100 lo estoy poniendo después en ambos casos por si alguien introduce como <notaExamen> un número mayor que 100, para que la corrección también se aplique.

Intenta pasar ambos pseudocódigos a Java porque así es como aprendes. Si miras códigos ya hechos no sirve de nada ya que lo entenderás según lo vayas leyendo pero el día que lo hagas tú, te aparecerán errores y no sabrás de qué son.
Y si tienes algún problema para pasar alguno de los pseudocódigos siempre puedes preguntar por aquí poniendo los códigos entre etiquetas de Código GeSHi.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

mortimernox

MUCHISIMAS GRACIAS, me pongo con ello compara y ver en lo que falladado pues esa es una parte de ejercicio que tenemos, pero muchisimas gracias, voy a mirar lo que me comentais