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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con un intrucciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con un intrucciones  (Leído 1,120 veces)
chasterboy

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda con un intrucciones
« en: 15 Mayo 2019, 17:11 pm »

hola estoy asiento un programa pero no entiendo bien lo que me están tratando de decir estas son las instrucciones
1. Defina una estructura de datos que contenga el identificador de un proceso cualquiera,
que debe ser un número entero cualquiera y la prioridad del mismo, entero de 1 a 10
donde 1 representa la prioridad más alta y 10 la más baja.
2. Defina una cola priorizada implementada como un arreglo de las estructuras definidas
en el punto anterior de un tamaño máximo razonable (entre 10 y 20).
3. Implemente la función insert que introduzca en la cola una estructura de proceso de
acuerdo a su prioridad.
4. Implemente la función removeFirst que saque de la cola la primera estructura que es la
de más alta prioridad.
5. Implemente la función display para desplegar el contenido de la cola. Esta función no es
esencial para la ejecución del programa pero será muy útil durante el desarrollo.
6. Implemente la función create que inserte en la cola un número cualquiera de
estructuras de procesos para poder contar con una cola de procesos no vacía.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #include <stdbool.h>
  5. #include <stdlib.h>
  6. #include <windows.h>
  7. #include <time.h>
  8. // Definición de funciones
  9. void insert(int item); // insert en base a prioridad
  10. int removeFirst(); // remove el primer elemento de la cola
  11. int removePrio(int prio); // remove el primer elemento de la cola de cierta prioridad
  12. void display(); // desplegar la cola
  13. int peek(); // peek el primer elemento de la cola
  14. void create(); // crea una cola priorizada con algunos elementos.
  15.  
  16. // Definición de variables globales
  17. #define max 20 // capacidad de la cola
  18. int queArray[max]; // cola priorizada implementada como arreglo
  19. int front; // inicio de la cola
  20. int rear; // fin de la cola
  21.  
  22. struct proceso{
  23.    int datos;
  24.    int prioridad;
  25.  
  26.  
  27. }proceso;
  28. int main() {
  29.    setlocale(LC_ALL, ""); // para caracteres del Español
  30.       create();
  31.  int prioridad[] = {1,2,3,4,5,6,7,8,9,10};
  32.    for(int i=0;i<10;i++){
  33.        insert(prioridad[i]);
  34.  
  35.    }
  36.    create();
  37.    removeFirst();
  38.  
  39.            display();
  40.  
  41.  
  42.    return 0;
  43. }
  44. // remover el elemento al inicio de la cola
  45. int removeFirst() {
  46.    if(front == -1 & rear == 0) {
  47.        printf("Cola vacía, no se puede remover\n");
  48.        return -1;
  49.    } else {
  50.        return queArray[front--];
  51.    }
  52.  
  53. }
  54. // remove el primer elemento de la cola de cierta prioridad
  55.  
  56. // insert en base a prioridad
  57. void insert(int item) {
  58.    if(front == max-1) {
  59.        printf("Cola llena, no se puede insertar\n");
  60.        return;
  61.    }
  62.    if(front == -1) {
  63.        queArray[++front] = item;
  64.    } else {
  65.        if(item <= queArray[front]) {
  66.            queArray[++front] = item;
  67.        } else {
  68.            int j, k;
  69.            for(j = front; j >= rear; j--) {
  70.                if(item >= queArray[j]) {
  71.                    queArray[j + 1] = queArray[j];
  72.                    k = j;
  73.                }
  74.            }
  75.            queArray[k] = item;
  76.            front++;
  77.        }
  78.    }
  79. }
  80.  
  81. // peek el primer elemento de la cola
  82.  
  83. /* Despliega la cola */
  84. void display() {
  85.    if(front == -1 & rear == 0) {
  86.        printf("Cola vacía\n");
  87.    } else {
  88.        printf("[");
  89.        for(int i = front; i > rear; i--) {
  90.            printf("%d, ", queArray[i]);
  91.        }
  92.        printf("%d]\n", queArray[rear]);
  93.    }
  94. }
  95.  
  96. void create() {
  97.    front = -1;
  98.    rear = 0;
  99.    insert(1);
  100. }


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Ayuda con un intrucciones
« Respuesta #1 en: 15 Mayo 2019, 20:30 pm »

Lo que te piden es que crees tu propia estructura de cola con prioridad (priority_queue). Puedes ver cómo funciona aquí: http://www.cplusplus.com/reference/queue/priority_queue/
En el fondo es esto. Es una cola en la que los elementos se almacenan siguiendo un orden de prioridad. Es una cola en la que las inserciones se hacen según la prioridad que tienen asignadas y las expulsiones se hacen por uno de los extremos de la cola.

