Tengo un ejercicio al que no doy forma.Necesito un empujón

Iniciado por el gusanillo, 28 Enero 2018, 08:45 AM

0 Miembros y 1 Visitante están viendo este tema.

el gusanillo

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.



MAFUS

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.

el gusanillo

Muchas gracias por la respuesta, me pongo con ello.

dijsktra

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
Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)


el gusanillo

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