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

Цитата:
Сообщение от 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. А что, обязательно нужно было прерывание цикла организовывать? Просто иногда есть смысл допустить выполнение лишних операций ради упрощения алгоритма. На современных компьютерах это не имеет большого значения.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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