karlangadas

pregunta 2 EX2 2015-1

Nov 30th, 2015
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 6.35 KB | None | 0 0
  1. program pregunta2;
  2. type //Platos
  3.      Str30 = String[30];
  4.      TRegIngredientes = record
  5.        codIng:Integer;
  6.        cant:Real;
  7.      end;
  8.      TArrIng = array [1..31] of TRegIngredientes;
  9.  
  10.      TRegPlat = record
  11.        codigo:Integer;
  12.        nomPlato:Str30;
  13.        ingredientes: TArrIng;
  14.      end;
  15.      TArchBinPlat =  File of TRegPlat;
  16.  
  17.      //Platos a Preparar
  18.      Str40=String[40];
  19.      TRegPlatPrep =record
  20.        codigo: Integer;
  21.        cant: Integer;
  22.        dias: Str40;
  23.      end;
  24.      TArchBinPlatPrep =File of TRegPlatPrep;
  25.  
  26.      //Stock de Ingredientes
  27.      str20=String[20];
  28.      TRegIng = record
  29.       codigo: Integer;
  30.       nombre: Str20;
  31.       Punit: Real;
  32.       cant:Real;
  33.      end;
  34.  
  35.      TArchBinIng =File of TRegIng;
  36.  
  37.      TArrStr = Array [1..7] of String;
  38.  
  39. procedure PrepararArchivos(var archBinIng: TarchBinIng;var archBinPlatPrep: TarchBinPlatPrep;
  40.                            var archBinPlatos: TArchBinPlat; var ArchRep: Text);
  41. begin
  42.   assign(archBinIng,'StockDeIngredientes.bin');
  43.   assign(archBinPlatPrep,'PlatosAPreparar.bin');
  44.   assign(archBinPlatos,'Platos.txt');
  45.   assign(ArchRep,'Reporte.txt');
  46. end;
  47.  
  48. function ObtenerDiaABuscar(i: Integer): String;
  49. begin
  50.   case i of
  51.   1: ObtenerDiaABuscar:='Lunes';
  52.   2: ObtenerDiaABuscar:='Martes';
  53.   3: ObtenerDiaABuscar:='Miercoles';
  54.   4: ObtenerDiaABuscar:='Jueves';
  55.   5: ObtenerDiaABuscar:='Viernes';
  56.   6: ObtenerDiaABuscar:='Sabado';
  57.   7: ObtenerDiaABuscar:='Domingo';
  58.   end;
  59. end;
  60.  
  61. function VerificarSiSePreparaEseDia(var RegPlatPrep: TRegPlatPrep;i: Integer): Boolean;
  62. var cadenaDeDias:String;
  63.     condicion: Boolean;
  64.     palabra: String;
  65.     dia: String;
  66. begin
  67.   cadenaDeDias:=RegPlatoPrep.dias;
  68.   condicion: false;
  69.   dia:=ObtenerDiaABuscar(i);
  70.   while (cadenaDeDias<>'')and (not condicion)do begin
  71.     palabra:=SacaPalabras(cadenaDeDias);
  72.     if palabra=dia then condicion:=true;
  73.   end;
  74.   if condicion then VerificarSiSePreparaEseDia:=true;
  75. end;
  76.  
  77. procedure ObtenerNombreEIngredientes(cod: Integer;var archBinPlatos: tarchBinPlatos;
  78.                                      var nomPlato: String;var ingredientes: TArrIng);
  79. var encontrado:Boolean;
  80.     RegPlato:TRegPlat;
  81. begin
  82.   reset(archBinPlatos);
  83.   encontrado:=false;
  84.   while (not eof(archBinPlatos)) and (not encontrado) do begin
  85.     read(archBinPlatos,RegPlato);
  86.     if RegPlato.codigo=cod then encontrado:=true;
  87.   end;
  88.   if encontrado then begin
  89.     nomPlato:=RegPlato.nomPlato;
  90.     ingredientes:=RegPlato.ingredientes;
  91.   end;
  92. end;
  93.  
  94. procedure CalcularPrecioPorPlato(ingredientes: TArrIng;var archBinIng:TarchBinIng;
  95.                                  var precioPlato:Real;var ingFaltantes: TArrIng);
  96. var encontrado: Boolean;
  97.     i,j,nIngEnStock: Integer;
  98.     RegIng:TRegIng;
  99.  
  100. begin
  101.   precioPlato:=0;
  102.   i:=1;
  103.   nIngEnStock:=0;
  104.   j:=0;
  105.   while ingredientes[i].codIng<>0 do begin
  106.     reset(archBinIng);
  107.     encontrado:=false;
  108.     while (not eof(archBinIng)) and (not encontrado) do begin
  109.       read(archBinIng,RegIng);
  110.       if RegIng.codigo=ingredientes[i].codIng then encontrado:=true;
  111.     end;
  112.     if encontrado then begin
  113.       if RegIng.cant>=ingredientes[i].cant then inc(nIngEnStock);
  114.     end else begin
  115.       inc(j);
  116.         ingFaltantes[j]:=ingredientes[i];
  117.     end;
  118.     precioPlato:=precioPlato+RegIng.Punit*ingredientes[i].cant;
  119.     inc(i)
  120.   end;
  121.   if (i-1<>nIngEnStock) then precioPlato:=-1;
  122.  
  123. end;
  124.  
  125. procedure ImprimirIngredientesFaltantes(ingFaltantes: TArrIng;var ArchRep: Text);
  126. var i: Integer;
  127. begin
  128.   write(archRep,'No se puede ofrecer por falta de los siguientes productos ');
  129.   i:=1;
  130.   while ingFaltantes[i].codIng<>0 do begin
  131.     writeln(archRep,'                       ',ingFaltantes[i].codIng);
  132.     inc(i);
  133.   end;
  134.  
  135. end;
  136.  
  137. procedure HacerReportePorPLato(var RegPlatPrep: TRegPlatReg;var archBinIng: TarchBinIng;
  138.                            var archBinPlatos: TArchBinPlat; var ArchRep: Text;j:Integer);
  139. var nomPlato: String;
  140.     ingredientes,ingFaltantes: TArrIng;
  141.     precioPlato,PrecioTotal: Real;
  142.     i: Integer;
  143.  
  144. begin
  145.   for i:=1 to 31 do begin ingredientes[i].cant:=0;ingredientes[i].codIng:=0;end;
  146.   for i:=1 to 31 do begin ingFaltantes[i].cant:=0;ingFaltantes[i].codIng:=0;end;
  147.  
  148.   ObtenerNombreEIngredientes(RegPlatPrep.codigo,archBinPlatos,nomPlato,ingredientes);
  149.   CalcularPrecioPorPlato(ingredientes,archBinIng,precioPlato,ingFaltantes);
  150.   PrecioTotal:=precioPlato*RegPlatPrep.cant;
  151.   write(archRep,j,'.- ',nomPlato:15,RegPlatPrep.cant:5);
  152.   if precioPlato>0 then writeln(archRep,precioPlato:15:precioTotal:15) else
  153.     ImprimirIngredientesFaltantes(ingFaltantes,archRep);
  154. end;
  155.  
  156. procedure HacerReportePorDia(var archBinIng: TarchBinIng;var archBinPlatPrep: TarchBinPlatPrep;
  157.                            var archBinPlatos: TArchBinPlat; var ArchRep: Text;i: Integer);
  158. var PlatPrep:TRegPlatPrep;
  159.     condicion: Boolean;
  160.     j:Integer;
  161. begin
  162.   reset(archBinPlatPrep);
  163.   j:=0;
  164.   while not eof(archBinPlatPrep) do begin
  165.     read(archPlatPrep,RegPlatPrep);
  166.     condicion:=VerificarSiSePreparaEseDia(RegPlatPrep,condicion,i);
  167.     if condicion then begin inc(j); HacerReportePorPLato(RegPlatPrep,archBinIng,archBinPlatos,ArchRep,j);
  168.   end;
  169. end;
  170.  
  171. procedure HacerReporte(var archBinIng: TarchBinIng;var archBinPlatPrep: TarchBinPlatPrep;
  172.                            var archBinPlatos: TArchBinPlat; var ArchRep: Text);
  173. var dia: TArrStr=('LUNES','MARTES','MIERCOLES','JUEVES','VIERNES','SABADO','DOMINGO');
  174.     i,j:Integer;
  175.     IngSinStock:TArrIng;
  176. begin
  177.   rewrite(archRep);
  178.   reset(archBinIng);
  179.   reset(archBinPlatos);
  180.   writeln(archRep,'            RELACION DE COSTOS Y DATOS DE STOCK DE LOS PLATOS OFRECIDOS POR DÍA');
  181.   for i:=1 to 7 do begin
  182.     for i:=1 to 50 do write(archRep,'=');writeln(archRep);
  183.     writeln(archRep,dia[i],':');
  184.     writeln(archRep,'        Plato        Cantidad a elaborar    Costo por Plato    Cantidad');
  185.     for i:=1 to 50 do write(archRep,'-');writeln(archRep);
  186.     HacerReportePorDia(archBinIng,archBinPlatPrep,archBinPlatos,ArchRep,i);
  187.   end;
  188.  
  189. end
  190.  
  191. var archBinIng: TarchBinIng;
  192.     archBinPlatPrep: TarchBinPlatPrep;
  193.     archBinPlatos: TArchBinPlat;
  194.     ArchRep: Text;
  195.  
  196. begin
  197.  PrepararArchivos(archBinIng,archBinPlatPrep,archBinPlatos,ArchRep);
  198.  HacerReporte(archBinIng,archBinPlatPrep,archBinPlatos,ArchRep);
  199.  close(archBinIng);
  200.  close(archBinPlatPrep);
  201.  close(archBinPlatos);
  202.  close(ArchRep);
  203. end.
Advertisement
Add Comment
Please, Sign In to add comment