• Martes 12 de Noviembre de 2024, 20:43

Autor Tema:  Problema Con Un CÓdigo En C++  (Leído 1229 veces)

Luzpy

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problema Con Un CÓdigo En C++
« en: Domingo 26 de Febrero de 2006, 01:31 »
0
HOLA A TODOS TENGO UN PROBLEMA CON EL SIGUIENTE CÓDIGO, LO QUE TRATO DE LOGRAR ES QUE NO SE REPITAN LOS NÚMEROS QUE CONFORMAN EL VETOR PERO NO ME ESTA FUNCIONANDO NECESITO IDEAS.

GRACIAS

#include <iostream.h>
#include <iomanip.h>
#include<cstdlib>
#include<ctime>
int main()
{

   srand(time(0));//establece la semilla para el generador de números aleatorios
   int vect[2],i,n,a;
   
   //Genera el Vector Flag
   a=0;
   if(a==0)
   {
      for (i=0;i<=1;i++)
      {
         n=1+rand()%45;
         vect=n;
      }
   }

   for (i=0;i<=1;i++)
   {
      if(vect==vect[i+1])

         cout<<"Se repite"<<endl;
         a=0;
   }

   //Imprime el Vector flag
   cout<<" "<<endl;   
   for (i=0;i<2;i++)
   {
      cout<<setw(3)<<i<<setw(5)<<vect<<endl;   
      
   }
   
   
   char r;   
   cout<<" "<<endl;
   cout<<"Desea Continuar: "<<endl;
   cin>>r;

   if ((r=='s')||(r=='S'))
   {
      cout<<" "<<endl;
      main();
   }
   cout<<" "<<endl;
   return 0;
}
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Problema Con Un CÓdigo En C++
« Respuesta #1 en: Domingo 26 de Febrero de 2006, 06:23 »
0
¿Qué es lo que deseas, que no se repita el número en las posiciones del vector o que no se repita entre diferentes ejecuciones? Me parece que lo primero, es sencillo, al momento de asignar el valor a la segunda posición, checa que el valor que se va a asignar no sea igual al que está en la primera posición, si no es igual, lo asignas, si es igual, obtén un nuevo número aleatorio y prueba de nuevo.

Podría ser algo como esto:

Código: Text
  1.  
  2. n = 1 + rand() % 45;
  3. vect[ 0 ] = n;
  4.  
  5. do {
  6.    n = 1 + rand() % 45;
  7. } while ( n == vect[ 0 ] );
  8.  
  9. vect[ 1 ] = n;
  10.  
  11.  
Nota que este código solo funciona para el ejemplo de dos elementos que mostraste, si lo vas a aplicar para n elementos, tendrás que utilizar un ciclo for que recorra todas las posiciones anteriores del vector para revisar que el valor no sea repetido.

Saludos,
José Jorge (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip

mmoreno

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Problema Con Un CÓdigo En C++
« Respuesta #2 en: Viernes 10 de Marzo de 2006, 23:12 »
0
El siguiente codigo ordena un vector de N numeros aleatorios entre 0 y 10, y elimina los duplicados.
 Quiza te sirve de ejemplo.

Saludos, mmoreno.

$ cat main.C
#include <iostream>
#include <vector>
#include <cassert>
#include <ctime>
#include <iterator>
#include <algorithm>
#include <utility>
#include <sstream>
using namespace std;
int main(int argc, char* argv[]) {
        assert(argv[1]);
        int n = 0;
        (istringstream(argv[1]))>>n;
        vector<int> v;
        srand(time(0));
        for (int i = 0; i < n; i++) v.push_back(rand()%10);
        cout<<"Origen con duplicados: ";
        copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
        cout<<endl;
        sort(v.begin(), v.end());
        vector<int>::iterator it = unique(v.begin(), v.end());
        cout<<"Sin duplicados: ";
        copy(v.begin(), it, ostream_iterator<int>(cout, " "));
        cout<<endl;
        return 0;
}
$ c++ main.C
$ ./a.out 25
Origen con duplicados: 7 0 0 6 3 8 6 5 1 5 4 0 1 6 1 9 2 7 8 9 9 8 6 0 6
Sin duplicados: 0 1 2 3 4 5 6 7 8 9
$