Алгоритмическая ошибка это

Лекция носит факультативный характер. Здесь мы рассматриваем виды допускаемых в программировании ошибок, способы тестирования и отладки программ,

Аннотация: Лекция носит факультативный характер. Здесь мы рассматриваем виды допускаемых в программировании ошибок, способы тестирования и отладки программ, инструменты встроенного отладчика.

Цель лекции

Освоить работу с встроенным отладчиком, изучить категории ошибок, способы их обнаружения и устранения.

Тестирование и отладка программы

Чем больше опыта имеет программист, тем меньше ошибок в коде он совершает. Но, хотите верьте, хотите нет, даже самый опытный программист всё же допускает ошибки. И любая современная среда разработки программ должна иметь собственные инструменты для отладки приложений, а также для своевременного обнаружения и исправления возможных ошибок. Программные ошибки на программистском сленге называют багами (англ. bug — жук), а программы отладки кода — дебаггерами (англ. debugger — отладчик). Lazarus, как современная среда разработки приложений, имеет собственный встроенный отладчик, работу с которым мы разберем на этой лекции.

Ошибки, которые может допустить программист, условно делятся на три группы:

  1. Синтаксические
  2. Времени выполнения (run-time errors)
  3. Алгоритмические

Синтаксические ошибки

Синтаксические ошибки легче всего обнаружить и исправить — их обнаруживает компилятор, не давая скомпилировать и запустить программу. Причем компилятор устанавливает курсор на ошибку, или после неё, а в окне сообщений выводит соответствующее сообщение, например, такое:

Найденная компилятором синтаксическая ошибка - нет объявления переменной i

Рис.
27.1.
Найденная компилятором синтаксическая ошибка — нет объявления переменной i

Подобные ошибки могут возникнуть при неправильном написании директивы или имени функции (процедуры); при попытке обратиться к переменной или константе, которую не объявляли (
рис.
27.1); при попытке вызвать функцию (процедуру, переменную, константу) из модуля, который не был подключен в разделе uses; при других аналогичных недосмотрах программиста.

Как уже говорилось, компилятор при нахождении подобной ошибки приостанавливает процесс компиляции, выводит сообщение о найденной ошибке и устанавливает курсор на допущенную ошибку, или после неё. Программисту остается только внести исправления в код программы и выполнить повторную компиляцию.

Ошибки времени выполнения

Ошибки времени выполнения (run-time errors) тоже, как правило, легко устранимы. Они обычно проявляются уже при первых запусках программы, или во время тестирования. Если такую программу запустить из среды Lazarus, то она скомпилируется, но при попытке загрузки, или в момент совершения ошибки, приостановит свою работу, выведя на экран соответствующее сообщение. Например, такое:

Сообщение Lazarus об ошибке времени выполнения

Рис.
27.2.
Сообщение Lazarus об ошибке времени выполнения

В данном случае программа при загрузке должна была считать в память отсутствующий текстовый файл MyFile.txt. Поскольку программа вызвала ошибку, она не запустилась, но в среде Lazarus процесс отладки продолжается, о чем свидетельствует сообщение в скобках в заголовке главного меню, после названия проекта. Программисту в подобных случаях нужно сбросить отладчик командой меню «Запуск -> Сбросить отладчик«, после чего можно продолжить работу над проектом.

Ошибка времени выполнения может возникнуть не только при загрузке программы, но и во время её работы. Например, если бы попытка чтения несуществующего файла была сделана не при загрузке программы, а при нажатии на кнопку, то программа бы нормально запустилась и работала, пока пользователь не нажмет на эту кнопку.

Если программу запустить из самой Windows, при возникновении этой ошибки появится такое же сообщение. При этом если нажать «OK«, программа даже может запуститься, но корректно работать все равно не будет.

Ошибки времени выполнения бывают не только явными, но и неявными, при которых программа продолжает свою работу, не выводя никаких сообщений, а программист даже не догадывается о наличии ошибки. Примером неявной ошибки может служить так называемая утечка памяти. Утечка памяти возникает в случаях, когда программист забывает освободить выделенную под объект память. Например, мы объявляем переменную типа TStringList, и работаем с ней:

begin
  MySL:= TStringList.Create;
  MySL.Add('Новая строка');
end;
    

В данном примере программист допустил типичную для начинающих ошибку — не освободил класс TStringList. Это не приведет к сбою или аварийному завершению программы, но в итоге можно бесполезно израсходовать очень много памяти. Конечно, эта память будет освобождена после выгрузки программы (за этим следит операционная система), но утечка памяти во время выполнения программы тоже может привести к неприятным последствиям, потребляя все больше и больше ресурсов и излишне нагружая процессор. В подобных случаях после работы с объектом программисту нужно не забывать освобождать память:

begin
  MySL:= TStringList.Create;
  MySL.Add('Новая строка');
  ...; //работа с объектом
  MySL.Free; //освободили объект
end;
    

Однако ошибки времени выполнения могут случиться и во время работы с объектом. Если есть такой риск, программист должен не забывать про возможность обработки исключительных ситуаций. В данном случае вышеприведенный код правильней будет оформить таким образом:

begin
  try
    MySL:= TStringList.Create;
    MySL.Add('Новая строка');
    ...; //работа с объектом
  finally
    MySL.Free; //освободили объект, даже если была ошибка
  end;
end;
    

Итак, во избежание ошибок времени выполнения программист должен не забывать делать проверку на правильность ввода пользователем допустимых значений, заключать опасный код в блоки try…finally…end или try…except…end, делать проверку на существование открываемого файла функцией FileExists и вообще соблюдать предусмотрительность во всех слабых местах программы. Не полагайтесь на пользователя, ведь недаром говорят, что если в программе можно допустить ошибку, пользователь эту возможность непременно найдет.

Алгоритмические ошибки

Если вы не допустили ни синтаксических ошибок, ни ошибок времени выполнения, программа скомпилировалась, запустилась и работает нормально, то это еще не означает, что в программе нет ошибок. Убедиться в этом можно только в процессе её тестирования.

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

Если программа работает правильно с одними наборами исходных данных, и неправильно с другими, то это свидетельствует о наличии алгоритмической ошибки. Алгоритмические ошибки иногда называют логическими, обычно они связаны с неверной реализацией алгоритма программы: вместо «+» ошибочно поставили «-«, вместо «/» — «*», вместо деления значения на 0,01 разделили на 0,001 и т.п. Такие ошибки обычно не обнаруживаются во время компиляции, программа нормально запускается, работает, а при анализе выводимого результата выясняется, что он неверный. При этом компилятор не укажет программисту на ошибку — чтобы найти и устранить её, приходится анализировать код, пошагово «прокручивать» его выполнение, следя за результатом. Такой процесс называется отладкой.

Отладка — процесс поиска и устранения ошибок, чаще алгоритмических. Хотя отладчик позволяет справиться и с ошибками времени выполнения, которые не обнаруживаются явно.

Алгоритмическая ошибка

Cтраница 1

Алгоритмические ошибки значительно труднее поддаются обнаружению методами формализованного автоматического контроля, чем предыдущие типы ошибок. К алгоритмическим следует отнести прежде всего ошибки, обусловленные некорректной постановкой функциональных задач, когда в спецификациях не полностью оговорены все условия, необходимые для получения правильного результата. Эти условия формируются и уточняются в значительной части в процессе тестирования и выявления ошибок в результатах функционирования программ. Ошибки, обусловленные неполным учетом всех условий решения задач, являются наиболее частыми в этой группе и составляют до 70 % всех алгоритмических ошибок или около 30 % общего количества ошибок на начальных этапах проектирования.
 [1]

Алгоритмические ошибки и ошибки кодирования, связанные с некорректной формулировкой и реализацией алгоритмов программным путем.
 [2]

Алгоритмические ошибки значительно труднее поддаются обнаружению методами формального автоматического контроля, чем все предыдущие типы ошибок. Это определяется прежде всего отсутствием для большинства логических управляющих алгоритмов строго формализованной постановки задач, которую можно использовать в качестве эталона для сравнения результатов функционирования разработанных алгоритмов. Разработка управляющих алгоритмов осуществляется обычно при наличии большого количества параметров и в условиях значительной неопределенности самой исходной постановки задачи. Эти условия формируются в значительной части в процессе выявления ошибок по результатам функционирования алгоритмов. Ошибки некорректной постановки задач приводят к сокращению полного перечня маршрутов обработки информации, необходимых для получения всей гаммы числовых и логических решений, или к появлению маршрутов обработки информации, дающих неправильный результат. Таким образом, область получающихся выходных результатов изменяется.
 [3]

