Здавалка
Главная | Обратная связь

Программа и этапы ее разработки. Структура программы



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

Совокупность средств и правил представления алгоритма в виде, пригодном для выполнения компьютером, называется языком программирования.

Программа – это запись алгоритма на языке программирования.

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

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

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

3. Разработка или выбор алгоритма решения задачи – выполняется на основе ее математического описания. Многие задачи можно решить различными способами. Программист должен выбрать оптимальное решение. Неточности в постановке, анализе задачи или разработке алгоритма могут привести к скрытойошибке – программист получает неверный результат, считая его правильным.

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

5. Кодирование – запись алгоритма на языке программирования. Современные системы программирования (Delphi) позволяют ускорить процесс разработки программы, автоматически создавая часть ее текста, однако вся творческая работа по-прежнему лежит на программисте. Для успешной реализации целей проекта программисту необходимо использовать современные технологии и методы программирования: структурное, модульное и объектно-ориентированное программирование.

6. Отладка и тестирование программы. Под отладкой понимается устранение ошибок в программе, не выявленных в процессе компиляции. Тестирование позволяет вести их поиск и, в конечном счете, убедиться в том, что полностью отлаженная программа дает правильный результат. Для этого разрабатывается система тестов – специально подобранных контрольных примеров с такими наборами параметров, для которых решение задачи известно. Тестирование должно охватывать все возможные ветвления в программе, то есть проверять все ее инструкции, и включать такие исходные данные, для которых решение невозможно. Проверка особых, исключительных ситуаций, необходима для анализа корректности. В ответственных проектах большое внимание уделяется так называемой защите от дурака (fool-tolerance), подразумевающей устойчивость программы к неумелому обращению пользователем. Использование специальных программ-отладчиков, которые позволяют выполнять программу по отдельным шагам, просматривая при этом промежуточные результаты, значительно упрощает этот этап.

7. Анализ результатов – если программа выполняет моделирование какого-либо известного процесса, следует сопоставить результаты вычислений с результатами наблюдений. В случае существенного расхождения необходимо изменить модель.

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

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

· точность полученного результата,

· время выполнения,

· объем требуемой памяти.

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

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

Таким образом, в программе выполняются следующие действия:

1. ввод данных,

2. определение представления этих данных в памяти компьютера (создание структур данных),

3. определение операций по обработке структур данных в соответствии с заданным алгоритмом – создание базовых структур,

4. вывод результатов работы.

Типовой алгоритм вычислительного процесса, реализованного в программе, имеет вид:

 

 

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

Любая программа состоит из заголовка и разделов.

Заголовок записывается как первая строка программы и начинается со слова Program, за которым следует имя программы:

Program Summa;

Program Primer_1;

Выбор заголовка программы подчиняется правилам выбора имени переменной. Заголовок заканчивается точкой с запятой.

За заголовком следуют разделы программы:

Uses раздел используемых модулей

В нем указываются имена стандартных и пользовательских модулей, используемых программой:

Uses CRT, Graph;

Label раздел описания меток

В нем перечисляются метки, используемые в программе. Любой оператор программы можно выделить, поставив перед ним метку – целое число без знака от 0 до 9999 или идентификатор. Метками снабжаются операторы программы, на которые осуществляется переход операторами GoTo, и отделяются от помеченного оператора двоеточием:

10: f := f + 1;

Метки, объявленные в этом разделе, обязательно должны использоваться в программе. С другой стороны, все имеющиеся в программе метки должны быть обязательно описаны в этом разделе. Метки не должны повторяться. Раздел заканчивается точкой с запятой:

Label 20, 5, metka;

Если в программе нет помеченных операторов, то раздел описания меток опускается,

Const раздел определения поименованных и типизированных констант

в нем задаются константы, используемые в программе, значения которых нужно будет менять в разных вариантах программы. Например, если в программе часто используется константа 2,71, то ее лучше задать в этом разделе:

Const eps = 2.71;

Тип константы определяется типом ее значения. Как правило, в этом разделе определяются размеры массивов, которые далее описываются в разделах Type или Var:

Const row = 2;

col = 3;

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

Const mass: Array [1..row,1..col] Of Integer =((5,-2,0),(12,1,-20));

Заданы элементы массива mass, состоящего из двух строк и трех столбцов. Использование констант делает программу наглядной и удобной для отладки и внесения изменений.

Type раздел определения типов

Этот раздел появляется в программе в том случае, если в ней используются данные нестандартных типов, то есть типов, определяемых самим программистом. Помимо стандартных типов, в Паскале можно использовать еще два типа данных – интервальный (тип-диапазон) и перечисляемый.

Если мы хотим объяснить кому-нибудь новое для него понятие, то в простейшем случае перечисляем реальные объекты, охватываемые этим понятием. Например, как пояснить, что такое время года? Это, говорим мы, весна, лето, осень и зима. А сторона света? Это север, юг, восток и запад. В Паскале такие понятия можно выразить через перечисляемый тип данных:

