Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: krowa en 23 Octubre 2011, 05:21 am



Título: Problema con funcion, Metodo de seleccion
Publicado por: krowa en 23 Octubre 2011, 05:21 am
Hola me presento en esta comunidad, estoy estudiando c++en mis ratos libres, cuando tengo tiempo, ya que soy estudiante (16 años.) y no me da mucho el tiempo.
Bueno esto no viene al caso :P,  
Estoy haciendo un programa el cual vos le ingresas la cantidad de posiciones que queres que contenga el vector e ingresas los elementos de cada posicion.
El programa lo que hace es ordenarlos por el metodo de seleccion usando una funcion.
Ya tengo claro el metodo de la burbuja, ( ya lo hice).
Y ahora estoy viendo el metodo de seleccion, se como es, pero quiero realizarlo creando una funcion que seleccione el menor numero del vector y retorne la posicion de ese vector en el cual se encuentra el menor numero.
(Recordemos que estoy en el metodo de seleccion)
Para luego ordenarlo, el problema es que NO funciona, a lo ultimo me muestra el vector, pero cualquier cosa me tira.

ACA EL CODIGO :


#include<iostream>
using namespace std;
int Menor(int v[], int nv,int i){
    int r=0;
                               for(;i<nv;i++){
                                       if(v<v[i+1])r=i;
                                       }
                                       return r;
                                       }
int main()
{
    //CARGA DEL VECTOR ---------------------------------------------------------
    int nv;
    cout<<"Introzuca la cantidad de elementos que desea que tenga el vector: ";
    cin>>nv;
    cout<<endl;
    int v[nv];
    v[nv+1]=0;
    for(int i=0;i!=nv;i++){
                          cout<<"Introduzca valor para la posicion Numero "<<i<<": ";
                          cin>>v;
                          cout<<endl;
                          }
    //FIN DE CARGA DEL VECTOR --------------------------------------------------
    //PROCESO DE ORDENAMIENTO CON LLAMADA A FUNCION MENOR--------------------------------------------------
    int temp,caca;
    for(int i=0;i!=nv;i++){
                           caca=Menor(v,nv,i);
                           temp=v;
                           v=v[caca];
                           v[caca]=temp;
                           }
    //FIN PROCESO DE ORDENAMIENTO -----------------------------------------------
    cout<<"Su vector ordenado: ";
    for(int i=1;i!=nv;i++){
                          cout<<v<<",";
                          }
    system("pause");
}

---

Se que estoy haciendo algo recontra mal, pero no encuentro el error, si me pueden ayudar gracias!


Título: Re: Problema con funcion, Metodo de seleccion
Publicado por: rir3760 en 23 Octubre 2011, 06:40 am
Ese programa tiene demasiados errores, si no tienes un libro de calidad revisa los temas fijos de este foro. También puedes utilizar el motor de búsqueda.

En C++ el numero de elementos de un array lo debes indicar mediante una constante, no puedes utilizar una variable:
Código
  1. int v[nv];

Y aun cuando fuera valido los indices del array van desde 0 hasta nv-1, esto no es un indice valido:
Código
  1. v[nv+1]=0;
Y tampoco tiene caso ya que la siguiente operación es pedir todos los números.

En el primer bucle de la función principal utilizas el nombre del array "v" cuando deberías utilizar "v[ i ]".

En el siguiente bucle tratas de obtener los "nv" números menores cuando solo debes procesar "nv-1" números. Tanto en ese bucle como en el siguiente utilizas "v" cuando debería ser "v[ i ]".

La función que encuentra el valor menor se debe implementar con solo dos parámetros: la dirección base y el numero de elementos. Por ejemplo:
Código
  1. int fn_menor(int *elem, int num_elem)
  2. {
  3. int rv;
  4.  
  5. rv = elem[0];
  6. for (int i = 1; i != num_elem; ++i)
  7. if (rv > elem[ i ])
  8. rv = elem[ i ];
  9.  
  10. return rv;
  11. }

En buen plan: seria mejor que reescribieras desde cero el programa.

Un saludo


Título: Re: Problema con funcion, Metodo de seleccion
Publicado por: krowa en 24 Octubre 2011, 18:57 pm
Gracias por tu ayuda lo pude hacer :D
Citar
En C++ el numero de elementos de un array lo debes indicar mediante una constante, no puedes utilizar una variable:
Código
  1. int v[nv];
--
Tengo 1 pregunta :D

Puedo declararlo asi?:
Código
  1. int N[];
  o..
Código
  1. int N[]= ;
porque?.
--

Citar
En buen plan: seria mejor que reescribieras desde cero el programa.

Un saludo
Excelente, asi lo hice y aca pongo el codigo, anduvo de 10, si llega a tener algun error o algo que "hice" que no deberia haber hecho podrias corregirlo?,
Gracias de nuevo!

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int mostrar(int N[]){    for(int i=0;i!=5;i++){
  5.                   cout<<N[i]<<" ";
  6.                   }
  7.              }
  8.  
  9. int cargar(int N[]){
  10.         for(int i=0;i<5;i++){
  11.                 cout<<"Introduzca valor para el elemento n"<<i+1<<": ";
  12.                 cin>>N[i];
  13.                 }
  14.         }
  15. int pos_men(int V[],int z){
  16.    int men=0,rat=z;
  17.    men=V[z];
  18.    for(int i=(z+1);i<5;i++){
  19.            if(V[i]<V[rat]){
  20.                         rat=i;
  21.                         }
  22.                           }
  23.    return rat;
  24. }
  25.  
  26. int main(){
  27.    int N[5],temp=0,g=0;
  28.    cargar(N);
  29.    cout<<"El vector desordenado: ";
  30.    mostrar(N);
  31.    for(int i=0;i<5;i++){
  32.            temp=pos_men(N,i);
  33.            g=N[i];
  34.            N[i]=N[temp];
  35.            N[temp]=g;
  36.            }
  37.            cout<<endl<<endl;
  38. cout<<"El vector ordenado: ";
  39. mostrar(N);
  40. system("pause");
  41. }
  42.  


Título: Re: Problema con funcion, Metodo de seleccion
Publicado por: Riki_89D en 24 Octubre 2011, 19:02 pm
Declararlo asin "int N[]" es quivalente a "int *N" por lo que si puedes,inicializa el puntero con NULL :)


Título: Re: Problema con funcion, Metodo de seleccion
Publicado por: krowa en 24 Octubre 2011, 19:05 pm
Declararlo asin "int N[]" es quivalente a "int *N" por lo que si puedes,inicializa el puntero con NULL :)
Pero si lo delcaro asi queda como un vector? o como una variable?
Osea como "N
  • .." o como "N"?
Gracias por responder :D


Título: Re: Problema con funcion, Metodo de seleccion
Publicado por: krowa en 24 Octubre 2011, 19:06 pm
Pero si lo delcaro asi queda como un vector? o como una variable?
Osea como
Código
  1. N[x]
o como N?
Gracias por responder :D


Título: Re: Problema con funcion, Metodo de seleccion
Publicado por: Riki_89D en 24 Octubre 2011, 19:32 pm
Queda como un puntero,no como un vector (array)


Título: Re: Problema con funcion, Metodo de seleccion
Publicado por: krowa en 24 Octubre 2011, 19:54 pm
Queda como un puntero,no como un vector (array)

Listo, Graciaas ;)