
- •Содержание
- •Программирование и алгоритмические языки в историческом аспекте
- •Введение в Паскаль
- •Алфавит Паскаля
- •Служебные (ключевые) слова
- •Константы
- •Запись чисел
- •Переменные
- •Типы данных
- •Стандартные функции
- •Выражения
- •Выражения целого типа
- •Выражения вещественного типа
- •3,61·109 X – 526,237 3.61e9 * X – 526.237 * Sqrt(0.2*y) Выражения логического типа
- •Операторы присваивания
- •Программа и этапы ее разработки. Структура программы
- •Var X, s : Word;
- •Комментарии
- •Ввод данных
- •Вывод данных
- •Бесформатный способ вывода
- •±D.DdddddddddE±dd
- •Форматный способ вывода
- •Структуры данных
- •Массивы
- •Var a : Array [1..2,1..3] Of Integer;
- •Error 201: Range check error
- •Var a : tMatrix;
- •Var Doska : Array [‘a’..’h’,1..8] Of Char;
- •Var Roma : Array [1..787] Of Word;
- •Var Roma : Array [-754..33] Of Word;
- •Var Ozenka : Array [1..2,1..3] Of Word;
- •Var Ozenka : Array [Fam, Predm] Of 2..5;
- •Var a: Array [1..3, 1..4, 1..5] Of Integer;
- •Var I, j: Byte;
- •Алгоритм и его свойства
- •Схемы алгоритмов
- •Базовые структуры
- •Цепочка
- •Ветвления
- •Альтернатива
- •If (условие)
- •Вариант 2 – с использованием операции конъюнкция
- •Часто встречающиеся ошибки программирования:
- •Var X, y, s_left, s_right, alfa, sin_alfa, segment : Real;
- •Переключатель
- •Часто встречающиеся ошибки программирования:
- •Бесконечные циклы
- •Циклы с предусловием
- •Var I, s : Word;
- •Var I, s, n : Word;
- •С хема алгоритма: Программа
- •Var n, min, max, s, count: Word;
- •Часто встречающиеся ошибки программирования:
- •Циклы с постусловием
- •Var I, s : Word;
- •Var I, s, n : Word;
- •С хема алгоритма: Программа
- •Var n,min,max,s,count: Word;
- •Var k : Word;
- •X, y, s : Real;
- •Часто встречающиеся ошибки программирования:
- •Циклы с параметром
- •Действия цикла:
- •Var n, s : Word;
- •Var I, s : Word;
- •Примеры:
- •Var I, j, k : Word;
- •Var I, i_max, vector_max : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, s : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, k, m : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, s, count : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, k, min, max, i_min, i_max : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, k, i_otr, i_pol : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, k, posl : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, j, t : Integer;
- •Vector : Array [1..K] Of Integer;
- •Var I, j, t : Integer;
- •Vector : Array [1..K] Of Integer;
- •Var I, j, k : Integer;
- •Var I, j, k, posl : Integer;
- •Var I, j, k, m : Integer;
- •Var I, j, k, i_max, j_min : Word;
- •Var I, j, t : Integer;
- •Vector : Array [1..K] Of Integer;
- •Var I, j, m, t : Integer;
- •Vector : Array [1..K] Of Integer;
- •Var I, j, b, c : Word;
- •Часто встречающиеся ошибки программирования:
- •Множества
- •Var r : tSymb;
- •Основные операции со множествами
- •Процедуры для работы со множествами
- •Типизированные файлы
- •Var f_int : tFile_Int;
- •Var n : Integer;
- •Функции для работы с типизированными файлами
- •И процедуры:
- •Var n : Integer;
- •Текстовые файлы
- •Var f_text : tFile_text;
- •Программа:
- •Var stud_1 : tStudent;
- •Var student : tKadr;
- •Var coord : tCoord;
- •Ключ : ();
- •Подпрограммы
- •Подпрограммы-функции
- •Var p : Real;
- •Var s : Real;
- •Var I: Word;
- •Var a, b, c : Integer;
- •Var a, b, c : Integer;
- •Var a, b : Integer;
- •Var a, b, c: Integer;
- •Рекурсия
- •5 * 4 * Factorial(3)
- •5 * 4 * 3 * Factorial(2)
- •5 * 4 * 3 * 2 * Factorial(1)
- •Var k: Integer; Func_2
- •Var temp : Integer;
- •Особенности рекурсии:
- •Процедуры
- •Var I: Word;
- •Var I, i_min, i_max: Word;
- •Var I: Word;
- •Var I: Word;
- •Var I: Word;
- •Var I: Word;
- •Var I, j, k: Word;
- •Var I: Word;
- •Var I: Word;
- •Var I, j, k: Word;
- •Var I: Word;
- •Var I: Word;
- •Var I, j, k: Word;
- •Var I: Word;
- •Var I: Word;
- •Var I, j: Word;
- •Программные модули
- •Структура модуля
- •Interface
- •Implementation
- •Var f: Text;
- •Var p: Real;
- •Var temp: Real;
- •Компиляция модулей
- •Взаимное использование модулей
- •Особенности выполнения инициирующих разделов
- •Ссылки и динамические переменные
- •Var a, b: tPntint;
- •X, y: tPntchar;
- •Динамические структуры данных
- •Связные списки
- •Inf: Integer;
- •Var head, q : tPoint;
- •Inf: Integer;
- •Var head, q : tPoint;
- •Добавление нового элемента в список
- •Var head, q, r: tPoint;
- •Inf: Integer;
- •Var head, q, r : tPoint;
- •Удаление элемента из списка
- •Inf: Integer;
- •Var head, q, r : tPoint;
- •Сортированные списки
- •Var head, q, r, V: tPoint;
- •Inf: Integer;
- •Var head, q, r, V : tPoint;
- •Бинарные деревья
- •Var root, q, V: tRebro;
- •Интерфейс:
- •Var root, q, V : tRebro;
- •Поиск заданного узла в дереве
- •Var root, q, V : tRebro;
- •Удаление узла из дерева
- •Var root, q, V, r : tRebro;
- •Объектно-ориентированное программирование
- •Var X, y, dx, dy: Word;
- •Var x0, y0, dx, dy: Word;
- •Var x0, y0, dx, dy, radius: Word;
- •Var x0, y0, dx, dy, radius: Word;
- •Основы алгебры логики
- •Логическая функция не (отрицание)
- •Логическая функция и (конъюнкция – логическое умножение)
- •Логическая функция или (дизъюнкция – логическое сложение)
- •Логическое следование (импликация)
- •Логическое совпадение(эквивалентность)
- •Закон исключенного третьего
- •Закон противоречия
- •Закон двойного отрицания
- •Закон контрапозиции
- •Закон расширенной контрапозиции
- •Закон перестановки посылок
- •Закон силлогизма
- •Закон де Моргана
- •Минимизация формул алгебры логики
- •Алгебраическими методами минимизации
- •Табличными методами минимизации
- •Системы счисления
- •Двоичная система счисления
- •Восьмеричная система счисления
- •Шестнадцатеричная система счисления
- •Арифметические операции в двоичной системе счисления
- •1111 11 11 - Переносы
- •Арифметические операции в восьмеричной системе счисления
- •Арифметические операции в 16-ричной системе счисления
- •1. Ошибки при компиляции
- •2. Ошибки времени выполнения а) Ошибки системы ms-dos
- •Б)Ошибки ввода-вывода
- •В)Критические ошибки
- •Г)Фатальные ошибки
Операторы присваивания
Операторы присваивания служат для вычисления значений выражений и приписывания вычисленных значений переменным.
Общий вид оператора присваивания:
x := s;
где x – имя переменной,
s – выражение (переменная, константа) того же типа,
:= - знак присваивания.
Оператор присваивания дает команду компьютеру на:
вычисление значения выражения справа от знака присваивания,
запись вычисленного значения в ячейку памяти, отведенную для хранения переменной, стоящей слева от знака присваивания; при этом прежнее значение переменной, записанной в этой ячейке, стирается:
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. Сопровождение программы – включает консультацию по работе с программой и обучение персонала. Устраняются недостатки и ошибки, замеченные в процессе эксплуатации.
Таким образом, программа реализует алгоритм решения задачи. Основными характеристиками программы являются следующие:
точность полученного результата,
время выполнения,
объем требуемой памяти.
Функционирование программы связано с обработкой данных. Данные, предназначенные для обработки, называются исходными и задаются обычно в начале выполнения программы. Программа по ходу выполнения может запрашивать недостающие исходные данные. Основной способ их задания – ввод с клавиатуры. Программа может также считывать исходные данные из файлов.
В процессе выполнения программы исходные данные преобразуются в результаты. Результаты выводятся на экран или принтер в текстовом или графическом виде, а также могут быть записаны в файл на диске.
Таким образом, в программе выполняются следующие действия:
ввод данных,
определение представления этих данных в памяти компьютера (создание структур данных),
определение операций по обработке структур данных в соответствии с заданным алгоритмом – создание базовых структур,
вывод результатов работы.
Типовой алгоритм вычислительного процесса, реализованного в программе, имеет вид:
Программа на Паскале имеет четко выраженную структуру – последовательность разделов, нарушать которую нежелательно.
Любая программа состоит из заголовка и разделов.
Заголовок записывается как первая строка программы и начинается со слова 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;