Pascal/Turbo Pascal - ayuda preparacion examen

 
Vista:
sin imagen de perfil

ayuda preparacion examen

Publicado por marios (58 intervenciones) el 02/04/2014 15:47:06
hola, Ramon tengo el siguiente planteamiento un tanto complicado para mi, me gustaria recibir tu brillante ayuda.
la cuestion es:

se ingresa una matriz A porejemplo:

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

a traves de una submatriz 2*2 obtener la suma total de aquellas subsumas(2*2) que sean mayores o iguales a 25 dentro de la matriz A dada. Con la restriccion que no se deben tomar elementos de aquellas submatrices 2*2 que cumplan con dicha condicion.

porejemplo, para la submatriiz inicial 1 2
7 8

la suma de sus elementos daria 18 por lo tanto no cumple la condicion y su suma no se tendria en cuenta para el total final que se pide, seguiria entonces la submatriz : 2 3
8 9
cuya suma de sus elementos daria 22, lo cual tampoco cumple la condicion ( osea suma mayor a 25).

seguiria entonces asi la submatriz: 3 4
9 10

cuya suma de sus elementos es igual a 26 lo cual si cumple con la condicion, por lo tanto en este caso existirian dos pasos a seguir:

- acumular esta subsuma para el total pedido de aquellas submatrices que cumplan con que su suma sea = 25
- ahora la siguiente submatriz no podria ser : 4 5
10 11

dado que los elementos 4 y 10 de dicha submatriz no pueden ser tomados ahora dado que son parte de la submatriz anterior que cumplio con la condicion de la suma >=25, por lo que en este caso se deberia tomar ahora la submatriz

5 6
11 12

cuya suma es 34 valor que debe sumarse al acumulado total que va hasta el momento,

luego seguiria la submatriz: 7 8
13 14 y se continua asi con los mismos criterios explicads antes hasta alcanzar toda la matriz A.

mil gracias ramon por toda la ayuda que me das, un abrazo.
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

ayuda preparacion examen

Publicado por ramon (2158 intervenciones) el 04/04/2014 00:24:22
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
{Algo así serbia}
 
program sumacomponenteamatriz;
 uses
   crt;
  const
      max = 6;
      datos : array[1..36] of integer = (
      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);
      sumin = 25;
  type
    matriz = array[1..max,1..max] of integer;
 
   var
    lamatriz : matriz;
    i, u : integer;
 
   procedure cargamatriz(var d : matriz);
   var
     p : integer;
   begin
       p := 1;
       for u := 1 to max do
        for i := 1 to max do
        begin
        d[i,u] := datos[p];
        p := p + 1;
       end;
   end;
 
   procedure suma2x2(m : matriz);
   var
     t, n, g : integer;
     total : longint;
   begin
       t := 1;
       n := 1;
       total := 0;
   repeat
     repeat
        if (m[t,n] + m[t + 1,n] + m[t,n + 1] + m[t + 1,n + 1]) < sumin then
        begin
           t := t + 1;
        end
      else
         begin
       total := total + (m[t,n] + m[t + 1,n] + m[t,n + 1] + m[t + 1,n + 1]);
            t := t + 2;
         end;
     until t > max;
       t := 1;
       n := n + 2;
   until n > max;
   writeln;
   writeln('  ',total);
   end;
 
 
 
 
   begin
      clrscr;
      cargamatriz(lamatriz);
    for u := 1 to max do
    begin
      for i := 1 to max do
      begin
      write('  ',lamatriz[i,u]);
      end;
      writeln;
      end;
      suma2x2(lamatriz);
      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
sin imagen de perfil

ayuda preparacion examen

Publicado por marios (58 intervenciones) el 04/04/2014 10:30:03
hola ramon ante todo como siempre muy agradecido contigo por tu generosidad de ayudar a los demas eso te hace grande.

ramon algunas cosas en tu codigo por favor:


1- en procedure cargarmatriz, que cargas en el vector d[i,u] := datos[p]; ???, que hace este procedimiento en si?
2- PODRIAS POR FAVOR, modificar el programa tuyo para que pueda ver en cada momento las submatrices (2*2), que se estan tomando en cada instante, tanto las no validas( es decir las que no cumplen la condicion de la suma) como las validas, me seria de muchiisma ayuda para entender mas tu procedimiento suma2x2
millones de gracias ramon.
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

ayuda preparacion examen

Publicado por ramon (2158 intervenciones) el 05/04/2014 11:38:49
Mira lo primero que preguntas es la carga de la matriz tomando la constante creada para el ejemplo.
lo segundo esto te puede servir para verlo.

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
procedure suma2x2(m : matriz);
   var
     t, n, g : integer;
     total : longint;
   begin
       t := 1;
       n := 1;
       total := 0;
   repeat
     repeat
        if (m[t,n] + m[t + 1,n] + m[t,n + 1] + m[t + 1,n + 1]) < sumin then
        begin
           writeln(t,'/',n,'+',t + 1,'/',n,'+',t,'/',n + 1,'+',t + 1,'+',n + 1);
           writeln(' ',m[t,n],' + ',m[t + 1,n],' + ',m[t,n + 1],' + ',m[t + 1,n + 1]);
           t := t + 1;
        end
      else
         begin
       total := total + (m[t,n] + m[t + 1,n] + m[t,n + 1] + m[t + 1,n + 1]);
       writeln(t,'/',n,'+',t + 1,'/',n,'+',t,'/',n + 1,'+',t + 1,'+',n + 1);
       writeln(' ',m[t,n],' + ',m[t + 1,n],' + ',m[t,n + 1],' + ',m[t + 1,n + 1]);
            t := t + 2;
         end;
     until t > max;
       t := 1;
       n := n + 2;
   until n > max;
   writeln;
   writeln('  ',total);
   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
