elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Error, el programa se rompe en: 25 Febrero 2017, 06:38
Mi problema es que estoy practicando para un examen de la universidad, todavía no vimos punteros, memoria dinámica, etc., solo llegamos hasta estructuras aviso por las dudas si es que ven que el programa no esta hecho de la manera adecuada.El problema en fin es que, cuenta con 4 funciones :

1) ingreso de datos
2) mostrar datos
3) buscar datos por nombre
4) mostrar los clientes con mejores salarios

El problema se da cuando, termino de ingresar los datos y pongo "Mostrar todos los datos" que es la función 2., el programa se rompe, ahora si elimino la función 4. todo funciona con normalidad, ¿que es lo que puede estar mal?.


Código:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#define N 5

    /*
        void ingresar(struct CLIENTES[], int); //terminado
       void buscar_datos(struct CLIENTES[], int); //terminado
      void mostrar_datos(struct CLIENTES[], int); //terminado con error!
    void ordenamiento_alfabetico(clientes);  // no terminado
    void ordenamiento_sexo(clientes);        //no terminado
    void ordenamiento_saldo(struct CLIENTES[], int);        terminado
    void ordenamiento_hombres_mejor_saldo(clientes);       //no terminado
    void ordenamiento_mujeres_mejor_saldo(clientes);       //no terminado
    */
    struct CLIENTES {
    char nombre[30];
    char apellido[30];
    char sexo;
    int DNI;
    int telefono;
    float saldo;
    int n_cuenta;
    char direccion[30];
   };

        //PROTOTIPOS///////////////////////////
         void ingresar(struct CLIENTES[], int);
         void buscar_datos(struct CLIENTES[], int);
         void mostrar_datos(struct CLIENTES[], int);
         void ordenamiento_saldo(struct CLIENTES[], int);
         //////////////////////////////////////////////////

      int main() {
      struct CLIENTES clientes[N];

        int opcion;

      while (opcion != 5)
      {


    printf("Ingrese una Opcion : ");
    printf("\n\n");
    printf("Opcion 1: Ingresar los datos de los clientes :\n");
    printf("\n\n");
    printf("Opcion 2: Mostrar todos los datos de todos los clientes :\n");
    printf("\n\n");
    printf("Opcion 3:  Buscar datos de clientes por nombre :\n");
    printf("\n\n");
        printf("Opcion 4: Mostrar los datos de los clientes ordenados por     saldo de mayor a menor :");
    printf("\n\n");
    printf("Opcion 5 : Salir!");
    printf("\n\n");
    scanf("%i", &opcion);

    switch (opcion) {
    case 1: ingresar(clientes,N); break;
    case 2: mostrar_datos(clientes,N); break;
    case 3: buscar_datos(clientes,N); break;
    case 4: ordenamiento_saldo(clientes,N); break;
    case 5: break;
    default: printf("La opcion es incorrecta :"); break;
    }


   }
  return 0;
   }

 void ingresar(struct CLIENTES client[],int NUM) {
  int i;
    for (i = 0; i<NUM; i++) {
    printf("Ingrese su nombre :");
    scanf("%s", &client[i].nombre);

    printf("Ingrese su Apellido :");
    scanf("%s", &client[i].apellido);

    printf("Ingrese su sexo : M/F : ");
    scanf("%s", &client[i].sexo);

    printf("Ingrese el DNI :");
    scanf("%i", &client[i].DNI);

    printf("Ingrese su Telefono :");
    scanf("%i", &client[i].telefono);

    printf("Ingrese el saldo de su cuenta : ");
    scanf("%f", &client[i].saldo);


    printf("Ingrese su Numero de Cuenta :");
    scanf("%i", &client[i].n_cuenta);

    printf("Ingrese su direccion :");
    scanf("%s", &client[i].direccion);

         }
     }


 void mostrar_datos(struct CLIENTES dats[], int NUM) {
  int j;

 for (j = 0; j<NUM; j++) {
    printf("Nombre : %s", dats[j].nombre);
    printf("\n\n");
    printf("Apellido :%s ", dats[j].apellido);
    printf("\n\n");
    printf("Sexo : %c", dats[j].sexo);
    printf("\n\n");
    printf("DNI :%i", dats[j].DNI);
    printf("\n\n");
    printf("Numero de Cuenta : %i", dats[j].n_cuenta);
    printf("\n\n");
    printf("Saldo : %f",dats[j].saldo);
    printf("\n\n");
    printf("Direccion : %s", dats[j].direccion);
    printf("\n\n");
       }
  }

 void buscar_datos(struct CLIENTES buscar[], int NUM) {

int k;
char nombre_a_buscar[30];


printf("Ingrese el nombre a buscar : ");
scanf("%s", &nombre_a_buscar);



     for (k = 0; k<NUM; k++) {

    if (strcmp(buscar[k].nombre, nombre_a_buscar) == 0) {

        printf("Nombre : %s", buscar[k].nombre);
        printf("\n");
        printf("Apellido :%s ", buscar[k].apellido);
        printf("\n");
        printf("Sexo : %c",buscar[k].sexo );
        printf("\n");
        printf("DNI :%i", buscar[k].DNI);
        printf("\n");
        printf("Numero de Cuenta : %i", buscar[k].n_cuenta);
        printf("\n");
        printf("Saldo : %f",buscar[k].saldo);
        printf("\n");
        printf("Direccion : %s", buscar[k].direccion);

            }

         }



       }

    void ordenamiento_saldo(struct CLIENTES ordenamiento_client[],int NUM) {

   struct CLIENTES AUX;
   int i,j;

   for(i=0;i<NUM;i++){
    for(j=0;j<NUM-i-1;j++)
    if(ordenamiento_client[j].saldo > ordenamiento_client[j+1].saldo){
    AUX = ordenamiento_client[j];
    ordenamiento_client[j] = ordenamiento_client[j+1];
    ordenamiento_client[j+1] = AUX;
        }


     }
      printf("Los Clientes con mejores salarios son : ");
      printf("\n");
      for(i=5;i<0;i--){
       printf("Nombre : %s",ordenamiento_client[i].nombre);
       printf("\n");
       printf("Saldo : %f",ordenamiento_client[i].saldo);
       printf("\n");

      }

       getch();
     }
