El código no va....

Iniciado por aletecno, 5 Abril 2014, 23:51 PM

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

aletecno

Hola chicos,

son ya 3 dias que no consigo solucionar este programa...he hecho un montón de pruebas, este es el ultimo borrador que hice...

El programa debería:

- Hacer un promedio de las notas de las materias de cada alumno
- Imprimir los aprobados (promedio > 4,5)
- Imprimir el numero de promedios > 8
- Imprimir el numero de promedios < 4
- Imprimir el promedios máximo

import java.util.Scanner;



public class PRUEBAS {

private static final int NUM_ALUMNOS = 2;
private static final int MATERIAS = 3;

public static void main(String[] args) {
Scanner teclat = new Scanner(System.in);
float nota;
float notaFinal=0;
int aprovats=0;
int inferior = 0;
int superior = 0;
float promedio = 0;
float notaMax = 0;

System.out.println("Introducció qualificacions FOL (Formació i Orientació laboral).");

for(int indAlumne=0; indAlumne<NUM_ALUMNOS; indAlumne++){

for (int i=0; i 0) {
notaMax = notaFinal;
}
} while ((nota 10.0));
}
promedio = notaFinal/MATERIAS;
System.out.println("Promedio: " + promedio);
if ((promedio > 8) && (promedio 4.5) && (promedio <= 10)) {
aprovats++;
} else if ((promedio = 0)){
inferior++;
} else {
nota=0;
}
}

System.out.println("Alumnes que han aprobado : "+ aprovats + ".");
System.out.println ("Numero alumnos con nota inferior a 4: " + inferior + " (" + inferior* 100 / NUM_ALUMNOS + "%).");
System.out.println ("Número alumnos con nota superior a 8: " + superior + " (" + superior* 100 / NUM_ALUMNOS + "%).");
System.out.println("La nota maxima es: " + notaMax);
}
}

Alguien puede corregirlo para que salga correcto?

Gracias.

Mitsu

#1
Es un algoritmo muy sencillo, puedes hacerlo con matrices así:

Código (=java) [Seleccionar]

import java.util.Scanner;

public class NotaSys {
 Scanner read;
 
 public Object[][] fillStudents() {
   read = new Scanner(System.in);
   System.out.println("Cuantos alumnos desea procesar?");
   int cant_stud = read.nextInt();
   System.out.println("Cuantas notas se van a promediar?");
   int cant_calif = read.nextInt();
   Object[][] students = new Object[cant_stud][cant_calif+1];
   
   for(byte i=0; i<students.length; i++) {
     for(byte k=0; k<students[i].length; i++) {
       if(k==0) {
         System.out.println("Ingrese el nombre del alumno:");
         students[i][k] = read.nextLine();
         read.next();
       }
       else {
         System.out.println("Ingrese la nota del alumno:");
         students[i][k] = read.nextInt();
       }
     }
   }
   return students;
 }
   
   public Object[][] getAverage(Object[][] students) {
     
     Object[][] average = new Object[students.length][2];
     for(byte i=0; i<students.length; i++) {
       double total = 0d; // suma las notas
       for(byte k=0; k<students[i].length; i++) {
         if(k!=0) {
           total += students[i][k];
         }
         if(k==students[i].length) {
           average[i][0] = students[i][0]; // guarda el nombre
           average[i][k] = total / students[i].length-1; // y el promedio
         }
       }
     }
     return average;
   }
   
   public double getMaxAverage(Object average[][]) {
     double max = 0d;
     double prom = average[0][1];
     
     for(byte i=0; i<average.length; i++) {
       for(byte k=0; k<average.length; i++) {
         if(k!=0) {
           if(average[i][k] > prom) {
             max = prom;
           }
         }
       }
     }
     return max;
   }
   
   public byte getApproved(Object[][] average) {
     byte cant = 0;
     for(byte i=0; i<average.length; i++) {
       for(byte k=0; k<average.length; i++) {
         if(k!=0) {
           if(k > 4.5) {
             cant++;
           }
         }
       }
     }
     return cant;
   }
     
   public byte getApprovedPlus8(Object[][] average) {
     byte cant = 0;
     for(byte i=0; i<average.length; i++) {
       for(byte k=0; k<average.length; i++) {
         if(k!=0) {
           if(k > 8) {
             cant++;
           }
         }
       }
     }
     return cant;
   }
   
   public byte getDisapproved(Object[][] average) {
     byte cant = 0;
     for(byte i=0; i<average.length; i++) {
       for(byte k=0; k<average.length; i++) {
         if(k!=0) {
           if(k < 4.5) {
             cant++;
           }
         }
       }
     }
     return cant;
   }
   
   public static void main(String[] args) {
     NotaSys n = new NotaSys();
     Object[][] myStudents = n.fillStudents();
     Object[][] average = n.getAverage();
     double max = n.getMaxAverage(average);
     double cant_approved = n.getApproved(average);
     double approved8 = n.getApprovedPlus8(average);
     double disapproved = n.getDisapproved(average);
     
     // imprimes
   }


 }


Lo he hecho en un editor de texto así que quizás tiene algunos errores pero la idea es esa. Salu2.

aletecno

Hola, agradezco mucho tu respuesta. Y tu proposición está muy bien...el problema es que me estoy volviendo loco porque hay que resolver el ejercicio sólo con estructuras while, for, if...con variabile a y costantes però sin vectores...con el Scanner y nada mas...por esto no me sale...

aletecno

Hola gente...ya lo he resuelto...me ha costado 2 dias de faena pero bien!!!!!!! :)