Другие языки программирования и технологии

Помогите исправить ошибку в коде программы на паскале.

Ввести с клавиатуры целое число (условие задачи фото 1).
Если ввожу число в интервале от 10 до 20, то все считается правильно (фото 2).
Но если я ввожу число в интервале от -1 до 10, то ничего не происходит (фото 3).
Помогите пожалуйста исправить ошибку в коде.
Прилагаю код программы:
--------------------------------------------------------------------------------------
{ 1. Задаем массив и выводим на экран }
program massiv;
{ uses crt; }
type matr= array[-50..50,-50..50] of integer;
procedure vvod (var b:matr; n,m:integer);
var i,j:integer;
begin
cls;
for i:=1 to 5 do
for j:=1 to 7 do
b[i,j]:=random(10);
end;
procedure vivod ( b:matr; n,m:integer);
var i,j:integer;
begin
for i:=1 to 5 do
begin
for j:=1 to 7 do
write(b[i,j]:4);
writeln;
end;
end;
//----------------------------------------------------------------------------
var b:matr; n,m:integer;
a,i,j,t,min2,min1,buf:integer;
X: array [1..60] of integer;
Y: array [1..60] of integer;
Z:real;
BEGIN
writeln('Massiv B: ');
vvod(b,n,m);
vivod(b,n,m);
{ 2. Вводим целое число }
writeln;
write('Vvedite celoe chislo: ');
read(a);
{ 3. Интервал от 10 до 20 }
// Преобразование каждого элемента на -8
for i:=1 to 5 do begin
for j:=1 to 7 do begin
if(a>=10) then if (a<=20) then begin
writeln;
write('Преобразованный массив: ');
b[i,j]:=b[i,j]-8;
{ 4. Если элемент B[i,j]>=0, то выполнить преобразование дальше }
writeln;
for i:=1 to 5 do begin
for j:=1 to 7 do begin
if B[i,j]>=0 then
t:=B[i,j]-8
{ 5. Если меньше - то умножить элемент на -1 и продолжить преобразазование }
else
if B[i,j]<0 then
t:=B[i,j]*(-1)-8;
write(t:4);
end;
{ 6. Интервал -1 до 10 }
// Вычислить Z=(exp(|Xmin|)-exp(|Ymin|)/10
if(a>=-1) then if (a<=10) then begin
cls;
{Задаём массив X}
buf:=random(50);
for i:=1 to 14 do
begin
X[i]:=buf;
buf:=random(101) - 50;
end;
{Выводим массив X}
writeln ('Массив X');
for i:=1 to 14 do
begin
write ('X[',i, ']=',X[i], ' ');
end;
writeln;
{Задаём массив Y}
buf:=random(50) ;
for i:=1 to 16 do
begin
Y[i]:=buf;
buf:=random(101) - 50;
end;
{Выводим массив Y}
writeln ('Массив Y');
for i:=1 to 16 do
begin
write ('Y[',i, ']=',Y[i], ' ');
end;
{Находим минимум массива Х}
min1:=X[1];
for i:=1 to 14 do
begin
if X[i] <= min1 then
min1:=X[i];
end;
writeln;
writeln ('minX=', min1);
{Находим минимум массива Y}
min2:=Y[1];
for i:=1 to 16 do
begin
if Y[i] <= min2 then
min2:=Y[i];
end;
writeln ('minY=', min2);
Z:=(exp(abs(min1))-exp(abs(min2))/10);
Writeln ('z=',z);
end;
end;
end;
end;
end;
end.
Прочитав задание, понял что прочитал ахинею.
АБ
Алексей Бибко
20 235
Лучший ответ
Вы вводите некоторое число А с клавиатуры. Допустим. Для этого введенного числа описаны три варианта: оно либо от 10 до 20, либо от -1 до 10, либо от -20 до -10. Или, расположив интервалы по возрастанию, имеем: -20 < A < -10; -1 < A < 10; 10 < А < 20. Соответственно, для каждого интервала свой алгоритм обработки. В первом случае это работа с "данным файлом", во-втором, обработка массивов X и Y и в третьем - обработка двухмерного массива В.

Сразу вопрос, к какому диапазону принадлежат граничные значения? Что делать, если ввели число 10? Обрабатывать его по второму или третьему сценарию? В обоих случаях присутствует слово "интервал". И что делать, если ввели число в диапазоне -10 -1? А может диапазон -1 < A < 10 на самом деле является диапазоном -10< A < 10?

Как бы там ни было, вам нужно отнести введенное число к одному из трех диапазонов и выполнять свои действия для каждого из них. Вы же все пустили по одному пути. Возможно, проблема именно в этом. Не разбирался.

Итак, разделение на диапазоны можно сделать либо с помощью условного оператора if, либо оператором множественного выбора case. Допустим, это будет case (не забудьте проверить и изменить границы диапазонов):

case a of
-20..-10 : Process1;
-1.. 10 : Process2;
10..20 : Process3
else
WriteLn('Введенное число не попадает ни в один диапазон ');
end;

Здесь Process1, Process2 и Process3 - процедуры работы с файлами, массивами X и Y и обработка массива B, соответственно.

На мой взгляд, если вы прислушаетесь к моему мнению, программа станет гораздо "читабельнее" и искать в ней возможные ошибки будет значительно легче.