Алгоритмические ошибки представляют собой ошибки в программной трактовке алгоритма, например недоучет всех вариантов работы алгоритма.
 [4]

К алгоритмическим ошибкам следует отнести также ошибки связей модулей и функциональных групп программ.
 [5]

К алгоритмическим ошибкам следует отнести также ошибки сопряжения алгоритмических блоков, когда информация, необходимая для функционирования некоторого блока, оказывается неполностью подготовленной блоками, предшествующими по моменту включения. Этот тип ошибок также можно квалифицировать как ошибки некорректной постановки задачи, однако в данном случае некорректность может проявляться при определенной временной последовательности функционирования алгоритмических блоков.
 [6]

С алгоритмическими ошибками дело обстоит иначе. Компиляция программы, в которой есть алгоритмическая ошибка, завершается успешно. При пробных запусках программа ведет себя нормально, однако при анализе результата выясняется, что он неверный. Для того чтобы устранить алгоритмическую ошибку, приходится анализировать алгоритм, вручную прокручивать его выполнение.
 [8]

Особую часть алгоритмических ошибок составляют просчеты в использовании доступных ресурсов ВС. Одновременная разработка множества модулей различными специалистами затрудняет оптимальное распределение ограниченных ресурсов ЭВМ по всем задачам, так как отсутствуют достоверные данные потребных ресурсов для решения каждой из них. В результате возникает либо недоиспользование, либо ( в подавляющем большинстве случаев) нехватка каких-то ресурсов ЭВМ для решения задач в первоначальном варианте. Наиболее крупные просчеты обычно происходят при оценке времени реализации различных групп программ и при распределении производительности ЭВМ.
 [9]

Этот побочный эффект может привести к алгоритмическим ошибкам при работе программы. Для того чтобы избавить программиста от необходимости помнить о таком побочном эффекте, достаточно в начале макрокоманды сохранять, а после выполнения восстанавливать содержимое этих регистров. Для этих целей в СМ ЭВМ обычно используется стек. Необходимо отметить, что в отдельных случаях сохранение регистров не обязательно.
 [10]

В предыдущем параграфе был рассмотрен характер формирования алгоритмической ошибки вычислений при отсутствии искажающих воздействий со стороны окружающей среды и вычислительной системы. В реальных условиях на процесс смены состояний АлСУ и ошибку выходных сигналов существенное влияние оказывают искажающие воздействия, которые по отношению к управляющему объекту могут быть как внешними, так и внутренними. Внешние воздействия, источником которых является внешняя ( по отношению к управляющему объекту) среда, связаны с ошибками определения параметров управляемого процесса, отказами и сбоями в работе датчиков информации, каналов связи и преобразующих устройств. Внутренние воздействия, источниками которых являются ЦВМ или комплексы ЦВМ, используемые для реализации алгоритмической системы, обусловлены сбоями, частичными отказами и прерываниями.
 [11]

Кроме того, значительные трудности представляет разделение системных и алгоритмических ошибок и выделение доработок, которые не следует квалифицировать как ошибки.
 [12]

Однако формула ( 29) позволяет судить о характере формирования алгоритмической ошибки в реальных системах и сделать важный вывод о несостоятельности попыток оценки качества АлСУ всякого рода контрольными просчетами.
 [13]

Защита от перегрузки ЭВМ по пропускной способности предполагает обнаружение и снижение влияния последствий алгоритмических ошибок, обусловленных неправильным определением необходимой пропускной способности ЭВМ для работы в реальном времени. Кроме того, перегрузки могут быть следствием неправильного функционирования источников информации и превышения интенсивности потоков сообщений расчетного, нормального, уровня. Последствия обычно сводятся к прекращению решения некоторых функциональных задач, обладающих низким приоритетом.
 [14]

В настоящее время структурные методы контроля ориентированы в основном на обнаружение и доказательство отсутствия технологических и некоторых алгоритмических ошибок в записи программ, которые выполняются на этапе программной отладки.
 [15]

Страницы:  

   1

   2

   3

Точность цифрового моделирования

В реальности мы будем иметь:

Моделирование сопровождается
алгоритмической и вычислительной
ошибками:


.

1) Алгоритмическая ошибка – это
методическая ошибка. Связана с заменой
ДУ на разностные уравнения (дискретизация).

2) Вычислительная ошибка: связана с
округлением величин, с неточным заданием
коэффициентов.

Алгоритмическая ошибка

