На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Сортировка точек
    Дано описание
    ExpandedWrap disabled
      Point=record
                         x,y:integer;
                        end;
      a1,b1,c1:point;
      a,b,c:point;

    Так вот мне нужен наибыстрейший код сортировки точек a1, b1, c1 так чтобы в A оказалась точка с минимальным значением Y, в C с максимальным значением, а в B со средним значением Y.
      Хе! :)
      Попробуй так (не проверено, но д.б. правильно):
      ExpandedWrap disabled
        If (A1.Y <= B1.Y) and (A1.Y <= C1.Y) then
           Begin A := A1; If B1.Y <= C1.Y then
              Begin B := B1; C := C1 End else Begin B := C1; C := B1 End End
        else If (B1.Y <= C1.Y) and (B1.Y <= A1.Y) then
           Begin A := B1; If C1.Y <= A1.Y then
              Begin B := C1; C := A1 End else Begin B := A1; C := C1 End End
        else {If (C1.Y <= A1.Y) and (C1.Y <= B1.Y) then}
           Begin A := C1; If A1.Y <= B1.Y then
              Begin B := A1; C := B1 End else Begin B := B1; C := A1 End End
        А я бы предложил такой вариант: маленький метод пузырька:
        ExpandedWrap disabled
          type
            Point=record  
              x,y:integer;  
            end;
          var
            a1,b1,c1:point;
            a,b,c,temp:point;  
          begin
          ...................
            a:=a1;
            b:=b1;
            c:=c1;
            if a.y>b.y then
            begin
              temp:=a;
              a:=b;
              b:=temp;
            end;
            if b.y>c.y then
            begin
              temp:=b;
              b:=c;
              c:=temp;
            end;
            if a.y>b.y then
            begin
              temp:=a;
              a:=b;
              b:=temp;
            end;
          ...................
          end.
          Возьму на себя смелость дать анализ этих двух программ.

          Первая, в зависимости от расклада, сравнивает от 3 до 5 раз,
          3 раза присваивает и 1 или 2 раза логически умножает.

          Вторая сравнивает 3 раза и присваивает(опять же в зависимости
          от расклада) от 3 до 12 раз

          Если человеку нужен самый быстрый код, то вот в этой программе
          3(или даже 2) сравнения и 3 присвоения при любых значениях.

          . . . . . . . . . . . . .
          if a1.y<b1.y then if c1.y<b1.y then if c1.y<a1.y then begin a:=c1; b:=a1; c:=b1 end
                                                                          else begin a:=a1; b:=c1; c:=b1 end
                                                  else begin a:=a1; b:=b1; c:=c1 end
                          else if c1.y<a1.y then if c1.y<b1.y then begin a:=c1; b:=b1; c:=a1 end
                                                                          else begin a:=b1; b:=c1; c:=a1 end
                                                  else begin a:=b1; b:=a1; c:=c1 end;
          . . . . . . . . . . . . .
          Сообщение отредактировано: SergM -
            Пасиба!
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0213 ]   [ 15 queries used ]   [ Generated: 14.02.25, 11:23 GMT ]