Type TStorona = (sever, yug, vostok, zapad);

Конкретные значения типа перечисляются в скобках через запятую. Переменные заданного типа описываются далее в разделе Var. По принятому соглашению, имена новых типов начинаются с буквы T.

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

yug > sever = True

Ord(sever) = 0 нумерация значений начинается с нуля!

Ord(zapad) = 3

Pred(vostok) = yug

Succ(vostok) = zapad

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

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

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

В ряду значений любого упорядоченного типа можно выделить более узкий диапазон или интервал:

2 .. 5

-10 .. 20

‘a’ ..’d’

Yug .. zapad

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

Type TIndex = 1..10;

TYear = 1970..2000;

TDay = 1..31;

TLitera = ‘a’..’z’;

Внимание! Между границами диапазона (интервала) ставятся две точки.

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

для TIndex - от 1 до 10

для TYear - от 1970 до 2000

для TDay - от 1 до 31

для TLitera - от ‘a’ до ‘z’

После определения интервального типа объявляются переменные этого типа в разделе Var, причем в программе эти переменные могут принимать только значения, лежащие в заданном диапазоне.

Внимание! Нельзя определять интервальный тип для вещественных данных.

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

Error 201: Range check error ошибка проверки диапазона возможных значений.

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

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

Var раздел описания переменных

В этом разделе перечисляются имена используемых в программе переменных с указанием их типов:

Var i, j : Integer; переменные целого типа

alfa: Real; переменная вещественного типа

b: Boolean; переменная логического типа

n, m: TIndex; переменные типа TIndex

x: TLitera; переменная типа TLitera

st: TStorona; переменная типа TStorona

k: 1..100; переменная интервального типа

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

Function, Procedure раздел описания функций и процедур

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

Begin . . . End раздел операторов

В нем записываются операторы программы в соответствии с алгоритмом ее работы. Каждый оператор заканчивается точкой с запятой. На одной строке помещается по одному оператору. Раздел операторов заканчивается словом End, после которого ставится точка – это физический конец программы.

Пример: написать программу, определяющую сумму цифр целого трехзначного числа x = 543:

Program Summa;

Uses CRT;

Var x, s : Word;

Begin

ClrScr; очистка экрана

x := 534;

s := 0;

s := s + x Mod 10;

s := s + x Div 10 Mod 10;

s := s + x Div 10 Div 10 Mod 10;

WriteLn(‘s=’,s); вывод результата работы программы на экран

ReadLn;

End.

Комментарии

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

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

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

Комментарием считается последовательность произвольных фраз, заключенных в символы {. . .} или (* . . .*):

{ это комментарий }

(* это комментарий *)

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

x:=x+1; {увеличиваем счетчик на единицу}

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

Ввод данных

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

Под вводом данных понимается передача информации из внешних устройств в оперативную память компьютера.

Ввод информации в программе осуществляется операторами:

Read(x1, x2, x3, …);

ReadLn(x1, x2, x3, …);

где x1, x2, x3, …- список ввода – перечень имен переменных, значения которых вводятся.

Пример: ReadLn(n, m, r); - ввести значения переменных

n, m, r.

Операторы ввода позволяют организовать диалоговый (интерактивный) режим работы компьютера – при их исполнении выполнение программы останавливается, и ожидается ввод данных.

Пользователь должен ввести с клавиатуры необходимое количество данных в соответствии с типами переменных, перечисленных в операторе ввода (чисел, символов, строк):

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

Е-12

· если переменные символьного типа, то при вводе одной строкой их значения записываются без апострофов и каких бы то ни было разделителей (пробелов или запятых), которые в этом случае будут восприниматься как символы,

· строки вводятся в соответствии с описанной длиной: если вводимая строка длиннее описанной, то она обрезается, если меньше, то пробелами недополняется,

· значения переменных логического типа нельзя вводить с клавиатуры,

· в любом случае значения переменных можно вводить по одному в строке:

1.5

-2.21

Е-12

· после выполнения оператора Read курсор на новую строку не переводится, а оператора ReadLn - переводится в начало новой строки и очищается буфер ввода,

· оператор ReadLn без списка ввода останавливает выполнение программы до тех пор, пока не будет нажата клавиша ENTER.

 

Вывод данных

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

Вывод информации в программе осуществляется операторами:

Write(x1, x2, x3, …);

WriteLn(x1, x2, x3, …);

где x1, x2, x3, … - список вывода – перечень имен переменных, значения которых выводятся.

Оператор WriteLn после вывода значения последней переменной списка вывода переводит курсор в начало следующей строки на экране монитора или в текстовом файле.

Вывод данных может быть осуществлен бесформатным и форматным способами.

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.