Для любого типа цифрового фильтра
ограничивается сверху значением:


;


;

— максимальная частота в спектре сигнала

Т – шаг
дискретизации.

и R
определяются сигналом и устройством.

Значит: для уменьшения алгоритмической
ошибки надо уменьшать шаг дискретизации
Т.

Вычислительная ошибка

Если задано время реализации

,
то при увеличении Т
количество математических операций
уменьшается, а, значит, уменьшается
вычислительная ошибка.


Для нахождения

необходимо исследовать суммарную
погрешность на экстремум, что не всегда
удобно.

Практически делается следующее.

Исследуется выходная решетчатая функция

при различных Т. При этом шаг дискретизации
то увеличивают, то уменьшают. Далее
выбирают шаги дискретизации, при
которых функции

в определенные моменты времени совпадают.
Из этих двух шагов выбирают больший.

Цифровое моделирование нелинейных узлов р/устройств

Нелинейные узлы делятся на 4 части:

  1. Безынерционные
    нелинейные звенья (БНЗ).

Цифровое моделирование таких узлов
связано с преобразованием входного
сигнала

в выходной

в соответствии с характеристикой
нелинейности:


.

Если

задана аналитически, моделирование
осуществляется путем вычисления по
формуле; если

задана графически или таблицей, то
моделирование осуществляется с помощью
таблиц.

  1. Нелинейные
    инерционные функциональные разомкнутые
    звенья.

Это звенья, в которых можно выделить
развязанные относительно друг друга
линейные инерционные и безынерционные
звенья.

— передаточные функции линейных
инерционных звеньев.

  1. Нелинейные
    инерционные функциональные замкнутые
    звенья.

К таким замкнутым звеньям сводятся
большинство следящих устройств.

  1. Нелинейные
    инерционные нефункциональные звенья.

Способ моделирования – с помощью
нелинейных ДУ.

Рассмотрим моделирование нелинейных
инерционных функциональных замкнутых
звеньев.

Пусть звено с

— это фильтр первого порядка с постоянными
коэффициентами

Пусть

.

Тогда:

В каждом такте моделирования надо решать
нелинейное относительно

уравнение. Это всегда имеет место при
моделировании замкнутых функциональных
нелинейных узлов.

Для упрощения вычислений используют
вычисленные в предыдущем такте значения
Y.
Получим:

В модель вводится блок

.
Введение этого блока приводит к
дополнительной ошибке, которую можно
сделать сколь угодно малой, уменьшая
Т. Получаем:

Одно и то же устройство может принадлежать
к любому из 4-ех классов.

Р
ассмотрим
амплитудный детектор.

1. Как устройство первого класса АД
моделируется, если моделируются его
функциональные преобразования (формально
описывается преобразование сигнала).


.

Недостаток данной цифровой модели:
необходимость помнить всю реализацию
входного сигнала от

до

.

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

и этот фильтр – цифровая модель RC-цепи.

3. Если при моделировании надо учесть
реакцию нагрузки на диод, то детектор
моделируется как устройство 3-его класса.

— температурный потенциал


тепловая энергия


заряд


;

Переход от тока диода к выходному
напряжению осуществляется с помощью
линейного инерционного звена, имеющего
передаточную функцию, определяемую
нагрузкой детектора:



.


.

4. Если требуется учесть инерционные
свойства диода, то АД моделируется как
4-ый класс. Решение – решение нелинейного
дифференциального уравнения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Отладка программ

Введение

Успешное завершение процесса компиляции не означает, что в программе нет ошибок. Убедиться, что программа работает правильно, можно только в процессе проверки ее работоспособности, который называется тестирование. Обычно программа редко сразу начинает работать так, как надо, или работает правильно только на некотором ограниченном наборе исходных данных. Это свидетельствует о том, что в программе есть алгоритмические ошибки. Процесс поиска и устранения ошибок называется отладкой

Классификация ошибок

Введение

Ошибки, которые могут быть в программе, принято делить на три группы:

  • синтаксические;
  • ошибки времени выполнения;
  • алгоритмические.

Синтаксические ошибки

Синтаксические ошибки, их также называют ошибками времени компиляции (Compile-time error), наиболее легко устранимы. Их обнаруживает компилятор, а программисту остается внести изменения в текст программы и выполнить повторную компиляцию.

Ошибки времени выполнения

