На каком из этапов устраняются синтаксические и логические ошибки в программе
Выделяют три типа ошибок: ошибки компиляции, ошибки времени выполнения и логические ошибки.
Ошибки компиляции являются синтаксическими ошибками. Они выдаются при компиляции программы. Программа с синтаксическими ошибками не может быть выполнена.
Ошибки времени выполнения связаны с невозможностью по какой-либо причине выполнить очередное действие, что приводит к аварийному останову программы. Такие ошибки возникают, например, при делении на 0, вычислении логарифма с отрицательным аргументом, переполнении стека при выполнении рекурсивной подпрограммы и т.п.
Логические ошибки возникают при неправильном проектировании алгоритма или по невнимательности при записи или наборе программы. Программа с логическими ошибками может быть выполнена до конца, возможно даже, что при некоторых наборах исходных данных результаты будут правильными.
В процессе устранения логических ошибок можно выделить три этапа:
1. установление факта существования ошибки;
2. локализация ошибки;
3. устранение ошибки.
Существуют 2 метода обнаружения ошибок:
1. статическая (ручная) проверка, которая заключается в анализе программы без выполнения ее на ЭВМ;
2. тестирование - прогон на ЭВМ.
Оба метода требуют наборов тестовых данных, которые должны подбираться параллельно с разработкой алгоритма. В число наборов тестовых данных рекомендуется включить несколько типичных, среди них должны быть корректные и некорректные данные. Тестовые данные должны охватывать предельные случаи. Если в программе есть разветвления, то необходимы наборы тестовых данных для каждой ветви. Если в программе есть циклы, то данные нужно подобрать так, чтобы цикл выполнялся минимально и максимально возможное число раз.
При отладке программ для практического использования нужно подобрать дополнительные тестовые данные:
1. Получить реальные данные у потенциального пользователя.
2. Породить случайным образом наборы тестовых данных.
Ручная проверка
Статистика утверждает, что 70% ошибок можно устранить на этапе ручного тестирования.
Машинное тестирование
Известный специалист в области программирования Дейкстра считает, что тестирование доказывает наличие ошибок, а не их отсутствие.
Выделяют два вида тестирования: разрушающее и диагностическое:
1. Разрушающее тестирование производится над программой, которая считается правильной, с целью заставить ее дать сбой.
2. Диагностическое тестирование выполняется с целью локализации ошибки, если известно о ее существовании.
В ТР существуют системные средства для отладки программ. Они позволяют выполнить трассировку с выводом значений интересующих переменных и выражений, устанавливать точки останова, точки прерывания (контрольные точки).
Проверка правильности данных
Правильно написанная программа должна:
2. произвести как можно больше правильных вычислений;
3. встретив некорректный элемент данных, проверить остальные данные.
Исправление ошибок
1. Перед всяким устранением ошибки нужно подумать, к чему это приведет.
2. После того как в программу внесены изменения, нужно заново ее протестировать.
Устойчивая программа - это программа, которая порождает правильные результаты во всех случаях, когда это возможно, иначе - указывает причину, по которой программа не может быть выполнена. Всякая практически используемая программа меняется в течение своей жизни. Изменения включают в себя исправление логических ошибок, выявленных при эксплуатации программы, и модификацию программы в соответствии с новыми требованиями. На эту деятельность, которая называется сопровождением, программисты тратят больше времени, чем на создание программы. Правильная программа, после внесения в нее изменений, может перестать быть правильной. Поэтому программа должна быть предельно ясной и понятной тому, кто занимается сопровождением, структура программы должна быть такой, чтобы ее легко было модифицировать, не лишая устойчивости.
19. РЕГУЛЯРНЫЙ ТИП (МАССИВ)
Чтобы хранить и обрабатывать сложные виды информации, нужно научиться строить нетривиальные структуры данных. Такие структуры создают путем объединения данных, в конечном итоге, простых типов. Составные части структурированных типов называются их компонентами.
В ТР существует ограничение на объем памяти, занимаемой значением любого структурированного типа. Этот объем не должен превышать 65520 байтов.
Одним из структурированных типов во многих алгоритмических языках является регулярный тип (тип массив). Массив представляет собой совокупность фиксированного числа компонентов одного типа. Тип компонентов массива называется базовым типом.
Количество типов индекса, перечисленных в квадратных скобках, определяет размерность массива. Размер массива - это общее число его компонентов.
Тип индекса должен быть упорядоченным типом. Чаще всего для типа индекса используют интервальный тип, реже - перечисляемый или стандартный. Тип индекса не может быть четырехбайтовым.
Базовый тип может быть любым.
Одномерные массивы
Если указан только один тип индекса, массив является одномерным.
Примеры описаний одномерных массивов:
type t_vect =array[1.. MAXLEN] of integer;
c, d : array[1.. MAXLEN] of integer;
flag : array[‘A’..‘Z’] of boolen;
Массивы a, b, c, d имеют одинаковые размеры (=100). Размер массива point равен 3, flag - 26.
Компоненты (элементы) массива занимают последовательные ячейки памяти. Объем памяти, выделяемой массиву, равен произведению размера массива на объем, занимаемый элементом. Переменная а занимает 100*2=200 байтов, point - 3*6=18 байтов, flag - 26*1=26 байтов.
Следует обратить внимание на то, что типы переменных aи с компилятор считает разными. Важным понятием в Паскале является понятие тождественности типов. Переменные имеют тождественные типы, если они определены в одной секции или через одно и то же имя типа.
Согласно приведенным выше описаниям, типы переменных a и b тождественны, так как переменные описаны с использованием имени типа t_vect. Переменные с и d тоже имеют тождественные типы, так как описаны в одной секции.
Над массивами любой размерности как над едиными целыми не определены никакие операции. Разрешено присваивание переменной типа массив значения переменной тождественного типа, то есть для совместимости массивов по присваиванию требуется тождественность типов.
Если массивы a и d инициализированы, то допустимы операторы b:=a и c:=d.
Имя массива является общим именем совокупности компонентов (элементов) массива. Обращение к отдельным компонентам массива осуществляется с помощью переменных с индексами:
Выражение в квадратных скобках должно иметь тип индекса. Например, a[1], d[MAXLEN div 2], point[x], point[y], flag[‘X’], flag[succ(‘G’)].
Переменные с индексами можно использовать в любом месте программы, где допустим базовый тип. Ввод и вывод массива производится покомпонентно, обычно в цикле for.
Пример.Составим программу для определения максимального члена данной целочисленной последовательности, длиной не больше 100, и номера этого элемента:
var v : array [1.. MAXLEN] of integer;
imax, i : 1.. MAXLEN;
write('Введите длину последовательности £ ', MAXLEN);
write('Введите члены последовательности ');
for i:=1 to n do read(v[i]);
max := v[1]; imax := 1;
if v[i] > max then
writeln(‘ Максим. член последовательности - v[’, imax, ‘] = ’, max)
Упакованные массивы
Если в одном машинном слове можно разместить несколько элементов массива, то для экономии памяти можно использовать упакованный массив. Для этого при описании массива перед ключевым словом array следует указать ключевое слово packed.
Например, при описании
в двухбайтовом машинном слове размещается 5 элементов, для массива потребуется 2 слова, то есть 4 байта.
При работе с упакованными массивами усложняется доступ к отдельным элементам массива. В ТР массивы упаковываются автоматически, слово packed можно не указывать.
Многомерные массивы
Если количество типов индекса в описании массива равно n, то массив называют n-мерным. Формально размерность массива не ограничена, но фактически она зависит и от размера базового типа, и от ограничения на объем памяти структурированных типов.
Для представления матриц используются двумерные массивы. Тип первого индекса определяет число строк, а тип второго индекса - число столбцов матрицы. Например,
type t_matr=array[1..ROW, 1..COL] of word;
d: array[1..2, 1..3, (x, y)] of real;
Тип t_matr - двумерный массив размером 20х10. Его можно использовать для работы с матрицами порядка не больше чем 20x10. Переменная d - трехмерный массив.
Обращение к элементам многомерных массивов:
Идентификатор - имя массива. Число выражений (индексов) в квадратных скобках должно быть равно размерности массива. Например, a[3, 4], d [2, 1, y].
В памяти двумерные массивы располагаются по строкам. В общем случае элементы многомерных массивов размещаются так, что чем правее индекс, тем быстрее он меняется. Так, элементы массива d размещаются в памяти в следующей последовательности:
Для ввода и вывода многомерных массивов используются вложенные циклы. В качестве примера приведем фрагмент программы вывода в виде таблицы описанного выше массива a ( i и j - целочисленные переменные):
Отладка программы – это процесс поиска и устранения ошибок. Часть ошибок формального характера, связанных с нарушением правил записи конструкций языка или отсутствием необходимых описаний, обнаруживает транслятор, производя синтаксический анализ текста программы. Транслятор выявляет ошибки и сообщает о них, указывая их тип и место в программе. Такие ошибки называются ошибками времени трансляции или синтаксическими ошибками.
Ошибочные ситуации могут возникнуть и при выполнении программы, например, деление на нуль или извлечение корня квадратного из отрицательного числа. Такие ошибки называются ошибками времени выполнения.
Программа, не имеющая ошибок трансляции и выполнения, может и не дать верных результатов из-за логических ошибок в алгоритме, т. е. алгоритмических или семантических ошибок. Ошибки подобного рода могут возникнуть на любом этапе разработки программы: постановки задачи, разработке математической модели или алгоритма. Необходим действенный контроль над процессом вычислений, позволяющий предотвращать или своевременно обнаруживать ошибки подобного рода. Для этого используются как качественный анализ задачи, основанный на различного рода интуитивных соображениях и правдоподобных рассуждениях, так и контрольный просчет или тестирование программы.
Тестирование программы – это выполнение программы на наборах исходных данных (тестах), для которых известны результаты, полученные другим методом. Система тестов подбирается таким образом, чтобы
а) проверить все возможные режимы работы программы;
б) по возможности, локализовать ошибку.
При тестировании программы простой и действенный метод дополнительного контроля над ходом её выполнения – получение контрольных точек, т. е. контрольный вывод промежуточных результатов.
Для проверки правильности работы программы иногда полезно также выполнить проверку выполнения условий задачи (например, для алгебраического уравнения найденные корни подставляются в исходное уравнение и проверяются расхождения левой и правой частей).
33. ВИДЫ ОШИБОК В ПРОГРАММАХ
Об ошибках в программе сигнализируют некорректная работоспособность программы либо ее полное невыполнение. В наше время для обозначения ошибки в программе используют термин «Баг» (с англ. Bug-жук).
Есть несколько типов ошибок:
1) Логическая ошибка. Это, пожалуй, наиболее серьезная из всех ошибок. Когда написанная программа на любом языке компилирует и работает правильно, но выдает неправильный вывод, недостаток заключается в логике основного программирования. Это ошибка, которая была унаследована от недостатка в базовом алгоритме. Сама логика, на которой базируется вся программа, является ущербной. Чтобы найти решение такой ошибки нужно фундаментальное изменение алгоритма. Вам нужно начать копать в алгоритмическом уровне, чтобы сузить область поиска такой ошибки. (пример: задача программы вывести сумму двух чисел а и b.
varc,a,b:integer;
2) Синтаксическая ошибка.Каждый компьютерный язык, такой как C, Java, Perl и Python имеет специфический синтаксис, в котором будет написан код. Когда программист не придерживаться "грамматики" спецификациями компьютерного языка, возникнет ошибка синтаксиса. Такого рода ошибки легко устраняются на этапе компиляции.
3) Ошибка компиляции.Компиляция это процесс, в котором программа, написанная на языке высокого уровня, преобразуется в машиночитаемую форму. Многие виды ошибок могут происходить на этом этапе, в том числе и синтаксические ошибки. Иногда, синтаксис исходного кода может быть безупречным, но ошибка компиляции все же может произойти. Это может быть связано с проблемами в самом компиляторе. Эти ошибки исправляются на стадии разработки.
vara:array[1..5] of integer;
6) Ошибки ресурса. Ошибка ресурса возникает, когда значение переменной переполняет максимально допустимое значение. Переполнение буфера, использование неинициализированной переменной, нарушение прав доступа и переполнение стека - примеры некоторых распространенных ошибок.
vara:integer;
7) Ошибка взаимодействия. Они могут возникнуть в связи с несоответствием программного обеспечения с аппаратным интерфейсом или интерфейсом прикладного программирования. В случае веб-приложений, ошибка интерфейса может быть результатом неправильного использования веб-протоколов
Синтаксические ошибки – это ошибки в записи конструкций языка программирования (чисел, переменных, функций, выражений, операторов, меток, подпрограмм).
Семантические ошибки – это ошибки, связанные с неправильным содержанием действий и использованием недопустимых значений величин.
Отладка программы - один их самых сложных этапов разработки программного обеспечения.
9.1. Классификация ошибок
Отладка — это процесс локализации и исправления ошибок, обнаруженных при тестировании программного обеспечения. Локализацией называют процесс определения оператора программы, выполнение которого вызвало нарушение нормального вычислительного процесса. Для исправления ошибки необходимо определить ее причину, т. е. определить оператор или фрагмент, содержащие ошибку. Причины ошибок могут быть как очевидны, так и очень глубоко скрыты.
В соответствии с этапом обработки, на котором проявляются ошибки, различают (рис. 9.1):
синтаксические ошибки - ошибки, фиксируемые компилятором (транслятором, интерпретатором) при выполнении синтаксического и частично семантического анализа программы;
ошибки компоновки — ошибки, обнаруженные компоновщиком (редактором связей) при объединении модулей программы;
ошибки выполнения - ошибки, обнаруженные операционной системой, аппаратными средствами или пользователем при выполнении программы.
Рис. 9.1. Классификация ошибок по этапу обработки программы
Синтаксические ошибки относят к группе самых простых, так как синтаксис языка, как правило, строго формализован, и ошибки сопровождаются развернутым комментарием с указанием ее местоположения. Определение причин таких ошибок, как правило, труда не составляет, и даже при нечетком знании правил языка за несколько прогонов удается удалить все ошибки данного типа.
Следует иметь в виду, что чем лучше формализованы правила синтаксиса языка, тем больше ошибок из общего количества может обнаружить компилятор и, соответственно, меньше ошибок будет обнаруживаться на следующих этапах. В связи с этим говорят о языках программирования с защищенным синтаксисом и с незащищенным синтаксисом. К первым, безусловно, можно отнести Pascal, ко вторым - С со всеми его модификациями.
Ошибки компоновки, как следует из названия, связаны с проблемами, обнаруженными при разрешении внешних ссылок. Например, предусмотрено обращение к подпрограмме другого модуля, а при объединении модулей данная подпрограмма не найдена или не стыкуются списки параметров. В большинстве случаев ошибки такого рода также удается быстро локализовать и устранить.
К самой непредсказуемой группе относятся ошибки выполнения. Прежде всего они могут иметь разную природу, и соответственно по-разному проявляться. Часть ошибок обнаруживается и документируется операционной системой. Выделяют четыре способа проявления таких ошибок:
• несовпадение полученных результатов с ожидаемыми.
Причины ошибок выполнения очень разнообразны, а потому и локализация может оказаться крайне сложной. Все возможные причины ошибок можно разделить на следующие группы:
• неверное определение исходных данных,
• накопление погрешностей результатов вычислений.
Неверное определение исходных данных происходит, если возникают любые ошибки при выполнении операций ввода-вывода.
Логические ошибки имеют разную природу. Так они могут следовать из ошибок, допущенных при проектировании, например, при выборе методов, разработке алгоритмов или определении структуры классов, а могут быть непосредственно внесены при кодировании модуля. К последней группе относят:
• ошибки некорректного использования переменных,
• ошибки межмодульного интерфейса,
• другие ошибки кодирования.
Накопление погрешностей результатов числовых вычислений возникает, например, при некорректном отбрасывании дробных цифр чисел, некорректном использовании приближенных методов вычислений, игнорировании ограничения разрядной сетки представления вещественных чисел в ЭВМ и т. п.
9.2. Методы отладки программного обеспечения
Большинство ошибок можно обнаружить по косвенным признакам посредством тщательного анализа текстов программ и результатов тестирования без получения дополнительной информации. При этом используют различные методы:
Метод ручного тестирования.
Это - самый простой и естественный способ данной группы. При обнаружении ошибки необходимо выполнить тестируемую программу вручную, используя тестовый набор, при работе с которым была обнаружена ошибка.
Метод очень эффективен, но не применим для больших программ, программ со сложными вычислениями и в тех случаях, когда ошибка связана с неверным представлением программиста о выполнении некоторых операций. Данный метод часто используют как составную часть других методов отладки.
Самый ответственный этап - выявление симптомов ошибки. Организуя данные об ошибке, целесообразно записать все, что известно о ее проявлениях, причем фиксируют, как ситуации, в которых фрагмент с ошибкой выполняется нормально, так и ситуации, в которых ошибка проявляется. Если в результате изучения данных никаких гипотез не появляется, то необходима дополнительная информация об ошибке. Дополнительную информацию можно получить, например, в результате выполнения схожих тестов.
В процессе доказательства пытаются выяснить, все ли проявления ошибки объясняет данная гипотеза, если не все, то либо гипотеза не верна, либо ошибок несколько.
По методу дедукции вначале формируют множество причин, которые могли бы вызвать данное проявление ошибки. Затем, анализируя причины, исключают, те, которые противоречат имеющимся данным. Если все причины исключены, то следует выполнить дополнительное тестирование исследуемого фрагмента. В противном случае наиболее вероятную гипотезу пытаются доказать. Если гипотеза объясняет полученные признаки ошибки, то ошибка найдена, иначе - проверяют следующую причину.
Метод обратного прослеживания.
Для небольших программ эффективно применение метода обратного прослеживания. Начинают с точки вывода неправильного результата. Для этой точки строится гипотеза о значениях основных переменных, которые могли бы привести к получению имеющегося результата. Далее, исходя из этой гипотезы, делают предположения о значениях переменных в предыдущей точке. Процесс продолжают пока не обнаружат причину ошибки.
9.3. Методы и средства получения дополнительной информации
Для получения дополнительной информации об ошибке можно выполнить добавочные тесты или использовать специальные методы и средства
• интегрированные средства отладки,
Метод требует включения в программу дополнительного отладочного вывода в узловых точках. Узловыми считают точки алгоритма, в которых основные переменные программы меняют свои значения. При этом предполагается, что, выполнив анализ выведенных значений, программист уточнит момент, когда были получены неправильные значения, и сможет сделать вывод о причине ошибки.
Данный метод не очень эффективен и в настоящее время практически не используется.
Интегрированные средства отладки.
Большинство современных сред программирования (Delphi, Builder C++, Visual Studio и т. д.) включают средства отладки, которые обеспечивают максимально эффективную отладку. Они позволяют:
• выполнять программу по шагам, причем как с заходом в подпрограммы, так и выполняя их целиком,
• предусматривать точки останова,
• выполнять программу до оператора указанного курсором и т.п..
Отладка с использованием независимых отладчиков.
При программировании программ иногда используют специальные программы - отладчики, которые позволяют выполнить любой фрагмент программы в пошаговом режиме и проверить содержимое интересующих программиста переменных. Как правило, такие отладчики позволяют отлаживать программу только в машинных командах, представленных в 16-ричном коде.
9.4. Общая методика отладки программного обеспечения
Суммируя все сказанное выше, можно предложить следующую методику отладки программного обеспечения, написанного на универсальных языках программирования для выполнения в операционных системах MS DOS и Win32:
Если ошибка не найдена или система просто «зависла», переходят ко второму этапу.
2 этап- локализация ошибки - определение конкретного фрагмента, при выполнении которого произошло отклонение от предполагаемого вычислительного процесса. При этом, если были получены неправильные результаты, то в пошаговом режиме проверяют ключевые точки процесса формирования данного результата.
Как подчеркивалось выше, ошибка не обязательно допущена в том месте, где она проявилась. Если в конкретном случае это так, то переходят к следующему этапу.
3 этап - определение причины ошибки - изучение результатов второго этапа и формирование версий возможных причин ошибки. Эти версии необходимо проверить, возможно, используя отладочные средства для просмотра последовательности операторов или значений переменных.
4 этап - исправление ошибки - внесение соответствующих изменений во все операторы, совместное выполнение которых привело к ошибке.
5 этап - повторное тестирование - повторение всех тестов с начала, так как при исправлении обнаруженных ошибок часто вносят в программу новые.
Выделяют три типа ошибок: ошибки компиляции, ошибки времени выполнения и логические ошибки.
Ошибки компиляции являются синтаксическими ошибками. Они выдаются при компиляции программы. Программа с синтаксическими ошибками не может быть выполнена.
Ошибки времени выполнения связаны с невозможностью по какой-либо причине выполнить очередное действие, что приводит к аварийному останову программы. Такие ошибки возникают, например, при делении на 0, вычислении логарифма с отрицательным аргументом, переполнении стека при выполнении рекурсивной подпрограммы и т.п.
Логические ошибки возникают при неправильном проектировании алгоритма или по невнимательности при записи или наборе программы. Программа с логическими ошибками может быть выполнена до конца, возможно даже, что при некоторых наборах исходных данных результаты будут правильными.
В процессе устранения логических ошибок можно выделить три этапа:
1. установление факта существования ошибки;
2. локализация ошибки;
3. устранение ошибки.
Существуют 2 метода обнаружения ошибок:
1. статическая (ручная) проверка, которая заключается в анализе программы без выполнения ее на ЭВМ;
2. тестирование - прогон на ЭВМ.
Оба метода требуют наборов тестовых данных, которые должны подбираться параллельно с разработкой алгоритма. В число наборов тестовых данных рекомендуется включить несколько типичных, среди них должны быть корректные и некорректные данные. Тестовые данные должны охватывать предельные случаи. Если в программе есть разветвления, то необходимы наборы тестовых данных для каждой ветви. Если в программе есть циклы, то данные нужно подобрать так, чтобы цикл выполнялся минимально и максимально возможное число раз.
При отладке программ для практического использования нужно подобрать дополнительные тестовые данные:
1. Получить реальные данные у потенциального пользователя.
2. Породить случайным образом наборы тестовых данных.
Ручная проверка
Статистика утверждает, что 70% ошибок можно устранить на этапе ручного тестирования.
Данный алгоритм относится к типу линейных. По условию переменные а и х вводятся с клавиатуры, следовательно, алгоритм начинается с ввода значений этих переменных. Затем можно вычислить значение переменной y и заканчивается алгоритм операцией вывода полученного значения. Таким образом, алгоритм предполагает следующие шаги:
1. ввод значений а и х
2. вычисление значения y по заданной формуле
3. вывод полученного значения y
Изобразим данные шаги в виде блок-схемы:
Пример 2 Вычислить значение переменной y, в зависимости от значения переменных a и x, введенных с клавиатуры по правилу:
Решение
Данный алгоритм относится к типу разветвленных, так как значение переменной y вычисляется по разным формулам в зависимости от значений а и х. Алгоритм предполагает следующие шаги:
4. ввод значений а и х
5. определение соотношения переменных а и х
7. если а ≥ х, то вычисление значения y по второй формуле
8. вывод полученного значения y
Изобразим данные шаги в виде блок-схемы:
Циклические алгоритмы
Базовая структура цикл обеспечивает многократное выполнение некоторой совокупности действий, которая называется телом цикла.
Структура цикл существует в трех основных вариантах:
Цикл с параметром.
Предписывает выполнять тело цикла для всех значений некоторой переменной (параметра цикла) в заданном диапазоне. Как правило, параметр цикла пробегает этот диапазон с единичным шагом изменения.
Обозначение цикла с параметром в блок-схемах алгоритмов.
Цикл с предусловием.
Предписывает выполнять тело цикла до тех пор, пока выполняется проверочное условие (условие – истинно). Таким образом, тело цикла может не выполниться ни разу, если условие цикла изначально не верно.
Обозначение цикла с предусловием в блок-схемах алгоритмов.
Цикл с постусловием.
Предписывает выполнять тело цикла до тех пор, пока не выполнится проверочное условие (условие – ложно). Условие проверяется после выполнения тела цикла. Тело цикла выполнится как минимум один раз, даже если условие окончания цикла изначально верно.
Обозначение цикла с постусловием в блок-схемах алгоритмов.
Пример 1.
Составить блок-схему алгоритма вычисления функции в точках изменения аргумента:
Решение
Так как заранее известно количество точек измерения и параметр k изменяет свое значение с шагом 1, то для решения можно использовать цикл с параметром. Из условия задачи неявно следует, что вывод значений функции осуществляется в точках изменения значений аргумента. Таким образом, тело цикла содержит два оператора: оператор вычисления значения функции и оператор вывода этого значения на экран.
Пример 2.
Составить блок-схему вычисления функции
с параметром и при x, изменяющимся от 0 до 3 с шагом Dx = 0,1.
Решение
В данном случае цикл можно организовать по значениям x. Но шаг изменения x есть величина дробная, следовательно, цикл с параметром использовать нельзя. Применим цикл с постусловием.
Задание 1(общее): переделать данный алгоритм так, чтобы использовать цикл с параметром.
Пример 3.
Составить алгоритм вычисления суммы ряда
с заданной точностью ε (для данного знакочередующегося степенного ряда требуемая точность будет достигнута, когда очередное слагаемое станет по абсолютной величине меньше ε).
Вычисление сумм - типичная циклическая задача. Особенностью же нашей конкретной задачи является то, что число слагаемых (а, следовательно, и число повторений тела цикла) заранее неизвестно. Поэтому выполнение цикла должно завершиться в момент достижения требуемой точности.
При составлении алгоритма нужно учесть, что знаки слагаемых чередуются и степень числа х в числителях слагаемых возрастает.
Решая эту задачу "в лоб" путем вычисления на каждом i-ом шаге частичной суммы
мы получим очень неэффективный алгоритм, требующий выполнения большого числа операций. Гораздо лучше организовать вычисления следующим образом: если обозначить числитель какого-либо слагаемого буквой р, то у следующего слагаемого числитель будет равен -р*х (знак минус обеспечивает чередование знаков слагаемых), а само слагаемое m будет равно p/i, где i - номер слагаемого.
Задание 2 (общее): переделать алгоритм так, чтобы использовался цикл с постусловием.
Задание 3 (индивидуальное):
Практическое задание по вариантам взять из методички «Информатика», тема 7: Программирование разветвляющихся и циклических алгоритмов, задание 2: нахождение суммы бесконечного ряда.
Задание 4 (индивидуальное). Составьте блок-схему алгоритма, позволяющего вычислить значение функции при значениях переменной х в интервале от -p до p с шагом 0,2. значение р вводится с клавиатуры.
Вариант | Функция |
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 |
Блок-схему нарисуйте в Word, используя Автофигуры => раздел Блок-схемы и раздел Соединительные линии.
Читайте также: