elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Mi programa no responde! (SOLUCIONADO)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mi programa no responde! (SOLUCIONADO)  (Leído 1,776 veces)
MJI

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Mi programa no responde! (SOLUCIONADO)
« 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.


« Última modificación: 22 Diciembre 2018, 17:54 pm por MJI » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Mi programa no responde!
« Respuesta #1 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


En línea

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

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Mi programa no responde!
« Respuesta #2 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!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines