• Sábado 14 de Diciembre de 2024, 19:56

Autor Tema:  Problemas Con Retorno De Valor(funciones)  (Leído 1072 veces)

cazadorite

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Problemas Con Retorno De Valor(funciones)
« en: Viernes 19 de Octubre de 2007, 01:02 »
0
holas no se porque me marca error en la carga del lote 2 si el vector cadena vciu la uso en la funcion buscar como puego solucionarlo me dice que no se utiliza

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. void carga1 (char (*)[3],char (*)[30]);
  6. void carga2 (int (*)[3],int (*)[3], char (*)[3]);
  7. int busq1(char (*)[3],char *);
  8. int busq2(char (*)[3],char *);
  9. void procesar(char (*)[3], int *);
  10. void mostrar1(int *,char (*)[30]);
  11. void mostrar2(int (*)[3],char (*)[30]);
  12. void main(void)
  13. {
  14.  int vcp[10];
  15.  char vciu[3][3];
  16.  char vnom[3][30];
  17.  int mpu[3][3],mdist[3][3];
  18.  
  19.  carga1(vciu,vnom);
  20.  carga2(mpu,mdist,vciu);
  21.  procesar(vciu,vcp);
  22.  mostrar1(vcp,vnom);
  23.  mostrar2(mdist,vnom);
  24.  getch();
  25. }
  26.  
  27. void carga1 (char (*pcc)[3],char (*pnm)[30])
  28. {
  29.   for(int i=0; i<3; i++)
  30.   {
  31.     gets(pcc[i]);
  32.     gets(pnm[i]);
  33.   }
  34. getch();
  35. }
  36. void carga2 (int (*mp)[3],int (*md)[3], char *pcc )
  37. {
  38.   char co[3],cd[3];
  39.   int posd,poso;
  40.   fflush(stdin);
  41.   printf("\n ciudad de origen ");
  42.   gets(co);
  43.   fflush(stdin);
  44.   printf("\n ciudad de destino ");
  45.   gets(cd);
  46.  
  47.     posd=busq1(pcc,cd);
  48.     poso=busq2(pcc,co);
  49.  
  50.   printf("\n ingrese precio ");
  51.   scanf("%d",&mp[poso][posd]);
  52.   printf("\n ingrese distancia ");
  53.   scanf("%d",&md[poso][posd]);
  54.  
  55. }
  56. void procesar(char (*pcc)[3], int *pcp)
  57. {
  58.   char co[3],cd[3];
  59.   int cant,posd;
  60.  
  61.   for(int i=0; i<10; i++)
  62.   {
  63.     pcp[i]=0;
  64.   }
  65.  
  66.   fflush(stdin);
  67.   printf("\n ciudad de origen ");
  68.   gets(co);
  69.   fflush(stdin);
  70.   printf("\n ciudad de destino ");
  71.   gets(cd);
  72.   printf("\n cantidad pasajes vendidos  ");
  73.   scanf("%d",&cant);
  74.  
  75.   while(cant!=0)
  76.   {
  77.     posd=busq1(pcc,cd);
  78.     pcp[posd]+=cant;
  79.  
  80.   }
  81. getch();
  82. }
  83. int busq1 (char (*pcc)[3], char *d)
  84. {
  85.   int i=0,pos;
  86.   while(strcmp(pcc[i],d)!=0 && i<3)
  87.   {
  88.       i++;
  89.   }
  90.   if(strcmp(pcc[i],d)==0)
  91.   {
  92.     pos=i;
  93.   }
  94.   else
  95.   {
  96.     pos=-1;
  97.   }
  98.  
  99.   return pos;
  100.  
  101. }
  102.  
  103. int busq2 (char (*pcc)[3], char *o)
  104. {
  105.   int i=0,pos;
  106.   while(strcmp(pcc[i],o)!=0 && i<3)
  107.   {
  108.       i++;
  109.   }
  110.   if(strcmp(pcc[i],o)==0)
  111.   {
  112.     pos=i;
  113.   }
  114.   else
  115.   {
  116.     pos=-1;
  117.   }
  118.  
  119.   return pos;
  120.  
  121. }
  122. void mostrar1(int *pcp,char (*pnm)[30])
  123. {
  124.   int max,posmx;
  125.   max=pcp[0];
  126.   posmx=0;
  127.  
  128.   for(int i=0; i<10; i++)
  129.   {
  130.     if(pcp[i]>max)
  131.     {
  132.       max=pcp[i];
  133.       posmx=i;
  134.     }
  135.   }
  136.  
  137. printf( " la ciudad con mayor cantidad de pasajeros su nombre es %s \n",pnm[posmx]);
  138. getch();
  139. }
  140. void mostrar2(int (*md)[3],char (*pnm)[30])
  141. {
  142.   int mx,pmx;
  143.  
  144.   for(int i=0; i<3; i++)
  145.   {
  146.     mx=md[i][0];
  147.       pmx=0;
  148.     for(int j=0; j<3; j++)
  149.       {
  150.       if(md[i][j]>mx)
  151.       {
  152.         mx=md[i][j];
  153.         pmx=j;
  154.       }
  155.       }
  156.   printf( " ciudad %s ciudad mas distante es %s \n",pnm[i],pnm[pmx]);
  157.   }
  158. getch();
  159. }
  160.  
  161.  

