Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: indict en 24 Enero 2013, 22:19 pm



Título: función que devuelva valores únicos
Publicado por: indict en 24 Enero 2013, 22:19 pm
Hola,

como harías una función que devuelva los números no repetidos,

v= 1 , 2 , 3 , 3 , 7 , 8 , 7 devuelva 1 , 2 , 3 , 7 , 8

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



vector <int> vector_unico (vector <int>& v){
int i=0;
int j=v.size()-1;
int s=0;
while(i<j){
           if(v[i++]!=v[j--]){s=s+v[i];}
           
           }return s;}

int main(){
    int n,i,e;
    cout<<" muestre el tamaño ";
    cin>>n;
    vector<int>v(n);
    for(i=0;i<n;i++){
                     cout<<" el elemento "<<i<<" ... ";
                     cin>>e;
                     v[i]=e;}
    cout<<vector_unico(v)<<endl;
   
system ("pause");
return 0;}

Lo que intento es recorrer todo el vector con dos contadores y que acumule los valores que están repetidos más de una vez.


Título: Re: función que devuelva valores únicos
Publicado por: flony en 25 Enero 2013, 02:42 am
el la parte de 
Código:
}return s;}
recorda que s es un int y que la función devuelve un vector ...
nunca probé devolver un vector...no se si se puede o no..intentaria que sea una funcion void


Título: Re: función que devuelva valores únicos
Publicado por: leosansan en 25 Enero 2013, 15:49 pm
Hola,

como harías una función que devuelva los números no repetidos,

v= 1 , 2 , 3 , 3 , 7 , 8 , 7 devuelva 1 , 2 , 3 , 7 , 8

Fíjate, como indica flony, que la función si va a devolver un int tiene que ser del tipo int, no vector. Pero en realidad no hace falta que devuelva nada, ya que los arrays se pasan por referencia y su valor en la función valen en el main. Otra cosa es el valor de la variable i de la función, que lo necesito y es el que retorno:
Código
  1. #include<iostream>
  2. #include<vector>
  3. #include<cstdlib>
  4. #include<clocale>
  5. using namespace std;
  6.  
  7. int vector_unico (vector <int>& v,int n){
  8.  int i,j,k;
  9.  for( i = 0,k=0; k < n; i++,k++){
  10.      cout<<"Ingrese el "<<i+1<<" numero: ";
  11.      cin>>v[i];
  12.    for( j = i-1; j >=0 ; j--){
  13.      if(v[i] == v[j]){
  14.        i--;break;
  15.      }
  16.    }
  17.  }
  18.  return i;
  19. }
  20.  
  21. int main(){
  22.  setlocale(LC_ALL, "Spanish");
  23.  int i,j,n,e;
  24.  cout<<"¿Cuántos números desea ingresar?: ";
  25.  cin>>n;
  26.  vector<int>v(n);
  27.  i=vector_unico(v,n);
  28.  for( j = 0; j < i; j++)
  29.    cout<<v[j]<<"  ";
  30.  system ("pause");
  31.  return 0;
  32. }
  33.  
Saluditos!.
Aunque podría no retornar nada e imprimir desde la función, teniendo en cuenta que el vector lo tienes disponible en main para cualquier otra operación:

Código
  1. #include<iostream>
  2. #include<vector>
  3. #include<cstdlib>
  4. #include<clocale>
  5. using namespace std;
  6.  
  7. int vector_unico (vector <int>& v,int n){
  8.  int i,j,k;
  9.  for( i = 0,k=0; k < n; i++,k++){
  10.      cout<<"Ingrese el "<<i+1<<" numero: ";
  11.      cin>>v[i];
  12.    for( j = i-1; j >=0 ; j--){
  13.      if(v[i] == v[j]){
  14.        i--;break;
  15.      }
  16.    }
  17.  }
  18.  cout<<"Tamaño del vector sin repetidos: "<<i<<endl;
  19.  for( j = 0; j < i; j++)
  20.    cout<<v[j]<<"  ";
  21.  }
  22.  
  23. int main(){
  24.  setlocale(LC_ALL, "Spanish");
  25.  int i,j,n,e;
  26.  cout<<"¿Cuántos números desea ingresar?: ";
  27.  cin>>n;
  28.  vector<int>v(n);
  29.  vector_unico(v,n);
  30.  system ("pause");
  31.  return 0;
  32. }
  33.  
Y ya que estamos, ¿para qué usar una función y la librería vector?. Podríamos hacer:
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include<clocale>
  4. using namespace std;
  5.  
  6. int main () {
  7.    setlocale(LC_ALL, "Spanish");
  8.    int i,j,k,total;
  9.    cout<<"¿Cuántos números desea ingresar?: ";
  10.    cin>>total;
  11.    int numeros[total];
  12.    for( i = 0,k=0; i < total,k < total; i++,k++){
  13.        cout<<"Ingrese el "<<i+1<<" numero: ";
  14.        cin >> numeros[i];
  15.  
  16.        for( j = i-1; j >=0 ; j--){
  17.            if(numeros[i] == numeros[j]){
  18.                i--;break;
  19.            }
  20.        }
  21.    }
  22.  for( j = 0; j < i; j++)
  23.        cout<<numeros[j]<<"  ";
  24.  return 0;
  25. }
  26.  
Saluditos otra vez !.


Título: Re: función que devuelva valores únicos
Publicado por: indict en 26 Enero 2013, 17:24 pm
¡¡fantásticas explicaciones!!, muchas gracias por toda la ayuda :D

¡un saludo!