AYUDA!! Práctica universidad c++

Iniciado por tuskito, 26 Abril 2016, 13:41 PM

0 Miembros y 1 Visitante están viendo este tema.

tuskito

Hola, hace poco que me han enseñado el tema de las colas y ahora tengo que hacer una practica. Se hacer las funciones del tipo: "encolar","imprimir"...

Hasta ahora he hecho colas simples en las clases prácticas, pero esta última no se ni por donde empezar. El enunciado empieza así:

En dicha ITV existirán 4 colas para diferentes tipos de vehículos:
- Gasolina (vehículos de gasolina)
- Diesel (vehículos diesel no industriales)
- Motos
- Industriales

Cada segundo de ejecución, que representará 10 minutos de tiempo real,
llegará un vehículo a la ITV. Dicho vehículo tendrá una serie de datos que
habrá que guardar: matrícula, marca, modelo, potencia, tipo (G,D,M,I),
hora_llegada, hora_salida, fecha, estado_ITV... Los datos se podrán
generar aleatoriamente.

¿Como empiezo? Gracias de antemano. pd: el profesor no deja implementar librerías.

MAFUS

#1
No deja implementar librerías de colas,  porqué tendrás que hacerlas tú, pero las otras seguro que sí.
Crea un struct, o clase, que pueda guardar los datos que han dicho y prepárala para que sea un miembro de una cola.
Crea 4 punteros diferentes para soportar sendas colas. Si ya has trabajado con ellas no será difícil manejarlas.
En main genera un número aleatorio entre el 0 y el 3 a.i. y según lo que salga generas un vehículo u otro  y lo encolas. Al mismo tiempo liberas el último elemento de una de las colas, por ejemplo el vehículo que más tiempo lleva esperando.
Mediante funciones time haces un segundo de espera y repites todo el proceso.

tuskito

gracias! hasta ahora tengo el siguiente codigo : (pero implementando librerías).

#include <stdio.h>
#include <queue>
#include <stdexcept>
#include <stdlib.h>  // srand, rand
#include <iostream>
#include <string>
#include <time.h>

using namespace std;

const unsigned short int G = 0;
const unsigned short int D = 1;
const unsigned short int M = 2;
const unsigned short int I = 3;

struct Vehicle{
   int matricula; // según tu país puede ser numerico o no
   string marca;
   string modelo;
   short unsigned int potencia;
   //enum tipo {G, D, M, I};
   unsigned short int tipo;
   tm hora_llegada;
   tm hora_salida;
   tm fecha;
   enum estado_ITV {BUENO, MALO, REGULAR};
};

void atender(Vehicle v);
Vehicle GeneraVehiculo();
void sleep(unsigned int mseconds);

int main(){

   Vehicle v,vc;
   queue<Vehicle> colas[4];   

   while(true)
   {

      v = GeneraVehiculo();
      printf("Ingresa vehiculo (tipo %d) de matricula %d\n",v.tipo,v.matricula);         

      if (colas[v.tipo].empty())
            atender(v);
      else
      {      
         // atiendo a quien espera en cola
         vc = colas[(int)v.tipo].front();                  
         colas[(int)v.tipo].pop();
         atender(vc);        
         colas[(int)v.tipo].push(v); // encolo al recien llegado
      }      
   }
   return 0;   

}


void sleep(unsigned int mseconds)
{
    clock_t goal = mseconds + clock();
    while (goal > clock());



MAFUS

Estupendo.
Ahora tienes que resolver dos cosas:
1. Como recibes un coche y lo despachas en 10 minutos, al siguiente turno, no hay nunca una cola llena. Puedes hacer que un vehículo tarde, almenos 20 minutos (2 turnos en ser despachado) o, mejor aun, que cada tipo de vehículos tenga un tiempo diferente.

2. Prescindir de queue y hacerlo todo a mano como has aprendido.

Una cosa más. Cuando insertes código selecciónalo, ve al desplegable GeSHi y selecciona el lenguaje con que lo has escrito. Debería rodearse entre dos etiquetas BBS [code=cpp] y [/code] (también puedes escribirlas a mano).

tuskito

Vale voy a intentarlo jeje muchisimas gracias por la ayuda!! a ver que sale luego te escribo jeje

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <queue>
#include <stdexcept>
#include <stdlib.h>  // srand, rand
#include <iostream>
#include <string>
#include <time.h>

using namespace std;

const unsigned short int G = 0;
const unsigned short int D = 1;
const unsigned short int M = 2;
const unsigned short int I = 3;

struct Vehicle{
   int matricula; // según tu país puede ser numerico o no
   string marca;
   string modelo;
   short unsigned int potencia;
   //enum tipo {G, D, M, I};
   unsigned short int tipo;
   tm hora_llegada;
   tm hora_salida;
   tm fecha;
   enum estado_ITV {BUENO, MALO, REGULAR};
};

void atender(Vehicle v);
Vehicle GeneraVehiculo();
void sleep(unsigned int mseconds);

int main(){

   Vehicle v,vc;
   queue<Vehicle> colas[4];   

   while(true)
   {

      v = GeneraVehiculo();
      printf("Ingresa vehiculo (tipo %d) de matricula %d\n",v.tipo,v.matricula);         

      if (colas[v.tipo].empty())
            atender(v);
      else
      {     
         // atiendo a quien espera en cola
         vc = colas[(int)v.tipo].front();                 
         colas[(int)v.tipo].pop();
         atender(vc);       
         colas[(int)v.tipo].push(v); // encolo al recien llegado
      }     
   }
   return 0;   

}


void sleep(unsigned int mseconds)
{
    clock_t goal = mseconds + clock();
    while (goal > clock());


HardForo

#5
Y qué le has agregado al codigo que te pasé ?  :rolleyes:

Te veo pidiendo mas ayuda, creí fue suficiente y te pedí que al menos implementaras las funciones que no te pasé y pasaron ya 5 dias y.......  :o

Cita de: boctulus en 21 Abril 2016, 14:06 PM
Te dejo la tarea de implementar GeneraVehiculo() y atender()

Citar
gracias! hasta ahora tengo el siguiente codigo : (pero implementando librerías).

Yo no reporto temas..... pero estas duplicandolos.

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

tuskito

hola!, no habia visto que tenías un tema de lo mismo abierto... no soy el mismo... el codigo vi algo parecido pero no en este foro..y ahora veo que es el mismo... lo habran subido en otro sitio lo vi en otro foro... estoy probando hacer lo que me han dicho en las respuestas de este... sorry no sabia que estaba..

HardForo

Bueno, entonces lo mismo:

implementa las funciones que indiqué faltan....... luego puedes ver lo que dice @MAFUS  ;D



Cita de: tuskito en 26 Abril 2016, 18:36 PM
hola!, no habia visto que tenías un tema de lo mismo abierto... no soy el mismo... el codigo vi algo parecido pero no en este foro..y ahora veo que es el mismo... lo habran subido en otro sitio lo vi en otro foro... estoy probando hacer lo que me han dicho en las respuestas de este... sorry no sabia que estaba..

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

tuskito

#8
Gracias por toda la ayuda! voy a ello cuando lo tenga lo paso y me decís!




Hola! tengo casi terminada la práctica podría mandarosla por email para que le echarais un ojo? y ayudarme en lo que me falta ?

Un saludo y gracias de antemano! :)

MAFUS

Si es muy larga usa la página pastebin.com y cuelgas la dirección aquí.