tux-man

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Problemas Con Retorno De Valor(funciones)
« Respuesta #1 en: Sábado 20 de Octubre de 2007, 02:00 »
0
Hola, revisé tu código y te corregí algunos errores que tenías.
Saludos...


#include <stdio.h>
#include <conio.h>
#include <string.h>
void carga1 (char (*)[3],char (*)[30]);
void carga2 (int (*)[3],int (*)[3], char (*));
int busq1(char (*)[3],char *);
int busq2(char (*)[3],char *);
void procesar(char (*)[3], int *);
void mostrar1(int *,char (*)[30]);
void mostrar2(int (*)[3],char (*)[30]);
void main(void)
{
int vcp[10];
char vciu[3][3];
char vnom[3][30];
int mpu[3][3],mdist[3][3];

carga1(vciu,vnom);
carga2(mpu,mdist,vciu);
procesar(vciu,vcp);
mostrar1(vcp,vnom);
mostrar2(mdist,vnom);
getch();
}

void carga1 (char (*pcc)[3],char (*pnm)[30])
{
  int i=0;
  for(; i<3; i++)
  {
    gets(pcc);
    gets(pnm);
  }
getch();
}
void carga2 (int (*mp)[3],int (*md)[3], char *pcc )
{
  char co[3],cd[3];
  int posd,poso;
  fflush(stdin);
  printf("\n ciudad de origen ");
  gets(co);
  fflush(stdin);
  printf("\n ciudad de destino ");
  gets(cd);

    posd=busq1(pcc,cd);
    poso=busq2(pcc,co);

  printf("\n ingrese precio ");
  scanf("%d",&mp[poso][posd]);
  printf("\n ingrese distancia ");
  scanf("%d",&md[poso][posd]);

}
void procesar(char (*pcc)[3], int *pcp)
{
  char co[3],cd[3];
  int cant,posd,i=0;

  for(; i<10; i++)
  {
    pcp=0;
  }

  fflush(stdin);
  printf("\n ciudad de origen ");
  gets(co);
  fflush(stdin);
  printf("\n ciudad de destino ");
  gets(cd);
  printf("\n cantidad pasajes vendidos  ");
  scanf("%d",&cant);

  while(cant!=0)
  {
    posd=busq1(pcc,cd);
    pcp[posd]+=cant;

  }
getch();
}
int busq1 (char (*pcc)[3], char *d)
{
  int i=0,pos;
  while(strcmp(pcc,d)!=0 && i<3)
  {
      i++;
  }
  if(strcmp(pcc,d)==0)
  {
    pos=i;
  }
  else
  {
    pos=-1;
  }

  return pos;

}

