Autor Tema: Java usar instrucciones condicionales y repetitivas programa obtener promedio  (Leído 2316 veces)

msanchezv

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Hola, necesito ayuda para resolver este programa en Java:

Permitir el registro de 10 alumnos a una clase con su respectivo nombre, edad y carrera a la que ingresa:
a) Obtener el promedio de edad de los asistentes a la clase.
b) Agrupar a los alumnos en grupos de 3 de acuerdo al tipo de carrera, ciencias o letras.

Por ejemplo:
Luis 20 años Ingeniería Industrial; Mario 18 Comunicaciones; María 18 Literatura.
En un grupo estarían
Mario 18 Comunicaciones y María 18 Literatura.
« Última modificación: 14 de Agosto 2019, 19:20 por Ogramar »

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Re:Utilizar instrucciones condicionales y repetitivas (ayuda)
« Respuesta #1 en: 18 de Octubre 2018, 09:17 »
Si no te explicas algo mas no hay manera de entender que es lo que quieres.

En que lenguaje hay que programarlo?
Se trata de una base de datos, arrays..?

msanchezv

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Re:Utilizar instrucciones condicionales y repetitivas (ayuda)
« Respuesta #2 en: 18 de Octubre 2018, 14:46 »
En lenguaje java. Como el asunto indica, sólo con instrucciones condicionales y repetitivas (ya lo hice con arrays), o sea con "while - do - for - if", no sé como se podría almacenar sin arrays. Indicar si tiene alguna manera de hacerse sólo usando condicionales y bucles.

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Re:Utilizar instrucciones condicionales y repetitivas (ayuda)
« Respuesta #3 en: 18 de Octubre 2018, 17:31 »
Podrias incluir el codigo para echarle un vistazo?.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 842
    • Ver Perfil
Re:Utilizar instrucciones condicionales y repetitivas (ayuda)
« Respuesta #4 en: 18 de Octubre 2018, 23:53 »
Permitir el registro de 10 alumnos a una clase con su respectivo nombre, edad y carrera a
la que ingresa:
 Obtener el promedio de edad de los asistentes a la clase.
 Agrupar a los alumnos en grupos de 3 de acuerdo al tipo de carrera, ciencias o letras.
Por ejemplo:
Luis 20 años Ingeniería Industrial; Mario 18 Comunicaciones; María 18 Literatura.
En un grupo estarían
Mario 18 Comunicaciones y María 18 Literatura.

¿Seguro que el enunciado es correcto?
Dice ingresar 10 alumnos y hacer grupos de 3.. por consiguiente, solo se podrán hacer 3 grupos (3 grupos x 3 alumnos = 9 alumnos) y 1 alumno quedaría solitario sin grupo.

Se puede "almacenar" sin arrays.
Para las edades simplemente usar un int donde se van sumando las edades y luego se divide entre 10 para sacar la media.

Los nombres se pueden ir concatenando en una cadena tipo String (obviamente es una chapuza, lo correcto sería usar arrays)
Incluso las edades se pueden concatenar también en un String si queremos mostrarlos en pantalla junto los nombres, a parte de sumarlas en el acumulador para el calculo del promedio de edad.

Lo que no me queda claro es lo de agrupar en grupos de 3, no cuadran los números como he dicho, ni tampoco tengo claro si luego se desea mostrarlos en pantalla o no...


Muchas veces, es más dificil desentrañar que narices nos está pidiendo el enunciado de un ejercicio, que luego codificar el algoritmo.
« Última modificación: 18 de Octubre 2018, 23:56 por Kabuto »
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

msanchezv

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Re:Utilizar instrucciones condicionales y repetitivas (ayuda)
« Respuesta #5 en: 19 de Octubre 2018, 04:01 »
Como indicas, por ejemplo si hay 5 en ciencias y 5 en letras cada uno tendría 1 grupo de tres y un grupo incompleto de 2. Mi consulta es más que nada como hacerlo sin usar array y sólo con string, condicionales y bucles. Como lo harías por ejemplo con tres alumnos. Al final que salgan en pantalla. No importa lo de los grupos de 3, como dije ya lo termine pero con arrays, esa parte seria igual.

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Re:Utilizar instrucciones condicionales y repetitivas (ayuda)
« Respuesta #6 en: 19 de Octubre 2018, 11:35 »
Se crea la cadena para cada alumno dentro de una misma cadena.
Ejem.
String msg;
msg="Luis 20 años Ingeniería Industrial;"
msg=msg+"Mario 18 Comunicaciones;"

