Помогите, пожалуйста, проверить, рационально ли выполняется программа, нет ли в ней лишних проверок
const
t = 100;
var
a: array[1..t, 1..t] of integer;
i, j, n, m, index_i, index_j: integer;
begin
repeat
write('Ввведите размерность n<=100 и m<=100 для матрицы A: ');
readln(n, m);
until (n >= 1) and (n <= 100) and (m >= 1) and (m <= 100);
writeln('Введите матрицу A :');
for i := 1 to n do
for j := 1 to m do
begin
read(a[i, j]);
end;
index_i := 0;
index_j := 0;
for i := 1 to n do
for j := 1 to m do
begin
if index_i = 0 then
if (a[i, j] < 0) and ((i + j) mod 2 = 1) then {проверка, является ли наш элемент отрицательным с нечетной суммой индексов}
begin
index_i := i; {если да, запоминаем его позицию}
index_j := j;
end
else if (a[i, j] < 0) and (index_i <> 0) and (a[i, j] > a[index_i, index_j]) and ((i + j) mod 2 = 1) then
{в этом IF проверка index_i <> 0 нужна для того, чтобы при index_i = 0 мы не вышли за границы массива при проверке a[i, j] > a[index_i, index_j] }
begin
index_i := i; {если условия выполнены, запоминаем позицию минимального отриц с нечет суммой индексов}
index_j := j;
end;
end;
if index_i = 0 then writeln('Ответ: нет таких элементов')
else writeln('Ответ: ', a[index_i, index_j]);
end.
Другие языки программирования и технологии
Проверить рациональность выполнения программы pascal
Сам разбирай неформатированый код. Лучше б картинку прислал.
Вадим Жучков
ее отформатировать в pascal abc в один клик можно. халявщик, который зарабатывает баллы на конченых ответах
Если упрощать твой алгоритм:
if (a[i, j] < 0) and odd(i + j) then begin
if index_i = 0 then begin
index_i := i;
index_j := j
end else if a[i, j] > a[index_i, index_j] then begin
index_i := i;
index_j := j
end
end;
В некоторых диалектах Pascal можно упростить (если компилятор оптимизирует логическое выражение так, что при истинности index_i = 0 подвыражение a[i, j] > a[index_i, index_j] не будет выполнено). Но нет гарантии, что сработает в любом компиляторе:
if (a[i, j] < 0) and odd(i + j) and ((index_i = 0) or (a[i, j] > a[index_i, index_j])) then begin
index_i := i;
index_j := j
end;
Ещё проще (и гарантировано работает в любом случае) - запоминать не индексы, а значение:
max := 0; {целочисленная переменная}
for i := 1 to n do
for j := 1 to m do
if odd(i + j) and (a[i, j] < 0) and ((max = 0) or (a[i, j] > max)) max := a[i, j];
write('Ответ: ');
if max = 0 then writeln('нет таких элементов') else writeln(max)
if (a[i, j] < 0) and odd(i + j) then begin
if index_i = 0 then begin
index_i := i;
index_j := j
end else if a[i, j] > a[index_i, index_j] then begin
index_i := i;
index_j := j
end
end;
В некоторых диалектах Pascal можно упростить (если компилятор оптимизирует логическое выражение так, что при истинности index_i = 0 подвыражение a[i, j] > a[index_i, index_j] не будет выполнено). Но нет гарантии, что сработает в любом компиляторе:
if (a[i, j] < 0) and odd(i + j) and ((index_i = 0) or (a[i, j] > a[index_i, index_j])) then begin
index_i := i;
index_j := j
end;
Ещё проще (и гарантировано работает в любом случае) - запоминать не индексы, а значение:
max := 0; {целочисленная переменная}
for i := 1 to n do
for j := 1 to m do
if odd(i + j) and (a[i, j] < 0) and ((max = 0) or (a[i, j] > max)) max := a[i, j];
write('Ответ: ');
if max = 0 then writeln('нет таких элементов') else writeln(max)
Вадим Жучков
благодарю
if (a[i, j] < 0) and (index_i <> 0) and (a[i, j] > a[index_i, index_j]) and ((i + j) mod 2 = 1)
это условие никогда не будет верным, потому что иф вложен в if index=0
это условие никогда не будет верным, потому что иф вложен в if index=0
Вадим Жучков
будет, когда по ветке then его значение изменится
Похожие вопросы
- Как исправить недочет в программе Pascal?
- С++: Как изменять размеры многомерных динамических массивов по ходу выполнения программы?
- Здраствуйте. Оцените программу. Pascal ABC.
- Что не так с программой? Pascal
- помогите написать программу pascal
- программа Pascal. Ввести возраст человека( от 1 до 150 лет)....
- Почему нельзя настраивать массив в процессе работы программы? Pascal ABC ну и если так вообще везде?
- Напишите программу Pascal
- помогите написать программу Pascal строки
- Срочно!!! Не займет много времени!!! Ломаю голову над вопросом, Помогите!!! Программа. Pascal. Паскаль