Понятие алгоритма. Свойства алгоритмов.
Понятие алгоритма. Свойства алгоритмов.
Алгоритм – точное предписание исполнителю совершить определенную последовательность действий для достижения цели за конечное число шагов.
Св-ва: Дисретность(прерывность, раздельность)
Определенность( каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола)
Результативность (конечность) – должен приводить к решению за конечное число шагов.
Массовость.
Основные алгоритмические структуры. Блок-схема.
Линейный алгоритм, ветвление, цикл.
Блок-схема – это графическое изображение алгоритма в виде схемы связанных между собой блоков – внутри блока описание действия.
Языки программирования. История развития языков программирования.
Машинные, низкоуровневые языки(ассемблер), языки высоко уровня (Паскаль, СИ и тд.). История началась в 20 веке. Конрад Цузе 1943-1945гг. В 1954 – разработка Фортран. Паскаль – 1970, СИ – 1972. Сначала был машинный язык. Команды забивались ячейками памяти.
Введение в Паскаль. Алфавит языка, зарезервированные слова. Комментарии, переменные, константы.
Алфавит – это набор знаков, состоящий из букв, десятеричных и шестнадцатеричных цифр и специальных символов.
Зарезервированные слова – это слова которые являются составной частью языка, имеют фиксированное начертание и определенный смысл.
Absolute, and, array, asm, begin, case(вариант), div, goto(переход), do, downto, else, end, function, if, label, library, mod, or, program, string, then, var, while и тд.
Константа – постоянная – это ячейка ( или несколько) оперативной памяти, которой присвоено определенное имя. И значение которой не меняется в течение программы.
Переменная – это ячейка (или несколько) оперативной памяти, которой присвоено определенное имя, и значение которой может меняться в течение программы.
Структура программы в паскале. Описание разделов.
Название программы program
Описание переменных var .. integer
Описание процедур и функций begin … end. Отделяется все ;
Понятие оператор. Оператор присваивания. Особенности, правила использования, правила записи арифметических выражений. Составной оператор.
Оператор – это элемент языка, задающий полное описание действия, которое необходимо выполнить.
Оператор присваивания вычисляет выражение и присваивает результат переменной :=
Правило: тип выражения в правой части оператора должен совпадать с типом переменной в левой части оператора присваивания.
Операторы можно объединить в составной оператор, заключив их в операторные скобки begin и end.
Условный оператор IF. Полная и неполная форма ветвления. Синтаксис оператора. Случаи использования.
Условный оператор If служит для организации процесса вычисления в зависимости от какого-либо логического условия. Оператор ветвления.
Полная форма if then else
Неполная форма if then
Оператор CASE. Полная и неполная форма выбора. Синтаксис оператора.
Оператор case - позволяет выбрать одно из нескольких возможных продолжений программы. Выбор любого действия.
Case ключ выбора of список выбора
Операторы цикла. Виды циклов. Цикл с параметром FOR. Синтаксис оператора.
Цикл с предусловием
Цикл с постусловием
Цикл с параметром
While do
Repeat
For to do
Цикл с постусловием REPEAT. Синтаксис оператора.
Применяется для организации циклов с неизвестным заранее числом повторений, логика которых предполагает выполнение цикла до тех пор пока не станет истинным некоторое условие.
Цикл с предусловием WHILE. Синтаксис оператора. Понятие вложенный цикл.
Применяется для организации циклов с неизвестным заранее числом повторений, логика которых предполагает выполнение цикла по истинно некоторое условие.
Вложенный цикл – цикл внутри другого
Простые типы данных: целый и вещественный тип данных. Операции, функции и процедуры применимые к данным типам.
Целый – обозначает множества целых чисел в различных диапазонах (integer)
Вещественный – обозначает множества вещественных чисел в различных диапазонах real
Строковый тип данных. Операции, функции и процедуры применимые к данному типу.
Строковый тип данных – string – используется для хранения последовательностей символов. Можно присваивать друг другу , объединять, сравнивать.
Подпрограмма – функция. Описание процедур. Сфера действия переменных. Локальные и глобальные переменные. Фактические и формальные параметры.
Операции с указателями.
Для указателей определены только операции присваивания и проверки на равенство и неравенство. В Паскале запрещаются любые арифметические операции с указателями, их ввод-вывод и сравнение на больше-меньше.
Еще раз повторим правила присваивания указателей:
· любому указателю можно присвоить стандартную константу nil, которая означает, что указатель не ссылается на какую-либо конкретную ячейку памяти;
· указатели стандартного типа pointer совместимы с указателями любого типа;
· указателю на конкретный тип данных можно присвоить только значение указателя того же или стандартного типа данных.
Указатели можно сравнивать на равенство и неравенство, например:
If p1=p2 then …..
If p1<>p2 then …..
В Паскале определены стандартные функции для работы с указателями:
· addr( x) – тип результата pointer, возвращает адрес x (аналогично операции @), где x – имя переменной или подпрограммы;
· seg( x) – тип результата word, возвращает адрес сегмента для x;
· ofs( x) – тип результата word, возвращает смещение для x;
· ptr( seg, ofs) – тип результата pointer, по заданному сегменту и смещению формирует адрес типа pointer.
Пример описания списка
Type ukazat= ^S;
S= record
Inf: integer;
Next: ukazat;
End;
Структура модулей Паскаля.
Всякий модуль Паскаля имеет следующую структуру:
Unit <имя_модуля>;
interface <интерфейсная часть>;
implementation < исполняемая часть >;
begin
<инициирующая часть>;
end .
Здесь UNIT – зарезервированное слово (единица); начинает заголовок модуля;
· <имя_модуля> - имя модуля (правильный идентификатор);
· INTERFACE – зарезервированное слово (интерфейс); начинает интерфейсную часть модуля;
· IMPLEMENTATION – зарезервированное слово (выполнение); начинает исполняемую часть модуля;
· BEGIN – зарезервированное слово; начинает инициирующую часть модуля; причем конструкция begin <инициирующая часть> необязательна;
· END – зарезервированное слово – признак конца модуля.
Таким образом, модуль Паскаля состоит из заголовка и трех составных частей, любая из которых может быть пустой.
Компиляция модулей Паскаля.
В среде Турбо Паскаль имеются средства, управляющие способом компиляции модулей и облегчающие разработку больших программ. Определены три режима компиляции: COMPILE,MAKE,BUILD. Режимы отличаются способом связи компилируемого модуля или основной программы с другими модулями, объявленными в предложении USES .
При компиляции модуля или основной программы в режиме COMPILE все, упоминаемые в предложении USES модули, должны быть предварительно откомпилированы, и результаты компиляции должны быть помещены в одноименные файлы с расширением TPU (от англ. Turbo Pascal Unit). Файл с расширением TPU создается автоматически при компиляции модуля Паскаля.
В режиме MAKE компилятор проверяет наличие TPU -файлов для каждого объявленного модуля. Если какой-либо файл не найден, система ищет одноименный файл с расширением PAS , т.е. файл с исходным текстом модуля Паскаля. Если таковой файл найден, система приступает к его компиляции. Кроме того, в этом режиме система следит за возможными изменениями исходного текста любого используемого модуля. Если в PAS -файл внесены изменения, то независимо от того, есть ли в каталоге соответствующий TPU -файл или нет, система откомпилирует его перед компиляцией основной программы. Более того, если изменения внесены в интерфейсную часть, то будут откомпилированы все другие модули, обращающиеся к нему. Режим MAKE существенно облегчает процесс разработки крупных программ с множеством модулей Паскаля: программист избавляется от необходимости следить за соответствием TPU -файлов их исходному тексту, т.к. система делает это автоматически.
В режиме BUILD существующие TPU -файлы игнорируются, система пытается отыскать и откомпилировать соответствующие PAS - файлы для каждого модуля Паскаля. После компиляции можно быть уверенным, что учтены все сделанные в текстах модулей Паскаля исправления и изменения.
Подключение модулей Паскаля к основной программе и их компиляция происходит в порядке их объявления в предложении USES . При переходе к очередному модулю Паскаля система предварительно ищет все модули, на которые он ссылается. Ссылки модулей Паскаля друг на друга могут образовывать древовидную структуру любой сложности, однако запрещается явное или косвенное обращение модуля к самому себе. Например, недопустимы следующие объявления:
Пример ошибок модуля Паскаля
Unit A; Unit B;
interface interface
uses B;Uses A;
……. ……
implementation implementation
…….. ……
end. end.
Это ограничение можно обойти, если «спрятать» предложение USES в исполняемые части зависимых модулей:
Пример исправленных ошибок модуля Паскаля
Unit A; Unit B;
interface interface
……. ……
implementation implementation
uses B;Uses A;
…….. ……
end. end.
Дело в том, что Турбо Паскаль разрешает ссылки на частично откомпилированные модули, что приблизительно соответствует опережающему описанию подпрограммы. Если интерфейсные части независимы (это обязательное условие!), Турбо Паскаль сможет идентифицировать все глобальные объекты в каждом модуле, после чего откомпилирует тела модулей обычным способом.
Стандартные модули Паскаля.
В Турбо Паскале имеется 8 стандартных модулей, в которых содержится множество различных типов, констант, процедур и функций. Этими модулями являются SYSTEM, DOS, CRT, GRAPH, OVERLAY, TURBO3, GRAPH3. Модули Паскаля GRAPH , TURBO 3, GRAPH 3 выделены в отдельные TPU -файлы, а остальные входят в состав библиотечного файла TURBO . TPL . Лишь один модуль Паскаля SYSTEM подключается к любой программе автоматически, все остальные становятся доступны только после указания их имен в списке подключаемых модулей.
Модуль Паскаля SYSTEM. В него входят все процедуры и функции стандартного Паскаля, а также встроенные процедуры и функции, которые не вошли в другие стандартные модули (например, INC , DEC , GETDIR и т.п.). Модуль Паскаля SYSTEM подключается к любой программе независимо от того, объявлен ли он в предложении USES или нет, поэтому его глобальные константы, переменные, процедуры и функции считаются встроенными в Турбо Паскаль.
Модуль Паскаля PRINTER делает доступным вывод текстов на матричный принтер. В нем определяется файловая переменная LST типа TEXT , которая связывается с логическим устройством PRN. После подключения данного модуля Паскаля можно выполнить, например, такое действие:
Пример стандартного модуля Паскаля
Uses printer;
Begin
Writeln(lst, ' Турбо Паскаль ');
End.
Модуль Паскаля CRT. В нем сосредоточены процедуры и функции, обеспечивающие управление текстовым режимом работы экрана. С его помощью можно перемещать курсор в любую точку экрана, менять цвет выводимых символов и фона, создавать окна. Кроме того, в данный модуль включены также процедуры «слепого» чтения клавиатуры и управления звуком.
Модуль Паскаля GRAPH . Содержит набор типов, констант, процедур и функций для управления графическим режимом работы экрана. Этот модуль позволяет создавать различные графические изображения и выводить на экран надписи стандартными или созданными программистом шрифтами.
Модуль Паскаля DOS . В модуле собраны процедуры и функции, открывающие доступ к средствам дисковой операционной системы MS - DOS .
Модуль Паскаля OVERLAY . Данный модуль необходим при разработке громоздких программ с перекрытиями. Турбо Паскаль обеспечивает создание программ, длина которых ограничивается лишь основной оперативной памятью. Операционная система MS - DOS оставляет программе около 580 Кбайт основной памяти. Память такого размера достаточна для большинства исполняемых программ, тем не менее, использование программ с перекрытиями снимает это ограничение.
Модули Паскаля TURBO 3 и GRAPH 3 введены для обеспечения совместимости с ранней версией системы Турбо Паскаль.
Графические примитивы.
Procedure SetPixel(x,y,color: integer);
Закрашивает один пиксел с координатами (x,y) цветом color.
function GetPixel(x,y): integer;
Возвращает текущее значение цвета для пиксела с координатами (x,y).
procedure MoveTo(x,y: integer);
Передвигает невидимое перо к точке с координатами (x,y); эта функция работает в паре с функцией LineTo(x,y).
procedure LineTo(x,y: integer);
Рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y).
procedure Line(x1,y1,x2,y2: integer);
Рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2).
procedure Circle(x,y,r: integer);
Рисует окружность с центром в точке (x,y) и радиусом r.
procedure Ellipse(x1,y1,x2,y2: integer);
Рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2).
procedure Rectangle(x1,y1,x2,y2: integer);
Рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2).
procedure RoundRect(x1,y1,x2,y2,w,h: integer);
Рисует прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев.
procedure Arc(x,y,r,a1,a2: integer);
Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).
procedure Pie(x,y,r,a1,a2: integer);
Рисует сектор окружности, ограниченный дугой (параметры процедуры имеют тот же смысл, что и в процедуре Arc).
procedure Chord(x,y,r,a1,a2: integer);
Рисует фигуру, ограниченную дугой окружности и отрезком, соединяющим ее концы (параметры процедуры имеют тот же смысл, что и в процедуре Arc).
procedure TextOut(x,y: integer; s: string);
Выводит строку s в позицию (x,y) (точка (x,y) задает верхний левый угол прямоугольника, который будет содержать текст из строки s).
procedure FloodFill(x,y,color: integer);
Заливает область одного цвета цветом color, начиная с точки (x,y).
procedure FillRect(x1,y1,x2,y2: integer);
Заливает прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2), цветом текущей кисти.
procedure Polygon(var a; n: integer);
Строит ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.
procedure Polyline(var a; n: integer);
Строит замкнутую ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.
Объектно-ориентированное программирование. Основные понятия.
бъектно-ориентированное программирование (ООП)— это парадигма (совокупность понятий и идей) программирования, в рамках которой «во главу угла» ставят понятия объектов и классов. Сейчас ООП так или иначе присутствует во всех языках, поэтому понимание его основ просто необходимо для всех, кто собираетсязаняться программированием. Стоит сразу определить базовые понятия класса и объекта:
· Класс — это шаблон, описание ещё не созданного объекта. Класс содержит данные, которые описывают строение объекта и его возможности, методы работы с ним;
· Объект — экземпляр класса. То, что «рождено» по «чертежу», то есть по описанию из класса. В качестве примера объекта и класса можно привести технический чертёж для изготовления детали — это класс. Выточенная же на станке по размерам и указаниям из чертежа деталь — объект.
52. Основные принципы объектно-ориентированного программирования.
Основные принципы ООП
Объектно-ориентированное программирование основано на «трех китах» - трех важнейших принципах, придающих объектам новые свойства. Этими принципами являются инкапсуляция, наследование и полиморфизм.
53. Инкапсуляция
Инкапсуляция есть объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта, а алгоритмы - объектными методами.
Инкапсуляция позволяет в максимальной степени изолировать объект от внешнего окружения. Она существенно повышает надежность разрабатываемых программ, т.к. локализованные в объекте алгоритмы обмениваются с программой сравнительно небольшими объемами данных, причем количество и тип этих данных обычно тщательно контролируются. В результате замена или модификация алгоритмов и данных, инкапсулированных в объект, как правило, не влечет за собой плохо прослеживаемых последствий для программы в целом (в целях повышения защищенности программ в ООП почти не используются глобальные переменные).
Другим немаловажным следствием инкапсуляции является легкость обмена объектами, переноса их из одной программы в другую. Можно сказать, что ООП «провоцирует» разработку библиотек объектов, таких как Turbo Vision.
Наследование
Наследование есть свойство объектов порождать своих потомков. Объект-потомок автоматически наследует от родителя все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их.
Принцип наследования решает проблему модификации свойств объекта и придает ООП в целом исключительную гибкость. При работе с объектами программист обычно подбирает объект, наиболее близкий по своим свойствам для решения конкретной задачи, и создает одного или нескольких потомков от него, которые «умеют» делать то, что не реализовано в родителе.
Последовательное проведение в жизнь принципа «наследуй и изменяй» хорошо согласуется с поэтапным подходом к разработке крупных программных проектов и во многом стимулирует такой подход.
Полиморфизм
Полиморфизм - это свойство родственных объектов (т.е. объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы разными способами. В рамках ООП поведенческие свойства объекта определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках объекта, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, т.е. объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющие разную алгоритмическую основу и, следовательно, придающие объектам разные свойства. Это и называется полиморфизмом объектов.
В Турбо Паскале полиморфизм достигается не только описанным выше механизмом наследования и перекрытия методов родителя, но и их виртуализацией (см. ниже), позволяющей родительским методам обращаться к методам потомков.
Понятие алгоритма. Свойства алгоритмов.
Алгоритм – точное предписание исполнителю совершить определенную последовательность действий для достижения цели за конечное число шагов.
Св-ва: Дисретность(прерывность, раздельность)
Определенность( каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола)
Результативность (конечность) – должен приводить к решению за конечное число шагов.
Массовость.