Autor Tema: C++ código programa que lea calificaciones del calcular promedio y más frecuente  (Leído 663 veces)

cris0710

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 14
    • Ver Perfil
Hola, necesitaría desarrollar un programa que lea calificaciones del 5 al 10, hasta que se le capture un 0.

Después debe mostrar:

1. Cuantas calificaciones se leyeron
2. Cual es el promedio de esas calificaciones
3. Cual es la calificación más alta
4. Cual es la calificación más baja
5. Cual es la calificación más frecuente.
   
Debe validar que el número capturado sea del 5 al 10 o un cero. Si se captura cualquier otra cosa debe marcar error y solicitar de nuevo.
« Última modificación: 24 de Enero 2021, 14:16 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 574
    • Ver Perfil
Re: Un programa que lea calificaciones del 5 al 10
« Respuesta #1 en: 09 de Enero 2021, 00:33 »
Variables que puedes necesitar:
- calificacion, para leer calificaciones que introduce el usuario.
- contador, para contar cuantas calificaciones se llegan a introducir.
- suma, para sumar las calificaciones y al final del programa calcular el promedio (dividiendo entre el valor de contador).
- mayor, para guardar la calificación más alta introducida.
- menor, para guardar la calificación más baja introducida.

Faltaría otra para la calificación más frecuente, sin embargo, para obtener este dato creo que no va a bastar con una simple variable.
Tal vez se debería usar un array de 6 elementos tipo int y cada elemento se asocia a una de las 6 posibles calificaciones.
Según la calificación introducida, se incrementa uno de los elementos de ese array.

Si por ejemplo se introduce un 5, que es la calificación más baja que podemos admitir, pues se puede incrementar el primer elemento del array (la posición 0)
Si se introduce un 6, pues el segundo elemento (posición 1)
Etc...

Así luego al final del programa se comprueba cuál de los 6 elementos es que más se ha incrementado y sabremos la calificación más frecuente.


Se puede usar un bucle que se repita mientras el valor introducido para calificación sea distinto de 0.
Dentro del bucle, se pide el dato y se comprueba si está dentro del rango aceptado, ente 5 y 10.
Si lo está, operamos con él contándolo, sumándolo, comparando con los valores de mayor y menor, e incrementando el elemento correspondiente del array de frecuentes.
Si no está dentro del rango admitido, y no es 0, entonces se lanza mensaje de error al usuario.

Cuando el bucle termine, se calcula promedio, se comprueba el array de frecuentes y se muestran los datos.

No pongo ejemplo de código, porque no indicas en que lenguaje estás trabajando. En cualquier caso, comienza tú un código, llega hasta donde puedas y te ayudamos a completarlo.
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

cris0710

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 14
    • Ver Perfil
Re: Un programa que lea calificaciones del 5 al 10
« Respuesta #2 en: 09 de Enero 2021, 00:45 »
Es libre el lenguaje pero de preferencia en c++ ya que soy nuevo en la programación y java no lo he usado tanto gracias por su mensaje

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 574
    • Ver Perfil
Re: Un programa que lea calificaciones del 5 al 10
« Respuesta #3 en: 09 de Enero 2021, 01:23 »
Pues lo dicho, comienza tú un código y llega hasta donde puedas.

Ves paso a paso, divide el programa en pequeños objetivo sen lugar de intentar resolver el TODO de golpe.

Por ejemplo, comienza haciendo simplemente un bucle do while() que pida calificaciones hasta que se introduzca un 0.
No hagas nada con las calificaciones, solo pedir y pedir.., hasta que se introduzca 0.

Cuando eso funcione, intenta hacer que cada vez que se introduce una calificación, compruebe si está entre 5 y 10 inclusive.
Si lo está, que lance mensaje tipo "La calificación es válida".
Si no lo está, mensaje "La calificación no es válida".

Después, añade una variable contador para contar las calificaciones válidas. Es decir, cada vez que la calificación sea válida, incremente el contador en +1.
Y cuando termine el bucle, tras haberse introducido por teclado valor 0 para la calificación, pues entonces informe en pantalla de cuántas calificaciones ha contado.

Luego añade una variable para sumar las calificaciones.
Y al terminar el bucle, que indique también el promedio (suma / contador).

Y así con el resto de cosas que pide.
Esa es la fórmula, ir haciendo lo que pide de uno en uno.
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

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 574
    • Ver Perfil
Re: Un programa que lea calificaciones del 5 al 10
« Respuesta #4 en: 09 de Enero 2021, 11:29 »
Mira, por si te sirve para arrancar.

Dejo un código que pide calificaciones hasta que se introduzca 0.
Si está entre 5 y 10, es válida y la cuenta.
Si no, informa de que no es valida y no se cuenta.

Al terminar el bucle, informa de cuántas calificaciones válidas se han introducido.

Desde este enlace puedes probar el código online, e incluso modificarlo:
https://www.online-ide.com/5vThQyewI2


