Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MJI en 22 Diciembre 2018, 13:19 pm



Título: Mi programa no responde! (SOLUCIONADO)
Publicado por: MJI en 22 Diciembre 2018, 13:19 pm
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.


Título: Re: Mi programa no responde!
Publicado por: K-YreX 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


Título: Re: Mi programa no responde!
Publicado por: MJI en 22 Diciembre 2018, 14:06 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!