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 menor (si la diferencia es negativa,querrá decir que el valor menor aparecerá después del array).
Lo llevo así:
#include<stdio.h>
#include<stdlib.h>
#define números_ a_pedir 10
#define max (a,b) a>b? a:b
#define min (a,b) a<b a:b
int main (int arge, char**argv){
int i,máximo,minimo;
máximo=minimo=0;
for(i=0;i<números_a_pedir;++){
int n;
scanf ("%i",&n);
màximo=max (máximo,n);
mínimo=min (mínimo,n)
}
printf("Maximo:%i,Minimo:%i",maximo,minimo);
return EXIT_SUCCESS;
De momento, hasta aquí llego.Se que tengo errores,pero no consigo avanzar.
Muchas gracias por vuestro tiempo.
Antes de ayudarte con tu el algoritmo:
El ejercicio pide números introducidos a mano en el código, eso es, el array debes inscribirlo de la forma:
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
Los valores óbviamente debes ponerlos tú.
Ahora:
Sabes que sí o sí es un array. Prepara dos variables, una que guarde el mayor y otra que guarde el menor.
Al principio del código haz que valgan lo mismo que el primer elemento del array.
Después, por cada elemento del array, menos el primero por la razón que ya hemos dicho, si menor es mayor que el elemento del array copiar dicho elemento a menor y de igual forma si mayor es menor que el elemento del array copiar dicho elemento a mayor.
Una vez terminado el bucle el número que buscas será la diferencia entre mayor y menor. No te preocupes por si menor o mayor y menor son negativos pues matemáticamente la respuesta será igual de buena.
Muchas gracias por la respuesta, me pongo con ello.
Algunos comentarios antes:
Recomendable: Nombres cortos y significativos, M "grande" para maximo, m "pequeña" para minimo, cuando sea posible.
- Recomendable: No usar caracteres que no sean ANSI en los fuentes (ó,í..). Dependiendo de la configuración, los compiladores pueden no procesar bien el fuente
Recomendable: separar el proceso de computo (hallar distancias) de la IO (scanf, printf)
Se exije al menos un elemento en el array. Parece que no pero esta da problemas en las inicializaciones... a 1, no a 0.
Si el vector tiene elementos repetidos, la respuesta no es unica. i.e en -3,-3, puede ser 0,1,-1
Se pide la distancia entre posiciones M,m, no entre valores V[M],V[m]
- Para un curso elemental, obviar los comentarios de especificación.
#include <stdio.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));
}
Ejemplo de salida
-5
-3
-1
1
3
5
7
9
11
13
15
10
Valores introducidos a mano. El ultimo valor es la distancia 10 (computada) entre el elemento -5 y 15
Muchas gracias por la ayuda.
Buenos días
Pasado un tiempo he retomado la programación e ingresé en este ejercicio del que pedí ayuda.
Al pasarlo por DEV veo que al introducir los datos, es infinito.
¿Alguien me podría decir por qué?
Un saludo