Mi programa no responde! (SOLUCIONADO)

Iniciado por MJI, 22 Diciembre 2018, 13:19 PM

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

MJI

Hola, me gustaría realizar un programa que crease un vector hasta cierto 'num', y los números que lo componen están entre 0 y num - 1. Ademas no ha de repetirse ningún numero dentro del vector.

Mi intento de este programa es el siguiente:

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

const int MAX = 80;
typedef int Vector[MAX];

void GenerarVector(Vector v, int num);
void MostrarVector(const Vector v, int num);

int main (void)
{
   Vector v;
   int num;
   
   Presentacion();
   
   cout << "Dame numero de elementos del vector: ";
   cin >> num;
   cout << endl;
   
   if(num < 0)
       cout << "El numero no es positivo, no se puede generar el vector";
   else
   {
       GenerarVector (v, num);
       
       cout << "El vector generado es: ";
       MostrarVector (v, num);
   }

   return 0;
}


void Presentacion(void)
{
   cout << "Este programa genera vector de una cantidad de numeros que el usuario "
   cout << "indique, comprendidos  entre 0 y el numero indicado, sin repetirse ningún"
   cout << " numero a lo largo del vector" << endl << endl;
   
   return;
}

void GenerarVector(Vector v, int num)
{
   int numvec;
   bool numrep = false;
   int i = 0;
   int j = 0;
   
   srand(time(NULL));
   
   do
   {
       numvec = rand() % num;
       
       do
       {
           if(numvec = v[j])
               numrep = true;
           else
               numrep = false;
           j++;
       }
       while(j <= i && numrep == false);
       
       j = 0;
       
       if(numrep == false)
       {
           v = numvec;
           i++;
       }    
   }
   while(i < num);
   
   return;
}


void MostrarVector(const Vector v, int num)
{
   int contador = 0;
   int i = 0;
   
   while(contador < num)
   {
       cout << v << " ";
       i++;
       contador++;
   }
   
   return;
}



No informa de ningún error pero al ejecutarse se queda congelado. ¿Alguien sabe cual es el problema?
Me imagino que sera por la función 'GenerarVector'.

Gracias.

K-YreX

El código entre etiquetas de código GeSHi porque cuando usas la i como índice entre corchetes se convierte todo el mensaje de ahí en adelante en cursiva y la i y los corchetes no se ven y no se puede corregir bien el código.

En la función <generarVector()> estás usando asignaciones (un igual "=") donde deberías estar usando comparaciones (dos iguales "=="). No he mirado todo el código en profundidad pero la idea para generar un vector sin valores repetidos es:
- Opción 1
Generas un número aleatorio, recorres los valores que ya has introducido en el vector y si ninguno es igual al nuevo valor generado, lo introduces en el vector, si ya está repetido, generas otro número.
- Opción 2
Vas ordenando cada nuevo valor que introduces y así no tienes que compararlo con todo el vector que ya tienes generado.
PD: Las funciones de tipo <void> no hace falta que le pongas <return>, es raro verlo. Suerte :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

MJI

Cita de: YreX-DwX en 22 Diciembre 2018, 13:54 PM
El código entre etiquetas de código GeSHi porque cuando usas la i como índice entre corchetes se convierte todo el mensaje de ahí en adelante en cursiva y la i y los corchetes no se ven y no se puede corregir bien el código.

En la función <generarVector()> estás usando asignaciones (un igual "=") donde deberías estar usando comparaciones (dos iguales "=="). No he mirado todo el código en profundidad pero la idea para generar un vector sin valores repetidos es:
- Opción 1
Generas un número aleatorio, recorres los valores que ya has introducido en el vector y si ninguno es igual al nuevo valor generado, lo introduces en el vector, si ya está repetido, generas otro número.
- Opción 2
Vas ordenando cada nuevo valor que introduces y así no tienes que compararlo con todo el vector que ya tienes generado.
PD: Las funciones de tipo <void> no hace falta que le pongas <return>, es raro verlo. Suerte :-X


Vale, el problema era añadir un = mas en el segundo do de la función GenerarVector.
Muchas gracias!