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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2016, 05:53   #1
Ploho
 
Регистрация: 10.03.2016
Сообщений: 4
По умолчанию Три задачи с массивами (Pascal).

1) Упорядочить массив c(20) алгоритмом пирамидальной сортировки.

2) Определить, является ли массив a(5,5) "магическим квадратом", в котором суммы рядов, столбцов, диагоналей одинаковы.

3) Стартовый массив В(7,9) содержит перемененные типа DOUBLE. Найти в каждом ряде матрицы максимальные и минимальный элементы и поместить их на место первого и последнего элемента ряда соответственно.
Ploho вне форума Ответить с цитированием
Старый 10.03.2016, 09:41   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от Ploho Посмотреть сообщение
2) Определить, является ли массив a(5,5) "магическим квадратом", в котором суммы рядов, столбцов, диагоналей одинаковы.
Набросал функцию для определения "магического квадрата". Писалась без проверки, так что проверяйте корректность работы:

Код:
type
  TMatrix = array[1..5,1..5] of Integer;

function MagicSquare(M: TMatrix): Boolean;
var
  i,j,s,si,sj: Integer;
begin
  {Предполагаем, что матрица "магический квадрат"}
  MagicSquare:=True;
  {Находим сумму диагоналей}
  si:=0; sj:=0;
  for i:=1 to 5 do begin
    Inc(si,M[i,i]);
    Inc(sj,M[i,5-i+1]);
  end;
  {Если суммы диагоналей не равны - False}
  if sj<>si then
    MagicSquare:=False;
  {Запоминаем сумму}
  s:=si;
  {Находим суммы строк и столбцов}
  for i:=1 to 5 do begin
    si:=0; sj:=0;
    for j:=1 to 5 do begin
      Inc(si,M[i,j]);
      Inc(sj,M[j,i]);
    end;
    {Сравниваем суммы, если не равны - False}
    if (si<>s) or (sj<>s) then
      MagicSquare:=False;
  end;
end;
Arigato вне форума Ответить с цитированием
Старый 10.03.2016, 10:09   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Arigato, я умозрительно ошибок в вашем коде не вижу, имхо, будет работать правильно.

Единственное маленькое замечание по целесообразности.
если MagicSquare стало False, то дальше продолжать считать суммы смысла уже нет, можно смело выходить из функции (Exit)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.03.2016, 11:42   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Да, можно, но решил без Exit. Зато скорость работы функции стабильна, и не зависит от исходных данных
Arigato вне форума Ответить с цитированием
Старый 10.03.2016, 11:55   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Зато скорость работы функции стабильна, и не зависит от исходных данных
Это точно!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
три задачи kuzmich Паскаль, Turbo Pascal, PascalABC.NET 1 09.06.2011 14:36
Три задачи на Паскале TheVenom Помощь студентам 2 19.01.2011 20:38
Три задачи abarmot_1 Помощь студентам 6 16.11.2010 09:13
Задачи Pascal c массивами Baby33 Паскаль, Turbo Pascal, PascalABC.NET 3 26.01.2009 13:17
три задачи (С++) VHomer Помощь студентам 5 10.11.2008 15:22