Advertisement
Guest User

TP2 Algoritmos

a guest
Nov 25th, 2015
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Trabajo Practico NΒΊ2 Algoritmos y Estructura de datos
  3.  
  4. Integrantes:
  5.              - Centeno, Nicolas
  6.              - Gonzalez Groba, Matias Alejandro
  7.              - Porracin Dieguez, Marco
  8.  
  9.  
  10. */
  11.  
  12. #include<iostream>
  13. #include<string.h>
  14. #include<conio.h>
  15. #include<stdio.h>
  16. using namespace std;
  17.  
  18.  
  19. //Estructuras
  20. struct AC{  //estructura para el archivo de camiones
  21.        int NroCamion;
  22.        char Patente[7];
  23.        char Marca[20];
  24.        float CCarga;   //capacidad de carga
  25.        float Kilometraje;
  26.        float CViajes;  //Cantidad de viajes
  27.        };
  28.        
  29. struct AO{   //estructura para el archivo de operaciones
  30.        int NroDespacho;
  31.        long int Fecha;  //AAMMDD
  32.        int NroCamion;
  33.        int NroDestino;
  34.        float KgTransportados; //kilogramos transportados
  35.        float Kilometraje;  //kilometros recorridos
  36.        };
  37.        
  38. struct Detalles{    //estructura para armar la cola de la segunda planilla
  39.        int NroCamion;
  40.        long int fecha;  //AAMMDD
  41.        int Destino;
  42.        int NroDespacho;  
  43.        float Carga;
  44.        float PorcentajeOcupado; //porcentaje ocupado
  45.        };
  46.        
  47.         struct TNodo{           //estructura puntero a detalles
  48.                Detalles info;
  49.                struct TNodo *sgte;
  50.         };
  51.        
  52.         struct Camiones{          //estructura que funciona como separador de la segunda planilla
  53.                float CapacidadMax;
  54.                char Patente[7];
  55.                int CViajes;
  56.                float Kilometraje;
  57.         };
  58.        
  59. //variables predefinidas
  60. typedef TNodo Cola;      
  61. typedef Detalles Dt;
  62. typedef Camiones Cm[20];
  63.  
  64. //variables globales
  65.        
  66. //prototipos
  67. void cargaCamiones(FILE *,AC,Cm);
  68. void CargaOperaciones(FILE *,AO,Cm,Cola *[20],Cola *[20],float[10]);
  69. void enqueue(Cola *&, Cola *&,Dt);
  70. void dequeue(Cola *&, Cola *&,Dt &);
  71. float ObtPorcentaje(float,float);
  72. long long int ObtOrden(int,long int);
  73. void mostrarPl1(float [10]);
  74. void mostrarPl2(Cola *[20],Cola *[20],FILE *,Cm);
  75. void actualizarRegistro(FILE *,AC,Cm);
  76.  
  77. //principal
  78.  
  79. int main()
  80. {
  81.     //variables locales
  82.     AC cam;
  83.     AO op;
  84.     Cm Camiones;
  85.     FILE *FO;
  86.     FILE *FC;
  87.     float KgsxDestino[10];
  88.     for(int i=0;i<10;i++) KgsxDestino[i]=0;
  89.     Cola *ViajeC[20];
  90.     Cola *ViajeF[20];
  91.     FO = fopen("Operaciones.dat","rb");
  92.     FC = fopen("Camiones.dat","rb");
  93.     if((!FO) || (!FC))
  94.     {
  95.              cout<<"al menos uno de los archivos no existe";
  96.              getch();
  97.              exit(1);
  98.     }
  99.     cargaCamiones(FC,cam,Camiones);
  100.     fclose(FC);
  101.     for(int i=0;i<20;i++)
  102.     {
  103.             ViajeC[i]=NULL;
  104.             ViajeF[i]=NULL;
  105.     }
  106.     CargaOperaciones(FO,op,Camiones,ViajeC,ViajeF,KgsxDestino);
  107.     fclose(FO);  
  108.     mostrarPl1(KgsxDestino);  //funcion para mostrar planillas
  109.     mostrarPl2(ViajeC,ViajeF,FC,Camiones);  
  110.     actualizarRegistro(FC,cam,Camiones);  //funcion para actualizar AC
  111.     getch();
  112. }
  113.  
  114.  
  115. //FUNCIONES
  116.  
  117. void CargaOperaciones(FILE *FO,AO op,Cm Camiones,Cola *ViajeC[20],Cola *ViajeF[20], float KgsxDestino[10])
  118. {
  119.     Dt Aux;
  120.     fread(&op,sizeof(struct AO),1,FO);
  121.      while(!feof(FO))
  122.     {
  123.        Aux.NroCamion=op.NroCamion;
  124.        Aux.fecha = op.Fecha;
  125.        Aux.Destino = op.NroDestino;
  126.        Aux.NroDespacho = op.NroDespacho;
  127.        Aux.Carga = op.KgTransportados;
  128.        Aux.PorcentajeOcupado = ObtPorcentaje(Camiones[op.NroCamion-1].CapacidadMax,op.KgTransportados);
  129.        enqueue(ViajeC[op.NroCamion-1],ViajeF[op.NroCamion-1],Aux);
  130.        Camiones[op.NroCamion-1].CViajes++;
  131.        Camiones[op.NroCamion-1].Kilometraje+=op.Kilometraje;
  132.        KgsxDestino[op.NroDestino-1] += op.KgTransportados;
  133.        fread(&op,sizeof(struct AO),1,FO);                        
  134.     }
  135. }
  136.  
  137. //Carga al vector de arrays Camiones
  138. void cargaCamiones(FILE *FC, AC cam,Cm Camiones)
  139. {
  140.     FC = fopen("Camiones.dat","rb");
  141.      fread(&cam,sizeof(struct AC),1,FC);
  142.      while(!feof(FC))
  143.      {
  144.                      Camiones[cam.NroCamion-1].CapacidadMax = cam.CCarga;
  145.                      strcpy(Camiones[cam.NroCamion-1].Patente,cam.Patente);
  146.                      fread(&cam,sizeof(struct AC),1,FC);
  147.      }
  148.      fclose(FC);
  149. }                    
  150.  
  151.  
  152. //Muestra planilla 1
  153. void mostrarPl1(float KgsxDestino[20])
  154. {
  155.       cout<<"Kilogramos por destino: \n\n";
  156.     for(int k=0;k<10;k++)   cout<<k+1<<"\t"<<KgsxDestino[k]<<"\n";///MOSTRAR KgsxDestino
  157.    
  158. }
  159.  
  160. void mostrarPl2(Cola *ViajeC[20],Cola *ViajeF[20], FILE *FC,Cm Camiones)
  161. {
  162.      Dt aux;
  163.      cout<<"\n\nViajes realizados en el mes: \n";
  164.      for(int k=0;k<20;k++)
  165.      {
  166.             cout<<"\nCamion "<<k+1<<"    Capacidad en Kgrs total:"<<Camiones[k].CapacidadMax<<"   Patente:"<<Camiones[k].Patente<<"\n"<<"\t\t\tViajes\n";
  167.             cout<<"Fecha\tDestino\tDespacho   Kgrs\t\tPorcentaje de ocupacion\n";
  168.              while(ViajeC[k]!=NULL)
  169.              {
  170.                                 dequeue(ViajeC[k],ViajeF[k],aux);
  171.                                 cout<<aux.fecha<<"\t";
  172.                                 cout<<aux.Destino<<"\t";
  173.                                 cout<<aux.NroDespacho<<"\t   ";
  174.                                 cout<<aux.Carga<<"\t\t";
  175.                                 cout<<aux.PorcentajeOcupado<<"\n";
  176.              }    
  177.      }
  178.  }
  179.  
  180. void actualizarRegistro(FILE *FC,AC cam,Cm Camiones)  //Actualiza el registro AC
  181. {
  182.      FC = fopen("Camiones.dat","rb");
  183.      fread(&cam,sizeof(struct AC),1,FC);
  184.      while(FC!=NULL)
  185.      {
  186.                    cam.CViajes+=Camiones[cam.NroCamion-1].CViajes;
  187.                    cam.Kilometraje+=Camiones[cam.NroCamion-1].Kilometraje;
  188.                    fread(&cam,sizeof(struct AC),1,FC);
  189.      }
  190.      fclose(FC);
  191.  }
  192.      
  193.  
  194. //obtener porcentaje
  195. float ObtPorcentaje(float maximo,float cantidad)
  196. {
  197.                  return (cantidad*100)/maximo;
  198. }
  199.  
  200.  
  201. //Insertar datos en la cola
  202. void enqueue(Cola *&ColaC, Cola *&ColaF, Dt valor)
  203. {
  204.      Cola *P;
  205.      P=new Cola();
  206.      P->info=valor;
  207.      P->sgte=NULL;
  208.      if(ColaC==NULL)     ColaC=P;
  209.      else ColaF->sgte=P;
  210.      ColaF=P;
  211. }
  212.  
  213.  
  214. //Obtener y borrar los datos en la cola
  215. void dequeue(Cola *&ColaC, Cola *&ColaF, Dt &valor)
  216. {
  217.      Cola *P;
  218.      P=ColaC;
  219.      valor = P->info;
  220.      ColaC=P->sgte;
  221.      if(ColaC==NULL) ColaF=NULL;
  222.      delete(P);
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement