Pascal/Turbo Pascal - Problema programa cuadrado magico pascal

   
Vista:

Problema programa cuadrado magico pascal

Publicado por Estudiante desesperado (7 intervenciones) el 24/05/2014 12:33:56
Tengo que hacer un problema de un cuadrado mágico. Ya tengo las matrices y ahora lo que necesito es que desde 1 hasta el orden de la matriz al cuadrado esten todos los numeros sin repetirse. Por ejemplo en una 2x2 estarían el 1,2,3,4 da igual el orden pero no se pueden repetir. Si esta bien te tiene que devolver TRUE. Por ejemplo n=2 (2,4;1,3) -> TRUE; n=2(3,2;34) ->FALSE.
De momento tengo esto pero funciona para algunas y para otras no. Si alguien me puede ayudar . Aparte de eso estan los procediminetos de la matriz pero esos si funconan


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
tpCuadMagic = array [tpDim,tpDim] of integer;
 
 var CM:tpCuadMagic;
 
   n:tpDIm;
 function estanTodos(CM:tpCuadMagic; n:tpDim):boolean;
  var i,j,p:integer;
  begin
     for i:=1 to n do
      for j:=1 to n do
     begin
       for p:=1 to n*n do
        begin
        if (p=CM[i,n]) or (p=CM[n,j]) then
         p:=p+1;
         end;
        if p=n*n then
         estanTodos:=true
         else
         estanTodos:=false;
           if (estanTodos=true) then
            writeln ('True');
           if (estanTodos=false) then
            writeln('False');
          readln;
      end;
      readln;
 
  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

Problema programa cuadrado magico pascal

Publicado por ramon (2072 intervenciones) el 25/05/2014 00:54:12
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
{Mira esto te puede ayudar}
 
const
    n = 5;
  type
     tpcuadmagic = array[1..n,1..n] of integer;
 
 var
   cuadro : tpcuadmagic;
   r, y, x : integer;
 
 function estanTodos(CM : tpCuadMagic) : boolean;
  var
    temp, i, j, p : integer;
    esta : array[1..n * n] of boolean;
    sal : boolean;
  begin
     fillchar(esta,sizeof(esta),false);
     temp := n  * n;
     for i := 1 to n do
      for j := 1 to n do
       begin
        for p := 1 to temp do
        begin
        if (p = CM[j,i]) then
         esta[p] := true;
         end;
       end;
      for i := 1 to temp do
      begin
      if esta[i] = false then
      begin
         sal := false;
         break;
        end
     else
        sal := true;
      end;
      if sal = true then
      estanTodos := true
    else
      estanTodos := false;
  end;
 
   begin
      r := 1;
      for y := 1 to n do
        for x := 1 to n do
        begin
        cuadro[x,y] := r;
        r := r + 1;
        end;
      writeln('',estanTodos(cuadro));
      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

Problema programa cuadrado magico pascal

Publicado por Estudiante desesperado (7 intervenciones) el 25/05/2014 17:56:45
Nada. Me devuelve simpre TRUE además no se lo que hacen la mitad de las cosas que hay ahi
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

Problema programa cuadrado magico pascal

Publicado por ramon (2072 intervenciones) el 26/05/2014 10:43:58
Lógico siempre tiene los números correctos tienes que cambiar alguno para que te de false por ejemplo entra esto.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
begin
      r := 1;
      for y := 1 to n do
        for x := 1 to n do
        begin
       if r <> n div 2 then
        cuadro[x,y] := r
    else
         cuadro[x,y] := 0;
        r := r + 1;
        end;
      writeln('',estanTodos(cuadro));
      readln;
   end.

Esto te data false.
Referente a lo que hacen las cosas como comentas tendrás que decirme en que nivel te encuentras
para poder realizar lo a ese nivel tuyo para que lo puedas entender.
fillchar(esta,sizeof(esta),false); esta operacion lo que realiza es poner todo el array a false.

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
temp := n  * n;  ponemos la variable al valor de la matriz
     for i := 1 to n do    recorremos la matriz  con los for
      for j := 1 to n do
       begin
        for p := 1 to temp do  comprobamos si el numero existe ponemos la posicion a true
        begin
        if (p = CM[j,i]) then
         esta[p] := true;
         end;
       end;
      for i := 1 to temp do  comprobamos si se cumple que están todos los numeros
      begin
      if esta[i] = false then
      begin
         sal := false;
         break;     en caso de encontrar un false esto termina el for y sale
        end
     else
        sal := true;
      end;
      if sal = true then    si sal en true estan todos
      estanTodos := true
    else
      estanTodos := false;  sino sera false
  end;

Espero esto te aclare algo.
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

Problema programa cuadrado magico pascal

Publicado por Estudiante desesperado (7 intervenciones) el 31/05/2014 13:41:46
Primero de ingenieria industrial. Ahora si funciona Y ya entiendo las ordenes que no sabian para que eran. Ahora solo me queda sumar las filas, las columnas y las diagonales. Eso supongo que sabre hacerlo.
Gracias
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