Скачать презентацию Алгоритмизация и программирование на языках высокого уровня Основы Скачать презентацию Алгоритмизация и программирование на языках высокого уровня Основы

ш2-(л)-(Федоров)-Алгоритмизация2.ppt

  • Количество слайдов: 116

Алгоритмизация и программирование на языках высокого уровня Основы программирования на алгоритмических языках – пользовательские Алгоритмизация и программирование на языках высокого уровня Основы программирования на алгоритмических языках – пользовательские типы данных – процедуры и функции – файлы – графическая библиотека Учебная программа для школьников 1 неделя (май, 2006) (с) КР ЦИО г. Апатиты, Федоров А. М. 2006 г.

Содержание курса n Введение: n n n 2/16/2018 – Алгоритмические языки программирования: примеры, тенденции Содержание курса n Введение: n n n 2/16/2018 – Алгоритмические языки программирования: примеры, тенденции развития. – Возможности и ограничения современных сред программирования Язык программирования Pascal: структуризация данных, пользовательские типы Структуризация данных: создание и работа с файлами Основы структурного и функционального программирования Способы взаимодействия между функциями: передача параметров и возврат результатов Возможности графической библиотеки: создание анимации Андрей М. Федоров (amfedorov@mail. ru) 2

Введение. Алгоритмические языки. Среды программирования. Лекция 1 – вт. Введение. Алгоритмические языки. Среды программирования. Лекция 1 – вт.

План n Введение – обзор рассматриваемых вопросов, – цели и задачи курса, – порядок План n Введение – обзор рассматриваемых вопросов, – цели и задачи курса, – порядок работы; n Языки программирования (ЯП) – развитие ЯП (эволюция), – классификации и области применения; n Среды программирования – процесс создания исполнимого модуля, – интегрированные среды, – возможности и ограничения сред n Среды быстрой разработки приложений (RAD) – проектирование (дизайн) v код v интерфейс v хранилища данных v средства программных коммуникаций 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 4

Введение n Вопросы, рассматриваемые в курсе – – – структурное и функциональное программирование пользовательские Введение n Вопросы, рассматриваемые в курсе – – – структурное и функциональное программирование пользовательские типы данных процедуры и функции файлы графическая библиотека n Цели и задачи курса – изучение базовых принципов построения программ – использование современных технологий разработки ПО – освоение стандартной библиотеки функций n Порядок работы – лекции, лабораторные и практические занятия – базовые примеры решения задач – выпускная работа – применение всех изученных техн. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 5

Что такое языки программирования? n Языки программирования (ЯП) – развитие ЯП (эволюция), – классификации Что такое языки программирования? n Языки программирования (ЯП) – развитие ЯП (эволюция), – классификации и области применения; Система записи текстов (программ), предназначенных для преобразования других текстов (данных) 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 6

Генеалогия распространен ных языков программиров ания высокого уровня Роберт У. Себеста. Основные концепции языков Генеалогия распространен ных языков программиров ания высокого уровня Роберт У. Себеста. Основные концепции языков программирования 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 7

Как развивались ЯП и каков их современный уровень? n Поколения ЯП 3 е поколение Как развивались ЯП и каков их современный уровень? n Поколения ЯП 3 е поколение – языки высокого уровня языки скриптов параллельные языки логические языки ОО языки (Smalltalk, C++) функциональные языки (LISP, PROLOG) универсальные языки (FORTRAN, C, PASCAL) 2 е поколение – языки ассемблера 1 е поколение – машинные языки 1940 2/16/2018 1950 1960 1970 1980 1990 Андрей М. Федоров (amfedorov@mail. ru) 2000 8

Какие бывают ЯП? n Классы языков программирования – императивные v четкое описание порядка действий Какие бывают ЯП? n Классы языков программирования – императивные v четкое описание порядка действий – функциональные v программы без переменных и операторов присваивания – логические v система самостоятельно выбирает действия – объектно ориентированные v объекты обмениваются сообщениями 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 9

Классификация языков программирования Языки программирования Высокого уровня Низкого уровня Процедурные языки: (императивные) Fortran, Cobol, Классификация языков программирования Языки программирования Высокого уровня Низкого уровня Процедурные языки: (императивные) Fortran, Cobol, PL/1, Algol, Pascal, C, Ada, … Машинные языки Языки обработки данных (функциональные) LISP, APL, Snobol, Icon, SETL, … Язык ассемблера ОО-языки Smalltalk, Simula, Eiffel, C++, Ada 95, … Для программирования Баз данных, для Интернета, языки моделирования и прочие 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 10

Уровни языков программирования Языки программирования высокого уровня Низкого уровня понятие типа данных; независимость от Уровни языков программирования Языки программирования высокого уровня Низкого уровня понятие типа данных; независимость от архитектуры конкретного компьютера (мобильность программ); развитые управляющие структуры и средства описания структур данных близость к естественному языку 2/16/2018 отсутствует понятие типа данных; зависимость от архитектуры конкретного компьютера (отсутствует мобильность программ); примитивные управляющие структуры и средства описания структур данных; близость к машинному языку Андрей М. Федоров (amfedorov@mail. ru) 11

Примеры языков программирования n Fortran (Фортран). (FORmula TRANslator) Это первый компилируемый язык, созданный Джимом Примеры языков программирования n Fortran (Фортран). (FORmula TRANslator) Это первый компилируемый язык, созданный Джимом Бэкусом. Для этого языка было создано огромное количество библиотек, начиная от статистических комплексов и кончая пакетами управления спутниками, поэтому Фортран продолжает активно использоваться во многих организациях. n Cobol (Кобол). (COmmon Business Oriented Language) Это компилируемый язык для применения в экономической области и решения бизнес задач. Он отличается большой «многословностью» — его операторы иногда выглядят как обычные английские фразы n Algol (Алгол). (ALGOrithmic Language) Компилируемый язык. В 1968 году была создана версия Алгол 68, по своим возможностям и сегодня опережающая многие языки программирования. n Pascal (Паскаль). Язык Паскаль, созданный в конце 70 х годов основоположником множества идей современного программирования Никлаусом Виртом, во многом напоминает Алгол, но в нем ужесточен ряд требований к структуре программы и имеются возможности, позволяющие успешно применять его при создании крупных проектов. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 12

Примеры языков программирования n Basic (Бейсик). //60 е. Для этого языка имеются и компиляторы, Примеры языков программирования n Basic (Бейсик). //60 е. Для этого языка имеются и компиляторы, и 2/16/2018 интерпретаторы, а по популярности он занимает первое место в мире. Он создавался в качестве учебного языка и очень прост в изучении. n С (Си). //70 e. Данный язык изначально не рассматривался как массовый. Он планировался для замены ассемблера, чтобы иметь возможность создавать столь же эффективные и компактные программы, и в то же время не зависеть от конкретного типа процессора. Си во многом похож на Паскаль и имеет дополнительные средства для прямой работы с памятью (указатели). На этом языке в 70 е годы написано множество при кладных и системных программ и ряд известных операционных систем (Unix). n C++ (Си++). Си++ это объектно ориентированное расширение языка Си, созданное Бьярном Страуструпом в 1980 году. Требует от разработчиков высокого уровня профессиональной подготовки. n Java (Джава, Ява). Этот язык был создан компанией Sun в начале 90 х годов на основе Си++. Он призван упростить разработку приложений на основе Си++ путем исключения из него всех низкоуровневых возможностей. Главная идея платформно независимый байт код. Андрей М. Федоров (amfedorov@mail. ru) 13

