Programa de votos en C

Iniciado por jmjusto, 20 Febrero 2018, 03:40 AM

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

jmjusto

Hola, soy nuevo aquí, espero estén todos bien. Soy principiante aún pero tengo muchas ganas de aprender, tengo un problema con una tarea que se nos asignó en clase, es la siguiente :

Una emisora de radio quiere hacer un concurso en el que proponen a sus oyentes los títulos de 10 canciones, a las que ha numerado del 1 al 10. Cada participante debe llamar para dar los números de 3 títulos por orden de preferencia decreciente. De cada oyente se recoge cédula, edad, sexo y sus tres preferencias de canciones, de cada canción hay que recoger código (1-10), género (P-pop, R-rap, K-rock, T-Romántica).
Se le dan 3 puntos a la canción que el oyente nombra en 1er lugar, 2 puntos a la que indica en 2º lugar y 1 punto a la 3ª.

Se pide hacer un programa que realice las siguientes tareas:

1.   Leer y almacenar los votos emitidos por cada oyente.
2.   Calcular los votos obtenidos por cada canción e indicar cuáles son la 1º y 2ª canción más votada.
3.   Al final de la emisión se reparten puntos entre los oyentes que han concursado de la siguiente manera: 30 puntos si entre las 3 canciones votadas está la 1ª, 20 puntos si está la 2ª y 10 puntos suplementarios si han acertado los dos títulos más votados.
4.   Se desea obtener el número del oyente que más puntos ha obtenido, ya que se le dará un premio.

Hasta ahora nos han enseñado funciones,arrays y estructuras, apreciaría mucho si me pueden ayudar con este ejercicio, gracias ! ;D

marcebond

Está interesante!! Pero antes de nada queremos ver lo que tienes hecho y que dudas te atañen, un saludo!

jmjusto

#2
La tarea la asignaron en la noche de ayer...Te sorprenderás pero esto es lo que tengo :

struct Oyente{
   int cedula;
   int edad;
   int sexo;
};
typedef struct Info OYENTE;
int n=0;
INFO aux;
int main()
{
printf("Programa de votos\n");
printf("Diga la cantidad de usuarrios\n");
scanf("%d",&n);
   OYENTE misoyentes[n];
   return 0;
}


Aún estoy verde en varias cosas y no sé como proceder en el problema  :(


· Los codigos deben ir en etiquetas GeSHi
· No se debe hacer doble post, el otro tema fue borrado debido que ya hay uno abierto sobre el tema
>aquí las reglas del foro
-Engel Lex

marcebond

Bastante verde sí...

Empieza por definir lo que necesitas, podrías definir una cabecera con los tipos de datos, no ibas mal con el "Oyente", pero seguramente la cedula sea una string (char[]), también te pide sus 3 canciones favoritas, etc...


//Género de las canciones
typedef enum {
    Pop, Rap, Rock, Romantica
} Genero;

//Sexo de los oyentes
typedef enum {
    Femenino, Masculino, Otro
} Sexo;

//Canción con los datos requeridos
typedef struct {
    unsigned short codigo;
    char* nombre;
    Genero genero;
} Cancion;

//Oyente con los datos requeridos
typedef struct {
    char* cedula;
    Sexo sexo;
    unsigned short edad;
    Cancion canciones[3];
} Oyente;


Ten en cuenta que para resolver este problema necesitas manejar ficheros y punteros por todos lados, así que ya puedes espabilar!

jmjusto

#4
Gracias! Aunque ahí radica el problema, sólo nos han enseñado de estructuras,funciones y arrays nada más. Entonces necesito una función para guardar y calcular los votos emitidos verdad ? Y para almacenar los votos un array ?

marcebond

Perdón supuse que tenías que guardar en ficheros, pero si sabes manejar arrays seguramente debas resolver el problema por ese camino.

Ahora que ya tienes las estructuras, puedes empezar a preguntarte qué necesitas para trabajar:

- 1 array donde quepan 10 canciones
- 1 array donde quepan los oyentes (los oyentes, como puedes comprobar en las estructuras, ya almacenan sus 3 votos en su array de canciones)

Una vez tengas toda esa memoria reservada, el siguiente paso es pedir al usuario que ingrese toda esa información (canciones y oyentes) o ponerla directamente en el código para probar más fácil la aplicación.

Siguiente: recorrer el array de oyentes y sus arrays de canciones para determinar cuales son la 1ra y la 2da más votadas.

Siguiente: recorrer el array de oyentes y sus canciones para comprobar si habría que asignarle puntos por tener una de las canciones más votadas entre sus favoritas. Durante este recorrido podrías crear un array donde guardes la cedula del oyente y la suma de sus puntos (lo ideal sería un campo puntuacion en la estructura del oyente, el cual irías acumulando), para más tarde obtener la cédula del que mayor puntuación ha obtenido y mostrarlo en pantalla.

jmjusto

Comprendo , gracias ! Me pondré a hacer el código y luego te lo muestro