Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/06/2006, 07:07
mml87
 
Fecha de Ingreso: mayo-2006
Mensajes: 11
Antigüedad: 18 años, 8 meses
Puntos: 0
problemas con "contadores"

Hola de nuevo ^^U aqui vuelvo con mis dudas ^^U
primero de todo, siento no especificar en el titulo un tema mas concreto (como la otra vez que puse "ficheros"), pero no se a que tema corresponde esta duda ^^U

Vereis, lo que me pasa esta vez, es que en una funcion para ordenar vectores(varias de hecho, pero como son casi iguales solo pongo una), uso 2 contadores para ver el numero de intercambios y pasadas que hace. Pues bien, durante la función me cuenta bien ambas cifras, pero si le pido el valor de la variable "contador" y la variable "intercambio" fuera de la función, me pasa el valor inicial (0 en mi caso) en vez del final. Pongo el trozo de programa que corresponde (el main no esta cerrado, porque no pongo todo):
____________________________________________

typedef int *p_int;

int main()
{
int intercambio;
int contador;
long largo;
p_int v,copia;

_____
copia=malloc(sizeof(v));
memcpy(copia1,v,largo*sizeof(int));
contador=0; intercambio=0;
seleccion(copia, largo, contador, intercambio);
printf("\nHas hecho %d intercambios i %d pasadas.\n", intercambio, contador);
system("pause");
_____

void seleccion (p_int v, int medida, int contador, int intercambio)
{
int i, j, min,t,c;
for ( i=0 ; i<medida-1; i++)
{ contador++;
min = i;
for ( j = i+1 ; j < medida ; j++)
{contador++;
if (v[j] < v[min])
{min = j;}
}
if (min != i)
{intercambio+=3;;
t=v[i];
v[i]=v[min];
v[min]=t;
}
}
}
_________________________________

Pues bien, de lo que he puesto ahi, en el 2º trozo, el "printf" me da el valor inicial (el 0) de ambos contadores, y quiero que me de el que tienen estos al acabar la funcion "seleccion".
Como son 2 cosas no puedo usar el return, asi que intente crear una variable nueva con 2 enteros y darle a esta los valores de los contadores (dentro de la funcion) y devolver la variable esta (debajo pongo el trozo de esto), pero de esta forma, solo me deja usar 2 metodos de ordenar (los que sean) a la que le doy al 3º se sale del programa o_O y no es porque alguna función esté mal, porque todas funcionan si las uso en 1º o 2º lugar ^^U
Lo pongo (una, porque todas son casi iguales):
__________________________________________

typedef int *p_int;
typedef struct c_i
{
int i;
int c;
}c_i;

________________________________________
main()
{
c_i c1,c2,c3,c4;
long largo;
p_int v,copia;

______________________________

copia=malloc(sizeof(v));
memcpy(copia,v,largo*sizeof(int));
c1=seleccion(copia, largo);
printf("\nHas hecho %d intercambios i %d pasades.\n",c1.i,c1.c);
system("pause");
_______________________________________

c_i seleccion (p_int v, int medida)
{
int i, j, min,t,contador=0, intercambio=0;
c_i devuelve;
for ( i=0 ; i<medida-1; i++)
{ contador++;
min = i;
for ( j = i+1 ; j < medida ; j++)
{contador++;
if (v[j] < v[min])
{min = j;}
}
if (min != i)
{intercambio+=3;;
t=v[i];
v[i]=v[min];
v[min]=t;
}
}
devuelve.i=intercambio;
devuelve.c=contador;
return(devuelve);
}
________________________________________

Ahi está todo lo que influye en el fallo. No se que hago mal ^^U Uno no imprime bien los resultados, y el otro se cuelga si lo uso mas de 2 veces xD
Si me ayudais me hareis un gran favor ^^ y si necesitais mas información para ayudarme, decirlo ^^
Gracias.