sin imagen de perfil

ayuda preparacion examen

Publicado por marios (58 intervenciones) el 08/04/2014 22:08:10
Hola compañero Ramon, muy aproximada tu solucion a lo que necesito , sin embargo una cuestion que me gustaria revizaras por favor con la modificacion final que me sugeriste.

1- ramon la suma total me esta dando con tu solucion final incluida : 648
sin embargo fijate que deberia dar 526 :
1+2++7+8= 18 , esta suma al no cumplir la condicion de ser mayor a 25 no se tiene en cuenta para la totalizacion final.
2+3+8+9 = 22 , esta suma al no cumplir la condicion de ser mayor a 25 no se tiene en cuenta para la totalizacion final.
3+4+9+10= 26, ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL
5 +6+11+12= 34, ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL
13+14+19+20 =66 , ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL
15+16+21+22=74 , ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL
17+18+23+24=82 , ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL
25+26+31+32 =114 , ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL
29 +30+35+36=130 , ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL

si sumamos las sumas que cumplen tendriamos:
26+34+66+74+82+114+130 =526 que como ves es diferente al resultado de ejecucion de tu programa. me gustaria para este primer punto tu modificacion para ver en donde esta dandose el problema.
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
sin imagen de perfil

ayuda preparacion examen

Publicado por marios (58 intervenciones) el 22/04/2014 17:22:32
Hola compañero Ramon, muy aproximada tu solucion a lo que necesito , sin embargo una cuestion que me gustaria revizaras por favor con la modificacion final que me sugeriste.

1- ramon la suma total me esta dando con tu solucion final incluida : 648
sin embargo fijate que deberia dar 526 :
1+2++7+8= 18 , esta suma al no cumplir la condicion de ser mayor a 25 no se tiene en cuenta para la totalizacion final.
2+3+8+9 = 22 , esta suma al no cumplir la condicion de ser mayor a 25 no se tiene en cuenta para la totalizacion final.
3+4+9+10= 26, ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL
5 +6+11+12= 34, ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL
13+14+19+20 =66 , ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL
15+16+21+22=74 , ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL
17+18+23+24=82 , ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL
25+26+31+32 =114 , ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL
29 +30+35+36=130 , ESTA SUMA CUMPLE POR LO TANTO DE ACUMULA EN EL TOTAL FINAL

si sumamos las sumas que cumplen tendriamos:
26+34+66+74+82+114+130 =526 que como ves es diferente al resultado de ejecucion de tu programa. me gustaria para este primer punto tu modificacion para ver en donde esta dandose el problema.
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

ayuda preparacion examen

Publicado por ramon (2158 intervenciones) el 22/04/2014 19:31:38
Mira el resultado de la suma y sus números sumados sale correcto.

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
program sumacomponenteamatriz;
 uses
   crt;
  const
      max = 6;
      datos : array[1..36] of integer = (
      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);
      sumin = 25;
  type
    matriz = array[1..max,1..max] of integer;
 
   var
    lamatriz : matriz;
    i, u : integer;
 
   procedure cargamatriz(var d : matriz);
   var
     p : integer;
   begin
       p := 1;
       for u := 1 to max do
        for i := 1 to max do
        begin
        d[i,u] := datos[p];
        p := p + 1;
       end;
   end;
 
  procedure suma2x2(m : matriz);
   var
     t, n, g : integer;
     total : longint;
   begin
       t := 1;
       n := 1;
       total := 0;
       writeln;
   repeat
     repeat
        if (m[t,n] + m[t + 1,n] + m[t,n + 1] + m[t + 1,n + 1]) < sumin then
        begin
           writeln(m[t,n],'+',m[t + 1,n],'+',m[t,n + 1],'+',m[t + 1,n + 1],' = ',
           (m[t,n] + m[t + 1,n] + m[t,n + 1] + m[t + 1,n + 1]));
           t := t + 1;
        end
      else
         begin
       total := total + (m[t,n] + m[t + 1,n] + m[t,n + 1] + m[t + 1,n + 1]);
       writeln(m[t,n],'+',m[t + 1,n],'+',m[t,n + 1],'+',m[t + 1,n + 1],' = ',
       (m[t,n] + m[t + 1,n] + m[t,n + 1] + m[t + 1,n + 1]));
       t := t + 2;
         end;
     until t > max;
       t := 1;
       n := n + 2;
   until n > max;
   writeln;
   writeln('  ',total);
   end;
 begin
      clrscr;
      cargamatriz(lamatriz);
    for u := 1 to max do
    begin
      for i := 1 to max do
      begin
      write('  ',lamatriz[i,u]);
      end;
      writeln;
      end;
      suma2x2(lamatriz);
      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