Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2010, 12:05   #1
Tata4ka
 
Регистрация: 20.10.2010
Сообщений: 6
По умолчанию квадратная матрица

помогите пожалуйста решить задачу на паскале....


Будет ли квадратная матрица «магическим квадратом» (суммы во всех вертикалях, во всех диагоналях, на обеих диагоналях равны).
Tata4ka вне форума Ответить с цитированием
Старый 02.11.2010, 13:26   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Цитата:
суммы во всех вертикалях, во всех диагоналях, на обеих диагоналях равны).
А в строках суммы должны быть равны? Я сделал и со строками. если не нужно уберите
Тогда держите, только учтите что в данной проге маг квадрат будет получаться редко, т.к. используется случайный ввод элементов массива, если надо исправьте на ручной ввод
Код:
uses crt;
   const n=2; m=2;
   var mas: array [1..n,1..m] of integer;
      mas2: array [1..n+m+2] of integer;
   i,j: byte;
   pr: integer;
   bol: boolean;
BEGIN
   clrscr;
   randomize;
   for i:=1 to n do
     begin
       for j:=1 to m do
         begin
           mas[i,j]:=random(10);
           write(mas[i,j],' ')
         end;
        writeln;
     end;

   for i:=1 to n do
    for j:=1 to m do
    begin
      mas2[i]:=mas2[i]+mas[i,j];
      mas2[i+n]:=mas2[i+n]+mas[j,i];
      if (i=j) then mas2[n+m+1]:=mas2[n+m+1]+mas[i,j];
      if (i+j)=n+1 then mas2[n+m+2]:=mas2[n+m+2]+mas[i,j];
    end;
   writeln('-------------------------------');

   pr:=mas2[1]; bol:=true;
   for i:=2 to n+m+2 do
    if mas2[i]<>pr then bol:=false;
   if bol=false then writeln('Matrix - not magic kvadrat') else
                                             writeln('Matrix - magic kvadrat');
   readln;
END.
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.

Последний раз редактировалось Niro; 02.11.2010 в 13:29.
Niro вне форума Ответить с цитированием
Старый 02.11.2010, 13:47   #3
pray_driver
Форумчанин
 
Аватар для pray_driver
 
Регистрация: 18.08.2010
Сообщений: 140
По умолчанию

Функция проверки "магичности" квадрата по строкам, столбцам и диагоналям:

Код:
function magic_check(matr : array[1..m, 1..m] of integer) : Boolean; //Функция проверки "магичности"
var 
    s, s_old : Integer; //частичная сумма
    i, j : Integer; //бегунки
    res : Boolean; // результат
Begin
    s := 0;
    s_old := 0;
    res := True; // Пусть изначально квадрат магический
    For i := 1 to m do s_old := s_old + matr[1, i]; // получили сумму по 1-й строке, с ней будем сравнивать
    
    For i := 2 to m do // начинаем со второй строки сравнивать суммы с s_old
   Begin
        s := 0;
        If res then // Если есть всё ещё магический, то проверяем следующую строку
        Begin 
            For j := 1 to m do
                s:= s +matr[i, j];
            If s <> s_old then
                res := False; // Ой, не магический...
        End;
    End;

    //проверяем по столбцам, если магический до сих-пор
    If res then
    Begin
        For i := 1 to m do
        Begin
                s := 0;
                If res then
                Begin
                For j := 1 to m do
                    s := s + matr[j, i];
                If s <> s_old then
                    res := False
                End;
        End;
    End;

    // Если остался магическим, проверяем диагонали
    if res then 
    begin
    s := 0;
    for i := 1 to m do
        s := s + matr[i,i];
    if s <> s_old then res := false;
    end;

    If res then // и обратную диагональ
    Begin
        s := 0;
        For i := 1 to m do 
             s := s + matr[i, m-i+1]
        If s <> s_old then res := False;
    End;
    
    magic_check := res; // ответ true - магический, false - не магический
End;
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
pray_driver вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Квадратная матрица arhan Общие вопросы Delphi 3 22.06.2010 09:44
Квадратная матрица laluna Паскаль, Turbo Pascal, PascalABC.NET 5 04.06.2010 20:32
квадратная матрица на С++ innaa639 Помощь студентам 1 24.03.2010 14:46
квадратная матрица DartDayring Общие вопросы C/C++ 3 13.03.2010 13:36
Квадратная матрица anna_ Помощь студентам 8 15.12.2009 21:16