Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Elowispo en 17 Octubre 2021, 16:52 PM

Título: Ayuda con un ejercicio en C. tema Struct
Publicado por: Elowispo en 17 Octubre 2021, 16:52 PM
Hola soy nuevo en el foro, me mandaron a hacer un ejercicio en c que dice lo siguiente:

Una compañía disquera organiza una encuesta para determinar el éxito de sus canciones. La población encuestada es dividida en cuatro categorías de acuerdo al sexo y a la edad (Por ejemplo: en personas de 20 años o menos y mayores de 20 años). A cada persona se le piden sus cinco canciones favoritas, las canciones son identificadas por números del 1 al N. Los resultados de la encuesta son tomados de la entrada estándar. Cada elemento leído representa un encuestado y contiene su nombre, apellido, sexo, edad, cedula y sus cinco canciones favoritas en orden de preferencia. Se desea que Ud. diseñe una estructura de datos en Lenguaje C para almacenar dicha información. Además, se pide realizar un programa que imprima en pantalla la tabla con la relación de los 10 primeros encuestados.

Tengo que realizarlo por el método Burbuja, agradecería un poquito de ayuda.
Título: Re: Ayuda con un ejercicio en C. tema Struct
Publicado por: MCKSys Argentina en 17 Octubre 2021, 16:53 PM
Hola!

Postea lo que llevas hecho (utiliza etiquetas GeSHi para el código) o realizar una pregunta más concreta.

Saludos!
Título: Re: Ayuda con un ejercicio en C. tema Struct
Publicado por: Elowispo en 24 Octubre 2021, 16:24 PM
Hola compañero tengo algo listo pero no creo que esta bien hecho puedes hecharle un vistazo a ver que se le puede cambiar? aqui lo tienes tal y como lo puse, por cierto estoy usando Dev C++, el problema surgue cuando se habre la consola hecha un vistazo a ver que tal.


#include<stdio.h>
#include<string.h>

void lista_de_personasM();
void lista_de_personasF();

int main()
{
lista_de_personasF();
}

struct lista_de_personas{
char nombre,apellido;  //variables para nombre y apellido
int CI; // variable para la cedula (DNI)
int edad; //Variable para la edad
int sexo; //variable para el sexo
int cancion[5]; //variable para a cancion


}lista_de_personas[10];
 
  void lista_de_personasF(){
 
 
  struct lista_de_personas;
  int i; //variable bucle
  int j; //Variable bucle
 
  for (i = 0;i < 2; i++){
 
  //INGRESAMOS LOS DATOS//
  fflush(stdin);
  //Guardamos nombre
  printf("Personas N°[%d] \n",i+1);
  printf("Introduce tu nombre y apellido por favor: \n");
  printf("****Nombre**** \n");
  gets(lista_de_personas[i].nombre);
 
  //Guardamos apellido
  printf("****Apellido**** \n");
  scanf("%s",&lista_de_personas[i].apellido);
  //Guardamos cedula
  printf("Introduce cedula de indentidad por favor: \n");
  scanf("%i",&lista_de_personas[i].CI);
  //Guardamos Edad
  printf("Introduce tu edad por favor: \n");
  scanf("%i",&lista_de_personas[i].edad);
  //GUardamos genero
  printf("Introduce sexo 1 = Masculido\n 2 = Femenino \n");
  scanf("%s",&lista_de_personas[i].sexo);
  for(j = 0;j < 5; j++){
  //guardamos canciones
  printf("Intoduce tus 5 canciones favoritas: \n");
  printf("TOP[%i] \n",j + 1);    
  scanf(" %i",&lista_de_personas[i].cancion[j]);

  }
}

//Mostramos
for(i=0; i<2; i++){
       fflush(stdin);
               printf("Persona numero[%d]",i+1);
printf("Nombre: %s\n",lista_de_personas[i].nombre);
printf("Numero de cedula: %i\n",lista_de_personas[i].CI);
printf("edad: %i\n",lista_de_personas[i].edad);
printf("sexo: %d\n",lista_de_personas[i].sexo);
for(j = 0; j < 5; j++){
printf("Tus canciones favoritas son: \n");
printf("%i",lista_de_personas[i].cancion[j]);
}
printf("///////////////////////////////////////////////////////////// \n");
 
 
  }
}
 
 
 
 
  void lista_de_personasM (){
 
 
  int i;
  int j;
  struct lista_de_personas;
 
 
  for(i = 0; i < 2; i++){
  printf("------------------------------------------------------------ \n ");
printf("------------------------------------------------------------ \n");
printf("Nombre: %s\n", lista_de_personas[i].nombre);
printf("Numero de cedula: %i\n", lista_de_personas[i].CI);
printf("edad: %i \n", lista_de_personas[i].edad);
printf("sexo: %s",lista_de_personas[i].sexo);
for(j = 0; j < 5; j++){
printf("Tus canciones favoritas son: \n");
printf("%i",lista_de_personas[i].cancion[j]);
}
  }
  }



MOD: El código debe estar entre etiquetas de Código GeSHi
Título: Re: Ayuda con un ejercicio en C. tema Struct
Publicado por: K-YreX en 26 Octubre 2021, 01:43 AM
Bueno... A ver a ver. Parece que hay mucho trabajo por delante así que vamos a ir punto por punto:


// Consejo EXTRA: Utiliza constantes para la longitud de los arrays estaticos
#define MAX_LONGITUD_NOMBRE 20
#define MAX_LONGITUD_APELLIDO 50

typedef struct {
  char nombre[MAX_LONGITUD_NOMBRE];
  char apellido[MAX_LONGITUD_APELLIDO];
  // El DNI lo guardaria como un char[] y no como un int
  //...
} Encuestado;

int main() {
  // Ahora para declarar un array de encuestados no hace falta hacer:
  struct Encuestado encuestados[];
  // Tan solo tienes que hacer:
  Encuestado encuestados[];
}



#define NUM_ENCUESTADOS 10
#define NUM_CANCIONES 5
//...

int main() {
  Encuestado encuestados[NUM_ENCUESTADOS];

  for(int i = 0; i < NUM_ENCUESTADOS; ++i) {
    printf("Introduce el nombre del encuestado %d: ", (i+1));
    // Consejo EXTRA: Las cadenas de texto se leen con fgets() no con scanf(). Volveremos a esto mas adelante
    fgets(personas[i].nombre, MAX_LONGITUD_NOMBRE, stdin);

    printf("Introduce la edad del encuestado %d: ", (i+1));
    scanf("%d", &personas[i].edad);

    //...
  }
  // Tambien puedes hacer una funcion que sea pedirDatosEncuestado(Encuestado encuestado) y dentro poner todos los mensajes pidiendo datos y guardando la entrada del teclado...

  // Aqui ya puedes usar las funciones que quieras en base a lo que necesites
  for(int i = 0; i < NUM_ENCUESTADOS; ++i) {
    printf("***** DATOS DEL ENCUESTADO %d *****\n", (i+1));
    // En el main() no necesito saber como va a mostrar los datos pero se lo que va a hacer. Para los detalles siempre puedes mirar dentro de la funcion
    mostrarDatosEncuestado(encuestados[i]);
    printf("\n");
  }
}