Основы безошибочного программирования
Перечисленных базовых средств достаточно для решения большого числа задач обработки данных: экономических, статистических, инженерных, научных и т. п. Однако при постановке решения задач обработки данных важно четко различать место размещения и виды обрабатываемых данных. Символьные данные — это последовательности символов. В текстах программ на Бейсике символьные данные заключаются в двойные… Читать ещё >
Основы безошибочного программирования (реферат, курсовая, диплом, контрольная)
Основной недостаток традиционной практики составления программ для ЭВМ заключается в том, что при таком подходе никто не может гарантировать отсутствие в них ошибок. Особенностью традиционной практики является поиск ошибок в программах при их отладке на ЭВМ.
Однако, так как число ошибок в программах заранее неизвестно, то неизвестна заранее и продолжительность отладки программ на ЭВМ. Более того даже после «завершения» отладки никто не может гарантировать отсутствие ошибок. Естественно, что использование таких программ, приводит к возникновению отказов, сбоев и получению неверных результатов.
Структурный подход снижает количество ошибок в алгоритмах и программах. Однако и при этом подходе число ошибок также заранее неизвестно. Хотя структурная форма записи и упрощает поиск и исправление ошибок в текстах программ, гарантии отсутствия ошибок структурный подход не дает.
Однозначные суждения об отсутствии или наличии ошибок в алгоритмах и программах возможны только при наличии описаний конечных результатов их выполнения. Такие описания принято называть спецификациями.
Спецификации программ — это точные, математически строгие описания результатов выполнения алгоритмов и программ. Только при наличии спецификаций возможно создание алгоритмов и программ, в которых можно гарантировать отсутствие ошибок.
Более того, при систематическом использовании спецификаций возможен не только анализ правильности алгоритмов и программ, но и становится возможным составление программ с одновременным доказательством правильности.
Безошибочное программирование — это составление алгоритмов и программ с гарантиями отсутствия в них ошибок. А составление алгоритмов и программ с одновременным доказательством правильности называется доказательным программированием. И в том и другом подходе необходимо со…
Основной особенностью языков структурного и графического программирования Бейсика как языка обработки данных являются операторы данных data, позволяющие описывать данные непосредственно в текстах программ. Пример и реализация алгоритма обработки данных:
алг «день рождения» ' день рождения нач cls.
вывод («день рождения») print «день рождения:».
чтение пт$, dn, ms, gd read nm$, dn, ins, gd.
вывод nm$; dn; ms; gd print nm$; dn; ms; gd.
кон end.
дано: Саша, 18, 10, 1980 data «Саша», 18,10,1980.
Выполнение программы на компьютере приведет к появлению на экране следующих строк:
день рождения:
Саша 18 10 1980.
Для решения этой задачи для других данных необходимо внести изменения в оператор данных data и вновь запустить программу на выполнение. Пример изменения данных:
дано: Оля, 1, 12, 1974 data «Оля», 1,12,1974.
В традиционных версиях языка Бейсик с нумерацией строк операторы data выделяются в отдельные группы и нумеруются обычно с числа 1000. Это позволяет четко отделить в программах описание данных от операторов их обработки:
алг «дни рождения» 10 ' дни рождения нач 20 cls.
вывод («день рождения:») 30 print «день рождения:».
чтение nт$, dn, ms, gd 40 read nm$, dn, ms, gd.
вывод nm$; dn; ms; gd 50 print nm$; dn; ms; gd.
кон 60 end.
дано: Иванов, Саша, 18,10,1980 1000 data «Саша», 18,10,1980.
При размещении нескольких таблиц или других групп данных в программах на Бейсике полезным средством являются операторы restore (операторы чтения данных с заданного номера или метки):
1) оператор чтения данных после метки test:
restore test — чтение данных после метки test;
2) оператор чтения данных с оператора 1000:
restore 1000 — чтение данных, начиная с 1000-го оператора;
3) оператор чтения данных с самого начала:
restore — чтение данных сначала.
В задачах обработки данных переработке подвергаются не только числовые данные, но и символьная информация. Для этих целей в программах используются символьные данные, переменные и массивы.
Символьные данные — это последовательности символов. В текстах программ на Бейсике символьные данные заключаются в двойные кавычки. Примеры: «мама», «корень=», «2 + 1» и т. д. Во входных данных символьные данные записываются в соответствии с входными спецификациями.
Символьные переменные — это переменные, значениями которых являются символьные данные. В программах на Бейсике символьными явлются те переменные, к имени которых справа приписан знак $. Примеры символьных переменных: s$, p$, sl$, pr$.
Числовые данные и переменные в языке Бейсик могут быть трех основных типов — целочисленные, вещественные и вещественные двойной точности. В программах для этих типов переменных используются следующие обозначения:
n%, m%, nl%, m3% - целочисленные х, у, xl, y5 — вещественные а#, b#, al#, b8# - вещественные двойной точности В качестве примера решения задач обработки данных рассмотрим алгоритм и программу вывода списка дней рождения членов семьи по данным, представленным в следующей таблице:
Дни рождения:
Мама. | |||
Папа. | |||
Сережа. | |||
Оля. |
Для представления данных из этой таблицы в программе воспользуемся следующей последовательностью операторов data:
Дни рождения:
Мама. | |||
Папа. | |||
Сережа. | |||
Оля. |
dni: ' дни рождения.
data «мама», 26, 6, 1949.
data «папа», 22,5, 1946.
data «Сережа», 25, 10, 1973.
data «Оля», 1, 12, 1974.
data ««, 0, 0, 0.
Обратите внимание!
- 1. Каждый оператор data здесь отвечает одной строке таблицы.
- 2. Последний оператор data содержит пустую «запись» — пустое имя «» и три нуля, означающие конец данных.
Такая форма представления данных позволяет достаточно просто вносить изменения, исправления и добавления в данные. Эти изменения в таблице переносятся в соответствующие операторы data, а добавление или удаление строк в таблице отображается добавлением или удалением соответствующих операторов в программе.
Рассмотрим алгоритм и программу вывода списка дней рождения в семье, составленные в соответствии с выбранным представлением данных:
алг «дни рождения» ' дни рождения нач сls.
вывод («дни рождения») print «дни рождения».
чтение таблицы dni restore dni.
цикл do.
чтение (пп, d, т, g) read nn$, d, m, g.
при пп = «» вых if nn$ = «» exit then do.
вывод (пп, d, m, g) print nn$, d, m, g.
кцикл loop.
кон end.
Для формирования и обработки новых групп данных в программах используются массивы. Массив в программе — это область оперативной памяти ЭВМ, используемая для размещения некоторой совокупности данных.
Использование массивов в программах на Бейсике требует описания их с помощью операторов dim. В операторах dim для каждого массива указывается его имя и размеры. Массивы в программах могут быть одномерными, двумерными, трехмерными и т. д.
Примеры описаний массивов:
одномерные массивы из 20 элементов ;
dim nm$(20), d (20), m (20).
двумерные массивы из 2×10 и 10×10 элементов ;
dim fm$(2,10), tb (10,10).
Обращения к элементам массивов записываются в зависимости от размерности, указанной в их описаниях. Примеры обращений к одномерным и двумерным массивам:
nm$(4) = «Костя».
d (4) = 10.
fm$(l, 10) = «Петров».
tb (3,4) = 3*4.
В программах на Бейсике операторы dim являются выполняемыми. Результатом их выполнения является выделение участков памяти для хранения соответствующих массивов. По этой причине в качестве размеров массивов могут указываться переменные, которые должны получить конкретные положительные значения до выполнения оператора dim.
Описание двумерного массива с переменной n в качестве его размеров:
n = 5 ' n = 5.
dim tb (n, n), ' массив tb[1:n, 1: n].
В приведенных ниже алгоритме и программе расчета и вывода таблицы умножения для ее размещения используется двумерный массив tb (n, n) c n = 5:
алг «таблица умножения» ' таблица умножения п=5 n=5.
массив tb[1:n, 1: n] dim tb (n, n).
нач сls.
от k = 1 до п цикл for k = 1 to n.
от 1 = 1 до п цикл for l = 1 to п.
tb[k, l]: = k*l tb (k, l) = k*l.
вывод tb[k, l] print tb (k, l);
кцикл next 1.
нов_строка print.
кцикл next k.
кон end.
Запуск этой программы на ЭВМ приведет к получению приведенной выше картинки с таблицей умножения размера 5×5. Для получения таблицы умножения размера 8×8 или 10×10 достаточно изменить в программе значение n =5 на n = 8 или n = 10.
Перечисленных базовых средств достаточно для решения большого числа задач обработки данных: экономических, статистических, инженерных, научных и т. п. Однако при постановке решения задач обработки данных важно четко различать место размещения и виды обрабатываемых данных.
По способу использования при решении задач различаются следующие данные:
исходные;
результирующие.
Исходные данные — конкретные данные решаемых задач, отвечающие принятой постановке. Исходные данные могут оказаться как допустимыми, так и недопустимыми по постановке решаемых задач.
Результирующие данные — это результаты решения поставленных задач при введенных исходных данных. Сообщения о невозможности решения задачи также считаются результирующими данными.
По способу размещения и использования в обрабатывающих алгоритмах и программах данные подразделяются на:
входные;
выходные;
сохраняемые.
Входные данные — это данные, вводимые в ЭВМ во время работы программы. Входные данные могут вводиться с клавиатуры, магнитных дисков или с помощью других устройств ввода информации.
Выходные данные — данные, выводимые ЭВМ как результат работы программ. Выходные данные могут выводиться на экран, на печать, на магнитные диски или другой носитель информации.
Сохраняемые данные — данные, которые хранятся в долговременной памяти ЭВМ и могут обновляться как результат работы программ. Эти данные могут храниться и многократно обновляться на магнитных дисках в течении длительного промежутка времени.
В качестве примера рассмотрим задачу поиска номеров телефонов по телефонному справочнику. Исходной информацией в этой задаче является «Телефонный справочник», который можно представить следующей таблицей:
Телефонный справочник:
Вова. | 125−14−70. |
Саша. | 222−01−02. |
Маша. | 102−99−00. |
Результирующая информация — номера телефонов и сообщения об отсутствии таких сведений. Информация о результатах поиска информации может выводиться на экран ЭВМ. Диалог с компьютером может проходить по следующему сценарию, в котором отражаются исходные и выходные данные:
Сценарий:
поиск номера телефона имя = имя. |
телефон: номер |
нет такого. |
Для хранения таблицы «Телефонного справочника» в программе можно воспользоваться следующими операторами data:
tel: 'номера телефонов:
data «Вова», «125−14−80».
data «Саша», «222−01 -02».
data «Маша», «102−99−00».
data ««, ««.
При выбранных представлении данных и сценарии диалога решением могут служить следующие алгоритм и программа:
Алгоритм Программа алг «Телефонный справочник» ' Телефонный справочник нач сls.
вывод («поиск номера телефона») print «поиск номера телефона».
запрос («имя=», NN) input «имя=», NN$.
чтение-таблицы tel restore tel.
цикл do.
чтение (имя, пот) read im$, nm$.
если имя = NN то if im$ = NN$ then.
вывод («номер:», пот) print «номер:», nm$.
выход [из цикла] exit do.
инес имя = «» то elseif im$ = «» then.
вывод («нет такого») print «нет такого».
выход [из цикла] exit do.
все end if.
кцикл loop.
кон end.
Из приведенного примера видно, что при составлении алгоритмов и программ обработки данных важную роль играют не только сценарии ввода-вывода данных в ЭВМ, но и представление данных. От выбора этих представлений существенно зависят способы доступа к данным и процедуры обработки.
Однако наиболее важным при составлении алгоритмов и программ обработки данных прежде всего является четкое определение исходных и результирующих данных, а уже затем — подбор представлений входных, выходных и сохраняемых данных на ЭВМ.
Систематические методы разработки алгоритмов и программ обработки данных состоят в том, что постановка решаемых задач, выбор представлений данных и составление спецификаций диалога проводятся до составления детальных алгоритмов и программ обработки данных.
Подобный подход к составлению алгоритмов и программ обработки данных позволяет проверять правильность составляемых алгоритмов и программ по отношению к этим спецификациям и обеспечить в них полное устранение ошибок.
Приведем пример систематического составления алгоритмов и программ обработки данных с использованием спецификаций для решения задачи «Выбор друзей по росту». Допустим, что исходные данные этой задачи представлены следующей таблицей:
фамилия. | имя. | рост. |
Иванов. | Саша. | |
Петров. | Вова. | |
Сидоров. | Миша. |
Примем, что запросы на поиск друзей по росту и результаты поиска будут выводиться на экран по следующему сценарию:
Сценарий «Поиск друзей».
выбор друзей по росту мин_рост = min. макс_рост = max. |
фамилия имя. |
нет таких. |
Для представления данных о друзьях в программе воспользуемся следующими операторами data:
dan: 'данные о друзьях.
data «Иванов», «Саша», 180.
data «Петров», «Вова», 160.
data «Сидоров», «Миша», 190.
data ««, ««, 0.
Тогда в качестве решения на ЭВМ поставленной задачи в соответствии с выбранными сценарием и представлением сохраняемых данных, могут быть приняты следующие алгоритм и программа обработки данных.
Алгоритм Программа алг «выбор друзей» ' выбор друзей нач сls.
вывод («выбор друзей по росту») print «выбор друзей по росту».
запрос («мин_рост =>», min) input «мин_рост =>», mn.
запрос («макс_рост =<�», тах) input «макс_рост =<�», mх чтение-таблицы dan restore dan.
n: = 0 n = 0.
цикл do.
чтение (фам, имя, r) read fm$, im$, r.
при фам = «» вых if fm$ = «» then exit do.
если min r и r max то if mn<= r and r <= mx then.
вывод (фам, имя) print fm$, im$.
n: = n+1 n = n+1.
все end if.
кцикл loop.
если n = 0 то if n = 0 then.
вывод «нет таких» print «нет таких».
кон end.
Сравнение приведенных алгоритма и программы со сценарием диалога показывает их полное соответствие друг другу. Прогон этой программы на ЭВМ при самых различных вариантов запросов подтвердит правильность ее работы, а доказательство ее правильности потребует знания техники анализа результатов ее выполнения для всех комбинаций исходных данных.
Вопросы.
- 1. Что такое исходные и результирующие данные?
- 2. Что такое входные, выходные и сохраняемые данные?
- 3. Что такое представление данных?
- 4. Как описываются массивы в программах на Бейсике?
- 5. Какие типы переменных есть в программах на Бейсике?
- 6. Как описываются данные в программах на Бейсике?
- 3адачи
- 1. Составьте сценарий, алгоритм и программу поиска номера телефона по фамилии с представлением сведений в последовательности операторов data.
- 2. Составьте сценарий, алгоритм и программу поиска по имени дней рождения родных: мамы, папы, сестер и братьев, используя операторы data.
- 3. Составьте сценарий, алгоритм и программу поиска следующих данных о друзьях, используя операторы data для получения сведений:
- а) о росте друзей;
- б) о весе друзей;
- в) о цвете глаз.
- 4. Составьте сценарий, алгоритм и программу поиска сведений о расписании занятий по дням недели, используя операторы data.
- 5. Составьте сценарий, алгоритм и программу поиска сведений о расписании занятий, используя операторы data:
- а) по названию предмета;
- б) по дням недели;
- в) по номеру урока.
- 6. Составьте алгоритм и программу построения изображения ломаной по координатам точек, записанных в последовательности операторов data.
- 7. Составьте алгоритм и программу вывода изображений ткани из цветных кругов по данным об их центрах и радиусах, записанных в последовательности операторов data.