Sábado 14 de Diciembre de 2024, 22:54
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problemas Con Retorno De Valor(funciones)
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Problemas Con Retorno De Valor(funciones) (Leído 1073 veces)
cazadorite
Nuevo Miembro
Mensajes: 23
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
void carga1 (char (*)[3],char (*)[30]);
void carga2 (int (*)[3],int (*)[3], char (*)[3]);
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])
{
for(int i=0; i<3; i++)
{
gets(pcc[i]);
gets(pnm[i]);
}
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;
for(int i=0; i<10; i++)
{
pcp[i]=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[i],d)!=0 && i<3)
{
i++;
}
if(strcmp(pcc[i],d)==0)
{
pos=i;
}
else
{
pos=-1;
}
return pos;
}
int busq2 (char (*pcc)[3], char *o)
{
int i=0,pos;
while(strcmp(pcc[i],o)!=0 && i<3)
{
i++;
}
if(strcmp(pcc[i],o)==0)
{
pos=i;
}
else
{
pos=-1;
}
return pos;
}
void mostrar1(int *pcp,char (*pnm)[30])
{
int max,posmx;
max=pcp[0];
posmx=0;
for(int i=0; i<10; i++)
{
if(pcp[i]>max)
{
max=pcp[i];
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;
for(int i=0; i<3; i++)
{
mx=md[i][0];
pmx=0;
for(int j=0; j<3; j++)
{
if(md[i][j]>mx)
{
mx=md[i][j];
pmx=j;
}
}
printf( " ciudad %s ciudad mas distante es %s \n",pnm[i],pnm[pmx]);
}
getch();
}
Tweet
tux-man
Nuevo Miembro
Mensajes: 1
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
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
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)
*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]
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problemas Con Retorno De Valor(funciones)