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