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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2013, 13:29   #1
RelaX Inc.
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 52
По умолчанию Задача про магический треугольник

Здравствуйте программисты

Прошу у вас помощи в решении задачи, изложенной ниже.

P.S. Магический КВАДРАТ, а не треугольник. Ошибся в заголовке.

Язык: Free Pascal

Задача: Дано N, на выходе дать матрицу, представляющую из себя магический квадрат со сторонами N или выдать, что решений нет.

Примечание: Если можно, то сделайте пожалуйста с комментариями этот код. Ибо я новичок в программировании.

Заранее благодарю.

UPDATE: Маги́ческий, или волше́бный квадра́т — это квадратная таблица , заполненная числами, таким образом, что сумма чисел в каждой строке, каждом столбце и на обеих диагоналях оказывается одинаковой.

Последний раз редактировалось RelaX Inc.; 10.05.2013 в 15:07. Причина: UPDATE
RelaX Inc. вне форума Ответить с цитированием
Старый 10.05.2013, 14:31   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Ваша просьба нелогична - непонятно, что Вы просите: помочь решить Вам или сделать все за Вас. Это вещи взаимоисключающие.

И еще: раз уж надеетесь на помощь, то хотя бы сообщите своим потенциальным помощникам всю необходимую информацию. Например, что лично Вы подразумеваете под термином "магический треугольник".

Последний раз редактировалось s-andriano; 10.05.2013 в 14:33.
s-andriano вне форума Ответить с цитированием
Старый 10.05.2013, 14:32   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Ибо я новичок в программировании
Вообще-то новички на то и новички, что пытаются сами хоть что-то сделать. А иначе по чужому коду толку ноль. Тут другой случай - а оно мне надо, не хочу и не буду.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.05.2013, 15:02   #4
RelaX Inc.
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 52
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Например, что лично Вы подразумеваете под термином "магический треугольник".
Извините, ошибся в заголовке. В формулировке же задачи всё указано верно - магический квадрат.
Цитата:
Маги́ческий, или волше́бный квадра́т — это квадратная таблица , заполненная числами, таким образом, что сумма чисел в каждой строке, каждом столбце и на обеих диагоналях оказывается одинаковой.
Извините, не написал, что я прошу сделать не за меня данную работу, а именно помочь мне с ней. Допустим, для начала, нужно определиться с алгоритмом. На данный момент, моя голова не может продумать его. Потому то я и написал данную тему и попросил помощи.

Последний раз редактировалось RelaX Inc.; 10.05.2013 в 15:05.
RelaX Inc. вне форума Ответить с цитированием
Старый 10.05.2013, 18:27   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от RelaX Inc. Посмотреть сообщение
Допустим, для начала, нужно определиться с алгоритмом. На данный момент, моя голова не может продумать его. Потому то я и написал данную тему и попросил помощи.
А как бы Вы стали решать эту задачу, если бы это было нужно не в программе, а на листочке бумаги с карандашом?

И еще одно замечание: "магический" квадрат согласно Вашему определению строится очень просто - достаточно записать во всех ячейках таблицы одно и то же число.

Последний раз редактировалось s-andriano; 10.05.2013 в 18:29.
s-andriano вне форума Ответить с цитированием
Старый 10.05.2013, 18:53   #6
RelaX Inc.
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 52
По умолчанию

s-andriano, я бы стал подбирать числа и считать. Но это заняло бы у меня уйму времени. Но по сути на WIKI есть алгоритмы. Но как это можно реализовать в Pascal'е, я не представляю.

Ну нужно вычислить еще и магическую константу (число, которое должно получаться при сумме). Она должна находится по формуле:
RelaX Inc. вне форума Ответить с цитированием
Старый 10.05.2013, 20:21   #7
RelaX Inc.
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 52
По умолчанию

Я нашел код, немного для другой цели. Он просто проверяет, является ли данный квадрат магическим. Прокомментируйте пожалуйста его, ибо я в нём запутался. Кто и что там делают.

Код:
PROGRAM my_project;

  Uses crt;

  Var

    a:array[1..10,1..10] of integer;

    i,j,n,s,w,k,q:integer;

begin

  clrscr;

  write('Введите размерность квадрата: ');
  read(n);

  for i:=1 to n do

    for j:=1 to n do

      begin

        write('A(',j,',',i,') = ');
        read(a[j,i]);

      end;

    s:=0;

    for i:=1 to n do

      s:=s+a[1,i];

    k:=1;

    for i:=1 to n do

      begin

        w:=0; q:=0;

        for j:=1 to n do

          begin

            w:=w+a[j,i];

            q:=q+a[i,j];

          end;

        if (s<>w) or (q<>s) then k:=0;

      end;

    if k=0 then write('Квадрат не магический!')

    else write('Квадрат магический!!!');

    readln;
    readln;

end.
RelaX Inc. вне форума Ответить с цитированием
Старый 10.05.2013, 20:23   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Паскаля нет, код для магических квадратов с нечетной стороной в дельфях набросал, захочешь разберешься. Если немного подумать, то его можно сократить
Код:
procedure TForm1.Button3Click(Sender: TObject);
var n,m,i,j,k: Integer;
    mas: array of array of Integer;
begin
  n:=7;  //нечетная размерность квадрата
  m:=2*n-1;
  SetLength(mas,m,m);
  k:=0;
  for i:=0 to n-1 do
    for j:=0 to n-1 do begin
      Inc(k);
      mas[i+j,n-1-i+j]:=k;
    end;
  for i:=0 to (n div 2)-1 do
    for j:=n-1-i to n-1+i do
      if mas[i,j]<>0 then begin
        mas[n+i,j]:=mas[i,j];
        mas[m-1-i-n,j]:=mas[m-1-i,j];
      end;
  for j:=0 to (n div 2)-1 do
    for i:=n-1-j to n-1+j do
      if mas[i,j]<>0 then begin
        mas[i,n+j]:=mas[i,j];
        mas[i,m-1-j-n]:=mas[i,m-1-j];
      end;
  StringGrid1.RowCount:=n;
  StringGrid1.ColCount:=n;
  for i:=0 to n-1 do
    for j:=0 to n-1 do
      StringGrid1.Cells[j,i]:=IntToStr(mas[i+(n div 2),j+(n div 2)]);
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.05.2013, 20:38   #9
RelaX Inc.
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 52
По умолчанию

Аватар, я свой то код не могу понять никак. А тут так вообще тёмный лес. Тем более не весь синтаксис одинаков с паскалем. Но спасибо, буду думать и размышлять.
RelaX Inc. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
про треугольник luchok Паскаль, Turbo Pascal, PascalABC.NET 8 30.04.2009 13:40
Задача про треугольник Паскаля. Mangust Помощь студентам 9 02.03.2009 23:59
Задача про треугольник YO$YA Помощь студентам 10 15.11.2008 20:29