Где используются ЯП? n Научные приложения n Коммерческие приложения n Искусственный интеллект n Системное Где используются ЯП? n Научные приложения n Коммерческие приложения n Искусственный интеллект n Системное программирование n Языки подготовки сценариев n Специализированные языки 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 14

Как и с помощью чего писать программы? n Среды программирования – процесс создания исполнимого Как и с помощью чего писать программы? n Среды программирования – процесс создания исполнимого модуля, – интегрированная среда v. Редактор v. Компилятор v. Отладчик v. Интерактивная справочная система – возможности и ограничения сред 2/16/2018 коммерческие и свободно распространяемые среды программирования: С++Builder, Delphi, Borland Developer Studio, MS Visual Studio Bloodshed Dev C++, GNU C++. . 15 Андрей М. Федоров (amfedorov@mail. ru)

Трансляция программы в машинный код, - понятный процессору n Преобразование текста на одном языке Трансляция программы в машинный код, - понятный процессору n Преобразование текста на одном языке в текст на другом языке – Компиляция v создание исполнимого модуля – Интерпретация v Выполнение программы «команда за командой» Понятно человеку Program Hello; hello. Begin pas Write. Ln(‘привет!’); end; транслятор HELLO_ TEXT˜CODE˜+˜X+-!s˜ щ n˜¦-˜ Й ˜ Б Й ˜ Г+t˜+@О ++p &¦˜˜ 3 э. О ˜ С ˜+l˜+r˜ ш ¦_6 s _6 q _6ў _Г _0˜ щ ¦˜d˜__Й 6˜ +__^]-˜ U Ль V Л v˜V ш +_Л ¦^] Л ^˜ Г _$wА _˜r. W Л F˜ Л N˜+}˜ А ~˜ t˜&¦˜-G ў +ў +Г +ыЁ + ўє 6 И ¶F+u ЇН N_ў +˜+№N 6 К ˜, s˜˜: ы ˜˜F˜ ктю _к ˜ Л V˜ Л F_^Лх ] ˜ Г Ль 3+З_м˜_м˜_м˜+З_З_ф. З ш и_ъ ˜ Г Ль. Л : ˜- hello. exe Понятно процессору 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 16

Как и с помощью чего создавать целые программные системы и комплексы программ ? n Как и с помощью чего создавать целые программные системы и комплексы программ ? n Среды быстрой разработки приложений (RAD – rapid application development ) – проектирование (дизайн) vпрограммный код vпользовательский интерфейс vхранилища данных vсредства программных коммуникаций – отладка и тестирование – защита и лицензирование – групповая разработка 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 17

Трудности разработки сложных систем Гради Буч. Объектно ориентированное проектирование и анализ 2/16/2018 Андрей М. Трудности разработки сложных систем Гради Буч. Объектно ориентированное проектирование и анализ 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 18

2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 19 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 19

Язык программирования Pascal: структуризация данных, пользовательские типы Лекция 2 – вт. Язык программирования Pascal: структуризация данных, пользовательские типы Лекция 2 – вт.

План Язык программирования Pascal Программа на языке Pascal – разделы программы – назначение разделов План Язык программирования Pascal Программа на языке Pascal – разделы программы – назначение разделов программы n Описание данных – базовые типы данных – необходимость других типов данных n Создание пользовательских типов – раздел типов (Type) – описание новых (структурных) типов: v запись (Record) v типизированные массивы (Array … of) v набор (Set of) – использование новых типов n Применение новых типов: – создание программы в терминах предметной области – удобство построения и чтения программы – переход к объектно ориентированной парадигме (ООП) – библиотека типов (повторное использование reusing) n n 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 21

Алгоритмический язык программирования - Pascal n Язык Pascal – Автор: Николаус Вирт – Цель: Алгоритмический язык программирования - Pascal n Язык Pascal – Автор: Николаус Вирт – Цель: язык программирования для начинающих (школьники, студенты) – Развитие v Pascal – менее популярен чем Basic, v Turbo Pascal, Borland Pascal 7. 0, v Object Pascal, v Delphi – популярная среда разработки n О языке с точки зрения сложности (гибкости) – «Язык Pascal настолько «безобиден» , что не позволит даже «выстрелить» себе в ногу, по сравнению с С, - который позволяет отстрелить себе обе ноги, а вместе с ними и голову» , Крис Касперски, Записки исследователя комп. вирусов 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 22

Вспомним структуру программы на Pascal n Что такое программа – текст на языке программирования Вспомним структуру программы на Pascal n Что такое программа – текст на языке программирования – данные продуманной структуры и алгоритмы их обрабатывающие n Программа на Pascal – разделы программы их назначение v описания: – Uses используемые библиотеки функц. – Var переменные – Const константы v действия: Begin <оп>; END. – <оп> оператор: условие, цикл, функц. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 23

Зачем нужна программа и что она делает? программа результат (данные) исходные данные n Важно Зачем нужна программа и что она делает? программа результат (данные) исходные данные n Важно – правильно представить данные – – 2/16/2018 удобно, понятно, наглядно полно, точно, непротиворечиво и т. д. Андрей М. Федоров (amfedorov@mail. ru) 24

Pascal – строго типизированный язык n Базовые типы данных – Целый integer – Вещественный Pascal – строго типизированный язык n Базовые типы данных – Целый integer – Вещественный real, double – Символьный char – Строковый string – Логический – boolean, др. n Базовые типы – машинно ориентированы n Необходима возможность создания новых типов – сложные задачи – различные предметные области – работа с человеком 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 25

Типы данных, определяемые пользователем n Создание пользовательских типов – раздел типов (Type) – описание Типы данных, определяемые пользователем n Создание пользовательских типов – раздел типов (Type) – описание новых (структурных) типов: v запись (Record) v типизированные массивы (Array … Of) v набор (Set Of) n Использование новых типов – одиночные переменные – Массивы Применение пользовательских типов данных ничем не отличается от базовых! 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 26

Структурный тип - запись Type <Имя типа> = record <поле 1> : <тип А>; Структурный тип - запись Type <Имя типа> = record <поле 1> : <тип А>; <поле 2> : <тип Б>; … <поле N> : <тип Z>; end; Type TMan = record Name : String[30]; Age : byte; Profess : String[10]; Sex : boolean; end; Var 2/16/2018 {имя} {возраст} {профессия} {пол} A: String; i: integer; Petya : Tman; Андрей М. Федоров (amfedorov@mail. ru) 27

Пример описания собственных типов данных Type TStud = record Name : String[30]; klass : Пример описания собственных типов данных Type TStud = record Name : String[30]; klass : byte; scool : byte; sex : boolean; end; var kol: integer; Petya : TStud; Group : array [1. . 10] of TStud; 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 28

