Programación General > C/C++
Problema funciones en C (arrays)
ferthedems:
Buenas!
Necesito elaborar un programa con dos funciones, una que capte los parámetros de un vector y otra que devuelva 1 si están ordenados ascendentemente y cero en caso contrario.
He elaborado esta; pero no funciona...!
--- Código: C --- #include <stdio.h>#define N 10 void scanvector(int *vec);int ordenados(int vec[N]); void main(){ int a[N]; scanvector(&a); if(ordenados(a)==1) printf("El valor para este vector es %d", ordenados(a)); } void scanvector(int *vec){ int contador; for(contador=0; contador<N; contador++) { printf("Introduce el valor %d/N del vector: ", contador); scanf("%d", &vec[contador]); }} int ordenados(int vec[N]){ int i, contador=0; for(i=0; i<N; i++) if(vec[i]<=vec[i]) contador++; if(contador==N) return 1; //Están ordenados sus elementos else if(contador!=N) return 0;}
A ver si podéis hecharme una mano y decirme que pasa ahí :(
¡Saludos y gracias!
Epa:
Buenas.
Para empezar, la funcion scanvector recibe un puntero a un entero.
al definir int a[N];
a ya es un puntero, por lo que en scanvector(&a); le estas pasando un puntero a un puntero a int, no un puntero a int.
tendrias que haer scanvector(a);
La verdad que el algoritmo que usas para comprobar es algo raro, pero tiene un par de errores.
Aca te lo dejo, comparalo con el que tenes
--- Código: C++ --- int ordenados(int vec[N]){ int i, contador=0; for(i=0; i<(N - 1); i++) if(vec[i]<=vec[i+1]) contador++; if(contador== (N -1)) return 1; //Están ordenados sus elementos return 0;}
Saludos
morfus_bedxhed:
checando el código veo que puede producir un pequeño error, cuando i llega a su última posición ( i=9), al hacer la compración
--- Código: C --- for(i=0; i<(N - 1); i++) if(vec[i]<=vec[i+1]) contador++; lo que se estaría haciendo en ese punto sería vec[9]<=vec[10] y vec[10] no fue llenado y no sabemos a donde apunta y que dato tendrá en memoria por lo cual podríamos filtrar esa última comparación.
--- Código: C --- for(i=0; i<(N - 1); i++) if (i=(N-1)){ if(vec[i]<=vec[i]) contador ++; } else { if(vec[i]<=vec[i+1]) contador++; }
nos dices que tal te fue
!saludos!
Epa:
--- Cita de: "morfus_bedxhed" ---checando el código veo que puede producir un pequeño error, cuando i llega a su última posición ( i=9), al hacer la compración
--- Código: C --- for(i=0; i<(N - 1); i++) if(vec[i]<=vec[i+1]) contador++;
lo que se estaría haciendo en ese punto sería vec[9]<=vec[10] y vec[10] no fue llenado y no sabemos a donde apunta y que dato tendrá en memoria por lo cual podríamos filtrar esa última comparación.
--- Fin de la cita ---
N = 10
N -1 = 9
cuando i toma el valor 9 el ciclo no se ejecuta ya que la condicion es < y no <=
O sea, i nunca llega a tomar el valor 9 dentro del ciclo.
--- Cita de: "morfus_bedxhed" --- for(i=0; i<(N - 1); i++)
if (i=(N-1)){
if(vec<=vec)
contador ++;
} else {
if(vec<=vec[i+1])
contador++;
}
--- Fin de la cita ---
Hay un error logico en ese codigo, al evaluarse el if, i toma el valor 9, en el segundo if vec es siempre igual a ves, por lo que es siempre veradero, entonces se incrementa el contador y se sale del for, ya que i vale 9.
Saludos
morfus_bedxhed:
Tienes mucha razón en tus observaciones Epa, lo cual pido disculpas por eso y apartir d ehoy le pondré mas atención al código de los demás compañeros
!Saludos!
Navegación
[#] Página Siguiente
Ir a la versión completa