Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: el gusanillo en 28 Enero 2018, 08:45 AM

Título: Tengo un ejercicio al que no doy forma.Necesito un empujón
Publicado por: el gusanillo en 28 Enero 2018, 08:45 AM
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.


Título: Re: Tengo un ejercicio al que no doy forma.Necesito un empujón
Publicado por: MAFUS en 28 Enero 2018, 12:34 PM
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.
Título: Re: Tengo un ejercicio al que no doy forma.Necesito un empujón
Publicado por: el gusanillo en 29 Enero 2018, 06:33 AM
Muchas gracias por la respuesta, me pongo con ello.
Título: Re: Tengo un ejercicio al que no doy forma.Necesito un empujón
Publicado por: dijsktra en 2 Febrero 2018, 15:46 PM
Algunos comentarios antes:




#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
Título: Re: Tengo un ejercicio al que no doy forma.Necesito un empujón
Publicado por: el gusanillo en 31 Marzo 2018, 09:20 AM
Muchas gracias por la ayuda.
Título: Re: Tengo un ejercicio al que no doy forma.Necesito un empujón
Publicado por: el gusanillo en 30 Julio 2019, 06:45 AM
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