Цитата:
Сообщение от citrus
теперь проблема в другом, не совсем корректно работает вот эта часть программы
Код HTML:
Function Up (x:mas; C:Byte):Real;
Var i,j,T:byte;
Fl:boolean;
Begin
T:=0;
For i:=1 to C do
begin
Fl:=true;
For j:=1 to C-1 do
If x[i,j]<x[i,j+1] then Fl:=false;
if Fl then T:=T+1;
end;
Up:=T;
End;
тут же через досрочный выход нужно..я сделал, а он некорректно считает кол-во упорядоченных в первой матрице..почему-то еще прибавляет лишнее туда.
|
Так, давайте расставим точки над i. Вы привели текст моей функции, которая, уверяю Вас, работает вполне корректно и ничего лишнего не добавляет. Теперь рассмотрим Ваш вариант:
Код:
Function Up ( x:mas; C:Byte):real;
Var i,j,T:byte;
Fl:boolean;
Begin
T:=0;
i:=1;
Fl:=true;
While (i<=C) and (Fl) do
begin
j:=1;
While (j<=C-1) and (Fl) do
begin
If x[i,j]>x[i,j+1] then
begin
T:=T+1;
j:=j+1;
end
else Fl:=false
end;
i:=i+1;
end;
Up:=T;
end;
Ошибка в том, что Вы затолкали операцию T:=T+1 внутрь цикла по элементам строки, а надо в цикл по строкам, т.е. значение Т должно увеличиваться, только если ВСЯ СТРОКА упорядочена, а не пара соседних элементов. Исправляйте.
P.S. А что, обязательно нужно было прерывание цикла организовывать? Просто иногда есть смысл допустить выполнение лишних операций ради упрощения алгоритма. На современных компьютерах это не имеет большого значения.