[ Foro de C++ ]

Ejercicio de arrays.

16-Aug-2018 08:52
Invitado (Ricardo)
1 Respuestas

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));
}


 


27-Aug-2018 12:54
Nacho Cabanes (+83)

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.)