Puedes entenderlo como un vector/array en el que los elementos están ordenados según su prioridad. array[0] = {elemento de menor prioridad} y array[size-1] = {elemento de mayor prioridad}. Te pongo un ejemplo:
Código:
Nomenglatura usada: objeto(prioridad)
Segun tu caso: numero menor = mas prioridad
priority_queue = { }
insert(A(5)) -> priority_queue = { A(5) }
insert(B(8)) -> priority_queue = { B(8), A(5) }
insert(C(1)) -> priority_queue = { B(8), A(5), C(1) }
insert(D(4)) -> priority_queue = { B(8), A(5), D(4), C(1) }
sacarTop() -> priority_queue = { A(8), B(5), D(4) }

Entonces lo que te piden es crear usando un array, una estructura que funcione así.
Las operaciones típicas que debe soportar son:
  • insert(cola, elemento) -> inserta el elemento en la posición correcta
  • removeFirst(cola) -> elimina el objeto con mas prioridad
  • Te recomiendo hacer un top() -> muestra el elemento con mas prioridad. Ya que es recomendable que una función sólo lo muestre y el otro sólo lo elimine (removeFirst). Creo que eso es lo que vas a implementar tú en la función <peek()>.
Y las funciones adicionales que te piden que son:
  • display(cola) -> muestra toda la cola.
  • create(cola) -> inicializa la cola con valores. Yo lo haría de forma random. O sea <create(cola, num_elementos)> y que meta <num_elementos> elementos en la cola creados de forma aleatoria.

Ahora vamos al programa en si.
En lugar de crearlo de forma global todo, te recomiendo hacerlo dentro del <main> tanto el array como la instancia <proceso> del <struct> <proceso> (mejor cambia el nombre: proceso_x (instancia) Proceso(struct) para evitar confusión).

Te pongo un ejemplo de uso de cómo lo haría yo para que veas a lo que me refiero. Te pondré las partes necesarias de las funciones y del <main> pero las implementaciones de las funciones te las dejaré a ti.
Código
  1. struct Proceso{
  2.    int prioridad; // define la prioridad de un proceso
  3.    int datos; // define los datos de ese proceso. Esto no tiene importancia
  4. };
  5.  
  6. struct ColaPrioridad{
  7.    Proceso cola_interna[SIZE]; // un array de Procesos que es nuestra cola con prioridad
  8.    int size; // determina la cantidad de elementos que tiene la cola_interna.
  9. };
  10.  
  11. // inserta <num_elementos> elementos en la cola (mi_cola.size = num_elementos)
  12. // puede ser void o ser bool y retornar true si num_elementos <= SIZE y se han guardado bien o false si num_elementos > SIZE
  13. void/bool create(ColaPrioridad mi_cola, int num_elementos);
  14.  
  15. // insertar un elemento en la cola en su posicion correspondiente segun su prioridad
  16. // puede ser void o bool y retornar true si no se ha superado el limite de elementos (mi_cola.size < SIZE) o false en caso contrario
  17. void/bool insert(ColaPrioridad mi_cola, Proceso nuevo_proceso);
  18.  
  19. // elimina el elemento con mayor prioridad
  20. // puede ser void o bool y retornar true si la cola no esta vacia y se ha eliminado bien o false en caso contrario
  21. void/bool removeFirst(ColaPrioridad);
  22.  
  23. // retorna el elemento de mayor prioridad de la cola sin eliminarlo de esta
  24. Proceso top(ColaPrioridad);
  25.  
  26. // muestra la cola completa
  27. void display(ColaPrioridad);
  28.  
  29. int main(){
  30.    ColaPrioridad mi_cola;
  31.    create(mi_cola, 5); // insertamos 5 procesos aleatorios en la cola
  32.    display(mi_cola); // vemos el contenido
  33.    Proceso proceso_nuevo1, proceso_nuevo2; // creamos dos procesos nuevos
  34.    // damos valores a prioridad y datos de proceso_nuevo1 y proceso_nuevo2
  35.  
  36.    // insertamos los nuevos procesos despues de haberles dado valores en la cola
  37.    insert(mi_cola, proceso_nuevo1);
  38.    insert(mi_cola, proceso_nuevo2);
  39.    display(mi_cola); // vemos el contenido
  40.  
  41.    removeFirst(mi_cola); // eliminamos el Proceso con mayor prioridad (es decir, con el atributo prioridad menor)
  42.    display(mi_cola); // vemos el contenido
  43. }

En un principio puede parecer que tienes que introducir los elementos en el array de más prioridad a menos para eliminar el "primer elemento" que es el de mayor prioridad. Sin embargo, si los ordenas de menos a más prioridad, el elemento con más prioridad es <cola_interna[size-1]> y cuando tengas que eliminar el elemento de mayor prioridad (la función <removePrio()> sobra, solo se usa <removeFirst()>) solo tienes que hacer <size-->. Así ahora el último elemento ya es el anterior y cuando introduzcas un elemento nuevo sobrescribes el que se supone que habías borrado con desplazamientos.

Si tienes alguna duda para implementar alguna de las funciones o sobre algo de lo que te he comentado, recuerda, de ser necesario, poner tus avances para poder ayudarte mejor. Suerte :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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