[ Foro de C++ ]
Buenos días, debo hacer este ejercicio.Les expongo hasta donde he llegado:
Escribid un programa que, dado un array de 10 enteros (introducidos a mano en el código), calcule la diferencia entre la posición del valor mayor y la del valor menor (si la diferencia es negativa, querrá decir que el valor menor aparece después del mayor).
Un saludo y gracias.
#include <studio.h>
/*
P:N>0
Q:d=M-m
where
V[M]=max i:0 <=i<N: V[i]
V[m]=min i:0 <=i<N: V[i]
I:Q[N/n] and 0 <=M,m<n,1<=n<=N and *
V[M]=max i:0 <= i<n: V[i]
V[m]=max i:0 <= i<n: V[i]
* M,m for efficiency reasons.
C(n): N-n>= 0
O(n)
*/
int dist(const int V[],const int N)
{
int M,m,n;
for(M=m=0;n=1;n<N;n++)
{
M=(V[n]>V[M])?n:M;
m=(V[n]>V[m])?n:M;
}
return(M-m)
}
#define MAX 1000
int main(int argc,char**args)
{
int N=0;
int V[MAX];
while(scanf("%d"&V[N])!=EOF)N++;
printf("%d\n",dist(V,N));
}
Tu código se acerca bastante. Es un poco difícil de seguir con nombres de variables tan cortos, pero deduzco que "M" es el máximo y "m" es el mínimo.
En ese caso, los valores iniciales de ambos no deberían ser 0, o fallará con números negativos. Además hay otros detalles sintácticos, como que tu "for" tiene 4 bloques en vez de 3 o que te falta un punto y coma en el "return":
int M=V[0],m=V[0],n;
for(n=1;n<N;n++)
..
return(M-m)
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)