Pascal/Turbo Pascal - maximos de una matriz

 
Vista:
sin imagen de perfil

maximos de una matriz

Publicado por Facundo (1 intervención) el 18/11/2013 20:00:53
Buenas estoy tratando de resolver el siguiente ejercicio y no consigo resolver el punto e) del siguiente enunciado

Un supermercado con 10 sucursales de 30 caja cada una procesa constantemente la informacion del monto recaudado por cada caja. La información ingresa del siguiente modo: sucursal (entero de 1 a 10), caja (entero de 1 a 30) y pesos facturados(real con 2 decimales)

a)Ingresr datos
b)imprimir los datos en forma matricial
c) ordenar por sucursal S ingresada por teclado de mayor a menor según monto facturado
d) ordenar por caja c ingresada por teclado de mayor a menor según monto facturado
e) listar sucursal-caja-facturacion para los n (ingresados por teclado) mayores montos recaudados

entiendo que lo que pide el último punto seria determinar los montos mayores identificando de que caja y sucursal vienen y mostrar esa informacion, pero aún no logro expresar esto.

Esto es lo que pude hacer por el momento

PROGRAM B6;

USES CRT;

TYPE

MATRIZ= ARRAY[1..3, 1..3] OF REAL;

VECTOR1= ARRAY[1..3] OF REAL;

VECTOR2= ARRAY[1..3] OF REAL;


VAR

RECAUDACION: MATRIZ;
VCAJAS,MONTOTOTC:VECTOR1;
MONTOTOT,VSUC: VECTOR2;
VRECAUDACION: VECTOR3;
ULTIMO: STRING;
SUC,CAJA,I,J: INTEGER;
AUX,MONTO: REAL;

BEGIN

FOR I:=1 TO 3 DO
FOR J:=1 TO 3 DO

BEGIN

RECAUDACION[I,J]:=0;

END;

WHILE ULTIMO<>'SI' DO

BEGIN

WRITELN('INGRESE NRO DE SUCURSAL (1 A 3)'); READLN(SUC);
WRITELN('INGRESE CAJA(1 A 3)'); READLN(CAJA);
WRITELN('INGRESE MONTO DE LA FACTURA'); READLN(MONTO);
RECAUDACION[CAJA,SUC]:=RECAUDACION[CAJA,SUC]+MONTO;
WRITELN('TERMINO DE INGRESAR LOS DATOS TECLEE SI+INTRO'); READLN(ULTIMO);

END;

FOR CAJA:=1 TO 3 DO

VCAJAS[CAJA]:=0;

FOR CAJA:=1 TO 3 DO
FOR SUC:=1 TO 3 DO

BEGIN

VCAJAS[CAJA]:=VCAJAS[CAJA]+RECAUDACION[CAJA,SUC];

END;

FOR CAJA:=1 TO 3 DO
FOR SUC:=1 TO 3 DO
BEGIN

WRITELN('LA CAJA ', CAJA,' DE LA SUCURSAL ',SUC ,'RECAUDO ',RECAUDACION[CAJA,SUC]);

END;

FOR SUC:=1 TO 3 DO

VSUC[SUC]:= SUC;


FOR SUC:=1 TO 3 DO
FOR CAJA:=1 TO 3 DO

MONTOTOT[SUC]:= MONTOTOT[SUC]+RECAUDACION[CAJA,SUC];

FOR I:=1 TO 2 DO
FOR J:=I+1 TO 3 DO

IF MONTOTOT[I]<MONTOTOT[J] THEN

BEGIN
AUX:=VSUC[I];
VSUC[I]:=VSUC[J];
VSUC[J]:=AUX;
AUX:=MONTOTOT[I];
MONTOTOT[I]:=MONTOTOT[J];
MONTOTOT[J]:=AUX;

END;

WRITELN('LA SUCURSAL DE MAYOR A MENOR POR FACTURACION');

FOR SUC:=1 TO 3 DO

WRITELN('LA SUCURSA ', VSUC[SUC],'FACTURO ',MONTOTOT[SUC]);

FOR CAJA:=1 TO 3 DO

VCAJAS[CAJA]:= CAJA;

FOR CAJA:=1 TO 3 DO
FOR SUC:=1 TO 3 DO

MONTOTOTC[CAJA]:= MONTOTOTC[CAJA]+ RECAUDACION[CAJA,SUC];

FOR I:=1 TO 2 DO
FOR J:=I+1 TO 3 DO

IF MONTOTOTC[I]<MONTOTOTC[J] THEN

BEGIN
AUX:=VCAJAS[I];
VCAJAS[I]:=VCAJAS[J];
VCAJAS[J]:=AUX;
AUX:=MONTOTOTC[I];
MONTOTOTC[I]:=MONTOTOTC[J];
MONTOTOTC[J]:=AUX;

END;

WRITELN('LA CAJA DE MAYOR A MENOR POR FACTURACION:');

FOR CAJA:=1 TO 3 DO

WRITELN('LA CAJA ', VCAJAS[CAJA],'FACTURO ', MONTOTOTC[CAJA]);

READKEY;

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

maximos de una matriz

Publicado por ramon (2158 intervenciones) el 20/11/2013 11:56:18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
{Disculpa debe de ser como tu lo presentas o puede ser de esta forma también es mas razonable
y manejable pero tu decides}
 
 program matriz;
  uses
    crt;
  const
     sup = 10;
     caj = 30;
  type
    super = record
         caja : array[1..caj] of real;
         nume : integer;
         end;
 
  var
    general : array[1..sup] of super;
    t, k, s, c : integer;
    imp : real;
    tre : char;
 
 
  procedure entradatos(var sc : super);
  var
    salir : char;
  begin
    salir := ' ';
    c := 1;
    while salir <> 'N' do
    begin
     clrscr;
     imp := 0;
     writeln('   ***** Entradas Datos Sucursal ',s,' caja ',c,' *****');
     writeln;
     write('  Entre Contenido importe : ');
     readln(imp);
     sc.caja[c] := imp;
     writeln;
    repeat
    writeln('   Desea Entrar Mas Datos [S/N]');
    salir := upcase(readkey);
    until salir in['S','N'];
    if salir = 'S' then
    begin
    c := c + 1;
    if c > caj then
    salir := 'N';
    end;
   end;
     sc.nume := c;
  end;
 
  procedure ordena(por : char);
  begin
     if por = 'S' then
     begin
         ordenar por sucursal
     end;
     if por = 'C' then
     begin
         ordenar por caja
     end;
     if por = 'F' then
     begin
         ordenar sucursal-caja-facturacion
     end;
  end;
 
 
 
  begin
      for s := 1 to 10 do
       for c := 1 to 30 do
        general[s].caja[c] := 0;
      s := 1;
    repeat
      entradatos(general[s]);
      writeln;
      writeln(' Mas Sucursales [S/N]');
      repeat
      tre := upcase(readkey);
      until tre in['S','N'];
      if tre <> 'N' then
      s := s + 1;
   until tre = 'N';
      writeln('>>>> Los Datos Tomados Son <<<<');
      writeln;
      for t := 1 to s - 1 do
        for k := 1 to caj do
        if general[t].caja[k] > 0 then
        writeln(' Sucursal : ',t,'  Caja : ',k,'  Importe : ',
                                 general[t].caja[k]:0:2);
        readkey;
   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