Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  00:21[Войти] | [Зарегистрироваться]
Обсуждение темы:
Вопросы оптимизации кода

Тема открыта по просьбе жителей Королевства и посвящена обсуждению вопросов оптимизации кода. Выставляйте свои лучшие и худшие тексты и не стесняйтесь их обсуждать. В споре рождается истина. Или, по крайней мере, оптимизация.

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 737 сообщений

Добавить свое сообщение

Отслеживать это обсуждение


Смотрите также обсуждения:
Тестирование проекта. Отладка.
  • Подводные камни
  • Централизованная обработка ошибок
  • Бета-тестирование
  • Давайте учиться на ошибках.
  • Почему программисты допускают ошибки?
  • Автоматизированные тесты для GUI
  • О системах контроля ошибок

  • <<<... | 727—718 | 717—708 | 707—698 | ...>>>
    Всего сообщений в теме: 737; страниц: 74; текущая страница: 3


    № 717   25-05-2009 04:01 Ответить на это сообщение Ответить на это сообщение с цитированием
    Не помню где недавно вычитал примерно следующее.
    При упоминании распределённых вычислений
    теоретики правильного программирования впадают в панику.


    № 716   25-05-2009 03:58 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 713« (S.)
    ___________________________
    ПРОЦЕДУРА Имя;
    НАЧАЛО
    ...
    Получаем управляющие данные от другого модуля (ещё один вход)
    ...
    ЕСЛИ что-то проверяем ТО выходим из процедуры
    что-то делаем
    ...
    КОНЕЦ;

    2 входа, 2 выхода.

    Оболочка только очерчивает группу переходов.


    № 715   25-05-2009 03:51 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 713« (S.)
    ___________________________
    >>> ***Точка входа в конструкцию ветвления
    >>> ЕСЛИ условие ТО алгоритм1 ИНАЧЕ алгоритм2
    >>> ***Точка выхода из конструкции ветвления

    Какое же это ветвление?
    Это выполнение по условию.
    То есть можно заменить на последовательное.
    ЕСЛИ условие ТО алгоритм1
    ЕСЛИ НЕусловие ТО алгоритм2

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

    Другое дело, что так называемое структурное программирование
    с принципом разработки "сверху вниз" действительно подразумевает
    последовательное, цепочечное выполнение программы.
    Именно от этого устойчивого заблуждения
    появилась упрощенческая формула "один вход, один выход".
    Если вспомнить про параллельное программирование,
    то подобная "структура" с очевидностью выморочна.


    № 714   25-05-2009 02:30 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 713« (S.)
    ___________________________
    >>> На этом обсуждение оптимизации кода можно заканчивать :)
    :D
    Знаете, обычно я на ассемблер перехожу, когда что-то не получается эффективно реализовать на уровне ЯВУ. В частности, я очень люблю машинные команды для обработки строк, и меня дико раздражает, что при компиляции программы на Паскале вместо этих команд используется перебор элементов массива.

    >>> Всегда?
    Да, всегда. Сделаем Вашу процедуру внутренней и для нее допишем процедуру-оболочку

    ПРОЦЕДУРА Оболочка;
    НАЧАЛО
    ВЫЗОВ ПРОЦЕДУРЫ Имя;
    КОНЕЦ;

    Итого имеем один вход и один выход.

    Я ведь сразу уточнил, что всегда относится к ситуации, "Если же речь идет о реализации" ;-)
     Geo


    № 713   24-05-2009 23:03 Ответить на это сообщение Ответить на это сообщение с цитированием
    >>>Функция достаточно эффективна. Размер -- 17 байт.
    На этом обсуждение оптимизации кода можно заканчивать :). Из двух конструкций на языке высокого уровня выбираем тот, для которого транслятор генерирует более короткий и быстродействующий код.

    >>>Ветвление не проходит под формулу "один вход, один выход".
    Если под ветвлением понимать только одно условие, то да. А если всю конструкцию, то нет.

    ***Точка входа в конструкцию ветвления
    ЕСЛИ условие ТО алгоритм1 ИНАЧЕ алгоритм2
    ***Точка выхода из конструкции ветвления

    Впрочем у меня сейчас нет под рукой работ "классиков" по этому вопросу. Что они сами имели в виду утверждать пока не могу. Надо поискать первоисточники...

    >>>Если же речь идет о реализации, то тут проблем никаких: упаковываем
    >>>реализацию алгоритма в процедуру и всегда получаем один вход и один
    >>>выход ;-)

    Всегда?
    ;-)

    ПРОЦЕДУРА Имя;
    НАЧАЛО
    что-то делаем
    ...
    ЕСЛИ что-то проверяем ТО выходим из процедуры
    что-то делаем
    ...
    выходим из процедуры
    КОНЕЦ;

    Здесь 1 вход, но 2 выхода!



    № 712   22-05-2009 07:25 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 687« (S.)
    ___________________________
    Я все же поразвлекался дома и сделал реализацию на ассемблере

    function FindPos(FindVal : Byte; BufPtr : Pointer; BufLen : Integer) : Integer; register;
    asm
      push  edi
      mov  edi,edx
      mov  edx,ecx
      repne scasb
      je    @Found
      xor  edx,edx
    @Found:
      mov  eax,edx
      sub  eax,ecx
      pop  edi
    end;


    Здесь FindVal -- значение, которое нкужно найти (тип -- Byte). BufPtr -- указатель на начало буфера данных. BufLen -- длина буфера. Возвращает позицию байта в буфере, имеющего значение равное FindVal. Нумерация начинается с единицы. Если элемент не найден, возвращается ноль.

    Функция достаточно эффективна. Размер -- 17 байт. И работать будет быстрее, чем предложенные варианты на Паскале, так как оптимизатор ни доля одного варианта не предлагает поиск через REPNE SCAS, а занимается последовательным перебором элементов массива, сравнивая каждый с искомым значеним.
     Geo


    № 711   21-05-2009 12:06 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 705« (S.)
    ___________________________
    >>> у структурного алгоритма должна быть 1 точка входа и 1 точка выхода

    У Дейкстры было последовательное выполнение, цикл и ветвление.
    Ветвление не проходит под формулу "один вход, один выход".
    Либо Вы имели в виду что-то другое.


    № 710   21-05-2009 07:49 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 700« (Александр Алексеев)
    ___________________________

    Цикл for тоже можно исключить из грамматики языка "без какого-либо ущерба".
    Ага. в Python так и сделали. Есть только for-in и while.


    № 709   21-05-2009 06:28 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 701« (S.)
    ___________________________
    >>> А моделировать for с помощью while или repeat - это неудобно
    Думаю, что программисты на Си не поймут данного утверждения. Преимущество цикла FOR в Паскале -- скорость работы. Недостаток -- ограничение на использование переменной цикла. Ну и еще к недостаткам можно отнести, что в цикле WHILE нужно инкремент переменной самростоятельно выполнять, но зато шаг цикла можно делать произвольным. Вот и все различия, которые я смог придумать. А в остальном, что вариант

    for i:=1 to N do
      begin
      // ...
      end;


    что вариант

      i:=1;
      while i <= N do
        begin
        // ...
        Inc(i);
        end;


    да хотя бы и вариант

      for(i=0;i<=N;i++) {
        // ...
      }


    все это -- вещи одного порядка, и особой сложности в переходе с одного на другой не наблюдается.


    Ответ на »сообщение 705« (S.)
    ___________________________
    >>> А какое отношение у общественности к такому принципу структурного программирования: "у структурного алгоритма должна быть 1 точка входа и 1 точка выхода"?
    Не понял, причем тут это. Ну, ладно. Про вход согласен. А вот с выходами -- не совсем. Если рассуждать на уроыне алгоритма, то иногда для полнимания удобнее остановитья на нескольких выходах (например, правильный и ошибочный). Единственно, нужно четко выделять терминальные элементы алгоритма.

    Если же речь идет о реализации, то тут проблем никаких: упаковываем реализацию алгоритма в процедуру и всегда получаем один вход и один выход ;-)
     Geo


    № 708   21-05-2009 06:14 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 707« (Александр Алексеев)
    ___________________________
    Ага. Но это -- поэзия. А сухая проза (для меня) -- это »сообщение 170« и»сообщение 175«
     Geo


    <<<... | 727—718 | 717—708 | 707—698 | ...>>>
    Всего сообщений в теме: 737; страниц: 74; текущая страница: 3


    Добавить свое сообщение

    Отслеживать это обсуждение

    Дополнительная навигация:
    Количество сообщений на странице

    Порядок сортировки сообщений
    Новое сообщение вверху списка (сетевая хронология)
    Первое сообщение вверху списка (обычная хронология)

    Перейти на конкретную страницу по номеру
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования