Программа и этапы ее разработки. Структура программы
Операторы присваивания
Операторы присваивания служат для вычисления значений выражений и приписывания вычисленных значений переменным.
Общий вид оператора присваивания:
x := s;
где x – имя переменной,
s – выражение (переменная, константа) того же типа,
:= - знак присваивания.
Оператор присваивания дает команду компьютеру на:
1. вычисление значения выражения справа от знака присваивания,
2. запись вычисленного значения в ячейку памяти, отведенную для хранения переменной, стоящей слева от знака присваивания; при этом прежнее значение переменной, записанной в этой ячейке, стирается:
a:= 3 Mod 2;
a := a + 1;
После выполнения этих операторов переменная a примет значение 2.
Пример: с помощью последовательности операторов присваивания обменять значениями две переменные a и b:
Неправильное решение:
a := b;
b := a;
В этом случае обмена не произойдет, и обе переменные примут одно и то же значение, в данном случае – значение переменной b.
Для обмена значениями двух переменных обязательно нужна третья. Такой обмен осуществляется с помощью алгоритма циклического обмена:
c := a;
a := b;
b := c;
Неправильная запись операторов присваивания:
10 := x; слева должно стоять имя
a + b := y; переменной, а справа - выражение
i := j := k := 1; нельзя присваивать однимоператором одновременно значениесразу нескольким переменным
Пример: чему будет равно значение переменной s после выполнения следующих операторов присваивания:
x := 534;
s := 0;
s := s + x Mod 10; s =0 + 4
s := s + x Div 10 Mod 10; s = 4 + 3
s := s + x Div 10 Div 10 Mod 10; s = 7 + 5
Эта программа вычисляет сумму цифр переменной x, то есть s = 12.
Команды, выполняемые процессором компьютера, являются электрическими сигналами, которые можно представить в виде последовательностей нулей и единиц. Каждой команде соответствует своя последовательность – двоичное число или машинный код. Написать программу на нем может только очень опытный программист, хорошо знающий архитектуру процессора (его устройство) и систему команд (набор допустимых инструкций). Поэтому большинство программ создаются при помощи посредников, в качестве которых выступают алгоритмические языки или языки программирования.
Совокупность средств и правил представления алгоритма в виде, пригодном для выполнения компьютером, называется языком программирования.
Программа – это запись алгоритма на языке программирования.
В процессе создания любой программы можно выделить несколько этапов.
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
Если в программе определены несколько перечисляемых типов, то необходимо следить за тем, чтобы одно и то же значение не входило в два типа одновременно.
Как правило, перечисляемый тип используется для описания множества значений какого-нибудь свойства объекта, например, его цвета. Поэтому он повышает понятность, читабельность программы
Перечисляемый тип относится к упорядоченным типам данных, то есть к типам, у которых для каждого принадлежащего к нему значения (кроме первого) известно предыдущее значение и вместе с тем для каждого (кроме последнего) – последующее значение. Кроме перечисляемого, к упорядоченным типам относятся целый, логический, и символьный типы данных.
В ряду значений любого упорядоченного типа можно выделить более узкий диапазон или интервал: