Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: chicainge en 10 Agosto 2014, 13:55 pm



Título: Devolver el menor de un array
Publicado por: chicainge en 10 Agosto 2014, 13:55 pm
El programa me compila perfectamente, pero al introducirle los números se para no hace nada y no encuentro el error, podrían ayudarme por favor:(

Hacer un subalgoritmo que reciba un array de N números enteros y devuelva el valor mínimo de todos.

Código:
#include <iostream>
using namespace std;

const unsigned MAX=20; //el array va de 0 a 19 k son los 20 cuadraditos

typedef int nument[MAX];

int minimo(nument);

int main(){
 //habia que inicalizar el array?¿
 nument num;
 int nu;
 cout<<" Cuentos numero vas a introducir: ";
 cin>>nu;
 cout<<"introduce una secuencia de numeros enteros: ";

 for(int i=0;i<nu;i++){
   cin>>num[i];
 }
 num[nu]=' ';
 cout<<"El numero mas pequeño es "<<minimo(num)<<endl;

 return 0;
}

int minimo(nument Array){
 int aux1,aux2;
 for(int i=0; i<MAX-1; i++){
  while(Array[i+1]!=' '){
    if(Array[i]>=Array[i+1]){
      aux1=Array[i];
      aux2=Array[i+1];
      Array[i+1]=aux1;
      Array[i]=aux2;
   }
  }
 }
 return aux2;
}


Título: Re: Devolver el menor de un array
Publicado por: ivancea96 en 10 Agosto 2014, 14:16 pm
Solo una razón puede haber para que se quede en un bucle infinito: Ese while.

"Array[i+1]!=' '"
Array es un arreglo de enteros. ' ' es un espacio, que en ascii es 32. Estás diciendo que haga ese while hasta que Array[i+i]!=32.

Anteriormente, pusiste que num[nu] = 32. Yo no elegiría ese número, ya que a lo mejor se lo introduces por teclado tú.

Yo me replantearía esa función minimo(). Con un bucle for, llega.


Título: Re: Devolver el menor de un array
Publicado por: leosansan en 10 Agosto 2014, 15:30 pm
El programa me compila perfectamente, pero al introducirle los números se para no hace nada y no encuentro el error, podrían ayudarme por favor:(
............................

En realidad si que hace, pero no termina. En el while, que por cierto está de más, no varías el valor de i con lo que el while provoca un  bucle infinito, tendrías que poner al final del mismo algo como i++.

Pero lo correcto es cambiar un poco esa función "minimo". Además de lo ya mencionado de que sobra el while, conviene pasarle como parámetro el valor de la variable nu ya que tal como lo tienes con MAX, y si has introducido un número de valores inferior al mismo, se estaría tomando posiciones de memoria no definidas con el consiguiente riesgo de que contengan basura y distorsione el valor calculado del mínimo. Y el valor de nu=' ' sobraría al pasar como argumento su valor.

Aunque se puede abreviar, la función "minimo" puede ser algo como:

Código
  1. int minimo ( nument Array , int nu) {
  2. int minimo = Array [ 0 ] ;
  3. for ( int i = 1 ; i < nu ; i++ )
  4.    if ( Array [ i ] <= minimo )
  5.      minimo = Array [ i ] ;
  6. return minimo ;
  7. }

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)

EDITADO.