Pascal/Turbo Pascal - Error en calcular varios aximos pascal.

 
Vista:

Error en calcular varios aximos pascal.

Publicado por Gianluca Cardone (3 intervenciones) el 20/05/2023 01:47:06
Estoy teniendo inconveniente al momento de calcular los codigos de las 10 ciudades con mayor cantidad de clientes. (SOLO DEBO UTILIZAR VECTORES)


En este programa utilizo varios vectores.
vClientes: almaceno la informacion de los clientes.
vContadorCategorias: almaceno la cantidad de clientes por categoria.
vClientesCiudad: cuento la cantidad de clientes por ciudad, y el codigo de ciudad.

Para resolver el inciso c ( codigo de las 10 ciudades con mayor cantidad de clientes )
Lo plantee de esta forma:
Use el vector vClientesCiudad para ir contando la cantidad de clientes por ciudad (este vector va de 1 hasta cantCiudades (2400)).

Para sacar el maximo, mi idea es ordenar el vector vClientesCiudad por cantidad de clientes de mayor a menor. Es lo que hice. Pero al momento de informarme los 10 codigos me informa todo con codigo 0.

Por favor, llevo vario tiempo sin poder solucionarlo. Me parecio la manera mas facil de plantearlo. Cualquier ayuda, consejo, o si lo plantearon diferente comenten que estoy atento.


Dejo el codigo. Los procesos importantes son: OrdenarVector e InformarTop10
```
{
program eje5prac4p2;
const
cantClientes = 3; {puse 5 para hacer la prueba. Hay que poner 500}
cantCiudades = 2400;
type
rangoMeses = 1..12;
rangoDias = 1..31;
rangoCategoria = 'A'..'F';
rangoCiudad = 1..2400;

fecha = record
mes : rangoMeses;
dia : rangoDias;
anho : integer;
end;

cliente = record
firmaContrato : fecha;
categoria : rangoCategoria;
ciudad : rangoCiudad;
monto : real;
end;

vClientes = array [1..cantClientes] of cliente;

vContadorCategorias = array ['A'..'F'] of integer; {debo inicializarlo en 0}


mas_cobran = record
codCiudad : rangoCiudad;
cantClientes : integer;
end;



vClientesCiudad = array [1..cantCiudades] of mas_cobran;
{inicializo el vector.cantClientes en 0}
{inicializo el vector.codCiudad en i (porque recorro en un for de 1 hasta 2400)}


{ordeno el vector de manera ascendente por cantCLientes,
e imprimo los primeros 10 de ese vector }
procedure inicializarV_clientesCiudad (var v : vClientesCiudad);
var
i : integer;
begin
for i:= 1 to cantCiudades do
v[i].cantClientes:= 0;
v[i].codCiudad:= i;
end;

procedure ordenarVector ( var v: vClientesCiudad) ;
var
i, j , p : integer;
aux : mas_cobran;
begin
for i:= 1 to (cantCiudades -1) do
p:= i ;
for j := ( i+ 1) to cantCiudades do
begin
if ( v[j].cantClientes > v[i].cantClientes) then
p:= j;

aux:= v[p];
v[p]:= v[i];
v[i]:= aux;
end;
end;

procedure informarTop10 (var v : vClientesCiudad);
var
i : integer;
begin
ordenarVector(v);
for i:= 1 to 10 do
begin
writeln (i,': con codigo de ciudad: ',v[i].codCiudad);
end;
end;

```
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error en calcular varios aximos pascal.

Publicado por ramon (2158 intervenciones) el 29/05/2023 13:54:17
{A ver si esto te ayuda}
program eje5prac4p2;
const
cantClientes = 3; {puse 5 para hacer la prueba. Hay que poner 500}
cantCiudades = 2400;
type
rangoMeses = 1..12;
rangoDias = 1..31;
rangoCategoria = 'A'..'F';
rangoCiudad = 1..2400;

fecha = record
mes : rangoMeses;
dia : rangoDias;
anho : integer;
end;

cliente = record
firmaContrato : fecha;
categoria : rangoCategoria;
ciudad : rangoCiudad;
monto : real;
end;

vClientes = array [1..cantClientes] of cliente;

vContadorCategorias = array ['A'..'F'] of integer; {debo inicializarlo en 0}


mas_cobran = record
codCiudad : rangoCiudad;
cantClientes : integer;
end;



vClientesCiudad = array [1..cantCiudades] of mas_cobran;
{inicializo el vector.cantClientes en 0}
{inicializo el vector.codCiudad en i (porque recorro en un for de 1 hasta 2400)}

var
cli : vClientesCiudad;
{ordeno el vector de manera ascendente por cantCLientes,
e imprimo los primeros 10 de ese vector }
procedure inicializarV_clientesCiudad (var v : vClientesCiudad);
var
i : integer;
begin
for i := 1 to cantCiudades do
begin
v[i].cantClientes:= i;
v[i].codCiudad:= i;
end;
end;

procedure ordenarVector ( var v: vClientesCiudad) ;
var
i, j , p : integer;
aux : mas_cobran;
begin
for i:= 1 to cantCiudades - 1 do
p := i ;
for j := ( i + 1) to cantCiudades do
begin
if ( v[j].cantClientes > v[i].cantClientes) then
begin
p := j;

aux:= v[p];
v[p]:= v[i];
v[i]:= aux;
end;
end;
end;

procedure informarTop10 (var v : vClientesCiudad);
var
i : integer;
begin
ordenarVector(v);
for i:= 1 to 10 do
begin
writeln (i,': con codigo de ciudad: ',v[i].codCiudad);
end;
end;



begin
inicializarV_clientesCiudad(cli);
informarTop10(cli);
readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar