función que devuelva valores únicos

Iniciado por indict, 24 Enero 2013, 22:19 PM

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

indict

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

#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.

flony

el la parte de  }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
si un problema no tiene solucion entonces no es un problema...es algo inevitable

leosansan

Cita de: 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

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 (cpp) [Seleccionar]
#include<iostream>
#include<vector>
#include<cstdlib>
#include<clocale>
using namespace std;

int vector_unico (vector <int>& v,int n){
  int i,j,k;
  for( i = 0,k=0; k < n; i++,k++){
      cout<<"Ingrese el "<<i+1<<" numero: ";
      cin>>v[i];
    for( j = i-1; j >=0 ; j--){
      if(v[i] == v[j]){
        i--;break;
      }
    }
  }
  return i;
}

int main(){
  setlocale(LC_ALL, "Spanish");
  int i,j,n,e;
  cout<<"¿Cuántos números desea ingresar?: ";
  cin>>n;
  vector<int>v(n);
  i=vector_unico(v,n);
  for( j = 0; j < i; j++)
    cout<<v[j]<<"  ";
  system ("pause");
  return 0;
}

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 (cpp) [Seleccionar]
#include<iostream>
#include<vector>
#include<cstdlib>
#include<clocale>
using namespace std;

int vector_unico (vector <int>& v,int n){
  int i,j,k;
  for( i = 0,k=0; k < n; i++,k++){
      cout<<"Ingrese el "<<i+1<<" numero: ";
      cin>>v[i];
    for( j = i-1; j >=0 ; j--){
      if(v[i] == v[j]){
        i--;break;
      }
    }
  }
  cout<<"Tamaño del vector sin repetidos: "<<i<<endl;
  for( j = 0; j < i; j++)
    cout<<v[j]<<"  ";
  }

int main(){
  setlocale(LC_ALL, "Spanish");
  int i,j,n,e;
  cout<<"¿Cuántos números desea ingresar?: ";
  cin>>n;
  vector<int>v(n);
  vector_unico(v,n);
  system ("pause");
  return 0;
}

Y ya que estamos, ¿para qué usar una función y la librería vector?. Podríamos hacer:
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
#include<clocale>
using namespace std;

int main () {
    setlocale(LC_ALL, "Spanish");
    int i,j,k,total;
    cout<<"¿Cuántos números desea ingresar?: ";
    cin>>total;
    int numeros[total];
    for( i = 0,k=0; i < total,k < total; i++,k++){
        cout<<"Ingrese el "<<i+1<<" numero: ";
        cin >> numeros[i];

        for( j = i-1; j >=0 ; j--){
            if(numeros[i] == numeros[j]){
                i--;break;
            }
        }
    }
  for( j = 0; j < i; j++)
        cout<<numeros[j]<<"  ";
  return 0;
}

Saluditos otra vez !.

indict

¡¡fantásticas explicaciones!!, muchas gracias por toda la ayuda :D

¡un saludo!