Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: cris0710 en 09 de Enero 2021, 00:10
-
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.
-
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.
-
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
-
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.
-
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 (https://www.online-ide.com/5vThQyewI2)
#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.
-
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.
#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;
}
-
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:
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:
while (calificacion != 0);
"Mientras calificación sea distinto de 0".
¿Por qué esa condición?
Porque eso es lo que pide el enunciado:
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)
#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 (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.
(https://i.ibb.co/XxFqsyk/Calificaciones-Flujo2.jpg)