Código: [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
    int calificacion = 0;
    int contador = 0;

    do {
        cout << "\nIntroduzca calificación: ";
        cin >> calificacion;

        if (calificacion != 0) {
            if (calificacion >= 5 && calificacion <= 10) {
                //Calificación es válida
                contador++; //Contamos la calificación introducida
            }
            else
                cout << "Calificación no es válida, solo valores entre 5 y 10\n";
        }
        else //Ha introducido 0, fin del bucle
            cout << "\nFin de lectura de calificaciones\n";
    } while (calificacion != 0);

    //Resultados
    cout << "\nCalificaciones introducidas: " << contador;

    cout << "\n\t\tFIN DE PROGRAMA";
}


Paso siguiente sería añadir una variable "suma" e ir acumulando la suma de todas las calificaciones válidas.
Luego al final del programa, se podría calcular el promedio dividiendo la suma entre contador.
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

cris0710

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 14
    • Ver Perfil
Re: Un programa que lea calificaciones del 5 al 10
« Respuesta #5 en: 09 de Enero 2021, 16:04 »
Hola no había leído el último mensaje pero esto es lo que avance no sé cómo se te haga se me complica un poco los arreglos así que no se si este correcto como lo hice o me fallo.

Código: [Seleccionar]
#include <stdio.h>
#include<iostream>

float promedio(int valores[], int cantidad) {
    int i;
    float suma = 0.0;

    for (i = 0; i < cantidad; ++i)
        suma += valores[i];

    return suma / (float) cantidad;
}


int main() {

    int calificacion[10];
    char opcion[3];
    int n, i;

    do {


        for (i = 0; i < n; ++i) {
            cout<<"calificacion: ", i + 1);
            cin>>calificacion[i];
        }

        cout<<"El promedio es "<<promedio(calificacion, n);


    } while (opcion[0]);

    return 0;
}

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 574
    • Ver Perfil
Re: Un programa que lea calificaciones del 5 al 10
« Respuesta #6 en: 10 de Enero 2021, 00:48 »
Si ejecutas tu código, verás que no funciona.
Al margen de unas pequeñas correciones necesarias en la sintaxis, cuando el programa inicia solo conseguimos un bucle infinito.
El for ni siquiera funciona, porque usas la variable n como límite, la cuál no tiene ningún valor inicial, por lo que toma valor 0 así que el for no llega a activarse.

Pero es que de todos modos no necesitas ningún bucle for.

Solo necesitas un bucle do while, que es el que se te repite infinitamente por la condición que has puesto:
Código: [Seleccionar]
while (opcion[0])
¿Qué significa esa condición?
Las condiciones de los bucles han de ser expresiones que den como resultado true o false.
opcion[0] es simplemente el primer char que contiene el array llamado opcion,

Eso no te sirve como condición del while. Y no necesitas ningún array de char para nada.


Fíjate en la condición que puse yo en mi bucle while:
Código: [Seleccionar]
while (calificacion != 0);
"Mientras calificación sea distinto de 0".

¿Por qué esa condición?
Porque eso es lo que pide el enunciado:
Citar
programa que lea calificaciones del 5 al 10, hasta que se le capture un 0
Es decir, leemos calificaciones (en una variable llamada calificación) y MIENTRAS lo leído sea distinto de 0, seguiremos pidiendo calificaciones.

Tampoco necesitas ninguna función para calcular el promedio.
Quizás me equivoco, pero parece que hayas encontrado el código de esa función por algún sitio y lo has copiado con la esperanza de que te sirva.

No uses nunca código que no entiendas. Porque viendo el código de esa función es evidente que no es aplicable para este ejercicio.

Mira, añado al código que puse las líneas necesarias para calcular el promedio.
¡¡Solo he necesitado añadir 3 líneas!! (Las resalto en color azul)

Citar
#include <iostream>

using namespace std;

int main()
{
    int calificacion = 0; //Para leer calificaciones por teclado
    int contador = 0; //Para contar las calificaciones introducidas
    int suma = 0; //Aquí sumamos calificaciones para luego calcular promedio.

    do {
        cout << "\nIntroduzca calificación: ";
        cin >> calificacion;

        if (calificacion != 0) {
            if (calificacion >= 5 && calificacion <= 10) {
                //Calificación es válida
                contador++; //Contamos la calificación introducida
                suma = suma + calificacion; //Sumamos la calificación
            }
            else
                cout << "Calificación no es válida, solo valores entre 5 y 10\n";
        }
        else //Ha introducido 0, fin del bucle
            cout << "\nFin de lectura de calificaciones\n";
    } while (calificacion != 0);

    //Resultados
    cout << "\nCalificaciones introducidas: " << contador;
    cout << "\nNota promedio: " << (suma/(float)contador);

    cout << "\n\t\tFIN DE PROGRAMA";
}

Puedes verlo y ejecutarlo desde este enlace:
https://www.online-ide.com/9nyPO5lxRG

Fíjate que no ha sido necesario usar ningún array (por ahora), ni ninguna función.

Analiza el código que he compartido. Asegúrate de que entiendes cada línea y que puedes seguir el flujo que sigue el programa.
Te dejo un diagrama de flujo (no se me dan muy bien) para que se entienda mejor la lógica del programa.

Cuando tengas todo claro, podemos pasar a ver como informar en la salida de resultados cuál ha sido la calificación MAYOR introducida.

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

 

Esto es un laboratorio de ideas...
Aprender a programar

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