con un while recorres la cadena, creas cuatro contadores uno para el registro, otro para nombre, otro para edad y otro para carrera 
 otro while y analizas la cadena mientras sea una letra, cuando sea diferente de letra le sumas uno a nombre.
  otro while y analizas si es numero cuando sea diferente de numero le sumas uno a edad.
   otro while y analizas si es letra  cuando sea diferente de letra le sumas uno a carrera.
   todo esto con los consiguientes if para separar los espacios etc.
   con uno de estos if analizas si es punto y coma y si es punto y coma le sumas uno a registro.
Así hasta el final de la cadena.
Una vez finalizado el análisis de la cadena solamente queda dimensionar los contadores en arrays.
Ejemplo Array nombres[registro,nombre] etc.
A partir de hay ya puedes manejar los datos.

Es esto a lo que te refiere?

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 842
    • Ver Perfil
Re:Utilizar instrucciones condicionales y repetitivas (ayuda)
« Respuesta #7 en: 20 de Octubre 2018, 01:25 »
Como indicas, por ejemplo si hay 5 en ciencias y 5 en letras cada uno tendría 1 grupo de tres y un grupo incompleto de 2. Mi consulta es más que nada como hacerlo sin usar array y sólo con string, condicionales y bucles. Como lo harías por ejemplo con tres alumnos. Al final que salgan en pantalla. No importa lo de los grupos de 3, como dije ya lo termine pero con arrays, esa parte seria igual.

Mira, te propongo un codigo que creo cumple con lo que se pide.
Pedir 10 alumnos, guardar sus datos en grupos de 3, separados según los dos tipos de carrera y calcular el promedio de edad.
Todo ello sin usar arrays ni matrices.

Lo que hago es declarar 4 Strings, uno para cada grupo. Ya que para 10 alumnos habrán 4 grupos, ni más, ni menos.
Junto con cada String de grupo, declaro su propio contador.

Entonces pido datos: nombre, edad y carrera.
Compongo un unico String con estos datos, evaluo a que tipo de carrera pertenecen (para ello me valgo de un String staticos con algunas de las posibles carreras para cada tipo) y llamo un metodo al que le paso el string con los datos y otro String con un unico caracter para indicar cual es el tipo de carrera: "C" para Ciencias o "L" para Letras.

ESte metodo empezará a consultar los contadores de cada grupo.
Empezará pro el primero.
Si su contador es == 0, es que está vacío y concatenará aqui los datos del alumno, poniendo al principio de todo el caracter de Tipor de Carrera. Así este primer grupo quedará adjudicado al tipo de carrera correpondiente.

Si el contador no es 0, pero es menor que 3, es que el grupo esta empezado y aun queda sitio para otro alumno, pero solo lo añadiremos si el caracter 0 de este STring que representa al grupo, corresponde con el caracter de Tipo de Carrera.
Si no corresponde, es que este grupo pertenece a un tipo distinto al del nuevo alumno que estamos añadiendo, por tanto, pasaremos a hacer las mismas consultas al siguiente grupo.
Y así hasta haber consultado los 4 grupos.

Quizás es algo lioso así explicado, pero es más sencillo de lo que parece.
Mira, este es mi programa:

Código: [Seleccionar]
//https://aprenderaprogramar.com/foros/index.php?topic=7173.0
package gruposAlumnos;

import java.util.Scanner;

public class Grupos {

//Algunas posibles carreras para las dos categorias de CIENCIAS y LETRAS
final static String CARRERAS_CIENCIAS = "astronomia biologia bioquimica biotecnologia fisica genetica geologia matematicas";
final static String CARRERAS_LETRAS = "periodismo historia publicidad humanidades filologia traduccion";
//Los 4 posibles grupos y sus contadores.
static String grupo1 = new String(); static int contGrupo1 = 0;
static String grupo2 = new String(); static int contGrupo2 = 0;
static String grupo3 = new String(); static int contGrupo3 = 0;
static String grupo4 = new String(); static int contGrupo4 = 0;
//Acumulador para el promedio de edades
static int sumaEdades = 0;
//Objeto Scanner para pedir datos por consola
static Scanner teclado = new Scanner(System.in);

/**
* Introduce los datos del alumno en un grupo adecuado según su tipo de carrera
* @param tipoCarrera Cadena String con valor "C" para Ciencias o "L" para Letras
* @param nuevoAlumno Cadena String con nombre, edad y carrera en la que se inscribe
*/
static void agruparAlumno(String tipoCarrera, String nuevoAlumno)
{
/*
* Buscaremos un grupo adecuado para este alumno o iniciaremos uno nuevo.
* Al iniciar un grupo, el primer caracter de su String será el indicado
* por tipoCarrera : "C" para Ciencias o "L" para letras.
* De este modo sabremos a que tipo de carrera está adjudicado cada grupo
*/

if (contGrupo1 == 0)//El primer grupo esta vacio, lo iniciamos y le adjudicamos un tipo de carrera
{
grupo1 = tipoCarrera + nuevoAlumno + "\n";
contGrupo1++;
}
else if (contGrupo1 < 3 && grupo1.startsWith(tipoCarrera))
{
//Grupo1 esta iniciado pero aun queda sitio.
//Sin embargo, solo añadiremos este alumno si corresponde al mismo tipo de carrera
grupo1 += nuevoAlumno + "\n";
contGrupo1++;
}
//LLegados a este punto, es que grupo1 ya esta completo.
//Seguiremos haciendo las mismas preguntas para el resto de grupos
else if(contGrupo2 == 0)
{
grupo2 = tipoCarrera + nuevoAlumno + "\n";
contGrupo2++;
}
else if (contGrupo2 < 3 && grupo2.startsWith(tipoCarrera))
{
grupo2 += nuevoAlumno + "\n";
contGrupo2++;
}
else if(contGrupo3 == 0)
{
grupo3 = tipoCarrera + nuevoAlumno + "\n";
contGrupo3++;
}
else if (contGrupo3 < 3 && grupo3.startsWith(tipoCarrera))
{
grupo3 += nuevoAlumno + "\n";
contGrupo3++;
}
else if(contGrupo4 == 0)
{
grupo4 = tipoCarrera + nuevoAlumno + "\n";
contGrupo4++;
}
else if (contGrupo4 < 3 && grupo4.startsWith(tipoCarrera))
{
grupo4 += nuevoAlumno + "\n";
contGrupo4++;
}
}

public static void main(String[] args) {

for (int i = 1; i <= 10; i++)
{
//Pedimos datos
System.out.println("Alumno #" + i);
System.out.print("Nombre: ");
String nombre = teclado.nextLine();
System.out.print("Edad: ");
String edad = teclado.nextLine();
System.out.print("Carrera: ");
String carrera = teclado.nextLine();
//Acumulamos la edad para luego sacar la media
sumaEdades += Integer.parseInt(edad);
//Creamos un unico String con todos los datos en una sola linea
String nuevoAlumno = nombre + " " + edad + " " + carrera;
//Evaluamos el tipo de carrera y añadimos alumno si la carrera es reconocible
if (CARRERAS_CIENCIAS.contains(carrera.toLowerCase()))
{
agruparAlumno("C", nuevoAlumno);
}
else if (CARRERAS_LETRAS.contains(carrera.toLowerCase()))
{
agruparAlumno("L", nuevoAlumno);
}
else
{
System.out.println("\nNo se reconoce la carrera: " + carrera);
System.out.println("Este alumno no sera registrado");
i--;//Revertimos el incremento del indice del bucle
//Revertimos la acumulacion de la edad
sumaEdades -= Integer.parseInt(edad);
}

}

//Bucle for finalizado, tenemos los 10 alumnos en grupos de tres. Mostramos datos.
//Primer grupo
System.out.print("\n\nPrimer grupo.\nTipo de carrera: ");
System.out.println(grupo1.startsWith("C")?"Ciencias":"Letras");
System.out.println("Componentes:");
System.out.println(grupo1.substring(1));//Eludimos el caracter 0, que es el que usamos como indicador del tipo de carrera
//Segundo grupo
System.out.print("\nSegundo grupo.\nTipo de carrera: ");
System.out.println(grupo2.startsWith("C")?"Ciencias":"Letras");
System.out.println("Componentes:");
System.out.println(grupo2.substring(1));
//Tercer grupo
System.out.print("\nTercer grupo.\nTipo de carrera: ");
System.out.println(grupo3.startsWith("C")?"Ciencias":"Letras");
System.out.println("Componentes:");
System.out.println(grupo3.substring(1));
//Ultimo grupo, el del alumno solitario
System.out.print("\nCuarto grupo.\nTipo de carrera: ");
System.out.println(grupo4.startsWith("C")?"Ciencias":"Letras");
System.out.println("Componentes:");
System.out.println(grupo4.substring(1));

//Por ultimo, la media de edad
System.out.println("\n\nEl promedio de edad entre los alumnos es: " + (int)(sumaEdades / 10));

}

}

