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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa que simula una cola c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa que simula una cola c++  (Leído 3,465 veces)
Exorcista12

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Programa que simula una cola c++
« en: 28 Junio 2014, 03:57 am »

Buenas noches a todos, el otro día tuve que realizar un código como tarea pero resulta que el programa no estaba bien hecho ya que me mandaron a corregir el código, como podría corregirlo para que funcione bien? 

Lo que pide el código:

Escriba un programa que simula una cola. Tamaño 
máximo 100. Llena la cola con al menos 25 
elementos, representados cada uno por un numero 
entero.
a) 
Escriba una función que devuelve el tamaño de la 
cola. Elementos que se encuentran en la cola.
b)
Escriba una función que devuelve la posición del valor
más alto en la cola
c)
Escriba una función que indica cuantos pasos le falta 
al número más alto para salir de la cola

Adjunto el código que yo realice.
Espero contar con su ayuda.
Muchas Gracias

Código:
#include <iostream>

using namespace std;

const int maxcola = 100;

struct MiCola {
    int elementos[maxcola];
     int front;
    int back;
}cola[maxcola];


int CrearCola(MiCola &queue);
bool ColaLlena(MiCola &queue);

bool ColaVacia(MiCola &queue);
int LlenarCola(MiCola &queue ,int entradas);
int VaciarCola(MiCola &queue,int salidas);

int main() {
   MiCola entrada, salida,queue;
    char op;
    int i=0,ele;
    CrearCola(queue);
    cout << "Deseas ingresar datos (S/N)? ";
    cin >> op;
    while ((op == 's' || op == 'S') && (!(ColaLlena(queue)))) {
        cout << "Ingresa elemento: ";
        cin >> ele;
       LlenarCola(queue,ele);
        if (!(ColaLlena(queue))) {
            cout << "Deseas ingresar datos (S/N)? ";
            cin >>op;
        }
    }
while (!(ColaVacia(queue))) {
        LlenarCola(queue, salida);
        cout << "---------Elementos--------" << endl;
        cout <<salida.elementos;
        cout << endl;
    }
    cin.get();
    cin.ignore();
}

int CrearCola(MiCola &queue) {
queue.front = maxcola - 1;
    queue.back = maxcola - 1;
}

bool ColaLlena(MiCola &queue) {
    if (queue.front == (queue.back + 1) % maxcola)
        return 1;
    else
        return 0;

}

int LlenarCola(MiCola &queue, int entradas) {

    queue.back = (queue.back + 1) % maxcola;

    queue.elementos[queue.back] = entradas;
}

bool ColaVacia(MiCola queue) {

    if (queue.front == queue.back) return 1;

    else return 0;
}

int VaciarCola(MiCola &queue, int salidas) {

    queue.front = (queue.front + 1) % maxcola;

    salidas = queue.elementos[queue.front];
}


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Programa que simula una cola c++
« Respuesta #1 en: 28 Junio 2014, 16:47 pm »

1. En C++, por defecto, crea clases, no estructuras. Son iguales salvo por dos detalles:

* En las clases los miembros, por defecto, son privados, lo cual ayuda a mejorar el encapsulamiento si te equivocas; en las estructuras los miembros por defecto son públicos.

* Las clases son un concepto mucho más común y explotado en C++.

2. Para acceder a los miembros de la clase, usa funciones. Ya que estás practicando, al menos haz las cosas como dicta la teoría... aprenderás más.

3. No me queda muy claro el uso de los miembros "front" y "back" salvo que estés intentando implementar una cola circular... pero realmente ahí no estás creando ninguna cola... solo un arreglo de enteros.

4. ColaLlena, ColaVacia, ... deberían ser funciones miembros de la clase, no funciones independientes.

5. Las funciones que no vayan a modificar un parámetro pasado por referencia deberían etiquetar dicho parámetro como const, así evitas modificaciones indeseadas y permites al compilador optimizar un poco más el código.

6. Si vas a usar una cola en el concepto estricto de la palabra no deberías poder consultar los valores intermedios de la misma... una cola sigue una política FIFO, por lo que todo valor que no sea el del primer elemento de la cola es como si para ti no existiese (esa es la gracia de esta práctica, construir una clase que se comporte como una cola y pegarse con las limitaciones propias de las colas).

Para que no sean todo bofetones, te paso un ejemplo de cómo debería ser la declaración de la clase:

Código
  1. class MiCola
  2. {
  3.  public:
  4.    // Constructor por defecto
  5.    MiCola( );
  6.  
  7.    // Constructor copia. Lo puedes usar para hacer copias de la cola
  8.    MiCola( const MiCola& cola );
  9.  
  10.    // Destructor. Si no usas memoria dinamica no es necesario, pero es un buen habito ponerlo
  11.    ~MiCola( );
  12.  
  13.    // Funcion que indica si la cola esta vacia o no. Fijate en que es const, no puede modificar ningun miembro de la clase.
  14.    bool EstaVacia( ) const;
  15.  
  16.    // Funcion que indica el numero de elementos en la cola.
  17.    int NumElementos( ) const;
  18.  
  19.    // Introduce un nuevo elemento en la cola.
  20.    // Devuelve false si la cola esta llena y no puede insertar nuevos elementos, devuelve true en caso contrario.
  21.    bool Push( int valor );
  22.  
  23.    // Extrae un elemento de la cola
  24.    int Pop( );
  25.  
  26.    // Operador de asignacion.
  27.    // El compilador crea uno por defecto, pero es tambien un buen habito acostumbrarse a redefinirlo.
  28.    // Si quieres deshabilitar este operador simplemente muevelo a la parte "private" de la clase (y no hace falta implementarlo)
  29.    const Cola& operator=( const Cola& original );
  30.  
  31.  private:
  32.  
  33.    int elementos[MAXCOLA];
  34.  
  35.    // Te pongo dos indices porque entiendo, segun tu codigo, que tu idea era tener una cola circular.
  36.    int primero;
  37.    int ultimo;
  38. };


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