Autor Tema: (lenguajec) Ejemplo paso struct parámetro a funciones por valor, puntero, global  (Leído 3288 veces)

fede196

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Este es el error que me sale y no me deja seguir ingresando datos y ejecutando el programa  alguien sabe a que se debe?



Muchas gracias por su ayuda!, acá esta el archivo  .cpp por si alguien lo quiere ver sino subo foto de cada parte si me desan ayudar lo agradeceria muchisimo

https://mega.nz/#!Z40iGK4Q!Tj9w_WgTMUJCrpCMX7ClJjz-xJDRwtUjeBXyJMEJe_s


Sino acá esta el codigo

Código: [Seleccionar]
#include<stdio.h>
#include<conio.h>
#define N 1230
#define L 4
#define I 10
struct Zona
{
int acum_imp[L];
int cont_mov[L];
};


void carga_imp(int imp1[I])
{
int i;
for(i=0;i<=I-1;i++)
{
    printf("\ningrese importe comenzando por el primer tipo de infraccion\n");
scanf("%d",&imp1[i]);
fflush(stdin);
}
return;
}

void inicializa(Zona A1[L])
{
int i,j;
for(i=0;i<=L-1;i++)
    {
    for(j=0;j<=L-1;i++)
        {
        A1[i].acum_imp[j]=0;
        A1[i].cont_mov[j]=0;
        }
    }
return;
}
void carga(Zona A2[L],int imp2[I])
{
int i,zone,tip_mov,tip_imp;
for(i=1;i<=N;i++)
{
printf("\nIngrese zona(1,2,3o4)\n");
scanf("%d",&zone);   
fflush(stdin);
switch (zone)
{
    case 1:
        printf("\nIngrese tipo de movil(1,2,3o4)\n");
        scanf("d",&tip_mov);
        fflush(stdin);
        printf("\nIngrese tipo de importe(1,2,3,4,5,6,7,8,9o10)\n");
        scanf("d",&tip_imp);
        fflush(stdin);
        A2[zone-1].acum_imp[tip_mov-1]+=imp2[tip_imp-1];
        A2[zone-1].cont_mov[tip_mov-1]++;
        break;
    case 2:
        printf("\nIngrese tipo de movil(1,2,3o4)\n");
        scanf("d",&tip_mov);
        fflush(stdin);
        printf("\nIngrese tipo de importe(1,2,3,4,5,6,7,8,9o10)\n");
        scanf("d",&tip_imp);
        fflush(stdin);
        A2[zone-1].acum_imp[tip_mov-1]+=imp2[tip_imp-1];
        A2[zone-1].cont_mov[tip_mov-1]++;
        break;
    case 3:
        printf("\nIngrese tipo de movil(1,2,3o4)\n");
        scanf("d",&tip_mov);
        fflush(stdin);
        printf("\nIngrese tipo de importe(1,2,3,4,5,6,7,8,9o10)\n");
        scanf("d",&tip_imp);
        fflush(stdin);
        A2[zone-1].acum_imp[tip_mov-1]+=imp2[tip_imp-1];
        A2[zone-1].cont_mov[tip_mov-1]++;
        break;
    case 4:
        printf("\nIngrese tipo de movil(1,2,3o4)\n");
        scanf("d",&tip_mov);
        fflush(stdin);
        printf("\nIngrese tipo de importe(1,2,3,4,5,6,7,8,9o10)\n");
        scanf("d",&tip_imp);
        fflush(stdin);
        A2[zone-1].acum_imp[tip_mov-1]+=imp2[tip_imp-1];
        A2[zone-1].cont_mov[tip_mov-1]++;
        break;
    }
}
return;
}


void motos_tip2(Zona A3[L])
{
int i;
for(i=0;i<L-1;i++)
{
printf("\nEl dinero recaudado por la zona %d",i+1," es: %d",A3[i].acum_imp[0]);
}
return;
}   


void menor_inf(Zona A4[L])
{
    int i,j,men,num;
men=1000000;
for(i=0;i<L-1;i++)
{
  for(j=0;j<L-1;i++)
            if(A4[i].cont_mov[j]<men)
             {
                    men=A4[i].cont_mov[j];
                    num=j+1;
             }

    printf("\nEl tipo de movil que registra mayor numero de infracciones de la zona %d",i+1,"es movil tipo; %d\n",num);
}
return;
}
void tot_infr_xtipo(Zona A5[L])
{
    int tipo,i,sum;
    printf("Por favor ingrese tipo de movil para conocer el total de infracciones del mismo\n");
    scanf("%d",&tipo);
    fflush(stdin);
    sum=0;
    for(i=0;i<L-1;i++)
      {
            sum+=A5[i].cont_mov[tipo-1];
        }
    printf("\nLa cantidad de infracciones del tipo de movil %d",tipo,"es: %d",sum);
return;
}
void muestra(Zona A6[L])
{
    int i,j,acum;
    acum=0;
    for(i=0;i<L-1;i++)
    {
        for(j=0;i<L-1;i++)
        {
        acum+=A6[i].acum_imp[j];
        }
    }
printf("\nEl importe total recaudado por la Municipalidad en concepto de multas de transito es: %d\n",acum);
return;
}
main()     //algoritmo principal//
{
Zona A[L];
int imp[I];
carga_imp(imp);
inicializa(A);
carga(A,imp);
motos_tip2(A);
menor_inf(A);
tot_infr_xtipo(A);
muestra(A);
getchar();
getchar();
}
« Última modificación: 25 de Mayo 2015, 09:14 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Hola, a mí me da un error de compilación (el programa no empieza a ejecutarse) y pienso que está relacionado con cómo intentas pasar el struct como parámetro de función.

Aquí pego 3 ejemplos de cómo se puede pasar un struct como parámetro de función en C.

Ejemplo 1. Paso por valor:

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

struct student
{
            int id;
            char name[20];
            float percentage;
};

void func(struct student record);

int main()
{
            struct student record;

            record.id=1;
            strcpy(record.name, "Raju");
            record.percentage = 86.5;

            func(record);
            return 0;
}

void func(struct student record)
{
            printf(" Id is: %d \n", record.id);
            printf(" Name is: %s \n", record.name);
            printf(" Percentage is: %f \n", record.percentage);
}

Salida esperada:

Id is: 1
Name is: Raju
Percentage is: 86.500000


Ejemplo 2. Paso de un puntero a la estructura.

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

struct student
{
           int id;
           char name[20];
           float percentage;
};

void func(struct student *record);

int main()
{
          struct student record;

          record.id=1;
          strcpy(record.name, "Raju");
          record.percentage = 86.5;

          func(&record);
          return 0;
}

void func(struct student *record)
{
          printf(" Id is: %d \n", record->id);
          printf(" Name is: %s \n", record->name);
          printf(" Percentage is: %f \n", record->percentage);
}

Salida esperada:

Id is: 1
Name is: Raju
Percentage is: 86.500000


Ejemplo 3. Paso de estructura como variable global.

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

struct student
{
            int id;
            char name[20];
            float percentage;
};
struct student record; // Global declaration of structure

void structure_demo();

int main()
{
            record.id=1;
            strcpy(record.name, "Raju");
            record.percentage = 86.5;

            structure_demo();
            return 0;
}

void structure_demo()
{
            printf(" Id is: %d \n", record.id);
            printf(" Name is: %s \n", record.name);
            printf(" Percentage is: %f \n", record.percentage);
}

Salida esperada:

Id is: 1
Name is: Raju
Percentage is: 86.500000

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

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