Пример использования данных пользовательских типов var kol: integer; Petya : TStud; Group : array Пример использования данных пользовательских типов var kol: integer; Petya : TStud; Group : array [1. . 10] of TStud; begin Petya. Name : = ‘Петя'; Petya. sex : = true; Group[1]. Name : = ‘Даша'; Group[1]. sex: = false; with Group[2] do begin Name: =‘Вася'; sex: =true; klass: =3; scool: =14; end. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 29

Другие способы создания собственных типов Type TName = String[15]; TList = Array [1. . Другие способы создания собственных типов Type TName = String[15]; TList = Array [1. . 15] of byte; TDay = (Sun, Mon, Tue, Wed, Thu, Fri, Sat); TLights = (red, yellow, green); TSto = 0. . 99; Var Friends : Tlist; Days : TDay; Svetofor : array [1. . 3] of TLights; 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 30

Возможности использования новых типов данных n Применение новых типов: – создание программы в терминах Возможности использования новых типов данных n Применение новых типов: – создание программы в терминах предметной области – удобство построения и чтения программы – переход к объектно ориентированной парадигме (ООП) – библиотека типов (повторное использование reusing) 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 31

2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 32 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 32

Структуризация данных: создание и работа с файлами Лекция 3 – ср. Структуризация данных: создание и работа с файлами Лекция 3 – ср.

План n Что такое файл – Зачем нужны файлы – Типы файлов – Удобство План n Что такое файл – Зачем нужны файлы – Типы файлов – Удобство использования файлов n Базовые принципы работы с файлами – понятие потока – файловая переменная – открытие и закрытие потока – последовательный доступ – ошибки при работе с файлами n Работа с файлами на Pascal – текстовые и типизированные файлы – чтение и запись в файл – обработка ошибок n Функции работы со строками и символами – Length, Delete, Insert, Copy, Pos, – посимвольная и построчная обработка файла 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 34

Где взять данные для программы и куда выводить результат программы? n Внутренние данные программы Где взять данные для программы и куда выводить результат программы? n Внутренние данные программы – переменные, массивы, константы n Устройства стандартного ввода вывода – клавиатура (вв. ), – монитор (выв. ); n Специальные устройства ввода вывода – сканер (вв. ), модем (вв. /выв. ), …, – принтер (выв. ), …; n Хранилища данных (вв. /выв. ) – файлы (элементы файловой системы) – базы данных (таблицы в СУБД) 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 35

Что такое файл? n Единицы измерения информации фиксированного объема: – бит, байт, килобайт, мегабайт, Что такое файл? n Единицы измерения информации фиксированного объема: – бит, байт, килобайт, мегабайт, … n Удобная единица хранения данных различного объема – объект переменной длинны – файл – последовательность произвольного числа байтов, обладающая уникальным собственным именем. n Оксфордский словарь – Файл (a file)– любой из типов выдвижных ящиков, коробок, полок, для хранения бумаг вместе и в порядке так, чтобы их легко было отыскать; – ряд людей или вещей, расположенных друг за другом. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 36

Что такое файл? n Файл – это внешняя память – на дисках, дискетах, – Что такое файл? n Файл – это внешняя память – на дисках, дискетах, – в памяти (виртуальные диски) и т. п. n Связь компьютера (программ) с внешним миром – прием информации (данных) – передача информации (данных) n Файлы имеют различный формат – текстовые, – бинарные, – типизированные, др. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 37

Особенности файлов n Для хранения файлов используется специальная система – файловая система. – файловые Особенности файлов n Для хранения файлов используется специальная система – файловая система. – файловые системы бывают универсальные и специальные (жесткие и гибкие диски, CD, …). n Имя файла может быть любым, – с помощью имени файла можно указать тип данных и методы их обработки. n Пустой файл, имеющий размер 0 байтов, – размеры файла ограничены возможностями операционной и файловой системы. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 38

Файловая система n ФС система хранения и доступа к файлам – примеры FAT 16, Файловая система n ФС система хранения и доступа к файлам – примеры FAT 16, FAT 32, NTFS, UFS, VFS, … – иерархичность файловой структуры: v корень ФС, v вложенные каталоги (папки) v файлы – уникальность имени файла: полное имя файла (от корня): d: temppascalbina 1. pas – операции с файлами (функции ОС): v создать, удалить, открыть, прочитать, записать, копировать, переименовать, …; 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 39

Базовые принципы работы с файлами – хранимые данные и их типы n Файл – Базовые принципы работы с файлами – хранимые данные и их типы n Файл – последовательность байт (на внешнем носителе) – может интерпретироваться как значения других типов – целые, вещественные, со знаком и без, отдельные символы или строки символов, 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 40

Базовые принципы работы с файлами – файловая переменная n Файловая переменная (дескриптор – description Базовые принципы работы с файлами – файловая переменная n Файловая переменная (дескриптор – description описание ) – для работы с файлом – специальная функция связи файловой переменной с конкретным файлом (по имени), – любое действие с файлом осуществляется через файловую переменную 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 41

Базовые принципы работы с файлами – стандартный порядок работы с файлами n Каждое действие Базовые принципы работы с файлами – стандартный порядок работы с файлами n Каждое действие – это специальная функция n Алгоритм работы с файлом: 2/16/2018 – связывание файловой переменной и файла (Assign) – открытие файла (Re. Set – чт. , Re. Write – зап. ) v обработка – чтение, (до)запись, поиск, позиционирование (Read, Write, Seek, File. Pos) – закрытие файла (Close) – новое открытие или связывание и открытие v обработка – закрытие – и т. д. 42 Андрей М. Федоров (amfedorov@mail. ru)

Особенности доступа к данным файла – последовательный режим доступа n Оперативная память – прямой Особенности доступа к данным файла – последовательный режим доступа n Оперативная память – прямой доступ – пример: массив (элементы по номерам) – в каждый момент времени можно обратиться к любому элементу n Файл (внешн. память) – последовательный – пример: видеокассета (перемотка) – в каждый момент времени доступен (его можно читать или в него можно записывать) только один элемент – текущий – файловый указатель хранит номер текущего эл. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 43

Особенности доступа к данным файла – основные действия с файлами n Действия с любой Особенности доступа к данным файла – основные действия с файлами n Действия с любой памятью – чтение, – запись, – поиск. n В языке Pascal нет специальных операций работы с файлами – функции библиотеки CRT: v Assign – связь с файловой переменной v Reset, Re. Write – открытие на чтение и запись v Read, Write – чтение и запись v Close закрытие 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 44

Примеры работы с файлами в Pascal var FIn : Text; FOut : Text; v. Примеры работы с файлами в Pascal var FIn : Text; FOut : Text; v. S : String[7]; v. I : integer; v. R : real; v. C : Char; файл: in 1. txt Мама- мыла раму 12 34 Вышел зайчик погулять 5. 6 2. 7 begin Assign(FIn, 'in 1. txt'); Assign(FOut, ‘out 1. txt'); Reset(FIn); Re. Write(FOut); Readln(FIn, v. S); writeln(FOut, v. S); Read(FIn, v. I); writeln(FOut, v. I); Readln(FIn, v. S); writeln(FOut, v. S); Read(FIn, v. R); writeln(FOut, v. R: 5: 2); Close(FIn); Close(FOut); … 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) файл: out 1. txt Мама- м 12 34 Вышел з 5. 6 2. 7 45

Примеры работы с файлами в Pascal – циклические операции var FIn : Text; FOut Примеры работы с файлами в Pascal – циклические операции var FIn : Text; FOut : Text; v. I : integer; v. R : real; v. S : String[5]; v. C : Char; begin Assign(FIn, 'in 1. txt'); Assign(FOut, ‘out 1. txt'); Reset(FIn); Re. Write(FOut); 2/16/2018 файл: in 1. txt Мама мыла раму 12 34 Вышел зайчик погулять 5. 6 2. 7 EOF – (End Of File) – функция: «Истина» /True – достигнут конец файла «Ложь» /False – конец файла не достигнут while not EOF(FIn) do begin readln(FIn, v. C); writeln(FOut, v. C); файл: out 1. txt end; Мама мыла раму Close(FIn); Close(FOut); 12 34 end. Вышел зайчик погулять 46 Андрей М. Федоров (amfedorov@mail. ru) 5. 6 2. 7

Примеры работы с файлами в Pascal – обработка ошибок var 2/16/2018 Если произойдет FIn Примеры работы с файлами в Pascal – обработка ошибок var 2/16/2018 Если произойдет FIn : Text; FOut : Text; ошибка при открытии v. I : integer; v. R : real; файла, то программа v. S : String[5]; «скажет» об этом и v. C : Char; завершит свою работу, begin {$I-} IOResult – код ошибки Assign(FIn, 'in 1. txt'); Reset(FIn); if IOResult <> 0 then begin writeln('Can not open file in 1. txt'); halt; end; {$I+} Read(FIn, v. S); writeln(v. S); … end. 47 Андрей М. Федоров (amfedorov@mail. ru)

Варианты обработки файлов n Приемы работы с файлами: – структура файла известна v чтение Варианты обработки файлов n Приемы работы с файлами: – структура файла известна v чтение элементов в переменные соответствующих типов – файл типизированный v чтение элементов в переменные пользовательского типа – структура файла не известна v посимвольное чтение и анализ прочитанных символов v чтение построчно и анализ строк (использование специальных функций) – поиск, выделение, преобразование данных 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 48

Строки в Pascal n Символы и таблица кодировки ASCII n Pascal cтрока содержит не Строки в Pascal n Символы и таблица кодировки ASCII n Pascal cтрока содержит не более 255 симв. n Описание строки: – Var S 1: String; S 2: String[30]; n Особенности Pascal cтроки: – S 2 : = “Миру мир!” S 2 2/16/2018 9 М и 1 2 р 3 у Андрей М. Федоров (amfedorov@mail. ru) ? ? 29 30 49

Операции работы со строками n Отдельный элемент строки (символ) – S[5] пятый символ строки Операции работы со строками n Отдельный элемент строки (символ) – S[5] пятый символ строки S – все действия над символом: ввод, присвоение, вывод на экран, участие в выражениях и т. д. n Длинна строки – Length(S) - длина строковой переменной • Объединение строк – конкатенация 2/16/2018 • R: = 'kadabra'; H: = 'abra'; S: =H+R; Program Str 1; Var S : String; Begin Writeln('Введите стркоку'); Readln(S); Writeln(‘Строка из ', Length(S), ' символов') End. Андрей М. Федоров (amfedorov@mail. ru) 50

Функции работы с символами n Ord (символ) – ASCII код символа n Chr (число) Функции работы с символами n Ord (символ) – ASCII код символа n Chr (число) – символ по его ASCII коду {программа выводит на экран кодовую таблицу ASCII } Program Str 3; Var I : Byte; Begin For I: =32 to 255 do Write('VV', I: 4, '-', Chr(I)) End. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 51

Функции работы с символами n Val(S, X, C) перевод строкового представления числа в числовое Функции работы с символами n Val(S, X, C) перевод строкового представления числа в числовое – S строка, содержащая число, – X числовая переменная, (результат) – С ошибка n Str(X, S) – противоположное действие – X число (либо арифметическое выражение), – S строковая переменная 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 52

Дополнительный функции для работы со строками оператор DELETE(S, I, C) из строковой переменной S Дополнительный функции для работы со строками оператор DELETE(S, I, C) из строковой переменной S удаляет C символов, начиная с I-того; оператор INSERT(SN, S, I) вставляет подстроку SN в строковую переменную S перед символом с номером I; функция COPY(S, I, C) возвращает подстроку строки S из C символов, начиная с символа с номером I; функция Pos(SN, S) возвращает номер символа, с которого в строке S начинается подстрока SN (позицию первого вхождения подстроки в строку). Если такой подстроки нет, то возвращается ноль. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 53

2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 54 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 54

Основы структурного и функционального программирования функциональное и модульное программирование подпрограммы процедуры и функции Лекция Основы структурного и функционального программирования функциональное и модульное программирование подпрограммы процедуры и функции Лекция 4 – чт.

План n Методы повышения уровня абстракции – парадигмы программирования n Подпрограммы – основные вопросы План n Методы повышения уровня абстракции – парадигмы программирования n Подпрограммы – основные вопросы создания и использования подпрограмм n Подпрограммы в Pascal – структура программы – процедуры и функции – подпрограммы в Pascal – объявление и определение процедур и функций – передача параметров и возврат результатов базовых типов v передача параметров по значению 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 56

Рост сложности создаваемых программ Модульность – фундаментальный аспект всех успешно работающих систем Б. Страуструп Рост сложности создаваемых программ Модульность – фундаментальный аспект всех успешно работающих систем Б. Страуструп n Объемы программ увеличиваются – растет сложность (кол во элементов, связей, …), – невозможно в памяти удержать все детали (человек оператор) n Единственный и эффективный способ борьбы со сложностью любой задачи: – разбиение на части ( «Разделяй и властвуй» ) v введение четкой структуры v укрупнение блоков ( « 7+1» ) 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 57

Повышение уровня абстракции программ - структуризация n «Программа – это данные продуманной структуры и Повышение уровня абстракции программ - структуризация n «Программа – это данные продуманной структуры и код их обрабатывающий» n Что подвергается разбиению и структуризации? – данные – (структурные типы), – код – (подпрограммы, модули). n Повышение уровня абстракции 2/16/2018 – смещение акцентов от исполнителя процессора в сторону оператора человека – «абстракция» отвлечение, обобщение, типизация, типизировать, генерализация, формализм Андрей М. Федоров (amfedorov@mail. ru) 58

Парадигмы программирования – отражение этапов развития языков программирования Парадигма – (образец, тип, модель) стиль, Парадигмы программирования – отражение этапов развития языков программирования Парадигма – (образец, тип, модель) стиль, который поддерживает язык программирования, предоставляя для этого удобные (надежные, эффективные, …) средства. Исторические этапы развития парадигмы: n n n 2/16/2018 алгоритмическое программирование; процедурное программирование; модульное программирование; абстракция данных (пользовательские типы) – конкретные типы – абстрактные типы – иерархия классов обобщенное программирование Андрей М. Федоров (amfedorov@mail. ru) 59

Алгоритмическое программирование Относительная простота. Удобство. Переносимость. Доступность n n n 2/16/2018 Стандартные типы данных: Алгоритмическое программирование Относительная простота. Удобство. Переносимость. Доступность n n n 2/16/2018 Стандартные типы данных: – объявление и определение, int, – операции и выражения, – преобразование типов, Инструкции (операторы) – выбор (условие), – цикл, – множественный выбор, Стандартные библиотеки функций: – ввод/вывод – математические, символьные и др. Андрей М. Федоров (amfedorov@mail. ru) float, char */-+, >=< , |& if for switch cout<<, cin>> pow(), … 60

Процедурное программирование Удобство программирования. Повторное использование. «Реши, какие требуются процедуры; используй наилучшие доступные алгоритмы» Процедурное программирование Удобство программирования. Повторное использование. «Реши, какие требуются процедуры; используй наилучшие доступные алгоритмы» Главные вопросы: n n n передача аргументов в функции, возвращение результата из функции, виды аргументов, виды функций. int sort(int *Mas[], int Elem); Языки: Фортран, а Алгол 60, Алгол 68, Паскаль и С 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 61

Модульное программирование Рост размера программ. Интерес к организации данных. «Реши какие требуются модули. Разбей Модульное программирование Рост размера программ. Интерес к организации данных. «Реши какие требуются модули. Разбей программу так, чтобы скрыть данные в модулях (принцип сокрытия данных)» Главные задачи: 1. 2. 3. построение пользовательского программного интерфейса для данных в модуле – (функции внутри каждого модуля); гарантировать, что использование скрываемых данных доступно только через интерфейс; обеспечить инициализацию данных до первого использования; Раздельная компиляция модулей 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 62

Конкретные типы, определяемые пользователем Создание более чем одного объекта пользовательского типа. «Реши, какие требуются Конкретные типы, определяемые пользователем Создание более чем одного объекта пользовательского типа. «Реши, какие требуются типы; обеспечь полный набор операций для каждого типа» Главные задачи: n n n Выделение отдельной сущностей в классы; Определение функций и операций для работы с экземплярами/объектами этого класса – (сокрытие данных); Процедуры инициализации и удаление объекта класса Конкретные типы ведут себя почти как встроенные 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 63

Абстрактные типы данных: Иерархия классов Много негибких типов данных, которые «живут» сами по себе. Абстрактные типы данных: Иерархия классов Много негибких типов данных, которые «живут» сами по себе. «Реши, какие требуются классы, обеспечь полный набор операций для каждого класса; явно вырази общность через наследование» Главная задача: n отделить частные свойства объектов от общих последние выделить в абстрактный класс; n связь родственных типов друг с другом; n множественное наследование (иерархия); 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 64

Обобщенное программирование Типы с одинаковой функциональностью, но различным наполнением «Реши, какие требуются алгоритмы; параметризуй Обобщенное программирование Типы с одинаковой функциональностью, но различным наполнением «Реши, какие требуются алгоритмы; параметризуй их так, чтобы они могли работать со множеством подходящих типов и структур данных » Пример – сортировка – неважно, что сортировать, важно как! 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 65

Подпрограммы – способ структуризации кода n Первый шаг повышения уровня абстракции 2/16/2018 – разделение Подпрограммы – способ структуризации кода n Первый шаг повышения уровня абстракции 2/16/2018 – разделение программы на части – отдельные (под)программы – каждая подпрограмма v максимально независима v решает одну задачу v может использоваться несколько раз в основной программе без повторного описания – повышается эффективность отладки, тестирования и сопровождения кода v теперь не на уровне отдельных операторов, а на уровне целых подпрограмм. 66 Андрей М. Федоров (amfedorov@mail. ru)

Процедурное программирование – структура программы на Pascal n Программа на Pascal состоит проц. № Процедурное программирование – структура программы на Pascal n Программа на Pascal состоит проц. № 1 – из главного кода (Begin … End. ) и функц. № 2 – процедур и функций (подпрограмм) проц. № 3 n Процедура и функция – это логически … законченная (под)программа – выполняющая действие над входными BEGIN … параметрами и [+проц1] – в конце своей работы возвращающая … результат. END. n Каждая функция имеет – собственное имя и может иметь вызов v набор входных параметров и процедур или функций v один выходной параметр. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 67

Развитие идеи структуризации кода – модульное программирование n Модуль – следующий шаг в повышении Развитие идеи структуризации кода – модульное программирование n Модуль – следующий шаг в повышении уровня м 1 м 2 м 3 uses м 1, м 2, м 3 BEGIN … END. 2/16/2018 абстракции – группировка функций и связанных с ними данных (модули) – уменьшение времени перекомпиляции всей программы – сокрытие несущественных деталей реализации модуля v возможность отладки программы «по частям» v работа над программой группы программистов – другие программы и модули могут только «использовать» функции и данные модуля 68 Андрей М. Федоров (amfedorov@mail. ru)

Инкапсуляция – движущая сила структуризации n Инкапсуляция скрытие деталей реализации (создание капсулы, заключение в Инкапсуляция – движущая сила структуризации n Инкапсуляция скрытие деталей реализации (создание капсулы, заключение в капсулу) – ключевая идея модульного и ОО прогр ния магнитофон n Две части любого объекта инкапсуляции: – интерфейс v то, что видно пользователю объекта (элементы управления) v в Pascal модулях имена функций и типов – реализация v то, как в действительности устроен объект реализация 2/16/2018 (не обязательно знать пользователю) v в Pascal модулях – тело (код) функции Андрей М. Федоров (amfedorov@mail. ru) 69

Подпрограммы в Pascal n Состояния подпрограмм или «места их обитания» в основной программе – Подпрограммы в Pascal n Состояния подпрограмм или «места их обитания» в основной программе – описание и определение v указывается – название подпрограммы, – из какой последовательности команд она состоит, (что делает) и – какой результат получает – вызов v использование имени подпрограммы в основной программе или в других подпрограммах – передача параметров – получение непосредственного результата 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 70

Пример программы на Pascal procedure Hello; begin writeln(‘Привет'); end; 1. определение процедуры Hello 2. Пример программы на Pascal procedure Hello; begin writeln(‘Привет'); end; 1. определение процедуры Hello 2. определение процедуры Bye procedure Bye; begin writeln(‘Пока-Пока'); end; 6. результат на экране 3. Главная программа 4. вызов Begin процедуры Hello; writeln(‘Работает главная прогр. '); Bye; Привет 5. вызов End. Работает главная програм процедуры Bye 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) Пока-Пока 71

Структура процедуры на Pascal procedure <Имя процедуры> [(<параметры>: <тип>)]; var {раздел переменных процедуры} const Структура процедуры на Pascal procedure <Имя процедуры> [(<параметры>: <тип>)]; var {раздел переменных процедуры} const {раздел констант процедуры} Подпрограмма … {другие разделы} begin {тело процедуры - реализация} <операторы>; end; миниатюрная копия программы n Параметры – необязательный элемент – используются для передачи в процедуру из места ее вызова дополнительных данных для работы – параметров может быть несколько, для каждого нужно указывать тип. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 72

Другой пример на Pascal {определение процедур} procedure Read. From. File; {Читать Из Файла} begin Другой пример на Pascal {определение процедур} procedure Read. From. File; {Читать Из Файла} begin Последовательность {чтение данных из файла}; {запись данных в массив} описания end; подпрограмм ! procedure Write. To. File; {Писать В Файл} begin {запись данных из массива в файл}; end; procedure Max; {Максимум} begin {алгоритм обработки массива} {например, поиск максимального элемента} end; {Главная программа, в которой производится вызов проц. } 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 73

… продолжение Program A 9 Proc; {шаблон типовой программы наших курсов} uses CRT; Type … продолжение Program A 9 Proc; {шаблон типовой программы наших курсов} uses CRT; Type TStudent = record {собственный тип данных} Name : String[15]; Age : byte; Ball : integer; end; {определение процедур} var FIn, FOut : Text; {файловые переменные} Group : array [1. . 9] of TStudent; 2/16/2018 Begin Read. From. File; Max; {обработка введенных данных – поиск, замена, …} Write. To. File; Андрей М. Федоров (amfedorov@mail. ru) End. 74

2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 75 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 75

Способы взаимодействия между подпрограммами: передача параметров и возврат результатов Лекция 5 – чт. Способы взаимодействия между подпрограммами: передача параметров и возврат результатов Лекция 5 – чт.

План n Модульное построение программных систем – взаимодействие подпрограмм n Передача параметров и возврат План n Модульное построение программных систем – взаимодействие подпрограмм n Передача параметров и возврат результатов – глобальные и локальные переменные – структурные типы – параметры переменные: передача параметров по ссылке n Рекурсивные вызовы – Бесконечная рекурсия (условие выхода) – Итерация – альтернатива рекурсии n Создание собственных модулей (unit) – разделы интерфейса (interface) и реализации (implementation) – подключение и использование собственных модулей v компиляция 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 77

Подпрограммы – порядок выполнения n Все программы выполняются строго проц. № 1 функц. № Подпрограммы – порядок выполнения n Все программы выполняются строго проц. № 1 функц. № 2 проц. № 3 … команда за командой – Только специальные операторы (условных и безусловных переходов) могут изменить этот ход событий; – В среде программирования Pascal – трассировка (F 7 или F 8); BEGIN Проц-3 Проц-1 Проц-2 END. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 78

Область видимости и область действия имен (переменных) n Имена – Глобальные v Описаны в Область видимости и область действия имен (переменных) n Имена – Глобальные v Описаны в разделах (Var, Const, Type) основной программы – Локальные v Описаны в разделах (Var, Const, Type) подпрограмм n Основное правило: – Описание (определение) должно предшествовать использованию; v Тип ошибки: «unknown identificator» 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 79

Пример на Pascal Group FIn, i File. Name FOut, k User. Name Var Group Пример на Pascal Group FIn, i File. Name FOut, k User. Name Var Group : array [1. . 3] of TStudent; {глобальный мас. } procedure Read. From. File; Var FIn: Text; i: byte {локальные переменные} Begin. . . end; Const File. Name = ‘out. txt’; procedure Write. To. File; Var FOut: Text; k: byte; {локальные переменные} begin. . . end; Var User. Name: String; Begin Readln(User. Name); . . . End; 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 80

Взаимодействие подпрограмм передача параметров n Способы обмена данными между функциями – Глобальные переменные v Взаимодействие подпрограмм передача параметров n Способы обмена данными между функциями – Глобальные переменные v Самый понятный, но не самый эффективный – Через файлы v Эффективно только для целых программных систем – Через механизм параметров v Стандартный и самый эффективный способ v Результат функции v Параметр переменная 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 81

Пример: Передача параметров через глобальные переменные Var Group : array [1. . 3] of Пример: Передача параметров через глобальные переменные Var Group : array [1. . 3] of TStudent; {глобальный мас. } User. Name : String; procedure Read. From. File; Var FIn: Text; i: byte Begin {запись в массив Group } end; Const File. Name = ‘out. txt’; procedure Write. To. File; Var FOut: Text; k: byte; begin {чтение массива Group } end; Begin 2/16/2018 . . . End; {обработка массива Group} Андрей М. Федоров (amfedorov@mail. ru) 82

Пример: стандартная передача параметров program a 7 Proc; uses crt; procedure Max(A, B : Пример: стандартная передача параметров program a 7 Proc; uses crt; procedure Max(A, B : integer); begin if A>B Then writeln(A, ' bolshe ', B) Else writeln(A, ' menshe ', B); end; var x, y: integer; Begin Max(1, 3); write('vvedite x y: '); readln(x, y); Max(5, x); Max(y, 0); End. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 83

Передача массива в качестве параметра program a 9 Proc; uses crt; Type TAr. Student Передача массива в качестве параметра program a 9 Proc; uses crt; Type TAr. Student = array [1. . 9] of Student; procedure Max(G : TAr. Student); begin {обработка массива G} end; var Group : TAr. Student; Begin {заполнение массива Group} Max(Group); {вывод массива Group} End. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 84

Подпрограммы - функции n Функция – это подпрограмма, возвращающая результат в то место, где Подпрограммы - функции n Функция – это подпрограмма, возвращающая результат в то место, где она вызвана – В точку вызова функции подставляется ее результат 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 85

Структура функции на Pascal function <Имя функции> [(<параметры>: <тип>)] : <тип возвр>; var {раздел Структура функции на Pascal function <Имя функции> [(<параметры>: <тип>)] : <тип возвр>; var {раздел переменных} const {раздел констант} … {другие разделы} begin {тело функции - реализация} <операторы>; <Имя функции> : = <результат>; функция миниатюрная копия программы, возвращающей результат end; n Параметры – необязательный элемент – используются для передачи в функцию из места ее вызова дополнительных данных для работы – параметров может быть несколько, для каждого нужно указывать тип. n Возвращаемое значение (тип) обязательный элемент 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 86

Пример функции на Pascal function Max(A, B : integer): integer; begin if A>B Then Пример функции на Pascal function Max(A, B : integer): integer; begin if A>B Then begin writeln(A, ' bolshe ', B); Max: =A; end Else begin writeln(A, ' menshe ', B); Max: =B; end; ? Результаты работы var x, y: integer; rez: integer; 2/16/2018 Begin Max(1, 3); write('vvedite x y: '); readln(x, y); Max(x, y); rez: =Max(5, x); writeln('Rez: =', rez); rez: =Max(y, 0); writeln('Rez: =', rez); End. Андрей М. Федоров (amfedorov@mail. ru) 87

Подпрограммы: возвращаемые значения (результаты) n Тип возвращаемого результата может быть любым – Базовым – Подпрограммы: возвращаемые значения (результаты) n Тип возвращаемого результата может быть любым – Базовым – Пользовательским – Кроме массива 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 88

Пример: возврат значения типа TStudent function Max(A, B : TStudent): TStudent; begin if. . Пример: возврат значения типа TStudent function Max(A, B : TStudent): TStudent; begin if. . . Then begin Max: =A; end Как сравниваются элементы типа Else begin Tstudent Max: =B; Например: end; (A. Age > B. Age) AND end; (A. Class >B. Class) var x, y: TStudent; rez: TStudent; Begin {ввод x, y} rez: =Max(y, x); ? Результаты работы End. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 89

Пример: Параметры-переменные program a 7 Proc; uses crt; procedure Max(var A, B : integer); Пример: Параметры-переменные program a 7 Proc; uses crt; procedure Max(var A, B : integer); begin A: =1; B: =2; end; Изменения А и В отражаются на значениях Х и У var x, y: integer; Begin x: =7; y: =6; writeln(x, y); Max(x, y); writeln(x, y); End. 2/16/2018 Результаты на экране: 76 12 Андрей М. Федоров (amfedorov@mail. ru) 90

Рекурсивные вызовы подпрограмм n Если подпрограмма в своем теле содержит вызов самой себя, то Рекурсивные вызовы подпрограмм n Если подпрограмма в своем теле содержит вызов самой себя, то это называется рекурсивным вызовом – Возможно зацикливание – Необходима организация выхода из program Fact. Proc; {0!=1!=1 и рекурсии N! = N*(N-1)} function Fact(N : longint): longint; begin if(N = 0) OR (N = 1) Fact: =1; Fact: = N*Fact(N-1); Программа вычисления end; Var X : longint; факториала числа Begin writeln(‘факториал 10 = ’, Fact(10)); write(‘введи Х’); readln(X); writeln(‘факториал ’, X, ’=’, Fact(X)); End. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 91

Создание модулей в Pascal unit My. Unit; interface const My. Value = 915; type Создание модулей в Pascal unit My. Unit; interface const My. Value = 915; type My. Stars = (Deneb, Antares, Betelgeuse); var My. Word : string[20]; procedure Set. My. Word(Star : My. Stars); function The. Answer : integer; implementation procedure Set. My. Word(Star : My. Stars); function The. Answer : integer; end. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 92

2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 93 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 93

Возможности графической библиотеки: создание анимации ´ ´ ´ графический адаптер и драйвер инициализация графики Возможности графической библиотеки: создание анимации ´ ´ ´ графический адаптер и драйвер инициализация графики графические примитивы сложные графические объекты анимация Лекция 5 – пт.

План n n n 2/16/2018 Графическая подсистема компьютера – графический адаптер (видео карта) – План n n n 2/16/2018 Графическая подсистема компьютера – графический адаптер (видео карта) – драйвер графического адаптера – видео память Введение в компьютерную графику – растровая и векторная графика – двумерная и трехмерная графика Графические библиотеки – классификация функций v подготовка (инициализация) v цвет v графические примитивы (точка, линия, окружность, …) v видеостраницы – графические возможности Pascal v примеры программ инициализации и вывода граф. примитивов v обработка ошибок v рисование сложных объектов – общая характеристика библиотек (преимущества и недостатки) Элементы анимации – анимация – движущиеся картинки – основной принцип визуализации движения Выпускная работа – необходимые элементы – объем работы Андрей М. Федоров (amfedorov@mail. ru) 95

Графические возможности n Графическая подсистема компьютера – графический адаптер (видео карта) – драйвер графического Графические возможности n Графическая подсистема компьютера – графический адаптер (видео карта) – драйвер графического адаптера – видео память 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 96

Компьютерная графика n Виды графики – Элементарные объекты vрастровая – точки (пиксели) vвекторная – Компьютерная графика n Виды графики – Элементарные объекты vрастровая – точки (пиксели) vвекторная – графические примитивы (прямая, окружность, многоугольник, кривая Безье, сплайны и т. д. ) – Пространство vдвумерная 2 d vтрехмерная 3 d 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 97

Виды изображений Все компьютерные изображения разделить на два основных вида: растровые, векторные. 2/16/2018 Андрей Виды изображений Все компьютерные изображения разделить на два основных вида: растровые, векторные. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) можно 98

Растровая модель цифрового изображения X Растр – прямоугольная матрица одинаковых неделимых элементов – пикселей, Растровая модель цифрового изображения X Растр – прямоугольная матрица одинаковых неделимых элементов – пикселей, каждый из которых в закодированном виде отображает определенный участок реального или синтезированного изображения. Пиксель (англ. pixel — picture element) элемент изображения: координаты, цвет 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) Y Коорд: (2, 4) цвет: темно серый 99

Векторная модель цифрового изображения X Векторное изображение - это совокупность : векторов, которые исходят Векторная модель цифрового изображения X Векторное изображение - это совокупность : векторов, которые исходят из ключевых точек (вершин) и указывают направление, кривых, соединяющих эти точки. Y Точка – координаты; Вектор точки, направление. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) А: Коорд: (0, 2. 5) В: Коорд: (7, 5) Вектор: АВ 100

Графические библиотеки сред программирования n Универсальный набор графических операций – классификация функций v подготовка Графические библиотеки сред программирования n Универсальный набор графических операций – классификация функций v подготовка – инициализация графики v цвет фона и объекта – «заливка» замкнутого контура v графические примитивы: – точка, линия, окружность, … v работа с видеопамятью n общая характеристика библиотек (преимущества и недостатки) 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 101

Графическая подсистема Pascal n Библиотека функций – модуль Graph 2/16/2018 – «черепашья графика» n Графическая подсистема Pascal n Библиотека функций – модуль Graph 2/16/2018 – «черепашья графика» n Стандартный порядок работы с графикой – инициализация графики – проверка на ошибки – использование функций библиотеки Graph v установка цвета и стиля изображения v установка координат v рисование элементарных объектов – построение сложных объектов из элементарных – «заливка» замкнутых контуром цветом v функция задержки (readln) v закрытие графического режима 102 Андрей М. Федоров (amfedorov@mail. ru)

Графическое пространство n Объект сложной структуры – «снеговик» – 5 окружностей – 6 линий Графическое пространство n Объект сложной структуры – «снеговик» – 5 окружностей – 6 линий начало координат т. (0, 0) Get. Max. X Get. Max. Y 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 103

Пример: инициализация графики подключение модуля Graph program G 1; uses Crt, Graph; Var gr. Пример: инициализация графики подключение модуля Graph program G 1; uses Crt, Graph; Var gr. Driver : Integer; gr. Mode : Integer; Err. Code : Integer; Переменные, необходимые для инициализации графики begin gr. Driver: =Detect; Init. Graph(gr. Driver, gr. Mode, '. . BGI'); инициализ Line(0, 0, Get. Max. X, Get. Max. Y); ация readln; Close. Graph; end. 2/16/2018 результат на экране закрытие графического режима Андрей М. Федоров (amfedorov@mail. ru) 104

Пример: инициализация графики (C++) #include <graphics. h> подключение модуля Graph int gdriver, gmode, errcode; Пример: инициализация графики (C++) #include подключение модуля Graph int gdriver, gmode, errcode; Переменные, необходимые для инициализации графики void main(){ gdriver: =DETECT; initgraph(&gdriver, &gmode, “. . BGI”); инициализ line(0, 0, getmaxx(), getmaxy()); ация результат на экране getch(); closegraph(); } 2/16/2018 закрытие графического режима Андрей М. Федоров (amfedorov@mail. ru) 105

Пример: обработка ошибок инициализации графики program G 1 Err; uses Crt, Graph; procedure My. Пример: обработка ошибок инициализации графики program G 1 Err; uses Crt, Graph; procedure My. Init. Graph; Var gr. Drv, gr. Mod, Err : Integer; begin gr. Drv: =Detect; Init. Graph(gr. Drv, gr. Mod, '. . BGI'); Err: =Graph. Result; if Err <> gr. Ok Then begin writeln('Error Init. Graph'); halt; end; begin удобно оформить в виде процедуры проверка кода инициализации и выход из программы, если были ошибки My. Init. Graph; Circle(300, 100); . . . readln; Close. Graph; end. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 106

Пример: обработка ошибок инициализации графики (C++) #include <graphics. h> void My. Init. Graph(){ int Пример: обработка ошибок инициализации графики (C++) #include void My. Init. Graph(){ int gdrv, gmode, errcode, Err; grdrv = DETECT; initgraph(&grdrv, &gmod, “. . BGI”); Err = graphresult(); if (Err <> gr. Ok) { cout<<“Error Init. Graph”; halt(1); }; удобно оформить в виде процедуры проверка кода инициализации и выход из программы, если были ошибки void main (){ My. Init. Graph(); circle(300, 100); . . . getch(); closegraph(); 2/16/2018 } Андрей М. Федоров (amfedorov@mail. ru) 107

Pascal – доступные графические примитивы и функции их обработки в библиотеке Graph n Графические Pascal – доступные графические примитивы и функции их обработки в библиотеке Graph n Графические объекты 2/16/2018 – точка (Put. Pixel) – координаты x, y и цвет – линия (Line)– координаты начала и конца – окружность (Circle) – координаты центра и радиус – прямоугольник (Rectangle)– координаты концов диагонали – эллипс, полигон, дуга, … n Функции форматирования объектов – цвет фона (Set. Bk. Color) – 0. . 15 (Black, Blue, Red, …) – цвет объекта (Set. Color) – 0. . 15 (…, Green, Yellow, …) – стиль линии (Set. Line. Style) – толщина, прерывистость – заливка замкнутого контура (Flood. Fill) – координаты начала и цвет границы замкнутого контура [+Set. Fill. Style] – установка курсора в текущую позицию (Move. To) n Текст – вывод текста в заданную точку (Out. Text. XY) – стиль текста (Set. Text. Style) 108 Андрей М. Федоров (amfedorov@mail. ru)

Пример: графические примитивы program G 2 primit; uses Crt, Graph; Var gr. Driver, gr. Пример: графические примитивы program G 2 primit; uses Crt, Graph; Var gr. Driver, gr. Mode, Err. Code : Integer; i: integer; {. . . } begin My. Init. Graph; Set. Bk. Color(Green); Set. Line. Style(0, 0, 3); for i: =300 to 400 do Put. Pixel(i, i, random(15)+1); Set. Color(Yellow); Line(0, 0, 50, 75); Set. Color(Blue); Circle(150, 100); Set. Color(Red); Rectangle(200, 150, 250, 300); Set. Fill. Style(1, Magenta); Flood. Fill(201, 151, Red); readln; Close. Graph; end. 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) результат на экране 109

Анимация n Элементы анимации – анимация – движущиеся «картинки» – основной принцип визуализации движения Анимация n Элементы анимации – анимация – движущиеся «картинки» – основной принцип визуализации движения v «стереть» объект – значит нарисовать его цветом фона v «нарисовать» объект – значит нарисовать его цветом отличным от фона – варианты построения анимации v интерактивная – управляется человеком v автономная – управляется программой v смешанная 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 110

Пример: интерактивная анимация procedure My. Cir(xx, yy: integer; rr: word; cc: word); begin Set. Пример: интерактивная анимация procedure My. Cir(xx, yy: integer; rr: word; cc: word); begin Set. Color(cc); Circle(xx, yy, rr); end; var Ch: Char; X, Y: integer; C, R, F: word; t. X, t. Y: integer; t. C, t. R: word; {временные переменные} begin My. Init. Graph; X: =Get. MAx. X div 2; Y: =Get. Max. Y div 2; R: =50; C: =Red; F: =Blue; Set. Color(C); Set. Bk. Color(F); Set. Line. Style(0, 0, 3); repeat t. X: =X; t. Y: =Y; t. R: =R; Ch: =Readkey; case Ch of '2': {вверх} Inc(Y); '8': {вниз} Dec(Y); '5': {Цвет} C: =(C+1) mod 15; '4': {Налево} Dec(X); '6': {Направо} Inc(X); end; My. Cir(t. X, t. Y, t. R, F); {стирание объекта} My. Cir( X, Y, R, C); {рисование оъекта} until Ch=#27; {пока не нажата клавиша Esc} 2/16/2018 Close. Graph; end. Андрей М. Федоров (amfedorov@mail. ru) 111

Пример: автономная анимация {…} var Ch: Char; X, Y: integer; C, F, R: word; Пример: автономная анимация {…} var Ch: Char; X, Y: integer; C, F, R: word; begin My. Init. Graph; X: =Get. MAx. X div 2; Y: =Get. Max. Y div 2; R: =50; C: =Red; F: =Blue; Set. Color(C); Set. Bk. Color(F); Set. Line. Style(0, 0, 3); repeat t. X: =X; t. Y: =Y; t. R: =R; X: =(X+1) mod Get. Max. X; Y: =round(sin(X*0. 05)*100 + Get. Max. Y/2); My. Cir(t. X, t. Y, t. R, F); My. Cir( X, Y, R, C); Delay(5000); until Keypressed; {пока не нажата любая клавиша} 2/16/2018 Close. Graph; end. Андрей М. Федоров (amfedorov@mail. ru) 112

Структура сложных приложений – модель MVC n МВК – модель, вид, контроллер (MVC – Структура сложных приложений – модель MVC n МВК – модель, вид, контроллер (MVC – model, view, controller) procedure do. Model procedure Show ет зу ль по ис Среда объекты 2/16/2018 использует Вид (Виды): 1. Процедуры и функции отображения элементов модели на экране procedure do. Controller Контроллер (Контроллеры): 1. Процедуры и функции взаимодействия (расчета) объектов между собой Андрей М. Федоров (amfedorov@mail. ru) отображает Модель (Модели): 1. Типы данных польз. 2. Константы 3. Процедуры и функции расчета внутреннего состояния модели 113

Шаблон главной программы в терминах MVC Присвоить начальные значения [Init – File/Rand/Hand] Отображение на Шаблон главной программы в терминах MVC Присвоить начальные значения [Init – File/Rand/Hand] Отображение на экране объекта(ов) [Show True] Делать Сохранить старый объект(ы) Рассчитать новый объект(ы) Взаимодействие/контроль Удалить старый объект Отобразить новый объект [Tmp] [do. Model] [do. Controller] [Show False] [Show True] Пока не конец 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 114

Особенности подготовки выпускной работы n Результат – программа, которая использует n n 2/16/2018 – Особенности подготовки выпускной работы n Результат – программа, которая использует n n 2/16/2018 – файловый ввод вывод – структурные типы данных (record, array) – графическую библиотеку Graph – анимацию Файлы – используются для ввода начальных значений (например координат объектов на экране) Структуры – для описания сложных объектов ( «снеговик» , «светофор» , «машина» , «колобок» , ) Графическая библиотека – для отображения элементов на экране. Элементы на экране должны «жить» – интерактивное взаимодействие с человеком (игра) – автономная анимация (мультфильм) Андрей М. Федоров (amfedorov@mail. ru) 115

Благодарю за внимание 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 116 Благодарю за внимание 2/16/2018 Андрей М. Федоров (amfedorov@mail. ru) 116