我有一个代码。该代码在重复..until 循环中对输入数据进行了 2 次检查。问题是:为什么这些检查不能正常工作?也就是说,文本的颜色不是红色的,即使数字在所需范围内,也始终显示文本。我也有白色的问题(注释线)。线条通常变为无色。可能是什么问题呢?
编码:
uses crt;
var a:array[1..24,1..24] of integer;
n,m,i,j,k,v,tmp:integer; {размеры матрицы,счетчики циклов, буфер для обмена}
begin
randomize();
writeln();
writeln('------------------------------------------------------------------------------------------------------------------------------------------------------------------------');
writeln();
writeln(' Ввод размеров матрицы....................... ');
write(' Введите количество строк n > ');
repeat
readln(n);
if (n < 1) and (n > 23) then
textcolor(12);
writeln('Ошибка ввода, попробуйте снова. Число строк должно быть в диапазоне от 1 до 23!');
{textcolor(0);}
write(' Введите количество строк n > ');
until n in [1..23]; {!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
write(' Введите количество столбцов > ');
repeat
readln(m);
if (m < 1) and (m > 23) then
textcolor(12);
writeln('Ошибка ввода, попробуйте снова. Число столбцов должно быть в диапазоне от 1 до 23!');
{textcolor(0);}
write(' Введите количество столбцов > ');
until m in [1..23]; {!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
writeln();
textcolor(13);
writeln('------------------------------------------------------------------------------------------------------------------------------------------------------------------------');
writeln();
writeln('Исходная матрица:');
writeln();
writeln();
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=random(500)-250;{заполним матрицу случайными числами в инт[0,499]}
write(a[i,j]:7);
end;
writeln();
end;
writeln('------------------------------------------------------------------------------------------------------------------------------------------------------------------------');
writeln();
{сортировка матрицы}
for k:=1 to n * m do {повторяем сколько элементов в матрице}
for i:=1 to n do
for j:=1 to m do
begin
if j <> m then {если элемент в строке не последний}
begin
if a[i,j+1] < a[i,j]
then
begin
tmp:=a[i,j+1];
a[i,j+1]:=a[i,j];
a[i,j]:=tmp;
end;
end
else
if (a[i+1,1] < a[i,j])and(i <> n) {если строка не последняя}
{меняем первый элемент в следущей строке с последним элементом в текущей строке}
then
begin
tmp:=a[i+1,1];
a[i+1,1]:=a[i,j];
a[i,j]:=tmp;
end;
end;
textcolor(14);
writeln('------------------------------------------------------------------------------------------------------------------------------------------------------------------------');
writeln();
writeln('Отсортированная матрица:');
writeln();
writeln();
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:7);
writeln();
end;
writeln('------------------------------------------------------------------------------------------------------------------------------------------------------------------------');
writeln();
end.
首先,您有一个
n < 1AND条件n > 23。原则上,这是不可能的 - 你需要使用ИЛИ,即or而不是and.其次,必须在正确的 if 条件下执行的程序主体没有包含在
begin-end.第三,
textcolor(0)它是黑色的,黑色上的黑色会被认为是透明的。白色 -textcolor(15)。这是正确的一段代码(在其他地方你需要通过类比更正它):