Y esta es la salida que obtengo al ejecutar el programa e introducir datos de los 10 alumnos.
Fíjate que ha sabido almacenar y agrupar todos los datos correctamente, sin usar arrays u otro tipo de coleccion de datos.
Citar
Alumno #1
Nombre: Antonio
Edad: 23
Carrera: Astronomia
Alumno #2
Nombre: Ana
Edad: 25
Carrera: Periodismo
Alumno #3
Nombre: Javier
Edad: 39
Carrera: Biotecnologia
Alumno #4
Nombre: Ramon
Edad: 30
Carrera: Matematicas
Alumno #5
Nombre: Nerea
Edad: 24
Carrera: Humanidades
Alumno #6
Nombre: Irina
Edad: 37
Carrera: Periodismo
Alumno #7
Nombre: Nuria
Edad: 25
Carrera: Publicidad
Alumno #8
Nombre: Edgar
Edad: 32
Carrera: Traduccion
Alumno #9
Nombre: Pedro
Edad: 28
Carrera: Fisica
Alumno #10
Nombre: Lucas
Edad: 24
Carrera: Genetica


Primer grupo.
Tipo de carrera: Ciencias
Componentes:
Antonio 23 Astronomia
Javier 39 Biotecnologia
Ramon 30 Matematicas


Segundo grupo.
Tipo de carrera: Letras
Componentes:
Ana 25 Periodismo
Nerea 24 Humanidades
Irina 37 Periodismo


Tercer grupo.
Tipo de carrera: Letras
Componentes:
Nuria 25 Publicidad
Edgar 32 Traduccion


Cuarto grupo.
Tipo de carrera: Ciencias
Componentes:
Pedro 28 Fisica
Lucas 24 Genetica



El promedio de edad entre los alumnos es: 28
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

msanchezv

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Re:Utilizar instrucciones condicionales y repetitivas (ayuda)
« Respuesta #8 en: 20 de Noviembre 2018, 17:41 »
Acá les dejo el código que creé con arrays,

Código: [Seleccionar]
package tarea03_2;

import java.util.Scanner;

public class tarea03a {
    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
         double sumaEdades=0; //declaración de variables
         double promEdades=0;

         
         System.out.print("Ingrese el número de alumnos: ");
         int cantidad = teclado.nextInt(); //ingreso de cantidad de alumnos
       
         String nom[]=new String[cantidad]; //declaración de arrays
         int edad[]=new int[cantidad];
         String carrera[]=new String[cantidad];
         
         for(int i=0;i<cantidad;i++){ //ingreso de datos
         System.out.print("\nIngrese nombre del alumno: ");
         nom[i] = teclado.next();
         System.out.print("Ingrese la edad del alumno: ");
         edad[i] = teclado.nextInt();
         System.out.print("Ingrese la carrera del alumno (escribir sólo el número): "+
                 "\n(1) Ingeniería\t(2) Comunicaciones\t(3) Literatura\t(4) Arquitectura\n");
         carrera[i] = teclado.next();         
         }
         System.out.println("\nCIENCIAS:"); //muestra alumnos de Ciencias
         int contaCiencia=0;
         for(int i=0;i<cantidad;i++){ 
              if(carrera[i].equals("1")||carrera[i].equals("4")){
                  System.out.print(nom[i]+" "+edad[i]+" ");
                  if(carrera[i].equals("1")){
                      System.out.println("Ingeniería");
                  }else if(carrera[i].equals("4")){
                      System.out.println("Arquitectura");
                  }
               contaCiencia++;
               if(contaCiencia%3==0){ //grupos de 3
                   System.out.println("");   
               }
              }
         }
         System.out.println("\nLETRAS:"); //muestra alumnos de Letras
         int contaLetras=0;
         for(int i=0;i<cantidad;i++){
              if(carrera[i].equals("2")||carrera[i].equals("3")){
                 System.out.print(nom[i]+" "+edad[i]+" ");
                 if(carrera[i].equals("2")){
                      System.out.println("Comunicaciones");
                 }else if(carrera[i].equals("3")){
                     System.out.println("Literatura");
                 }
                 contaLetras++;
                 if(contaLetras%3==0){ //grupos de 3
                     System.out.println("");
                 }
              }
                 
         }                         
           
         for(int i=0;i<cantidad;i++){ //promedio de edades
             sumaEdades+=edad[i];             
         }
         promEdades=sumaEdades/cantidad;
         System.out.println("\nEl promedio de edades es "+promEdades);
         

    }
   
}

msanchezv

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Re:Utilizar instrucciones condicionales y repetitivas (ayuda)
« Respuesta #9 en: 20 de Noviembre 2018, 17:42 »
Gracias Kabuto, genial tu solución,

 

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".