Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: fede196 en 23 de Mayo 2015, 02:54

Título: (lenguajec) Ejemplo paso struct parámetro a funciones por valor, puntero, global
Publicado por: fede196 en 23 de Mayo 2015, 02:54
Este es el error que me sale y no me deja seguir ingresando datos y ejecutando el programa  alguien sabe a que se debe?

(http://i61.tinypic.com/20h24d5.png)

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 (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();
}
Título: Re:(lenguajec) Ejemplo paso struct parámetro a funciones por valor, puntero, global
Publicado por: Ogramar en 25 de Mayo 2015, 09:14
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