2  Programación / Programación C/C++ / Como ordenar las notas de las Alumnas de M ayor a Menor en: 30 Octubre 2016, 00:48
Hola a Todos. Bueno mi problema es que tengo las sig preguntas de un trabajo pero hay una que no pude resolver, y quisiera saber si ustedes me podrian dar una mano, la pregunta que no entiendo es la N°2, que es imprimir la lista de las 10 mejores Alumnas (no Alumnos).

Acá les dejo cuales son las preguntas asi entienden mejor el codigo:

N1° : Ingresar los datos de los alumnos de un establecimiento consistentes en NOMBRE(string de30 caracteres) ; Sexo (char) ; Y NOTAS de 10 materias codificadas de 0 a 9 (int).El ingreso terminara cuando se ingrese el nombre "FIN".Se sabe que el establecimiento no tiene mas de 1000 Alumnos.

N2° : IMPRIMIR LA LISTA DE LAS 10 MEJORES ALUMNAS. (ESTE ES EL QUE NO EINTIENDO) :-\

N°3: Indicar cuantos alumnos hay en el establecimiento cuyo promedio sea mayor o igual que 4 y menor que 7.

N°4: Permitir el ingreso de un nombre y mostrar la totalidad de sus datos, o bien si no pertenece al establecimiento.

Acá les dejo el código que hice :

Código:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<ncurses.h>

#define MAX_ALUMNOS 3


#define MAX_NOTAS 3

struct alumno
{
    char nombre[20];
    char sexo;
    int notas[MAX_NOTAS];
    float promedio_final;
};

char nombre_a_buscar[20];

int main()
{
    struct alumno alumnos[MAX_ALUMNOS];
    int num_alumnos;

    for(num_alumnos=0; num_alumnos<MAX_ALUMNOS; num_alumnos++)
    {
        printf("Nombre del alumno (para terminar teclee FIN): ");
        scanf("%s",alumnos[num_alumnos].nombre);
        if( strcmp(alumnos[num_alumnos].nombre,"FIN") == 0 )
            break;

        // else ....
        // nota que como el if tiene un break no es necesario el else
        do
        {
            char sexo;
            printf("Sexo: M o F: ");
            scanf("%s",&sexo);
            alumnos[num_alumnos].sexo = toupper(sexo);
        }

        while(alumnos[num_alumnos].sexo != 'M' && alumnos[num_alumnos].sexo !='F');
        float prom = 0.0;
        int sum = 0;

        for (int j=0; j<MAX_NOTAS; j++)
        {
            printf("Ingrese nota #%d: ",j+1);
            scanf("%d",&alumnos[num_alumnos].notas[j]);
            sum += alumnos[num_alumnos].notas[j];

        }
        prom = (float) sum / MAX_NOTAS;
        printf("Promedio de este alumno: %.2f \n", prom);


    }

    int total = 0;

    for (int i=0; i<num_alumnos; i++)
    {
        int suma = 0;
        float promedio = 0.0;

        for (int j=0; j<MAX_NOTAS; j++)
            suma += alumnos[i].notas[j];

        promedio = (float) suma / MAX_NOTAS;
        alumnos[i].promedio_final = promedio;

        if (promedio >= 4.0 && promedio < 7.0 )
            total++;
    }

    printf("Total de alumnos con promedio >= 4 y promedio < 7 = ");
    printf("%d \n", total);

    do
    {
    printf("Ingrese un nombre para mostrar datos: ");
    scanf("%s", nombre_a_buscar);

    bool hay_coincidencia = false;

    for(int i=0;i<MAX_ALUMNOS;i++){

        if(strcmp(alumnos[i].nombre, nombre_a_buscar) == 0) {
            hay_coincidencia = true;
            printf("Nombre: %s \nSexo: %c \n", alumnos[i].nombre, alumnos[i].sexo);
            for(int j=0;j<MAX_NOTAS;j++)
                printf("Nota: #%d: %d \n", j+1, alumnos[i].notas[j]);
            printf("Promedio: %.2f \n", alumnos[i].promedio_final);
        }
    }
    if(!hay_coincidencia)
        printf("El nombre ingresado no se encuentra en la lista\n");
    }
    while(true);
    return 0;
}
Páginas: [1]
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines