Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: tuskito en 26 Abril 2016, 13:41 pm



Título: AYUDA!! Práctica universidad c++
Publicado por: tuskito en 26 Abril 2016, 13:41 pm
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.


Título: Re: AYUDA!! Práctica universidad c++
Publicado por: MAFUS en 26 Abril 2016, 14:09 pm
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.


Título: Re: AYUDA!! Práctica universidad c++
Publicado por: tuskito en 26 Abril 2016, 15:49 pm
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());




Título: Re: AYUDA!! Práctica universidad c++
Publicado por: MAFUS en 26 Abril 2016, 16:49 pm
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).


Título: Re: AYUDA!! Práctica universidad c++
Publicado por: tuskito en 26 Abril 2016, 16:52 pm
Vale voy a intentarlo jeje muchisimas gracias por la ayuda!! a ver que sale luego te escribo jeje

Código
  1. #include <stdio.h>
  2. #include <queue>
  3. #include <stdexcept>
  4. #include <stdlib.h>  // srand, rand
  5. #include <iostream>
  6. #include <string>
  7. #include <time.h>
  8.  
  9. using namespace std;
  10.  
  11. const unsigned short int G = 0;
  12. const unsigned short int D = 1;
  13. const unsigned short int M = 2;
  14. const unsigned short int I = 3;
  15.  
  16. struct Vehicle{
  17.   int matricula; // según tu país puede ser numerico o no
  18.   string marca;
  19.   string modelo;
  20.   short unsigned int potencia;
  21.   //enum tipo {G, D, M, I};
  22.   unsigned short int tipo;
  23.   tm hora_llegada;
  24.   tm hora_salida;
  25.   tm fecha;
  26.   enum estado_ITV {BUENO, MALO, REGULAR};
  27. };
  28.  
  29. void atender(Vehicle v);
  30. Vehicle GeneraVehiculo();
  31. void sleep(unsigned int mseconds);
  32.  
  33. int main(){
  34.  
  35.   Vehicle v,vc;
  36.   queue<Vehicle> colas[4];  
  37.  
  38.   while(true)
  39.   {
  40.  
  41.      v = GeneraVehiculo();
  42.      printf("Ingresa vehiculo (tipo %d) de matricula %d\n",v.tipo,v.matricula);        
  43.  
  44.      if (colas[v.tipo].empty())
  45.            atender(v);
  46.      else
  47.      {      
  48.         // atiendo a quien espera en cola
  49.         vc = colas[(int)v.tipo].front();                  
  50.         colas[(int)v.tipo].pop();
  51.         atender(vc);        
  52.         colas[(int)v.tipo].push(v); // encolo al recien llegado
  53.      }      
  54.   }
  55.   return 0;  
  56.  
  57. }
  58.  
  59.  
  60. void sleep(unsigned int mseconds)
  61. {
  62.    clock_t goal = mseconds + clock();
  63.    while (goal > clock());
  64. }  
  65.  


Título: Re: AYUDA!! Práctica universidad c++
Publicado por: HardForo en 26 Abril 2016, 18:09 pm
Y qué le has agregado al codigo que te pasé (http://foro.elhacker.net/programacion_cc/colas_en_c-t451339.0.html) ?  :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

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.



Título: Re: AYUDA!! Práctica universidad c++
Publicado por: 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..


Título: Re: AYUDA!! Práctica universidad c++
Publicado por: HardForo en 26 Abril 2016, 18:47 pm
Bueno, entonces lo mismo:

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



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..



Título: Re: AYUDA!! Práctica universidad c++
Publicado por: tuskito en 27 Abril 2016, 12:39 pm
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! :)


Título: Re: AYUDA!! Práctica universidad c++
Publicado por: MAFUS en 29 Abril 2016, 16:42 pm
Si es muy larga usa la página pastebin.com y cuelgas la dirección aquí.


Título: Re: AYUDA!! Práctica universidad c++
Publicado por: i-node en 2 Mayo 2016, 06:43 am
Desde el desconocimiento, pero.. Si estas programando en C++, por que incluyes headers de C y funciones como printf, cuando tienes cout? Y para rand y srand no te hace falta tampoco el header de C

#include <cstdlib>