Dev - C++ - Generación de números Aleatorios

 
Vista:
Imágen de perfil de Arii
Val: 16
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Generación de números Aleatorios

Publicado por Arii (6 intervenciones) el 07/12/2020 18:37:37
Buenas tardes, ¿como se encuentran? Espero que estén llevando bien la cuarentena; tengo una duda con respecto a una actividad que me fue asignada para finales de este año; nuestro profesor no es de explicar adecuadamente los temas, por lo cual he tenido que recurrir a la Web y tras una ardua investigacion he logrado llegar hasta aqui:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <queue>
#include <vector>
 
/*
    Practica final 20%: Escriba un programa para ejecutar el experimento siguiente:
    1. Genere 100 números aleatorios con valores en el rango entre 1 y 500.
    2. Conforme se genera cada número, insértelo en una cola inicialmente vacía.
    3. Si el número es de dos dígitos, tiene prioridad sobre números de tres dígitos.
    4. Después de insertar los 100 números, imprima en orden secuencial las posiciones
    de la cola donde se encuentra el número con mayor valor y el número con menor valor.
*/
 
using namespace std;
 
int main()
{
    //Declaración de variables
    int i, Numero;
    srand(time(NULL));
 
    priority_queue<int> numero_aleatorio;
 
    //Procesamiento
    for(i = 1; i <= 100; i++)
    {
        //Generamos un número aleatorio del 1 al 500
        Numero = 1 + rand() % (501 - 1);
 
        //Guardamos el número generado
        numero_aleatorio.push(Numero);
    }
 
    while (!numero_aleatorio.empty())
    {
        cout << numero_aleatorio.top() << ", ";
        numero_aleatorio.pop();
    }
 
    return 0;
}

El ejercicio esta casi resuelto; lo único que no encuentro la manera de realizar es imprimir las posiciones del números mayor y del numero de menor valor, según dice el ejercicio. ¿Alguien podría ayudarme con esto?.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Generación de números Aleatorios

Publicado por Rodrigo (539 intervenciones) el 07/12/2020 19:51:54
Creo que te falta considerar
"Si el número es de dos dígitos, tiene prioridad sobre números de tres dígitos."

El recorrido que haces en la linea 40, podrias ponerle un contador y comparar los valores que se estan sacando y guardar el valor del contador cada vez que aparece un valor mayor al mayor (hasta ahora) o menor al menor (hasta ahora), aunque no se que sentido tiene asber las posiciones si despues de haberla recorrido ya no quedan elementos en la cola. Tal vez hay manera de iterar sobre la cola sin eliminar elementos de ella?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Generación de números Aleatorios

Publicado por Martín (158 intervenciones) el 08/12/2020 13:27:11
El enunciado de tu problema es ambiguo.

¿Por qué?

Primero porque una priority_queue es un contenedor ordenado, ya sea de mayor a menor por omisión, o de acuerdo con la función de comparación que tú definas.
Entiendo que en este caso una parte de la función de comparación que necesitas tiene que considerar "prioritarios" los números de 2 dígitos antes que los de 3, pero falta definir cuál será el orden dentro de los de dos dígitos, de los 3 dígitos y el orden de los de 1 dígito (que quizá pueda suponerse igual a los anteriores, o no).

Y segundo, ¿qué quiere decir con eso de "... imprima en orden secuencial las posiciones de la cola donde se encuentra el número con mayor valor y el número con menor valor"?
Una priority_queue es un contenedor ordenado (según el criterio que no define) , pero el orden se manifiesta al ejecutar top(), no antes, porque el contenedor subyacente no está ordenado completamente de acuerdo con la función de comparación; puede sonar contra intuitivo pero es así; según la implementación una parte de la ordenación se hace en push(), pero no necesariamente se completa hasta que se ejecutan los top().
Entonces, después de hacer todos los push(), en el contenedor subyacente se puede determinar la posición del menor y mayor de los valores, pero no hay ninguna garantía de que ese sea el mismo orden en que se presenten cuando ejecutes los top().
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Arii
Val: 16
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Generación de números Aleatorios

Publicado por Arii (6 intervenciones) el 20/01/2021 22:42:10
Buenas tardes a todos, luego de un largo tiempo he decidido retomar este pequeño problema; luego de leer un poco al respecto y ver algunos ejemplos encontré algo que parecer ser el principio de la respuesta a lo que busco; ordenar los números generados en orden creciente. Soy consciente de que estoy pasando por alto pero no estoy segura.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <queue>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std;
 
class prioridad { // Implementamos el functor
    public:
        bool operator()(const int &a, const int &b){
        // Segun tengo entendido aquí va la función de prioridad
        return a>b; // Tengo menos prioridad si soy un entero mayor
        }
};
 
int main(){
    //Declaración de variables
        int i, Numero;
        srand(time(NULL));
 
        // Entonces, una vez declarado lo de arriba no estoy segura como proceder; ya que aquí debajo es donde se pasa al Functor
        priority_queue<int,vector<int>,prioridad> numero_aleatorio;
 
        //Procesamiento
        for(i = 1; i <= 100; i++)
        {
            //Generamos un número aleatorio del 1 al 500
            Numero = 1 + rand() % (501 - 1);
 
            //Guardamos el número generado
            numero_aleatorio.push(Numero);
        }
 
        while (!numero_aleatorio.empty())
        {
            cout << numero_aleatorio.top() << ", ";
            numero_aleatorio.pop();
        }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar