Untitled

mail@pastecode.io avatar
unknown
pascal
3 years ago
5.1 kB
3
Indexable
Never
{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.