Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program pregunta2;
- type //Platos
- Str30 = String[30];
- TRegIngredientes = record
- codIng:Integer;
- cant:Real;
- end;
- TArrIng = array [1..31] of TRegIngredientes;
- TRegPlat = record
- codigo:Integer;
- nomPlato:Str30;
- ingredientes: TArrIng;
- end;
- TArchBinPlat = File of TRegPlat;
- //Platos a Preparar
- Str40=String[40];
- TRegPlatPrep =record
- codigo: Integer;
- cant: Integer;
- dias: Str40;
- end;
- TArchBinPlatPrep =File of TRegPlatPrep;
- //Stock de Ingredientes
- str20=String[20];
- TRegIng = record
- codigo: Integer;
- nombre: Str20;
- Punit: Real;
- cant:Real;
- end;
- TArchBinIng =File of TRegIng;
- TArrStr = Array [1..7] of String;
- procedure PrepararArchivos(var archBinIng: TarchBinIng;var archBinPlatPrep: TarchBinPlatPrep;
- var archBinPlatos: TArchBinPlat; var ArchRep: Text);
- begin
- assign(archBinIng,'StockDeIngredientes.bin');
- assign(archBinPlatPrep,'PlatosAPreparar.bin');
- assign(archBinPlatos,'Platos.txt');
- assign(ArchRep,'Reporte.txt');
- end;
- function ObtenerDiaABuscar(i: Integer): String;
- begin
- case i of
- 1: ObtenerDiaABuscar:='Lunes';
- 2: ObtenerDiaABuscar:='Martes';
- 3: ObtenerDiaABuscar:='Miercoles';
- 4: ObtenerDiaABuscar:='Jueves';
- 5: ObtenerDiaABuscar:='Viernes';
- 6: ObtenerDiaABuscar:='Sabado';
- 7: ObtenerDiaABuscar:='Domingo';
- end;
- end;
- function VerificarSiSePreparaEseDia(var RegPlatPrep: TRegPlatPrep;i: Integer): Boolean;
- var cadenaDeDias:String;
- condicion: Boolean;
- palabra: String;
- dia: String;
- begin
- cadenaDeDias:=RegPlatoPrep.dias;
- condicion: false;
- dia:=ObtenerDiaABuscar(i);
- while (cadenaDeDias<>'')and (not condicion)do begin
- palabra:=SacaPalabras(cadenaDeDias);
- if palabra=dia then condicion:=true;
- end;
- if condicion then VerificarSiSePreparaEseDia:=true;
- end;
- procedure ObtenerNombreEIngredientes(cod: Integer;var archBinPlatos: tarchBinPlatos;
- var nomPlato: String;var ingredientes: TArrIng);
- var encontrado:Boolean;
- RegPlato:TRegPlat;
- begin
- reset(archBinPlatos);
- encontrado:=false;
- while (not eof(archBinPlatos)) and (not encontrado) do begin
- read(archBinPlatos,RegPlato);
- if RegPlato.codigo=cod then encontrado:=true;
- end;
- if encontrado then begin
- nomPlato:=RegPlato.nomPlato;
- ingredientes:=RegPlato.ingredientes;
- end;
- end;
- procedure CalcularPrecioPorPlato(ingredientes: TArrIng;var archBinIng:TarchBinIng;
- var precioPlato:Real;var ingFaltantes: TArrIng);
- var encontrado: Boolean;
- i,j,nIngEnStock: Integer;
- RegIng:TRegIng;
- begin
- precioPlato:=0;
- i:=1;
- nIngEnStock:=0;
- j:=0;
- while ingredientes[i].codIng<>0 do begin
- reset(archBinIng);
- encontrado:=false;
- while (not eof(archBinIng)) and (not encontrado) do begin
- read(archBinIng,RegIng);
- if RegIng.codigo=ingredientes[i].codIng then encontrado:=true;
- end;
- if encontrado then begin
- if RegIng.cant>=ingredientes[i].cant then inc(nIngEnStock);
- end else begin
- inc(j);
- ingFaltantes[j]:=ingredientes[i];
- end;
- precioPlato:=precioPlato+RegIng.Punit*ingredientes[i].cant;
- inc(i)
- end;
- if (i-1<>nIngEnStock) then precioPlato:=-1;
- end;
- procedure ImprimirIngredientesFaltantes(ingFaltantes: TArrIng;var ArchRep: Text);
- var i: Integer;
- begin
- write(archRep,'No se puede ofrecer por falta de los siguientes productos ');
- i:=1;
- while ingFaltantes[i].codIng<>0 do begin
- writeln(archRep,' ',ingFaltantes[i].codIng);
- inc(i);
- end;
- end;
- procedure HacerReportePorPLato(var RegPlatPrep: TRegPlatReg;var archBinIng: TarchBinIng;
- var archBinPlatos: TArchBinPlat; var ArchRep: Text;j:Integer);
- var nomPlato: String;
- ingredientes,ingFaltantes: TArrIng;
- precioPlato,PrecioTotal: Real;
- i: Integer;
- begin
- for i:=1 to 31 do begin ingredientes[i].cant:=0;ingredientes[i].codIng:=0;end;
- for i:=1 to 31 do begin ingFaltantes[i].cant:=0;ingFaltantes[i].codIng:=0;end;
- ObtenerNombreEIngredientes(RegPlatPrep.codigo,archBinPlatos,nomPlato,ingredientes);
- CalcularPrecioPorPlato(ingredientes,archBinIng,precioPlato,ingFaltantes);
- PrecioTotal:=precioPlato*RegPlatPrep.cant;
- write(archRep,j,'.- ',nomPlato:15,RegPlatPrep.cant:5);
- if precioPlato>0 then writeln(archRep,precioPlato:15:precioTotal:15) else
- ImprimirIngredientesFaltantes(ingFaltantes,archRep);
- end;
- procedure HacerReportePorDia(var archBinIng: TarchBinIng;var archBinPlatPrep: TarchBinPlatPrep;
- var archBinPlatos: TArchBinPlat; var ArchRep: Text;i: Integer);
- var PlatPrep:TRegPlatPrep;
- condicion: Boolean;
- j:Integer;
- begin
- reset(archBinPlatPrep);
- j:=0;
- while not eof(archBinPlatPrep) do begin
- read(archPlatPrep,RegPlatPrep);
- condicion:=VerificarSiSePreparaEseDia(RegPlatPrep,condicion,i);
- if condicion then begin inc(j); HacerReportePorPLato(RegPlatPrep,archBinIng,archBinPlatos,ArchRep,j);
- end;
- end;
- procedure HacerReporte(var archBinIng: TarchBinIng;var archBinPlatPrep: TarchBinPlatPrep;
- var archBinPlatos: TArchBinPlat; var ArchRep: Text);
- var dia: TArrStr=('LUNES','MARTES','MIERCOLES','JUEVES','VIERNES','SABADO','DOMINGO');
- i,j:Integer;
- IngSinStock:TArrIng;
- begin
- rewrite(archRep);
- reset(archBinIng);
- reset(archBinPlatos);
- writeln(archRep,' RELACION DE COSTOS Y DATOS DE STOCK DE LOS PLATOS OFRECIDOS POR DÍA');
- for i:=1 to 7 do begin
- for i:=1 to 50 do write(archRep,'=');writeln(archRep);
- writeln(archRep,dia[i],':');
- writeln(archRep,' Plato Cantidad a elaborar Costo por Plato Cantidad');
- for i:=1 to 50 do write(archRep,'-');writeln(archRep);
- HacerReportePorDia(archBinIng,archBinPlatPrep,archBinPlatos,ArchRep,i);
- end;
- end
- var archBinIng: TarchBinIng;
- archBinPlatPrep: TarchBinPlatPrep;
- archBinPlatos: TArchBinPlat;
- ArchRep: Text;
- begin
- PrepararArchivos(archBinIng,archBinPlatPrep,archBinPlatos,ArchRep);
- HacerReporte(archBinIng,archBinPlatPrep,archBinPlatos,ArchRep);
- close(archBinIng);
- close(archBinPlatPrep);
- close(archBinPlatos);
- close(ArchRep);
- end.
Advertisement
Add Comment
Please, Sign In to add comment