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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 19.12.2010, 15:52   #1
finito_solo
Новичок
Джуниор
 
Регистрация: 19.12.2010
Сообщений: 8
Печаль Матрицы (Паскаль)

Определить является ли целочисленная квадратная матрица магическим квадратом
finito_solo вне форума
Старый 19.12.2010, 15:56   #2
Novi4ok_11
Форумчанин
 
Регистрация: 11.12.2010
Сообщений: 110
По умолчанию

Ну тут несколько способов решить данную задачю:
1. Это посчитать все суммы и потом их сравнить
2. Сумы элементов строк, стоблцов и диагоналей поместить в массив а потом этот массив просмотреть, если в нем все элементы одинаковы то это Ваш магический квадрат
Novi4ok_11 вне форума
Старый 19.12.2010, 15:58   #3
finito_solo
Новичок
Джуниор
 
Регистрация: 19.12.2010
Сообщений: 8
По умолчанию

1 способ подошёл бы идеально.
finito_solo вне форума
Старый 19.12.2010, 16:07   #4
Novi4ok_11
Форумчанин
 
Регистрация: 11.12.2010
Сообщений: 110
По умолчанию

Ну тогда к примеру у нас 2х2 матрица, сумм будет 6
Код:
var s1,s2,s3,s4,s5,s6:integer;
Поиск сумм на диагоналях:
Код:
for i:=1 to 2 do 
begin
  for j:=1 to 2 do
     begin
       if (i=j) then s5:=s5+a[i,j];
     end;
end;
Код:
for i:=2 downto 1 do 
begin
  for j:=1 to 2 do
     begin
       if (i=j) then s6=s6+a[i,j];
     end;
end;
Поиск по строке:
Код:
  for j:=1 to 2 do
     begin
      s1:=s1+a[1,j];
     end;
Код:
  for j:=1 to 2 do
     begin
      s2:=s2+a[2,j];
     end;
По столбцу:
Код:
  for i:=1 to 2 do
     begin
      s3:=s3+a[i,1];
 end;
Код:
  for i:=1 to 2 do
     begin
      s4:=s4+a[i,2];
 end;
И сравнить все
Код:
if s1=s2=s3=s4=s5=s6 then write('Magi4eskaya');
Все
Novi4ok_11 вне форума
Старый 19.12.2010, 19:46   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Novi4ok_11, в вашем решении есть ошибки (побочную диагональ Вы неправильно считаете - там i не равняется j),
не очень эффективные алгоритмы,
(например, чтобы подсчитать сумму по главной диагонали достаточно ОДНОГО цикла
Код:
  s := 0;
  for i:=1 to N do s := s + a[i,i];
ну и последнее - лучше подсчитать одну сумму. (например, сумму элементов главной диагонали. - пример чуть выше)
Потом подсчитывать другие суммы в цикле ПО ОДНОЙ и сверять полученные суммы с первой. Если не совпало - всё, цикл можно прерывать - квадрат не магический. Если же прошли все проверки - то квадрат магический. это позволит избежать создания переменных s1,s2, s3 и т.д....
Serge_Bliznykov вне форума
Старый 19.12.2010, 19:59   #6
Novi4ok_11
Форумчанин
 
Регистрация: 11.12.2010
Сообщений: 110
По умолчанию

Согласен польностью с Вами, что можно оптимизировать программу, я ж просто что в голову пришло первое то и написал, за побочную - да что то затупил, сорри
Novi4ok_11 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
матрицы(Паскаль) mig44 Помощь студентам 3 04.06.2010 07:36
матрицы паскаль Анжелика1988 Помощь студентам 2 03.11.2009 13:21
Паскаль матрицы Darf Помощь студентам 3 15.05.2009 08:49
Матрицы в Паскаль katysever Помощь студентам 5 12.01.2009 22:31
матрицы паскаль Кирилл17 Помощь студентам 4 28.12.2008 16:33