int busq2 (char (*pcc)[3], char *o)
{
  int i=0,pos;
  while(strcmp(pcc,o)!=0 && i<3)
  {
      i++;
  }
  if(strcmp(pcc,o)==0)
  {
    pos=i;
  }
  else
  {
    pos=-1;
  }

  return pos;

}
void mostrar1(int *pcp,char (*pnm)[30])
{
  int max,posmx,i=0;
  max=pcp[0];
  posmx=0;

  for(; i<10; i++)
  {
    if(pcp>max)
    {
      max=pcp;
      posmx=i;
    }
  }

printf( " la ciudad con mayor cantidad de pasajeros su nombre es %s \n",pnm[posmx]);
getch();
}
void mostrar2(int (*md)[3],char (*pnm)[30])
{
  int mx,pmx,i=0,j=0;

  for(; i<3; i++)
  {
    mx=md[0];
      pmx=0;
    for(; j<3; j++)
      {
      if(md[j]>mx)
      {
        mx=md[j];
        pmx=j;
      }
      }
  printf( " ciudad %s ciudad mas distante es %s \n",pnm,pnm[pmx]);
  }
getch();
}
the tux-man
---------------------
Empty your memory,
with a free()...
like a pointer!
If you cast a pointer to a Integer,
it becomes the integer,
If you cast a pointer to a struct,
it becomes the struct...
The pointer can crash...
and can Overflow...
Be a pointer my friend...

Dennis McAllister Ritchie

ichigo15

  • Miembro activo
  • **
  • Mensajes: 37
    • Ver Perfil
Re: Problemas Con Retorno De Valor(funciones)
« Respuesta #2 en: Sábado 20 de Octubre de 2007, 12:13 »
0
Yo programo en c bajo linux, pero se algo de como va en windows, mi opinión:

1- Es de agradecer comentar los programas para que se entienda mejor (error muy común en mi  :unsure:

2- cuando te declaras las funciones, no hace falta que uses puntero si a priori sabes el tamaño:

void carga1 (char (*)[3],char (*)[30]);

sabes que la dimensión va a ser de [3][3] para el primero y [3][30] para el segundo

3-  En carga1:
/*Cuidado con las dimensiones de los arrays, que el último caracter es un /0 (fin de cadena), y el gets no avisa si te pasas del array. Aqui puede fallarte*/
gets(pcc); //mejor colocar un fflush antes de cada gets
gets(pnm);

4- En procesar:
 if(strcmp(pcc,d)==0)
{
pos=i;
}
else
{
pos=-1;
}
//un if de una sola instrucción no le hace falta llaves

En procesar devuelves un entero, cuando te la declaras, dices que devuelves void

void procesar(char (*pcc)[3], int *pcp)
.
.
.
pcp[posd]+=cant;

Esto no lo entiendo, te lo declaras como puntero, y lo tratas como array?
una de dos:

a) void procesar(char (*pcc)[3], int pcp
  • //los arrays son punteros, asi que te guarda los valores que modificaras)


B) *pcp+=cant

5- int busq2 (char (*pcc)[3], char *o)
//si no sabes utilizar el malloc, ojo con estas cosas

while(strcmp(pcc,o)!=0 && i<3)
  {
      i++;
  }
  if(strcmp(pcc,o)==0)
  {
    pos=i; //el return iría aqui
  }
  else
  {
    pos=-1;
  }

pcc[1],o coincide
pcc[2],o no coincede, que crees que retornará pos?, venga, te doy una pista, es un número negativo (compila, pero no creo que sea esto lo que quieres)

N- void mostrar1(int *pcp,char (*pnm)[30])
max=pcp[0];

A lo mejor me equivoco, pero esto funciona?
No seria max=*pcp?

N+1- void mostrar2(int (*md)[3],char (*pnm)[30])
Cuidado con estas cosas
[size=109]Nadie elige su nombre, te lo ponen cuando naces, pero sí su nick


No eres responsable de la cara que tienes, pero sí de la que pones
[/size]