Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 22.11.2014, 19:18   #1 (permalink)
Зюня,0
Member
 
Регистрация: 29.05.2014
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Smile Pascal

Здравствуйте!Помогите пожалуйста, если кто может напишите пожалуйста пояснения к каждой строчке в программе, что на каждом этапе происходит. Заранее спасибо!!!!
program mag;
const:
n = 3;
a: array[1 .. n, 1 .. n] of integer =
((1, 2, 1), (1, 1, 1), (1, 1, 1));

var
i, j, s, main: integer;
b: boolean;
begin
s := 0; b := true;

for i := 1 to n do
s := s + a[i, i];
main := s;

for i := 1 to n do
s := s - a[i, n - i + 1];
b := b and (s = 0);

if b then
for i := 1 to n do
begin
s := main;
for j := 1 to n do
s := s - a[i, j];
b := b and (s = 0)
end;

if b then
for j := 1 to n do
begin
s := main;
for i := 1 to n do
s := s - a[i, j];
b := b and (s = 0)
end;

writeln('magic: ', b)
end.
Зюня,0 вне форума   Ответить с цитированием

Старый 22.11.2014, 19:18
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Рекомендую вам внимательно пролистать эти топики, они очень похожи на вашу тему

Pascal
Pascal ABC

Старый 22.11.2014, 19:45   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Было бы существенно легче выполнить Вашу просьбу, если бы Вы потрудились изложить, какую задачу решает данная программа.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.11.2014, 08:05   #3 (permalink)
Зюня,0
Member
 
Регистрация: 29.05.2014
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ой простите!!! Вот текст задачи:
Будет ли квадратная матрица «магическим квадратом» (суммы во всех вертикалях, во всех диагоналях, на обеих диагоналях равны).
Зюня,0 вне форума   Ответить с цитированием
Старый 23.11.2014, 09:29   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Зюня,0 Посмотреть сообщение
Ой простите!!! Вот текст задачи:
Будет ли квадратная матрица «магическим квадратом» (суммы во всех вертикалях, во всех диагоналях, на обеих диагоналях равны).
Понятно.
Извольте:

program mag; {Имя программы}
const: {Грубейшая ошибка. Двоеточие - убрать!!!!! Впрочем, может быть, в каких-то версиях Паскаля это и допустимо - не знаю.}
n = 3; {Задание размерности матрицы}
a: array[1 .. n, 1 .. n] of integer =
((1, 2, 1), (1, 1, 1), (1, 1, 1)); {Задание самой матрицы}

var
i, j, s, main: integer; {Ввод переменных: i,j - индексы, s - текущее значение суммы (столбца, строки, побочной диагонали), main - базовое значение (сумма элементов главной диагонали)}
b: boolean; {Логический флажок для фиксации совпадения (или несовпадения) текущих сумм с базовой}
begin
s := 0; b := true; {Присвоение исходных значений}

for i := 1 to n do {Вычисление суммы элементов главной диагонали и фиксация найденной суммы путём присвоения переменной main значения этой суммы (в дальнейшем сумму элементов главной диагонали будем называть базовой)}
s := s + a[i, i];
main := s;

for i := 1 to n do {Проверка равенства суммы элементов побочной диагонали базовой сумме. Для этого из базовой вычитаются последовательно значения элементов побочной диагонали, и если в результате получится 0, то флажок b сохраняет значение true, если нет - то флажок получает значение false.}
s := s - a[i, n - i + 1];
b := b and (s = 0);

if b then {Если предыдущая проверка прошла успешно, то аналогичным образом проверяем суммы элементов всех строк последовательно. Если хотя в одной из строк сумма элементов отклонилась от базовой, то b становится false.}
for i := 1 to n do
begin
s := main;
for j := 1 to n do
s := s - a[i, j];
b := b and (s = 0)
end;

if b then {То же для столбцов}
for j := 1 to n do
begin
s := main;
for i := 1 to n do
s := s - a[i, j];
b := b and (s = 0)
end;

writeln('magic: ', b) {Вывод результата в виде значения флажка true/false}
end.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.11.2014, 10:13   #5 (permalink)
Зюня,0
Member
 
Регистрация: 29.05.2014
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Большое спасибо!!!!Очень выручили!!!
Зюня,0 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 17:27.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.