jueves, 8 de diciembre de 2011

Ejercicio 16(Arrays)

Plantee e implemente un programa en PASCAL que permita introducir un cuadrado (3x3) por teclado y determine si es mágico. Un cuadrado mágico es una matriz 3x3 de números enteros del 1 al 9 en la que la suma de sus filas, sus columnas y sus diagonales principales coincide.


PROGRAM matrices(input,output);

CONST

limitefilas = 3;
limitecolumnas = 3;

TYPE

Tabla = ARRAY[1..limitefilas, 1..limitecolumnas] OF integer;

VAR
matriz:Tabla;
mtraspuesta:Tabla;
fila,columna:integer;
a:integer;
(*******************************************************************************)
PROCEDURE leer;
VAR
   I,L,numero:integer;
BEGIN

     fila:=3;
     columna:=3;
     FOR I:=1 TO fila DO
         BEGIN
         FOR L:=1 TO columna DO
             BEGIN
             write('Escriba el numero del elemento fila: ',I:2,' columna: ',L:2,' :');
             read(numero);
             matriz[I,L]:= numero;
             END;
         END;
END;
(*******************************************************************************)
PROCEDURE Imprimir_Matriz;

VAR
   I,L: integer;
BEGIN
     FOR I:=1 TO fila DO
     BEGIN
     writeln;
     FOR L:=1 TO columna DO
         BEGIN
         write(matriz[I,L]:8);
         write(' ');
         END;
     END;
     writeln;
END;
(*******************************************************************************)
PROCEDURE magica;
BEGIN
     IF ((matriz[1,1]+matriz[1,2]+matriz[1,3])=(matriz[2,1]+matriz[2,2]+matriz[2,3]))AND((matriz[1,1]+matriz[1,2]+matriz[1,3])=(matriz[3,1]+matriz[3,2]+matriz[3,3]))AND
     ((matriz[1,1]+matriz[2,1]+matriz[3,1])=(matriz[1,2]+matriz[2,2]+matriz[3,2]))AND((matriz[1,3]+matriz[2,3]+matriz[3,3])=(matriz[1,2]+matriz[2,2]+matriz[3,2]))AND
     ((matriz[1,1]+matriz[2,2]+matriz[3,3])=(matriz[1,3]+matriz[2,2]+matriz[3,1]))AND((matriz[1,3]+matriz[2,2]+matriz[3,1])=(matriz[1,1]+matriz[1,2]+matriz[1,3])) THEN
     writeln('La matriz es magica') ELSE writeln('La matriz no es magica');
END;
(*******************************************************************************)
BEGIN
leer;
Imprimir_Matriz;
magica;
read(a);
END.

Ejemplo de ejecución






2 comentarios:

  1. Yo este ejercicio no lo veo asi. Pongo lo que entiendo yo:
    PROGRAM ejer14 (input,output);

    CONST
    n=4;

    TYPE
    Tmatriz=ARRAY[1..n,1..n]OF integer;
    VAR
    matriz:Tmatriz;
    seleccion: integer;

    (*******************************************************************)

    PROCEDURE leer(VAR matriz: tmatriz);
    VAR
    i,j:integer;
    BEGIN

    FOR i:=1 to n DO
    FOR j:=1 to n DO
    BEGIN
    write('escriba el elemento fila ',i:2,' columna',j:2,': ');
    read(matriz[i,j]);
    END;
    END;

    (***********************************************************************)

    PROCEDURE escribir(matriz: tmatriz);
    VAR
    i,j:integer;
    BEGIN
    FOR i:=1 to n do BEGIN
    for j:=1 to n do begin
    write(matriz[i,j]);
    write(' ');
    end;
    Writeln;
    END;
    END;

    (***********************************************************************)

    PROCEDURE intercambio (matriz: tmatriz);

    VAR
    fila, columna: integer;
    aux: array[1..4] OF integer;
    i,j: integer;
    edit: tmatriz;

    BEGIN

    Write('Que fila quieres intercambiar?');
    readln(fila);

    write('Que columna quieres intercambiar?');
    readln(columna);

    FOR j:=1 to 4 DO
    aux[j]:=matriz[fila,j]; {Almacenamos en un ausiliar la fila que nosotros queremos cambiar}

    FOR i:=1 to 4 DO
    matriz[fila,i]:=matriz[i,columna]; {En la fila que queremos cambiar ponemos la columna a cambiar}

    for i:=1 to 4 DO
    matriz[i,columna]:=aux[i]; {En la columna que queremos cambiar guardamos el auxiliar que contiene la fila cambiada}

    escribir(matriz);
    END;
    (***********************************************************************)

    {programa ppal}
    BEGIN
    leer(matriz);

    repeat
    Writeln('Elige una opcion: ');
    writeln('1. Intercambiar filas y/o columnas');
    writeln('0. salir');
    read(seleccion);

    IF seleccion=1 THEN intercambio(matriz);
    UNTIL seleccion=0;

    escribir(matriz);
    END.

    ResponderEliminar
  2. No... me equivoque de sitio, borra ese mensaje!!

    ResponderEliminar

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | GreenGeeks Review