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.