Ошибки времени выполнения, они называются исключениями (Exception), тоже, как правило, легко устранимы. Они обычно проявляются уже при первых запусках программы и во время тестирования

При возникновении ошибки в программе, запущенной из ИСР, среда прерывает работу программы и в окне сообщений дает информацию о типе ошибки.

После возникновения ошибки программист может либо прервать выполнение программы, либо продолжить ее выполнение, например, по шагам, наблюдая результат выполнения каждой инструкции.

Если программа запущена из Windows, то при возникновении ошибки на экране также появляется сообщение об ошибке, но тип ошибки (исключения) в сообщении не указывается. После щелчка на кнопке ОК программа, в которой проявилась ошибка, продолжает (если сможет) работу.

Алгоритмические ошибки

С алгоритмическими ошибками дело обстоит иначе. Компиляция программы, в которой есть алгоритмическая ошибка, завершается успешно. При пробных запусках программа ведет себя нормально, однако при анализе результата выясняется, что он неверный. Для того чтобы устранить алгоритмическую ошибку, приходится анализировать алгоритм, вручную “прокручивать” его выполнение.

Предотвращение и обработка ошибок

В программе во время ее работы могут возникать ошибки, причиной которых, как правило, являются действия пользователя. Например, пользователь может ввести неверные данные или, что бывает довольно часто, удалить нужный программе файл. Нарушение в работе программы называется исключением. Обработку исключений (ошибок) берет на себя автоматически добавляемый в выполняемую программу код, который обеспечивает, в том числе, вывод информационного сообщения.

FPC и ИСР предоставляют программисту мощные средства:

  • Компилятор с регулируемыми опциями.

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

TwitterSEO CommunityВаау!News2.ruChippKoricaSMI2Google BookmarksDiggI.uaЗакладки YandexLinkstoreMyscoopCommunizmRu-marksWebmarksRuspaceLinkomaticKli.kzWeb-zakladkaZakladok.netRedditdeliciousMa.gnoliaTechnoratiSlashdotYahoo My WebБобрДобр.ruMemori.rurucity.comМоёМесто.ruMister Wong

Термин и определение

Алгоритмические ошибки

Опубликовано:
yuliya-aleksandrova-1973

Предмет:
Информатика

👍 Проверено Автор24

ошибки в методе, постановке, сценарии и реализации.

Научные статьи на тему «Алгоритмические ошибки»

1.

Уравнения и передаточные функции одноконтурной САУ

Рассмотрим алгоритмическую схему, которая соответствует схеме типовой одноконтурной системы автоматического…
На входе управляющего устройства с передаточной функцией Wp(p) действует сигнал рассогласования/ошибки
Алгоритмическая схема системы автоматического управления….
Алгоритмическая схема системы автоматического управления….
Алгоритмы управления в автоматических системах управления
Алгоритмом управления устанавливается связь ошибки

Статья от экспертов

Автор24

2.

Алгоритмическая и программная реализация построения оптимальных моделей прогноза

Рассматривается методика отыскания моделей прогноза с минимальными ошибками прогноза. Основу методики составляют полиномиальные модели параметрического прогноза и алгоритмическая схема поиска оптимальных моделей прогноза.

3.

Исполнитель Чертежник в среде КуМир

Исполнитель «Чертежник» в среде КуМир — это программа для формирования рисунков и чертежей, написанная на алгоритмическом
Исполнитель Чертёжник написан на алгоритмическом языке, то есть в системе, которая имеет обозначения…
У алгоритмического языка есть свой словарный комплект, основанный на словах, употребляемых для отображения…
написано заместится на вектор, то такая запись будет непонятна Чертёжнику, и он выдаст сообщение об ошибке
Такого типа ошибки в формулировании команды считаются синтаксическими.

Статья от экспертов

Автор24

4.

Алгоритмическое исключение многолучевой погрешности из радионавигационных измерений

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

Повышай знания с онлайн-тренажером от Автор24!

  • 📝 Напиши термин
  • ✍️ Выбери определение из предложенных или загрузи свое
  • 🤝 Тренажер от Автор24 поможет тебе выучить термины, с помощью удобных и приятных
    карточек

Понравилась статья? Поделить с друзьями:
  • Алгоритм обратного распределения ошибки
  • Алгоритм минимизации среднеквадратической ошибки
  • Алгоритм исправления ошибок
  • Алгоритм error backpropagation является методом обучения
  • Алайт моушен 1037 ошибка