Untitled
unknown
pascal
4 years ago
5.1 kB
11
Indexable
{500 clientes. De cada cliente conoce fecha de firma del contrato,
la categoría del monotributo (entre la A y la F),
el código de la ciudad donde se encuentran las oficinales(entre 1 y 2400)
y el monto mensual acordado en el contrato.
La info se ingresa ordenada por fecha de firma de contrato
(los más antiguos primero, los más recientes últimos).
Realizar un programa que lea y almacene la información de los clientes
en una estructura de tipo vector.
Una vez almacenados los datos, procesar dicha estructura para obtener:
1) Cantidad de contratos por cada mes y cada año, y año en que se firmó la mayor cantidad de contratos
2) Cantidad de clientes para cada categoría de monotributo
3) Código de las 10 ciudades con mayor cantidad de clientes
4) Cantidad de clientes que superan mensualmente el monto promedio
entre todos los clientes.}
program cap4_2ej5;
const
dimF=5;//500
MAXIMOCOD=2400;
MAXIMODIA=31;
MAXIMOMES=12;
MAXIMOANIO=9999;
type
{vector 1 a 2400 de registro de codigo y cantidad}
FechaREG=record
dia: 1..MAXIMODIA;
mes: 1..MAXIMOMES;
anio: 0..MAXIMOANIO;
end;
cliente=record
fecha:FechaREG;
categoria: 'a'..'f';
codigo:1..MAXIMOCOD;
montoMensual:real;
end;
vector=array[1..dimF]of cliente;
vcontador=array['a'..'f']of integer;
vlocalidades=array[1..2400]of integer;
vectordiez=array[1..10]of integer;
procedure iniVC (var vC:vcontador);
var
i:char;
begin
for i:= 'a' to 'f' do
begin
vC[i]:=0;
end;
end;
procedure iniVL(var vl:vlocalidades);
var
i:integer;
BEGIN
for i:=1 to 2400 do
begin
v[i]:=0;
end;
END;
procedure iniVD(var vd:vectordiez);
var
i:integer;
begin
for i:=1 to 10 do
begin
v[i]:=0;
end;
end;
procedure leer (var cl:cliente);
begin
writeln('Ingrese la fecha del contrato con el cliente (De mas antiguo a mas reciente) ');
writeln('Ingrese el dia ');readln(cl.fecha.dia);
writeln('Ingrese el mes ');readln(cl.fecha.mes);
writeln('Ingrese el anio ');readln(cl.fecha.anio);
writeln('Ingrese la categoria del monotributo ');readln(cl.categoria);
{writeln('Ingrese el codigo del cliente ');readln(cl.codigo);
writeln('Ingrese el monto mensual ');readln(cl.montoMensual);}
end;
procedure cargarDatos(var v:vector);
var
i:integer;
begin
for i:=1 to dimF do
begin
leer(v[i]);
end;
end;
procedure informar (v:vector);
var
i:integer;
begin
writeln(' ');
writeln('Informe: ');
for i:=1 to dimF do
begin
writeln(' ');
writeln(' La fecha del contrato con el cliente: ',i);
{writeln(' El dia: ',v[i].fecha.dia);}
writeln(' El mes: ',v[i].fecha.mes);
writeln(' El anio: ',v[i].fecha.anio);
{writeln(' La categoria del monotributo: ',v[i].categoria);
writeln(' El codigo del cliente: ',v[i].codigo);
writeln(' El monto mensual: ',v[i].montoMensual:1:2);}
writeln(' ');
end;
end;
procedure maximo (var max:integer;num:integer;var maxAn:integer;anioAc:integer);
BEGIN
if (num>max)then
begin
max:=num;
maxAn:=anioAc;
end;
END;
procedure RecorrerVectorEInformar (v:vector;var vC:vcontador);
var
i,mesAnt,anioAnt,canAnio,canMes,maxim,maxAn:integer;
CAT:char;
BEGIN
maxim:=-1;
i:=1;
while (i<=dimF) do
begin
anioAnt:=v[i].fecha.anio;
canAnio:=0;
while (i<=dimF)and(v[i].fecha.anio = anioAnt) do
begin
canMes:=0;
mesAnt:=v[i].fecha.mes;
while (i<=dimF) and (v[i].fecha.anio=anioAnt) and (mesAnt=v[i].fecha.mes) do
begin
canMes:=canMes+1;
vC[v[i].categoria]:=vC[v[i].categoria]+1;
i:=i+1;
end;
writeln('La cantidad de clientes en el mes ',mesAnt,' del anio ',anioAnt,' es de: ',canMes);
canAnio:=canAnio+canMes;
end;
writeln(' la cantidad de clientes en el anio ',anioAnt,' fue de : ',canAnio);
maximo(maxim,canAnio,maxAn,anioAnt);
end;
writeln('anio en que se firmo la mayor cantidad de contratos: ',maxAn);
for CAT:='a'to 'f' do
begin
writeln('La cantidad de contratos con categoria de monotributo ',CAT,' es de: ',vC[CAT]);
end;
END;
procedure sumarLocalidades (numLoc; var vl:vlocalidades);
BEGIN
vl[numLoc]:=vl[numLoc]+1;
END;
procedure diezMaximos (vl:vlocalidades;var vdiez:vectordiez);
var
i,max,auxMax,codMax,antCodMax:integer;
begin
max:=-1; antMax:=-1;
for i2:=1 to 10 do
begin
for i:=1 to 2400 do
begin
if vl[i]>antMax then
begin
max:=antMax;
antCodMax:=vl[i];
max:=vl[i];
codMax:=i;
end;
end;
writeln('El codigo de la #',i2,' ciudad con mas clientes es: ',max);
end;
end;
//PROGRAMA PRINCIPAL
var
v:vector;
vC:vcontador;
vl:vlocalidades;
vd:vectordiez;
BEGIN
iniVC(vC);
cargarDatos(v);
RecorrerVectorEInformar(v,vC);
informar(v);
iniVL(vl);
iniVD(vd);
for i:=1 to dimF do
begin
sumarLocalidades (v[i].codigo,vl)
end;
diezMaximos(vl,vd);
{contratosPorAnio(v);}
END.Editor is loading...