142
РЕПОЗИТОРИЙ БГПУ

M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

РЕПОЗИТОРИЙ БГ

ПУ

Page 2: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

2

ОГЛАВЛЕНИЕ

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА ............................................................................ 3ТЕОРЕТИЧЕСКИЙ РАЗДЕЛ ................................................................................. 4

Раздел 1. СТРУКТУРНО-МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ .......... 4Тема 1.1. Основы технологии программирования. ....................................... 4Тема 1.2. Языки и системы программирования. ............................................ 5Тема 1.3. Язык программирования Pascal. Базовые алгоритмические

конструкции. ............................................................................................................... 7Тема 1.5. Составные типы данных .............................................................. 27Тема 1.7. Алгоритмы работы с внешней и внутренней памятью

компьютера. ............................................................................................................. 38РАЗДЕЛ 2. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ

ПРОГРАММИРОВАНИЕ .................................................................................... 41Тема 2.1. Платформа .Net Framework. Система MS Visual Studio.Net. ...... 41Тема 2.2. Язык программирования C#. ....................................................... 43Тема 2.3. Ссылочные типы данных. ............................................................ 45Тема 2.4. Основы объектно-ориентированного программирования. ........ 51Тема 2.5. Наследование. Полиморфизм. ....................................................... 56РАЗДЕЛ 3. РАЗВИТИЕ СИСТЕМ, ЯЗЫКОВ И ТЕХНОЛОГИЙ

ПРОГРАММИРОВАНИЯ ...................................................................................... 59Тема 3.1. Проектирование приложений с графическим интерфейсом в среде

MS Visual Studio. ...................................................................................................... 59Тема 3.2. Создание приложений Windows.Forms. ....................................... 62Тема 3.3. Создание приложений на основе Windows Presentation

Foundation. ................................................................................................................ 65ПРАКТИЧЕСКИЙ РАЗДЕЛ ....................................................................... 69

1. СТРУКТУРНО-МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ .......................... 69 2. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ ............... 85 3. РАЗВИТИЕ СИСТЕМ, ЯЗЫКОВ И ТЕХНОЛОГИЙ ПРОГРАММИРО-

ВАНИЯ ............................................................................................................................. 101

РАЗДЕЛ КОНТРОЛЯ ЗНАНИЙ ................................................................ 114ВСПОМОГАТЕЛЬНЫЙ РАЗДЕЛ ............................................................. 119

РЕПОЗИТОРИЙ БГ

ПУ

Page 3: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

3

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

Электронный учебно-методический комплекс (ЭУМК) по учебной дисциплине «Технологии программирования и методы алгоритмизации»

для специальности 1-02 05 02 Физика и информатика

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

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

Задачи изучения дисциплины: − формирование знаний о современных парадигмах, системах,

языках и технологиях программирования; − обучение использованию различных алгоритмических методов

при решении задач из разных предметных областей; − формирование практических навыков разработки программных

продуктов в различных современных средах программирования. ЭУМК включает следующие электронные материалы, размещенные в

следующих разделах: 1. В теоретическом разделе размещены материалы лекций по общим и

специальным вопросам технологии программирования и методов алгоритмизации.

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

3. В разделе контроля знаний размещены вопросы к зачету и экзаменам.4. Во вспомогательном разделе находится учебная программа по

учебной дисциплине. При проведении занятий и работе с ЭУМК следует сочетать

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

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

РЕПОЗИТОРИЙ БГ

ПУ

Page 4: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

4

ТЕОРЕТИЧЕСКИЙ РАЗДЕЛ

Раздел 1. СТРУКТУРНО-МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ Тема 1.1. Основы технологии программирования. Понятие технологии программирования. Методология решения задач с

помощью компьютера. Модульный принцип в программировании. Отладка и тестирование программ. Ручная отладка, вывод промежуточных результатов. Тестирование на контрольных примерах. Документирование программ. Оценки качества программ.

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

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

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

2) Анализ и исследование задачи, модели: анализ существующих аналогов; анализ технических и программных средств; разработка математической модели; разработка структур данных.

3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи алгоритма (блок-схемы, псевдокод и др.); выбор тестов и метода тестирования; проектирование алгоритма.

4) Программирование: выбор языка программирования; уточнение способов организации данных; запись алгоритма на выбранном языке программирования.

5) Тестирование и отладка: синтаксическая отладка; отладка семантики и логической структуры; тестовые расчёты и анализ результатов тестирования; совершенствование программы.

6) Анализ результатов решения задачи и уточнение в случае необходимости математической модели с повторным выполнением этапов 2-5.

7) Сопровождение программы: доработка программы для решения конкретных задач; составление документации к решённой задаче, к

РЕПОЗИТОРИЙ БГ

ПУ

Page 5: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

5

математической модели, к алгоритму, к программе, к набору тестов, к использованию.

Отладка программного средства (ПС) – это деятельность, направленная на обнаружение и исправление ошибок в ПС с использованием процессов выполнения его программ. Тестирование ПС – это процесс выполнения его программ на некотором наборе данных, для которого заранее известен результат применения или известны правила поведения этих программ. Указанный набор данных называется тестовым или просто тестом.

Качество программного средства – это совокупность его характеристик, относящихся к его способности удовлетворять установленные и предполагаемые потребности. Характеристики качества ПС: функциональность, надёжность, удобство использования, эффективность, удобство сопровождения, портативность.

Тема 1.2. Языки и системы программирования. Роль и характеристики языков программирования. История развития

языков программирования. Классификации языков программирования. Проблема универсального языка программирования и универсальной вычислительной машины. Основные понятия языков программирования. Компилируемые и интерпретируемые языки. Стандартизация графического представления алгоритмов. Состав и назначение систем программирования. Компиляторы и интерпретаторы. Языки школьной информатики.

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

Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня. «Низкий уровень» – это значит, что операторы близки к машинному коду и ориентированы на конкретный тип процессора. Языком самого низкого уровня является язык Ассемблера, который представляет каждую машинную команду в виде символьных условных обозначений, называемых символьными мнемониками.

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

Расцвет второго поколения языков программирования пришелся на конец 50-х – начало 60-х годов. Тогда был разработан символический

РЕПОЗИТОРИЙ БГ

ПУ

Page 6: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

6

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

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

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

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

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

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

РЕПОЗИТОРИЙ БГ

ПУ

Page 7: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

7

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

Тема 1.3. Язык программирования Pascal. Базовые алгоритмические конструкции.

Концепция структурного программирования. Отражение идей структурного программирования в языке Pascal. Состав языка. Основные понятия. Переменные, операции, выражения. Процедуры и функции. Структура программы. Типы данных. Ввод/вывод данных. Базовые алгоритмические конструкции структурного программирования: следование, ветвление, цикл. Алгоритмы целочисленной арифметики. Нахождение наибольшего общего делителя, наименьшего общего кратного. Поиск чисел с заданными свойствами (простых, палиндромов, и др.). Разложение чисел на простые множители. Перевод чисел из одной системы счисления в другую. Делимость чисел. Действия с многозначными числами. Задачи комбинаторики. Работа с вещественными числами. Анализ алгоритмов.

Понятие о структурном программировании С общей точки зрения процесс решения задачи на ЭВМ включает в себя

следующие этапы: 1) постановка задачи; 2) построение математической модели; 3) разработка алгоритма; 4) составление программы; 5) реализация программы на ЭВМ; 6) анализ результатов. Для организации процесса проектирования кодирования программ со

сложной иерархической структурой служит структурное программирование, которое включает три главные составляющие:

1) проектирование сверху вниз; 2) модульное программирование; 3) структурное моделирование. Проектирование сверху вниз по-другому называют «методом

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

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

РЕПОЗИТОРИЙ БГ

ПУ

Page 8: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

8

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

Заключительный этап структурного программирования – написание программы -- в основе которого лежит метод структурного программирования. Этот метод позволяет получать программы более удобные для тестирования, модификации и использования. Он основан на принципе, разработанном итальянскими учеными (Бом, Джакони), согласно которому любая программа произвольного размера и сложности может быть написана с использованием ограниченного набора базисных структур.

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

последовательность двух и более операторов; условие перехода к одному из двух операторов; повторение операторов, пока условие истинно (цикл «пока»). Правила структурного программирования: 1. В каждой структуре используется один вход и один выход; 2. Алгоритм может быть построен так, что все его структуры

образовывают линейную цепочку; 3. Следует максимально использовать модульный принцип. Особенности написания программ Может создаться впечатление, что поскольку программа будет

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

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

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

В зависимости от целей программы, условий эксплуатации, ресурсов вычислительной техники критерии ее эффективности могут быть различны:

размер памяти; скорость выполнения; удобочитаемость и простота реализации.

РЕПОЗИТОРИЙ БГ

ПУ

Page 9: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

9

Часто эти критерии бывают противоречивыми и которому отдать предпочтение зависит от конкретной ситуации.

Общие сведения о языке программирования ПАСКАЛЬ Название языка Паскаль Язык Паскаль получил свое название в честь великого французского

ученого, физика-математика Блеза Паскаля, который в 1642 г. изобрел счетную машину для арифметических операций – Паскалево колесо. История создания языка Паскаль начинается с 1965 года, когда международная федерация по обработке информации IFIP предложила нескольким специалистам в области информатики принять участие в разработке нового языка программирования – приемника АЛГОЛА-60. Среди них был швейцарский ученый, работавший доцентом информатики Стенфордского университета Николаус Вирт. В конце 1968 года Вирт и сотоварищи из швейцарского федерального института технологии в Цюрихе разработали первую версию Паскаля, а спустя 2 года –1-й вариант компилятора. В 1971 году Вирт выпустил описание своего языка. Создавая Паскаль, Вирт преследовал две цели: во-первых, разработать язык, пригодный для обучения программированию как систематической дисциплине; во-вторых, реализация языка должна быть эффективной и надежной на существующих вычислительных машинах. Одним из достоинств языка Паскаль является то, что он воплотил в себе идею структурного программирования, суть которой заключается в том, что с помощью нескольких конструкций можно выразить в принципе любые алгоритмы: линейные, ветвление, циклические конструкции.

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

Кроме авторской версии, стали появляться различные его расширения и диалекты. Например: УКСД Паскаль, Паскаль-80, ЭППЛ-Паскаль, -Паскаль, Квик-Паскаль. Особую популярность на ПЭВМ в настоящее время получило семейство Паскаль-систем, названное -Паскаль и разработанное фирмой BORLAND. Данное семейство, работающее с различными операционными системами CP/M, MSXDOS, имеет высокую производительность, т. к. используется ускоренная однопроходная процедура компиляции. Последняя версия -Паскаль 7.0. Паскаль стала прародителем более поздних языков программирования.

Через 10 лет после Паскаля Вирт создал язык МОДУЛА-2, в котором особое внимание уделяется построению программ как набора независимых

РЕПОЗИТОРИЙ БГ

ПУ

Page 10: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

10

модулей. На Паскаль опирались все 4 языка, принятые в 70-х годов Министерством обороны США для разработки своего универсального высокоуровневого языка, который в дальнейшем получил название АДА.

2.2 Алфавит языка Паскаль Алфавит языка Паскаль состоит из букв русского и латинского

алфавита, арабских цифр, знаков операций (+,-,*,/,=,<,>,:=), ограничителей (. , : , ; , ',[],(), ). Действительные числа изображаются в естественной и полулогарифмической форме (например, 2Е+5=2*105 это 200000). Допустимый диапазон изменения целых и вещественных чисел зависит от конкретной реализации языка.

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

Имя величины – это ее обозначение в алгоритме. Для ЭВМ имя означает также место в памяти, где хранится значение величины. Именем может быть любая последовательность букв, цифр и знаков подчеркивания, начинающихся с буквы.

Тип величины (данного) задает множество допустимых значений величины и множество применимых к ней операций.

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

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

Типы данных Паскаль характеризуется разветвленной структурой типов данных

Примеры Обозначения Границы Требуется памяти (байт)

целый

byte 0..255 1 word 0..65535 2

integer -32768..32767 2 shortint -128..127 1 longint -2147483648..2147483647 4

вещественный real 2.9Е-39..1.7Е38 6 символьный char кодовая таблица ПЭВМ 1 логический Boolean true, false 1

Простые типы данных. В языке Паскаль типы данных разделяются на

простые и структурированные, строки, указатели и др.. Простые типы являются базовыми. На их основе строятся более

сложные структурные типы данных. К простым типам относятся порядковые и вещественные типы.

Порядковые типы отличаются тем, что каждый из них имеет конечное число

РЕПОЗИТОРИЙ БГ

ПУ

Page 11: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

11

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

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

Тип выражения опеределяется типом входящих в него операндов и видом операций, проводимых над ними. Результат операций +, -, * будет действительным числом (вещественным), если хотя бы один операнд вещественного типа. Результат операции деления – всегда действительное число, даже если оба операнда целого типа. Существует встроенная константа вещественного типа, которая составляет значение числа π, которая обозначается pi.

Значениями целочисленного или целого типа являются элементы подмножества целых чисел. Диапазон допустимых целых чисел в десятичной записи от -32768 до 32767. Определена стандартная константа maxint, равная 32767. В разделе описания переменных указываются имена:

var c,sp,q:integer;.. Арифметическое выражение будет давать целый результат, если все

входящие в него операнды относятся к целому типу и к ним применены операции -,+, *, а также div или mod. Kaк правило, данные целого типа редко используются в вычислениях. В программировании они применяются для обозначения индексов в массивах, организации счетчиков. Подмножество целых чисел от 0 до 255 обозначают специальным словом byte. Кроме этого используется специальное обозначение отрезочного типа – две точки. Например, обозначение 5..16 обозначает что переменные, описанные таким образом – это целые числа от 5 до 16.

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

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

var c,sp, q1:boolean;.. Значение true и false получают в результате выполнения операций

сравнения <,>,<=,>=,<>,=. Операнды этих операций могут быть

РЕПОЗИТОРИЙ БГ

ПУ

Page 12: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

12

вещественного, целого типа. Следует помнить, что к операндам вещественного типа очень осторожно следует применять операцию =, т. к. условие может не выполняться за счет неточного представления действительных чисел в памяти ЭВМ и неизбежных ошибок округления при вычислении выражений вещественного типа. В некоторых случаях необходимо применять вместо записи А1=А2 запись ABS(A1-A2)<E, где E – некоторая величина, характеризующая допустимую погрешность округления.

Помимо операций отношения, существуют 3 логические операции, применяемые только к операндам булевого типа. Это not, and, or.

Операция not является одноместной. Ее результат – true, если значение операнда – false. Операции and и or двухместные.

not and or арг рез арг арг рез арг арг рез true false true true true true true true false true true false false true false true

false true false false true true false false false false false false

Логические операции и операции отношения часто встречаются в одном

выражении, причем отношения, стоящие слева и справа от логической операции, имеют более высокий приоритет и выполняются в следующем порядке: в первую очередь not, затем and, or в последнюю очередь. С помощью скобок порядок выполнения может быть изменен.

Например: 1 6 4 2 5 3 (-3>=5) OR NOT (7<9) AND (0<=3). Имеет значение false. Символьный тип задает конечное и упорядоченное множество символов.

Значение символьной константы заключается в апострофы. Например: 'к','1','+'; var c,k:char. Все переменные этого типа упорядочены по кодам.

Перечисляемые типы данных В специальном разделе – разделе описания типов – программист может

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

Каждое значение типа задается указанием, обозначающим это значение идентификатора. Например:

type day = (sat, sun, mon, tue, wed, thu, fri);. Скалярный тип day включает в себя перечисленные значения day, const.

Переменные должны быть описаны в разделе описания переменных: var paday , st: day;. Переменные paday и st объявлены как переменные типа day, тогда

можно записать следующие операции присваивания:

РЕПОЗИТОРИЙ БГ

ПУ

Page 13: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

13

paday := mon; st := tue;. Переменные типа day при выполнении программы могут принимать

только одно из 7 указанных значений. Объект, указанный в списке перечисления может присутствовать не более чем в одном описании. Имена объектов, указанных в описании перечисляемого типа являются константами этого типа. Для перечисляемого типа данных существе¬нен порядок указанных объектов. К данным перечисляемого типа при¬менимы операции отношения. Порядковый номер объекта вычисляется с помощью функции ord. Примеры:

sun<paday; ord(sat)=0; ord(tue)=3;. Арифметические операции. Функции. Выражения Основными элементами, из которых конструируется исполняемая часть

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

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

Над числовыми величинами могут выполняться операции сложения, вычитания, умножения, деления, целочисленного деления (div), вычисление остатка от целочисленного деления mod. Если операции +,-, * выполняются над целыми числами, результат получается целочисленный. При выполнении операции div и mod над вещественными числами исходные данные сначала приводятся к целому типу. Результат выполнения этих операций целочисленный. Приоритет операций в порядке убывания:

1 – *, / 2 – div 3 – mod 4 – +, - Например: 3 div 4+5=5; 7 mod 2+3=4. Арифметические операции

Обозначение Действие Тип аргументов

Тип результата

а+в сложение а и в

только целый целый только вещественный вещественный один целый, другой вещественный

вещественный

а–в вычитание в из а только целый целый только вещественный вещественный

РЕПОЗИТОРИЙ БГ

ПУ

Page 14: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

14

один целый, другой вещественный вещественный

а*в умножение а на в

только целый целый только вещественный вещественный один целый, другой вещественный вещественный

а/в деление а на в

только целый вещественный только вещественный вещественный один целый, другой вещественный вещественный

а mod в остаток от деления а на в только целый целый

а div в целочисленное деление а на в только целый целый

Пример математических функции

Обозначение Действие Тип аргумента x

Тип результата y

abs(x) определяет модуль величины х

целый целый вещественный вещественный

sin(x) определяет синус х целый только вещественный вещественный

cos(x) определяет косинус х целый только вещественный вещественный

arctan(x) определяет арктангенс х целый только вещественный вещественный

exp(x) е возводит в степень х целый только вещественный вещественный

ln(x) определяет натуральный логарифм х (х > 0)

целый только вещественный вещественный

sqr(x) возводит х в квадрат целый целый вещественный вещественный

sqrt(x) определяет корень из х (0x ≥ )

целый только вещественный вещественный

frac(x) определяет дробную часть х

целый только вещественный вещественный

int(x) определяет целую часть х целый только вещественный вещественный

trunc(x) определяет целую часть х целый

только целый вещественный

round(x) находит целое, ближайшее к х

целый только целый

вещественный odd(x) проверяет на нечетность х целый логический

random(x) определяет случайное целое значение целый целый в пределах

0 ≤ у < х

random определяет случайное вещественное значение без аргумента вещественный в пределах

0 ≤ у < 1 pi определяет число π без аргумента вещественный

Результат выполнения функции int(X), trunc(X), frac(X) для отличается

от привычного значения целой и дробной части. При выполнении int(x) и

РЕПОЗИТОРИЙ БГ

ПУ

Page 15: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

15

trunc(x) цифры после запятой отбрасываются. Например: int(-3.72)=-3.0 trunc(-3.72)=-3.

При вычислении функции frac(x) отбрасываются все цифры до запятой. Например: frac(-19.42)=-0.42.

Результатом функции round(x) является ближайшее целое к числу . Например: round(1.25)=1, round(-12.84)=-13.

Отметим, что в Паскале нет операции возведения в произвольную степень. Ее можно записать следующим образом: или =exp(y*ln(x)), при этом число .

Если у нас небольшая степень, то лучше выполнить необходимое количество умножений или использовать функцию sqr(x): =sqr(sqr(x))*x.

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

заканчивается точкой. Блок в свою очередь содержит раздел описаний и раздел операторов.

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

program имя [(имя файла)]; uses crt, graph; label метка, метка; const имя_const = константа; имя const = константа; type имя типа = тип; var имя переменной,имя переменной:тип; procedure <заголовок>; <блок>; function <заголовок>; <блок>; BEGIN <операторы > END. Раздел подключения встроенных библиотек uses используется при

работе с системой Паскаль, Борланд Паскаль.На ЭВМ Корвет в системе Экспресс Паскаль этот раздел не используется.

Раздел uses описывает список имен, подключаемых стандартных и пользовательских модулей, например:

crt – содержит средства управления дисплеем и клавиатурой ЭВМ;

printer – открывает доступ к печатающему устройству; graph – позволяет использовать графику в Паскале; dos – позволяет использовать команды работы с операционной

системой.

РЕПОЗИТОРИЙ БГ

ПУ

Page 16: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

16

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

Порядок следования разделов строго определен, однако в некоторых описаниях языка порядок следований const, label, type, var произволен. В заголовке программы после служебного слова program указывается имя программы, не имеющее смысла внутри программы. После имени программы в круглых скобках следует список файлов (наборов данных, размещающихся на внешних устройствах), с которыми взаимодействует программа. Обычно используют имена стандартного входного input и выходного output: program gons (input, output);.

Во многих версиях языка имена стандартных файлов могут отсутствовать. Они принимаются по умолчанию: program gor;.

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

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

25:read(x,y,z);. Появление меток в программе дает возможность ссылаться на эти метки

в специальных операторах управления (goto) и изменять естественный ход выполнения программы. Все метки должны быть описаны в разделе label.

program cons; label 1,25,100; Этот раздел может отсутствовать, если в программе меток нет. За

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

разделе констант этим именам должны быть присвоены некоторые зна¬чения. Например: const д=3.4; m=3; n=4; s='заголовок таблицы';. Это позволяет сгруппировать в начале программы постоянные

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

Раздел описания типов (type) служит для определения программистом собственных простых и структурных типов данных. Каждая величина в программе должна быть сопоставлена с одним и только одним типом.

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

РЕПОЗИТОРИЙ БГ

ПУ

Page 17: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

17

на ход выполнения. Комментарии заключаются в специальные скобки. Например:

goto 20; {выход из циклa} или (*выход из цикла*) или /*выход из цикла*/ Операторы в исполнительной части программы определяют, какие

действия должны быть выполнены над данными. С каждым элементом данных обычно связывают имя и значение. Имя используется для обозначения элемента данных. В качестве имени в Паскале используется идентификатор – последовательность букв или цифр, начинающаяся с буквы. Хотя длина идентификатора не оговаривается, реально идентификатор не может переноситься со строки на строку. Обычно используют не более 80 символов. Кроме того, в большинстве реализаций Паскаля идентификаторы различаются по первым 6–8 символам. Все идентификаторы должны быть описаны в разделе описаний.

Для ввода информации с клавиатуры используется оператор (встроенная процедура) read. Формат:

read (список переменных); readln( a,b,c); Переменные перечисляются через запятую. После выполнения

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

var b:real; a:char; … read(a,b);. Если у нас есть несколько команд read, разделенных другими

командами, то во время выполнения первого оператора read можно ввести все переменные. Для остальных команд программа не оста¬навливается.

В отличие от оператора read оператор readln после ввода всех указанных в операторе данных осуществляет переход к следующей строке.

Оператор вывода write служит для вывода информации на экран дисплея или принтера. Вид оператора:

write (список выражений);. Выражения в списке разделяются запятыми. В результате выполнения

оператора write могут вычисляться значения выражений. write ('y= ', 2*y);. Строки выводятся без всяких изменений, ограничивающие их

апострофы не выводятся. Наряду с оператором write используется оператор writeln. Отличие

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

РЕПОЗИТОРИЙ БГ

ПУ

Page 18: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

18

write (1); writeln; write(-2,3); будет 1 -2 3 Если не принять специальных мер, то значения вещественных

переменных и выражений выводятся в форме с плавающей запятой. Для вывода вещественных чисел в форме с фиксированной точкой указывается формат после числа:

write(число:w:d);. Здесь: – общая ширина поля числа после вывода; – количество цифр

после запятой (последние цифры округляются). writeln(- 73.1:6:1);. Результат: (на экране клеток нет) будем считать, что одна клетка

таблицы – одно знакоместо на экране - 7 3 . 1 Если число литер в представлении выводимого значения оказывается

меньше, чем , то оно слева дополняется пробелами. Если опускается, то назначается стандартная длина плоя, зависящая от конкретной ЭВМ.

Оператор присваивания имеет вид: <имя переменной>:=выражение; При вычислении значения выражения, стоящего в первой части

оператора присваивания, учитывается тип данных и операции, которые над ним выполняются. Если в выражение входят данные целого типа, над которыми выполняются операции +,-,*, div, mod, то результат будет целочисленным. Если хотя бы один элемент данных относится к вещественному типу или встречается операция «деление», то результат будет вещественного типа. При этом будет сообщение об ошибке, указывающее на несоответствие типа.

Составной оператор - это последовательность произвольных операторов программы, заключенная в операторные скобки - зарезервированные слова

begin . . . end; Составные операторы - важный инструмент Паскаля, дающий

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

Фактически, весь раздел операторов, обрамленный словами begin . . . end, представляет собой один составной оператор. Поскольку зарезервированное слово end является закрывающей операторной скобкой, оно одновременно указывает и конец предыдущего оператора, поэтому ставить перед ним символ «;» необязательно, и далее во всех примерах мы не будем этого делать. Наличие точки с запятой перед end в предыдущих примерах означало, что между последним оператором и операторной скобкой end располагается пустой оператор. Пустой оператор не содержит никаких действий, просто в программу добавляется лишняя точка с запятой. В

РЕПОЗИТОРИЙ БГ

ПУ

Page 19: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

19

основном пустой оператор используется для передачи управления в конец составного оператора.

Оператор условного перехода Условный оператор позволяет проверить некоторое условие (логическое

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

Для записи команды ветвления используется полная команда ветвления команда if...then...else;.

Где IF, THEN, ELSE - зарезервированные слова (если, то, иначе); <условие> - произвольное выражение логического типа; <серия1>, <серия2> - любые операторы языка Паскаль.

Условный оператор работает по следующему алгоритму. Вначале

вычисляется условное выражение <условие>. Если результат есть TRUE (истина), то выполняется <оператор1>, а <оператор2> пропускается; если результат есть FALSE (ложь), наоборот, <оператор1> пропускается, а выполняется <оператор2>.

Пример: if x>=0 then y:=2*x else y:=3 - x ;. Перед служебным словом else знак «;» не ставится. Можно сказать, что слова then и else действуют только на один

оператор, т. е. до первого знака «;». Чтобы действие этих слов распространялось на несколько операторов, используют операторные скобки или составной оператор:

begin ..... end (перед end знак «;» может не ставиться). Пример: if x>0 then begin y:=1; z:=7 end else begin y:=2; z:=9 end;. В этом случае команда ветвления заканчивается последним словом end и

после этого слова ставится знак «;». Пример: 1) if x>0 then y:=1 else begin y:=2; z:=9 end; 2) if x>0 then begin y:=1; z=7 end else y:=2; В этих примерах только после одного служебного слова используются

операторные скобки.

РЕПОЗИТОРИЙ БГ

ПУ

Page 20: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

20

В записи if x>0 then y:=1 else y:=2;z:=7 значение 7 присвоится переменной z и при x>0 и при x<=0, так как оператор z:=7; уже не относится к оператору ветвления.

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

if (x>1) and (x<7) then ... При записи команды ветвления возникает проблема «болтающегося»

else при оценке нескольких условий. Поскольку любой из операторов <оператор1> и <оператор2> может быть любого типа, в том числе и условным, а в то же время не каждый из «вложенных» условных операторов может иметь часть ELSE <оператор2>, то возникает неоднозначность трактовки условий.

Если не ввести дополнительного соглашения, то в записи if условие then if условие then оператор 1 else оператор 2; не понятно, к какому условному оператору, внутреннему или внешнему,

относится else. Эта неоднозначность в Паскале решается следующимобразом: любая

встретившаяся часть ELSE соответствует ближайшей к ней «сверху» части THEN условного оператора.

Но если в then входит оператор if, то его лучше заключить его в операторную скобку begin...end, даже если if единственный оператор в then-части.

if условие then begin if условие then оператор 1 else оператор 3; end else оператор 2; Сокращенная форма оператора ветвления имеет вид: if условие then оператор; или if условие если then то begin оператор1 оператор 1; оператор2 оператор 2; оператор3 оператор 3; end; все Пример 1. Решим уравнение вида ах = в.

РЕПОЗИТОРИЙ БГ

ПУ

Page 21: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

21

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

1. Если а не равно нулю, то решение уравнения определяется через деление числа в на число а.

2. Если а равно нулю и в равно нулю, то уравнение принимает вид 0х = 0, а это значит, что решением его может быть любое число.

3. Если а равно нулю, а в не равно нулю, то уравнение 0х = в не имеет решения.

program urav; var a,b,x:real; BEGIN writeln(‘введите значения а и в’); readln(a,b); if a<>0 then begin x:=b/a; writeln(‘Ответ ‘,x:5:2);

еnd else

if (b=0) then writeln(‘любое число’) else writeln(‘нет решений’); END. 4.6 Оператор выбора варианта Оператор выбора варианта является одним из обобщений условного

оператора. Он дает возможность выполнить один или несколько операторов в зависимости от значения варианта.

Его вид: – полная форма: case вариант оf <список меток>:оператор 1; <список меток>:оператор 2; .......................... <список меток>:оператор n else оператор n+1; end; – сокращенная форма: case вариант of <список меток>:оператор 1; <список меток>:оператор 2; .......................... <список меток>:оператор n;

РЕПОЗИТОРИЙ БГ

ПУ

Page 22: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

22

end; case, of, end (выбор, из, конец) – служебные слова. Операторы цикла(повторения) В языке Паскаль существуют 3 оператора цикла. 1) Оператор цикла с параметром используется для организации цикла с

известным числом повторений цикла (оператор для). for <имя переменной>:= выражение1 to выражение2 do

оператор; или несколько операторов в цикле for с:= А to В do оператор(серия команд);

Отметим, что в цикле «for» переменная цикла С увеличивается всегда на

1 сама и автоматически от значения С=А до С=В. Замечание. 1. Внутри цикла нельзя изменять значения А,В і пераменную цыкла С. 2. В операторе for не допускается ихменение переменной цикла на

величину, которая не равна 1. for <имя переменной>:= выражение1 to выражение2 do begin оператор1; оператор2; end; Например, (здесь значение переменной увеличивается на единицу 4

раза). s:=0; for i:=1 to 4 do s:=s+1; {счет от 1 до 4) Переменная цикла должна быть только целого типа. Это оператор в

модификации «Вниз к» имеет вид: for i:=a1 downto a2 do оператор; s:=0; for i:=4 downto 1 do s:=s+1; {счет от 1 до 4) В этом случае при каждом новом выполнении оператора значение

переменной цикла i уменьшается на 1. Досрочный выход из цикла может быть осуществлен с помощью

команды break(только из цикла) exit (выход из программы).

РЕПОЗИТОРИЙ БГ

ПУ

Page 23: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

23

Пример. Дано натуральное число n. Найти наименьший простой сомножитель.

program somn; var i,n:integer; BEGIN write ('введите число '); readln (n); for i:=2 to n do begin if n mod i = 0 then begin write('наименьший сомножитель',i); exit; end; end; END. Циклические алгоритмы могут иметь сложную структуру. Если внутри

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

2) Оператор цикла с предусловием (цикл пока). Этот оператор имеет вид:

while условие do оператор;.

Рис 2.

Рис.3. while и do – служебные слова, условие – логическое (булево) выражение.

Выполняется следующим образом: сначала вычисляется значение булева выражения. Если это значение истинно (true), то выполняется оператор, следующий за служебным словом do (операторы могут быть заключены в

РЕПОЗИТОРИЙ БГ

ПУ

Page 24: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

24

операторные скобки begin...end), и снова происходит возврат к вычислению значения булева выражения. Так повторяется, пока значение булева выражения не станет ложным (false). Выполнение оператора, следующего за словом do, прекращается, поэтому такой оператор называется оператором с предусловием. Это означает также, что оператор, следующий за служебным словом do, может быть и не выполнен ни разу, если при первом же вычислении значение булева выражения будет ложным.

На рис 3. Показано, как можно заменить цикл for циклом while, обратное можно сделать не всегда.

Операторы цикла while и repeat используются чаще всего в случаях, когда неизвестно число повторений или изпенение параметра число отличное от 1.

3) Оператор цикла с постусловием. repeat оператор until условие; Этот оператор выполняется следующим образом: сначала выполняется

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

repeat read (b); if b<>0 then m:=m+b; until b=0;. Пример. Вывести на экран значения функции y=sin(x),x=0.5(0,5)2 program w; uses crt; var x,y:real; BEGIN x:=0.5;

+ - услов

операто

РЕПОЗИТОРИЙ БГ

ПУ

Page 25: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

25

while x<=2 do begin y:=sin(x); x:=x+0.5; end; writeln ('y=',y:3:5); END. Пример. Для каждого заданного x=x0(hx)xn вычислить

program zzz2; var x,x0,hx,xn,t,s:real; k,n:integer; BEGIN writeln('vvedite x0 hx xn'); readln(x0,hx,xn); x:=x0; repeat s:=0; for k:=1 to 10 do for n:=1 to 5 do begin t:=(k+n)/2*x; s:=s+t; end; writeln('x=',x:7:4,' s=',s:7:4); x:=x+hx; until x>xn; readln; END. Тема 1.4. Графические возможности языка Pascal. Графические примитивы. Процедуры и функции для работы с графикой.

Действия с пером и кистью. Работа с цветом. Действия со шрифтом Действия с графическим окном. Действия с рисунками. Использование растровых изображений. Анимация.

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

РЕПОЗИТОРИЙ БГ

ПУ

Page 26: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

26

Графические примитивы Графические примитивы представляют собой процедуры,

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

procedure SetPixel(x,y: integer; c: Color); Закрашивает пиксел с координатами (x,y) цветом c procedure PutPixel(x,y: integer; c: Color); Закрашивает пиксел с координатами (x,y) цветом c procedure MoveTo(x,y: integer); Устанавливает текущую позицию рисования в точку (x,y) procedure LineTo(x,y: integer); Рисует отрезок от текущей позиции до точки (x,y). Текущая

позиция переносится в точку (x,y) procedure Line(x1,y1,x2,y2: integer); Рисует отрезок от точки (x1,y1) до точки (x2,y2) procedure FillCircle(x,y,r: integer); Заполняет внутренность окружности с центром (x,y) и радиусом r procedure FillEllipse(x1,y1,x2,y2: integer); Заполняет внутренность эллипса, ограниченного прямоугольником,

заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); Заполняет внутренность прямоугольника, заданного координатами

противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); Рисует заполненный прямоугольник, заданный координатами

противоположных вершин (x1,y1) и (x2,y2) procedure TextOut(x,y: integer; s: string); Выводит строку s в прямоугольник к координатами левого верхнего

угла (x,y) Пример: program kodywin; uses GraphABC; BEGIN setwindowsize(360, 260); setpencolor(rgb(255, 0, 0)); line(60, 20, 300, 20); line(300, 20, 180, 100); line(180, 100, 60, 20); floodfill(70, 25, clred); line(60, 100, 60, 240); line(60, 240, 300, 240); line(300, 240, 300, 100);

РЕПОЗИТОРИЙ БГ

ПУ

Page 27: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

27

line(300, 100, 180, 180); line(180, 180, 60, 100); floodfill(100, 190, clred); END. Тема 1.5. Составные типы данных. Массивы: описание, способы ввода и вывода элементов массива.

Одномерные и многомерные массивы: Типовые задачи обработки массивов. Методы работы с элементами массивов. Алгоритмы сортировки. Символы. Процедуры и функции работы с символами. Строки. Процедуры и функции работы со строковыми данными. Типовые задачи обработки строк. Множества. Описание. Операции над множествами. Примеры работы с числовыми и символьными множествами. Записи. Описание. Примеры работы с записями. Организация обработки массивов записей.

При описании массива (таблица) указывается число его компонент, и это число остается постоянным. Для реализации прямого доступа к любой компоненте массива используются специальные обозначения. Все компоненты массива имеют общее имя – имя массива. Указание на конкретный элемент массива осуществляется с помощью индексов. Обозначение компоненты массива имеет вид:

имя массива [индекс, индекс,..., индекс]. k[1,4,2]. Количество индексов в обозначении компонент массива определяет

размерность массива. Массив описывается в разделе описания переменных. При этом описание массива включает описание типа массива и типа индексов. Для описания используется конструкция

имя массива: array [1..40] of тип; k: array [1..50] of real; Одномерный массив k. Индексы изменяются от 1 до 50. Элементы

массива имеют вещественный тип и будут обозначаться k[8], k[14]. Для обозначения типа индекса в этом описании использован отрезочный тип данных. Этот тип не относится к стандартным, может образовываться непосредственно программистом. Описание этого типа задается с помощью констант, разделенных двумя точками: 1..50. Первая константа указывает нижнюю границу отрезка, а вторая – его верхнюю границу. Переменная, относящаяся к этому типу (в нашем случае переменная, обозначающая индекс массива), должна принимать значение того же типа, что и границы отрезка (integer). Причем эти значения должны принадлежать указанному отрезку. Если же значение переменной отрезочного типа выходит за пределы указанного отрезка, то возникает ошибка. Границы отрезка в описании переменной отрезочного типа не могут быть вещественного типа. Если компоненты массива имеют более одного индекса, то в описании массива должен быть описан тип каждого индекса.

matr:array [1..10,1..4] of real;

РЕПОЗИТОРИЙ БГ

ПУ

Page 28: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

28

mat [1..4]; Тот факт, что элементы массива имеют явное обозначение, делает их

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

Пусть одномерный массив описан в разделе описания переменных так: var vector:array[1..50] of real; Тогда ввод начальных значений компонент этого массива может быть

представлен: for k:=1 to 50 do read(vector[k]); Приведенный фрагмент программы плох тем, что он годится только для

ввода таких массивов, которые содержат ровно 50 компонент Если же программа должна быть написана для работы с массивом, который при каждом новом исполнении программы может иметь другое число компонент, то целесообразно описать этот массив в разделе описаний переменных как массив с максимально возможным кол-вом компонент. Предположим, что кол-во компонент массива не может быть больше 100. Это может быть записано так:

program wwod; uses crt; const m=100; var vector:array [1..m] of real; k:integer; BEGIN clrscr; for k:=1 to m do read (vector[k]); {ввод массива с клавиатуры} END. или так: program wwod; const m=100; var vector:array [1..m] of real; k:integer; BEGIN randomize; for k:=1 to m do vector[k]:=random(50)-20 ; { массив задан

случайным образом}

РЕПОЗИТОРИЙ БГ

ПУ

Page 29: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

29

writeln(‘задан массив’); for k:=1 to m do write( vector[k]:8:2);writeln; END. Пример. Найти максимальный элемент одномерного массива и его

номер. Число элементов массива меньше 100. program maxelem; const k=100; var x:array [1..k] of real ; max:real; n,i,jmax:1..k; BEGIN write ('введите размерность массива n '); readln (n); for i:=1 to n do begin write('введите х[',i,'] '); readln (x[i]); end; max:=x[1]; jmax:=1; for i:=2 to n do if x[i]>max then begin max:=x[i]; jmax:=i; end; writeln('максимальный элемент', max:6:2); writeln('индекс ', jmax); END. Пример . В каждой стоке данной квадратной целочисленной матрицы

определите количество отрицательных элементов. program zzz1; uses crt; const m=3; n=5; var a:array[1..m,1..n] of integer; b:array[1..m] of integer; i,j,k:integer; p,z:real; BEGIN clrscr; randomize; writeln('dan massiv:');

РЕПОЗИТОРИЙ БГ

ПУ

Page 30: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

30

for i:=1 to m do begin for j:=1 to n do begin a[i,j]:=random(100)-20; write(a[i,j]:5); end; writeln; end; for i:=1 to m do begin k:=0; for j:=1 to n do if a[i,j]<0 then k:=k+1; b[i]:=k; writeln('в строке ', i, ' отрицательных элементов ', b[i]); end;

ЕND. Строка – это последовательность символов. Количество символов в

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

type slovo = string[50]; var x,y:slovo; var x:string[50];. В памяти ЭВМ под строку отводится максимальная длина + 1 байт. Этот

байт располагается в начале слова и указывает длину строки. В рассмотренных примерах под переменные x, y отводится по 51 байту.

Если m – текущая длина строки, а b – начальный адрес, с которого начинает располагаться строка k, то в ячейке b будет число m, b+1 – 1-й символ, b+2 – 2-й символ, b+m – m-й символ, b+m+1 – свободная ячейка, b+k – свободная ячейка.

Над строковыми данными можно выполнять операции: 1) сложение (сцепление, конкатенация); 2) отношение (равно, не равно, <,>, <=, >=). Эти операции выполняются

после операции сцепления. Операции отношения результатом имеют истинно или ложно.

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

Для присваивания строковой переменной результата строкового выражения используется оператор присваивания.

A=string[4];

РЕПОЗИТОРИЙ БГ

ПУ

Page 31: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

31

A:='не'+'книга';. Результат: ‘некн’. В выражение могут входить не только строковые, но и символьные

величины. a,c:string[5]; b,d:char; a:='лон'; b:='с'; c:=b+a 'слон'; d:=a; (зависнет) К отдельному символу можно обратится по номеру: a:='книга'; a:=a[3];. Ответ: ‘и’. a:='книга'; a:=a[2]+a[3]+a[1]+a[5];. Ответ: ‘ника’. В работе со строками можно использовать процедуры: 1) delete (str, poz, n) – из строки str удалить n символов с позиции poz:

delete (a,2,1). program ad; var a:string[10]; begin writeln('вводите a'); readln(a); delete(a,3,4; writeln(a);. Ответ: кн 2) insert (str1, str2, poz). Вставка строки str1 в строку str2, начиная с позиции poz. begin writeln('введите a'); readln(a); writeln('введите c'); readln(c); insert(c,a,3); writeln(a);. Если в этом фрагменте переменная a имеет string[2], то будет ошибка.

Лучше не писать read (a,c) (a,c:char), т. к. при вводе мы должны отделять пробелом, а пробел – строковая величина, и машина не воспринимает c.

3) str(ib, st). Преобразует числовую величину ib в строковую st. Числовая величина ib может указываться в формате:

str(-40,a); str(-40:6,a); a='-40'; a=' -40';. 4) val (str,per,cod). Строковую переменную str переводит в числовую

переменную per (cod – номер позиции; str (исходная строковая величина) не должна содержать пробелов в начале и в конце; per – переменная вещественного, целочисленного или байтового типа (целое число от 0 до 255 и длиной 1 байт); cod – целочисленная переменная).

РЕПОЗИТОРИЙ БГ

ПУ

Page 32: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

32

Если процедура выполнилась, то значение cod равно 0, в противном случае это номер позиции, в которой произошла ошибка. При этом значение per не определено.

program cd; var a:string[6]; k,m:integer; d:real; begin val('400',k,m); writeln(k-1, ,m);. Ответ:399 0. a:='12.2'; val(a,d,m) val(a,k,m); writeln(d);. {Здесь будет ошибка: несоответствие} Ответ: 1,22000Е+1 типов. a:='1 2'; val(k,k,m); writeln(k, , m);. На экране вместо k будет любое число, а вместо m будет число 2. Функции для работы со строками. 1) length (str) – длина строковой переменной. Примеры: length(a);

length('123');. Ответ:3. 2) pos (str1, str2). Обнаруживает первое появление подстроки str1 в

строке str2. Значение – номер позиции, с которой входит str1. Если вхождения нет, то значение функции равно 0. Лучше использовать переменную целого типа.

Пример: var a:string[10]; i:integer; begin a:='wapa'; i:=pos('p',a); write(i);. Ответ: 3 3) copy (str,poz, n). Вырезает из строки str подстроку длиной n символов,

начиная с позиции poz. Следует обратить внимание на то, что тип результата у этой функции string.

Пример: 1) var a,b:string[20]; begin a:='informatika'; b:=copy(a,3,5); writeln(b);. Ответ: forma 2) var a,b,c,d:string[20]; begin a:='informatika'; b:=copy(a,9,3);c:=copy(a,5,1); d:=b+c;

РЕПОЗИТОРИЙ БГ

ПУ

Page 33: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

33

writeln(d);. Ответ: ikar 3) upcase (c). Преобразует малую букву в большую. Следует обратить

внимание на то, что тип аргумента с у этой функции сhar. Пример: var a:string[20];c:char; begin a:='informatika'; c:=upcase(a[3]); writeln(c);. Ответ: F Пример. В данном слове заменим букву "a" буквой "c": program slr; var s,t:string; i:integer; BEGIN writeln('Введите слово’); readln(s); for i:=1 to length(s) do if s[i]='a' then s[i]:=’c’; writeln(‘ ответ ‘,s); END. Множества – структурированный тип данных, представляющий

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

Для описания множества используются: 1) квадратные скобки. Заключение элемента в квадратные скобки можно

рассматривать как операцию образования множественного значения: 3 – просто число целого типа, а [3] – элемент множества.

2) сочетание служебных слов set of, например, type x:=set of (1,2,3); var a: set of 'a'..'z';. Примеры множеств: [] – пустое множество; [1,2,6,8] – множество заданных целых чисел; [2,в] – множество состоящее из целого числа 2 и текущего значения

целочисленной переменной в (при в=2 множество состоит из одного элемента);

['a','b','c'] – множество заданных був; ['a',...'z'] – множество всех малых латинских букв;

РЕПОЗИТОРИЙ БГ

ПУ

Page 34: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

34

[10..99] –- множество двузначных чисел. Если в диапазоне с..х, используемом для задания множественной

константы, с=х, то этот диапазон допускает только один элемент с. Если с>х, то этот диапазон не поставляет в множество ни одного элемента:

[2..2]=[2] [9..3]=[] – пустое. Над множествами допустимы следующие операции (в порядке

убывания): Операция = (равно). True или false. Результат операции «истинно», если

множества состоят из одних и тех же элементов. Операция <> (не равно). Операция определения принадлежности элемента некоторому

множеству. Обозначается служебным словом in. Слева от in – элемент, а справа – множество.

2 in [2,5] – true, 3 in [7..25] – false, 'a' in ['t','j','a'] – true Объединение множеств (+): С:=А+В, где множество С содержит

элементы, принадлежащие или А, или В, или А и В одновременно. [1,2,3,4,5]+[2,5,6,7,8]=[1,2,3,4,5,6,7,8]. Операция «меньше либо равно» А<=В: truе, если все элементы

множества А принадлежат множеству В. Пересечение множеств (*): С:=А*В, где множество С содержит

элементы, принадлежащие А и не принадлежащие В одновременно. [1,2,3]*[7,2]=[2], [1,2,3,4,5]*[2,5,6,7,8]=[2,5]. Разность множеств(-): С:=А\В, где множество С содержит элементы,

принадлежащие А и не принадлежащие В. [1,2,3]-[1,2]=[3], [1,2,3,4,5]-[2,5,6,7,8]=[1,3,4]. В отличие от элементов массива элементы множества неупорядочены,

поэтому следующие множества одинаковы: [1,2,3,4], [4,3,2,1], [4,2,1,3] и т. п. Под мощностью множества понимается общее число его элементов.

Мощность пустого множества равна 0. Пример. Вывести на экран все простые натуральные числа от 2 до

заданного числа n. При решении этой задачи используется алгоритм, который называется

«решето Эратосфена»: в начале записываются все натуральные числа от 2 до n. Затем помечается число 2 (на бумаге можно обвести кружочком) и вычеркиваются все остальные числа, кратные 2, с вычеркнутыми числами больше не работают. Далее берется первое незачеркнутое число – это 3, также помечается и вычеркиваются все остальные числа, кратные 3. Процесс повторяется до тех пор, пока не останется незачеркнутых чисел. Все помеченные числа и составят множество простых чисел в заданном промежутке.

program prostye; const n=100; type mno=set of 2..n;

РЕПОЗИТОРИЙ БГ

ПУ

Page 35: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

35

var x,y:mno; p,k:2..n; BEGIN x:=[2..n]; y:=[]; {в y будут формироваться простые числа} p:=2; repeat while not (p in x) do p:=p+1; {- определяется новое незачеркнутое

число} y:=y+[p]; {и заносится во множество простых} k:=p; repeat x:=x-[k]; {удаляются из x кратные числа} k:=k+p; until k>n ; until x=[]; {вывод результата на экран} for k:=2 to n do if k in y then write(k:4); END. Запись – структурированный тип данных, состоящий из

фиксированного числа элементов разного типа. Это коренное отличие записи. Так переменная типа стринг тоже структурированная, но в ней все компоненты (буквы) только одного типа. Описание типа записи начинается словом record и заканчивается словом end. Между ними заключается список компонент, называемых полями. Для каждого поля указывается идентификатор и тип.

RECORD, END - зарезервированные слова (запись,конец); <сп.полей> - список полей; представляет собой последовательность разделов записи, между которыми ставится точка с запятой.

Каждый раздел записи состоит из одного или нескольких идентификаторов полей, отделяемых друг от друга запятыми. За идентификатором (идентификаторами) ставится двоеточие и описание типа поля (полей), например:

type имя типа = record identificator 1:тип; {список полей} identificator 1:тип; .............. end;. type student = record fio:string[40]; curs: integer; gruppa:integer; st:real;

РЕПОЗИТОРИЙ БГ

ПУ

Page 36: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

36

end; var x,y: student;. Значения полей записи могут использоваться в выражениях. Обращение

к отдельным полям осуществляется через указание переменной и далее через точку указания поля.

х.fio:=’Соколова’; y.gruppa:=101; Переменные типа «запись» могут участвовать в операторах

присваивания, но никакие операции над ними выполняться не могут. Арифметические или какие-либо другие операции могут выполняться только над отдельными полями записи.

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

with <имя записи> do оператор. Внутри оператора к компонентам записи можно обращаться только с

помощью имени компоненты. with x do readln (fio, curs, gruppa); with x do write (curs);. Оператор присваивания может применяться к записям в целом, если

типы записей совпадают. В нашем примере имеем право написать: x:=y. В задачах обычно используются массивы записей. Например: var x1:array[1..30] of student;. Пример. Вывести на экран список студентов, у которых все отметки в

сессии были больше 7. Program zd2; type student=record fio: string[20]; name: string[15]; oz1,oz2,oz3,oz4: integer; end; var n,i,k: integer; s: real; x: array[1..30] of student; BEGIN writeln('Введите количество студентов',i); readln(n); k:=0; for i:=1 to n do with x[i] do begin writeln('Фамилия'); readln(fio);

РЕПОЗИТОРИЙ БГ

ПУ

Page 37: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

37

writeln('Имя'); readln(name); writeln('Оценка 1'); readln(oz1); writeln('Оценка 2'); readln(oz2); writeln('Оценка 3'); readln(oz3); writeln('Оценка 4'); readln(oz4); end; for i:=1 to n do if ((x[i].oz>7) and (x[i].oz>7) and (x[i].oz3>7) and (x[i].oz4>7) then writeln(x[i].fio, x[i].name, x[i].oz1, x[i].oz2, x[i].oz3, x[i].oz4) end END. Тема 1.6. Механизмы структурирования программ. Процедуры и функции как средство структурирования программ.

Создание процедур и функций пользователя: правила записи и вызова. Локальные и глобальные переменные. Параметры процедур и функций, обмен данными с основной программой. Рекурсия. Создание и использование модулей. Библиотеки пользователя.

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

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

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

Описание процедуры начинается с заголовка. За заголовком следует текст описания, во многом аналогичный тексту программы, т. к. строится по тем же правилам.

procedure имя процедуры (имя аргумента: тип; имя аргумента:тип; var имя результата: тип);

var .......

РЕПОЗИТОРИЙ БГ

ПУ

Page 38: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

38

begin ....... end; Без служебного слава var перед именем результата значение результата

из процедуры не возвращается. Описание процедуры заканчивается служебным словом end, за которым следует точка с запятой.

Описание функций аналогично описанию процедуры. Заголовок описания функции имеет вид: function имя функции (имя аргумента:тип):тип функции; var ... begin ... end;. Например: function summa (var x,y:real):real;, function summa (x,y:real):real;. В этом заголовке тип, стоящий после круглой скобки, определяет тип

переменной имени функции. Отличие от процедуры состоит также в том, что в тексте описания функции должен обязательно присутствовать оператор присваивания вида: имя функции:=выражение (summa:=s).

Пример: Программа вычисления факториала program factorial; var i,k:integer; function fact (n:integer):integer; begin if n<=1 then fact:=1 else fact:=n*fact(n-1); end; ВEGIN write ('ввод символа i '):readln(i); for k:=1 to i do writeln(fact(k)); ЕND. Тема 1.7. Алгоритмы работы с внешней и внутренней памятью

компьютера. Файловые типы. Обмен данными с диском и внешними устройствами.

Типизированные, текстовые, нетипизированные файлы. Указатели и динамические структуры данных: списки, стеки, очереди.

В Паскале предусмотрены специальные объекты – файлы, операции над которыми сводятся к работе с дисками.

РЕПОЗИТОРИЙ БГ

ПУ

Page 39: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

39

Файл – это последовательность компонент, являющихся объектами одного и того же типа. Кол-во компонент в файле заранее не оговаривается. Компоненты файла не имеют индексов.

В Паскале существует 3 класса файлов: типизированные, текстовые и нетипизированные.

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

Текстовый файл рассматривается как последовательность символов, разбитых на строки.

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

Типизированные файлы Описание типизированного файла имеет вид: type primer=file of тип; (например, primer=file of integer;). Это описание

типа файла, имя которого primer. Объектами типа primer будут файлы с целочисленными компонентами.

Тогда запись в разделе var a,b,c:primer; означает, что в программе будут использоваться три целочисленных файла a,b,c.

Описание файла может быть непосредственно в разделе var: Var a,b,c: file of integer; g,h:file of real; v:file of char; Каждому файлу в языке ставится в соответствие файловая переменная (в

наших примерах это a,b,c,g,h,v )определенного типа, поэтому в начале работы с файлом выполняется процедура assign, которая связывает файловую переменную с именем файла на диске. При создании файла на диске с самого начала записывается имя файла (идентификатор). После имени файла записываются компоненты. Вслед за самой последней компонентой записывается признак конца файла(специальный код). Отметим, что файл может быть открыт для записи и закрыт для чтения и наоборот.

Функции и процедуры обработки файлов. В Паскале рассматривается 2 способа доступа к компонентам файла: последовательный и произвольный. При последовательном доступе поиск начинается с начала файла и производится до тех пор, пока не будет получен нужный элемент. Произвольный способ доступа позволяет обращаться к элементу файла по его номеру в файле. Обозначение: fv – файловая переменная, т. е. переменная, используемая для обозначения файла; str – строковое выражение; p(p1,p2, ..., pn) – переменные того же типа, что и компоненты переменной fv; n – целочисленное выражение.

1) assign (fv,str) – присвоить имя файла str переменной fv. С этого момента действие над переменной fv означают то же, что и действия над файлом str;

РЕПОЗИТОРИЙ БГ

ПУ

Page 40: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

40

2) reset(fv) – открыть файл и установить указатель в начало файла для считывания;

3) rewrite (fv) – открывает файл для записи, ставит указатель на начало первого элемента файла;

4) read (fv,p) – читает из файла компоненту и присваивает это значение переменной p;

5) seek (fv,n) – установить указатель (магнитную головку) на элемент с порядковым номером n в файле. Указатель перемещается к компоненте с номером n (счет начинается с 0);

6) write(fv,p) – записать переменную в файл; 7) close (fv) – закрыть файл. Если файл был открыт, нельзя выходить из

программы, не закрыв его; 8) erase (fv) – уничтожить файл. Если надо уничтожить открытый файл,

то его следует предварительно закрыть; 9) rename (fv,str) – переименовать файл, присвоив ему имя строковой

переменной str; 10) trancate (fv) – уничтожить все компоненты файла, начиная с места

текущего положения указателя, и подготовить файл для записи. Функции. eof(fv) – конец файла, проверка конца файла. Значение истинно (true),

если указатель находится сразу за последним элементом файла. false – в противном случае.

filepos (fv) – указывает текущий номер компоненты. filesize (fv) – указывает число компонентов в файле. Данные для этого

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

файла. program z1; var

f:file of real; i,n: integer; t,p: real;

BEGIN writeln('vvedite kolichestvo chisel n'); readln(n); assign(f,'1.dat'); randomize; rewrite(f); for i:=1 to n do begin t:=random(10)-6; write(f,t); end; seek(f,0); p:=1;

РЕПОЗИТОРИЙ БГ

ПУ

Page 41: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

41

while not eof(f) do begin read(f,t); if t<0 then p:=p*t; write(t:6:2); end; close(f); writeln; writeln(p);

END. РАЗДЕЛ 2. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ

ПРОГРАММИРОВАНИЕ Тема 2.1. Платформа .Net Framework. Система MS Visual Studio.Net. Архитектура платформы .Net Framework. Виртуальная машина.

Общеязыковая исполнительная среда CLR платформы .Net Framework. Трансляция программного кода в .Net. Библиотеки классов. Пространства имен. Сборка, решение, проект. Системы и технологии быстрой разработки программ (RAD). Среды визуального проектирования программного обеспечения (IDE). Система Microsoft Visual Studio .Net. Работа в среде MS Visual Studio (C# Develop). Интерфейс. Окна. Основные инструменты. Разработка консольных приложений.

.NET Framework - каркас, который включает технологии разработки Windows-приложений, Web-приложений и Web-сервисов, технологии доступа к данным и межпрограммного взаимодействия.

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

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

Основой платформы .NET является общеязыковая среда исполнения CLR (Common Language Runtime), которая служит «прослойкой» между операционной системой (ОС) и кодом приложений для .NET Framework..

Такой код называется управляемым (managed code). Виртуальная машина исполняет код на промежуточном языке IL

Microsoft Intermediate Language (или MS IL, CIL), в который компилируются программы, написанные на .NET- языках программирования (C#, Managed C++, Visual Basic .NET, F# …. )

Традиционные схемы трансляции Интерпретация - Компиляция Гибридная схема трансляции в .Net

РЕПОЗИТОРИЙ БГ

ПУ

Page 42: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

42

Основные компоненты .Net Framework Библиотека классов .Элементом этой FCL (Framework Class Library)

библиотеки является базовый набор классов BCL ( . В BCL Base Class Library)входят классы для работы со строками, коллекциями данных, поддержки многопоточности и т.д.

Частью FCL являются компоненты, поддерживающие различные технологии обработки данных и организации взаимодействия с пользователем. Например, классы для работы с XML, базами данных (ADO.NET), создания Web-приложений (ASP.NET).

Код на промежуточном языке IL не зависит от операционной системы и типа процессора, на котором выполняется приложение. В процессе выполнения он компилируется в машинно-зависимый код JIT – компилятором (Just-in-Time - вовремя).

Компилятор создает т.н. PE – файл переносимый исполняемый (Portable Executable). Этот файл содержит код на IL и метаданные, - т.е. всю необходимую информацию как для CLR, так и конечных пользователей. В зависимости от выбранного типа проекта PE-файл может иметь расширения exe, dll, mod или mdl.

Двоичные файлы для платформы .NET называются сборками (assembly). Состав сборки: Манифест (manifest) – описание сборки: версия,

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

Основная задача CLR – это манипулирование сборками: загрузка сборок, трансляция кода IL в машинно-зависимый код, создание окружения для выполнения сборок. Важной функцией CLR является управление размещением памяти при работе приложение и выполнение автоматической сборки мусора, то есть фонового освобождения неиспользуемой памяти.

Другие важные компоненты платформы .NET Система типов данных CTS (Common Type System) содержит базовые,

не зависящие от языка программирования простые типы, которыми может манипулировать CLR.

Набор правил для языка программирования CLS (Common Language Specification), соблюдение которых обеспечивает создание на разных языках программ, взаимодействующих между собой.

В качестве основного инструмента разработки .Net-приложений предлагается интегрированная среда разработки MS Visual Studio,

РЕПОЗИТОРИЙ БГ

ПУ

Page 43: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

43

включающая: C#, Visual Basic .NET, Visual C++, Visual F# (начиная с 2010), Microsoft SQL Server и др. языки и компоненты

Версия Community бесплатная! Эволюция языка C: C C++ C# - до-диез Основные термины: Решение (solution), Проект (project), Пространство

имен (namespace), Сборка (assembly) С точки зрения программиста компилятор создает решение, с точки

зрения CLR - сборку, содержащую PE-файл. Решение содержит один или несколько проектов и ресурсы, необходимые этим проектам.

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

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

Проект - это основная единица, с которой работает программист. Он выбирает тип проекта. Система программирования создает шаблон (каркас) проекта в соответствии с выбранным типом. Проект состоит из классов, собранных в одном или нескольких пространствах имен (namespace).

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

Тема 2.2. Язык программирования C#. Основные понятия языка C#. Переменные. Операторы. Выражения.

Синтаксис. Ввод и вывод данных. Типы данных. Типы - как классы .Net Framework. Преобразования типов. Базовые алгоритмические конструкции: ветвление if, выбор switch, циклы while, for, foreach. Работа с целыми и вещественными числами. Классы Math, Random.

Консоль – совокупность стандартных устройств ввода-вывода (клавиатура, монитор). Для работы с консолью предназначен класс Console в пространстве имен System. Основные методы: Console.Write, Console.WriteLine, Console.Read, Console.ReadLine.

Пусть, в программе заданы: int d = 48; double y = 5.7412; string s = “бит"; В простейшем выводе на консоль можно использовать конкатенацию, например: Console.WriteLine("d = " + d + " " + s + ” y = " + y); Заметим, что в коде программы разделителем целой и дробной части десятичной дроби является точка, а при вводе и выводе – разделитель

РЕПОЗИТОРИЙ БГ

ПУ

Page 44: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

44

определяется локализацией операционной системы, т.е. для русифицированных ОС запятая!

Форматный вывод - использование в строке вывода местозаполнителей (placeholder), которые включают параметры формата и управляющие символы: { номер [ , к-во позиций ] [ : формат ] }

Номер элемента в списке вывода может идти не по порядку и повторяться. Количество позиций под выводимое значение может иметь знак “минус”, тогда оно выравнивается внутри отведенного места по левому краю, иначе - по правому. Формат вывода обозначается латинскими буквами, например: F или f - количество десятичных цифр дробной части числа (f2 – две). В строке вывода могут использоваться управляющие символы (они предваряются косой чертой - слешем), например: \n – переход на новую строку, \t – табуляция. Console.WriteLine(" d = {0,6} {1,-8} y ={2} \n d= {0,-6} {1,-8} y= {2:f2} ", d, s, y); Будет выведено: d = 48 бит y = 5.7412

d = 48 бит y = 5.74 Заметим, что выводимую строку в кавычках разрывать нельзя, а список переменных после закрывающих кавычек можно записывать в новой строке.

Для ввода данных с консоли используют методы: ReadLine - возвращает строку типа string и Read - возвращает код символа. Для дальнейшей работы требуется преобразование в нужный тип! Для этого используют: метод Parse, который выполняет разборку (парсинг) строки или класс Convert, который содержит методы преобразования в требуемый тип. char c = (char)Console.Read(); // ввод кода и преобразование в символ string st = Console.ReadLine(); // ввод строки int k = int.Parse(st); или int m = Convert.ToInt32(st); // преобразование в целое Console.WriteLine("строка st={0} число k={1} m={2}", st, k, m); // вывод double x = double.Parse(st); // преобразование в вещественный тип double y = Convert.ToDouble(st); // преобразование в вещественный тип Console.WriteLine("строка st={0} число x={1} y={2}", st, x, y); // вывод

Запись некоторых арифметических операций в языке C# отличается от принятой в математике: * умножение, / деление, % остаток от целочисленного деления.

Базовые алгоритмические конструкции: Алгоритмическая конструкция ветвление используется для выбора одной

из двух или нескольких альтернатив. Имеет два основных варианта. Развилка реализуется с помощью условного оператора if:

if (условие) { блок_1 } [ else { блок_2 } ]

Сначала проверяется условие. Если оно верно, выполняется блок_1, иначе выполняется блок_2.

РЕПОЗИТОРИЙ БГ

ПУ

Page 45: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

45

В условиях используют операции сравнения, которые в языке C# записываются так: == равно, != не равно, < , >, <=, >=; а также логические операции && “и”, || “или”, ! отрицание “не”.

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

При необходимости выбора из нескольких вариантов удобно использовать конструкцию switch ...case (переключатель.

Переключатель реализуется с помощью оператор выбора switch: switch (выражение)

{ case выражение_1: блок_1 ; break; case выражение_2: блок _2 ; break; ……………………………………….. case выражение_n: блок_n ; break; [ default: блоки_XXX; ] }

В случаях выбора и присваивания только одного значения из двух альтернативных вариантов вместо оператора if удобно использовать тернарный оператор условного присваивания (= ? : ):

= (условие) ? вариант1 : вариант2 ; При отладке программ часто используют случайные числа. Методы их

генерации описаны в классе System.Random. Для получения псевдослучайной последовательности чисел сначала создается экземпляр класса Random, затем методом Next(n1,n2) генерируется число в диапазоне [n1,n2], например:

Random rnd = new Random(); int n = rnd.Next(-20, 70); При необходимости многократного использования фрагмента

программного кода используют алгоритмическую конструкцию цикл (повторение).

Возможны несколько вариантов реализации циклов: • с предусловием - с помощью оператора while; • с постусловием - с помощью оператора do … while; • с параметром - с помощью оператора for; • перебора элементов массива - с помощью оператора foreach … in.

При реализации циклов часто используют следующие операции: ++ инкремент, -- декремент (увеличение и уменьшение на 1); присваивание с операциями +=, -=, *=, /=. Например, k++ означает k = k + 1, а вместо z = z - 5 пишут z -= 5 (без пробела между – и = ).

Используются также операторы передачи управления: break прерывает выполнение цикла и инициирует выход из блока; continue выполняет переход к следующей итерации внутри цикла; return завершает выполнение функции и передает управление в точку вызова;

Тема 2.3. Ссылочные типы данных. Массивы. Класс Array. Одномерные, многомерные, прямоугольные, сту-

пенчатые массивы. Формирование массивов. Работа с массивами.

РЕПОЗИТОРИЙ БГ

ПУ

Page 46: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

46

Сортировка и поиск в массивах. Операции с векторами и матрицами. Исключительные ситуации. Обработка исключений. Символы и строки. Класс Char. Работа с символами. Классы String и StringBuilder. Работа со строками. Регулярные выражения. Особенности использования регулярных выражений при обработке текстов. Потоки ввода-вывода. Работа с файлами. Запись и чтение. Классы StreamWriter и StreamReader.

Массив — именованная упорядоченная последовательность однотипных элементов, к каждому из которых можно обратиться по индексу. Для обращения к элементу массива после его имени указывается индекс элемента в квадратных скобках: w[4], z[i]. Во многих случаях индекс можно считать порядковым номером элемента. В C# начальный индекс = 0 (элементы нумеруются с нуля).

Виды массивов в C#: одномерные, многомерные (например, двумерные, или прямоугольные), массивы массивов (jagged - используются термины: ступенчатые, изрезанные…).

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

Элементы массивов значимых типов хранят значения, массивы ссылочных типов — ссылки на элементы. При объявлении массива его элементам присваиваются значения по умолчанию: 0 для значимых типов и null для ссылочных.

Размерность массива (количество элементов в массиве) задается при объявлении (выделении памяти) и не может быть изменена впоследствии. Размерность может задаваться числом или выражением, например:

int n = 5; string[] z = new string[2*n + 1]; Варианты и примеры описания одномерного массива:

int[] a; // описана только ссылка на массив, память под элементы не выделена; int[] b = new int[4]; // 4 элемента, значения равны 0; int[] d = new int[] { 61, 2, 5, -9 }; // размерность вычисляется; int[] c = { 61, 2, 5, -9 }; // new подразумевается;

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

Наиболее распространенные задачи работы с массивами: • поиск индекса и значений заданного элемента (например, первого,

последнего, положительного, отрицательного, максимального и т. п…); • определение количества, суммы, произведения, среднего

арифметического заданных элементов (например, положительных, отрицательных, от 2 до 8);

• сортировка и анализ возможных вариантов расположения элементов.

РЕПОЗИТОРИЙ БГ

ПУ

Page 47: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

47

Многие действия с массивами упрощаются при использовании алгоритмической конструкции перебора элементов массива:

foreach ( тип перем in имя_массива ) { тело_цикла }

где перем – имя локальной переменной цикла, которая по очереди принимает все значения элементов массива. Например: для массива int[] mas = { 24, 50, 18, 3, 16, -7, 9, -1 };

foreach ( int x in mas ) Console.WriteLine( x ); будут последовательно выведены все числа.

Все массивы в C# имеют общий базовый класс Array, определенный в пространстве имен System.

Некоторые свойства и методы класса Array: Length (свойство) - количество элементов массива (по всем размерностям); IndexOf (LastIndexOf) (статический метод) - поиск первого (последнего)

вхождения элемента в одномерный массив; Sort (статический метод) - упорядочивание элементов одномерного массива; Reverse - изменение порядка следования элементов на обратный.

Различают двумерные массивы двух видов: прямоугольные и ступенчатые. Примеры описания прямоугольных двумерных массивов: int[,] b = new int[2, 3]; // 2 строки, 3 столбца, элементы равны 0; int[,] c = new int[,] { {1, 2, 3}, {4, 5, 6} }; // размерность вычисляется; int[,] c = { {1, 2, 3}, {4, 5, 6} }; // new подразумевается; К элементу двумерного массива обращаются, указывая номер строки и столбца, на пересечении которых он расположен b[i,j] (рис 1.1). Первый индекс всегда воспринимается компилятором, как номер строки.

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

Примеры описания ступенчатых двумерных массивов: int[][] a = new int[3][]; // выделение памяти под ссылки на 3 строки Сокращенный вариант: int[][] a = { new int[5], new int[3], new int[4] }; Обращение к элементам ступенчатого массива: a[0][3], a[1][2], a[i][j].

Для работы с символами предназначен тип char. Ему соответствует базовый класс System.Char. В памяти переменная типа char представляется числовым кодом символа. Требуется преобразование в символ: char ch = 'A'; // в переменной ch код 65 int k = 100; с = (char)k; // преобразование в символ ’d’ с кодом

100

РЕПОЗИТОРИЙ БГ

ПУ

Page 48: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

48

При вводе символа с клавиатуры методом Read() и нажатии клавиши Enter в буфер попадает его код, а также коды нажатия клавиши (13) и конца строки (10). int k = Console.Read(); // в переменной код символа +13+10 char ch = (char) Console.Read(); // в переменной символ + 10+13

Лучше использовать метод ReadLine() и разборку строки: char s = char.Parse(Console.ReadLine()); // в переменной только символ

Некоторые методы класса Char: IsDigit(s), IsLetter(s), IsLower(s), IsUpper(s), IsPunctuation(s), IsControl(s) возвращают true, если символ s является соответственно: цифрой, буквой, строчной, заглавной буквой, знаком пунктуации, управляющим символом; GetNumericValue(s) возвращает числовое значение, если символ s цифра; ToLower(s), ToUpper(s) изменяют регистр букв (в строчные или заглавные); ToCharArray(str) преобразуют строку в массив символов.

Для работы со строками предназначены классы String и StringBuilder. Cтроки типа string в C# - неизменяемый тип данных. Методы, изменяющие содержимое строки, на самом деле создают новую копию строки, а неиспользуемые «старые» копии автоматически удаляются сборщиком мусора.

Примеры создания строк: string s; // переменная объявлена, инициализация отложена; string st = "строка"; // инициализация строковым литералом; string u = new string(“ “, 20); // создание с помощью конструктора;

Основные операции для работы со строками: присваивание = ; проверка на равенство ==; на неравенство !=; сцепление (конкатенация) +; обращение к символу строки по индексу [ k ]. Строки равны, если имеют одинаковое количество символов и совпадают посимвольно. Обращаться к отдельному символу строки по индексу можно только для получения значения, но не для его изменения. Длина строки (количество символов) определяется свойством Length. Пустая строка — экземпляр класса String, содержащий 0 символов: string s = "".

Приведем некоторые методы класса System.String: Compare, CompareTo - сравнение строк; Concat - конкатенация (сцепление) строк; Copy - создание копии строки; IndexOf(s), LastIndexOf(s) – определение позиции первого (последнего) вхождения подстроки или символа s; Substring(k1, k2) - выделение подстроки с позиции k1 по k2; Replace(s,z) - замена всех вхождений подстроки s новой подстрокой или символом z; Insert(k) - вставка подстроки с позиции k; Remove (k,n) - удаление n символов c позиции k; Trim(), TrimStart(),TrimEnd() - удаление концевых пробелов;

РЕПОЗИТОРИЙ БГ

ПУ

Page 49: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

49

Split(d) - разделение строки в массив строк по символу-разделителю d (или массиву символов); Join(d, mas) - слияние массива строк mas в единую строку с разделителем d; Format - форматирование с заданными спецификаторами формата.

Некоторые спецификаторы формата строк: C или c вывод значений в денежном (currency) формате; F или f вывод значений с фиксированной точностью; G или g формат общего вида; P или p вывод числа в процентном формате.

Для создания изменяемых строк предназначен класс StringBuilder, который определен в пространстве имен System.Text. Требует создания экземпляра! Позволяет изменять значение своих экземпляров. При создании экземпляра обязательно использовать new и конструктор, например: StringBuilder a = new StringBuilder(); StringBuilder c = new StringBuilder(100); StringBuilder b = new StringBuilder("Privet"); StringBuilder d = new StringBuilder("Privet", 100 );

Некоторые методы класса StringBuilder: Append(s) -добавление в конец строки; AppendFormat(…) - добавление форматированной строки; Insert(k) - вставка подстроки с позиции k; Remove (k, n) -удаление n символов c позиции k; Replace(s, z) - замена всех вхождений подстроки s новой подстрокой или символом z; ToString() - преобразование в строку типа string;. Capacity - получение или установка емкости буфера. Если устанавливаемое значение меньше текущей длины строки или больше максимального, генерируется исключение ArgumentOutOfRangeException; MaxCapacity - максимальный размер буфера.

Обмен данными с устройствами в C# выполняется с помощью подсистемы ввода-вывода (IO) и классов библиотеки .NET. Реализуется с помощью потоков.

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

Чтение (ввод - input) — передача данных с внешнего устройства в оперативную память, обратный процесс — запись (вывод - output).

Для работы с потоками и файлами необходимо подключать пространство имен System.IO. Выполнять обмен с внешними устройствами можно на уровне:

РЕПОЗИТОРИЙ БГ

ПУ

Page 50: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

50

• двоичного представления данных, байтов – класс FileStream; • текста (строк) - классы StreamWriter, StreamReader.

Доступ к файлам может быть: • последовательным – очередной элемент можно прочитать (записать)

только после предыдущего элемента; • произвольным или прямым – выполняется чтение (запись) произвольного

элемента по заданному адресу. Прямой доступ при отсутствии дальнейших преобразований обеспечивает

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

Для открытия файла на запись текста создается поток - объект класса StreamWriter. Параметрами конструктора служат имя файла imf и режим записи (true - дозапись, false - перезапись):

StreamWriter fw = new StreamWriter( imf, true);. Заметим, что символы, которые можно ошибочно принять за управляющие, в имени файла необходимо экранировать, например, слешами “D:\\work\\my.txt", или все имя целиком с помощью символа “собака” @“D:\work\my.txt".

Для дальнейшей работы используется имя (дескриптор) созданного объекта fw и стандартный метод вывода строки, например:

fw.WriteLine("Запись в файл"); По завершению работы поток вывода закрывается fw.Close();

Для открытия файла на чтение создается поток - объект класса StreamReader

StreamReader fr = new StreamReader(imf); Текст файла можно читать в строковую переменную s целиком (одной строкой):

string s = fr.ReadToEnd(); или string s = fr.ReadAllText(imf); а также построчно, и сразу выводить на консоль: string s; int i = 0;

while ( ( s = fr.ReadLine() ) != null ) Console.WriteLine( "{0} : {1}", ++i, s); Можно также читать строки файла в массив для дальнейшего вывода, например:

string[] stroki = fr.ReadAllLines(imf); foreach (string s in stroki) Console.WriteLine(s);

Пространство имен System.IO содержит классы File, FileInfo; Directory, DirectoryInfo для работы с файлами и каталогами (папками), например: создание, удаление, перемещение файлов и каталогов, получение свойств.

Приведем примеры некоторых методов: Create, CreateSubDirectory - создать каталог (подкаталог) по указанному

пути; MoveTo - переместить каталог и все его содержимое на новый адрес; Delete - удалить каталог со всем его содержимым; GetFiles - получить файлы текущего каталога, как массив объектов FileInfo;

РЕПОЗИТОРИЙ БГ

ПУ

Page 51: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

51

Тема 2.4. Основы объектно-ориентированного программирования. Понятие класса и объекта. Состав класса. Модификаторы элементов

класса. Поля. Методы. Статические классы. Статические поля и методы. Параметры методов. Вызов методов и способы передачи параметров. Перегрузка методов. Создание и инициализация объекта. Конструкторы. Организация доступа к полям класса. Свойства. Инкапсуляция. Сокрытие полей, создание свойств.

Принципы ООП. Реализация ООП в среде MS Visual Studio. Этапы разра-ботки программ. Рефакторинг. Визуальное представление классов. Основы UML. Конструирование классов с помощью визуального дизайнера.

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

В объектно-ориентированном программировании (ООП) предметная область представляется как совокупность взаимодействующих объектов. Реализуется событийная модель взаимодействия: объекты обмениваются сообщениями и, реагируя на них, выполняют определенные действия.

Основные принципы ООП: абстрагирование, инкапсуляция, полиморфизм, наследование.

Абстрагирование - выделение существенных для данной задачи характеристик объекта и отбрасывание второстепенных. Любой программный объект — это абстракция. Детали реализации объекта как правило скрыты, они используются через его интерфейс — совокупность правил доступа.

Инкапсуляция - сокрытие деталей реализации. Позволяет представить программу в укрупненном виде и защитить от нежелательных вмешательств.

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

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

Класс - обобщенное понятие, описывающее характеристики и поведение множества сходных объектов (называемых экземплярами или просто объектами этого класса). В программе класс является пользовательским

РЕПОЗИТОРИЙ БГ

ПУ

Page 52: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

52

типом данных и представляет собой блок кода, в котором описывавается одна сущность, например, модель реального объекта или процесса. Основными элементами класса являются данные и методы их обработки.

Заголовок описания класса обязательно содержит служебное слово class и Имя, которое по правилам языка C# начинается с заглавной буквы. В теле класса в фигурных скобках { ... } описываются его элементы. Тело может быть пустым.

[ модификаторы ] class Имя [ : предки ] { тело класса }

Перед заголовком класса могут указываться модификаторы (modifier), которые определяют некоторые общие свойства класса, а также доступность для других элементов программы: internal - внутренний (задается по умолчанию, можно не писать); public - общедоступный; private – закрытый; protected - защищенный (закрыт для посторонних, но доступен для наследников); static - статический; abstract – абстрактный; sealed – запечатанный (или бесплодный, не может иметь наследников).

Класс может содержать следующие функциональные элементы (members): • поля – переменные класса; • свойства - обеспечивают “умный” доступ к полям; • методы - определяют поведение класса; • конструкторы – служат для инициализации объектов (экземпляров

класса); • исключения – используются для обработки исключительных ситуаций;

Простейший пример - описание общедоступного класса с одним методом: public class Computer

{ public void ShowInfo() { Console.WriteLine( "RAM = 8 Гбайт" ); } }

Все классы .NET имеют общего предка — класс object, и организованы в единую иерархическую структуру. Классы логически группируются в пространства имен, которые служат для упорядочивания имен классов и предотвращения конфликтов имен: в разных пространствах имена могут совпадать. Пространства имен могут быть вложенными. Любая программа использует пространство имен System, в котором собрано множество стандартных классов и методов (смотри раздел 1).

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

РЕПОЗИТОРИЙ БГ

ПУ

Page 53: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

53

операции new, например: Computer comp1 = new Computer(“Asus”, 2048) или Computer comp2 = new Computer(“IBM”, 4096). При этом для каждого объекта выделяется отдельная область памяти для хранения его данных. Класс может содержать также и статические элементы, которые существуют в единственном экземпляре.

Содержащиеся в классе данные могут быть переменными или константами. Описанные в классе переменные называются полями класса. При описании полей обязательно указывают тип и имя (которое начинается с малой буквы).

[ модификаторы ] тип имя [ = начальное_значение ] Можно также указывать модификаторы, определяющие доступность, а

также задавать начальное значение (т.е. инициализировать поле). Все поля в C# сначала автоматически инициализируются нулем

соответствующего типа. Например, полям типа int присваивается 0, полям типа double - 0.0, а ссылкам на объекты — значение null). После этого полю присваивается значение, заданное при его явной инициализации.

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

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

[ модификаторы ] тип Имя( [параметры] ) { тело метода }

В теле метода в фигурных скобках { ... } описываются выполняемые этим методом действия. Тело метода может быть пустым.

Доступность и другие характеристики метода задаются модификаторами (смысл которых будет раскрываться по мере выполнения работ): public, private, protected, internal, abstract, virtual, override, new, static, sealed. Методы класса имеют доступ к его полям непосредственно или через свойства ( set – get ). Поскольку поля хранят данные, а методы выполняют действия, для облегчения чтения и понимания кода программы рекомендуется поля называть существительными, а методы глаголами.

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

РЕПОЗИТОРИЙ БГ

ПУ

Page 54: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

54

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

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

В языке С# возможны четыре типа параметров: • параметры-значения - для исходных данных метода; • параметры-ссылки (ref) - для изменения аргумента; • выходные параметры (out) - для формирования аргумента; • параметры-массивы (params) - для переменного количества аргументов.

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

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

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

Класс может иметь несколько конструкторов с разными параметрами для разных вариантов инициализации. Если не указано ни одного конструктора или некоторые поля не были инициализированы, полям значимых типов присваивается нуль (0 или 0.0), полям ссылочных типов — значение null. Конструктор, вызываемый без параметров, называется конструктором по умолчанию.

Перегрузкой методов (overloading) называется использование методов с одним и тем же именем, но различным количеством и типами параметров. Компилятор по типу фактических параметров сам определяет, какой именно метод требуется вызвать. Это называется разрешением (resolution)

РЕПОЗИТОРИЙ БГ

ПУ

Page 55: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

55

перегрузки. Перегрузка методов – одна из простейших реализаций полиморфизма.

Для защиты от нежелательных вмешательств доступ к полям и методам классов приходится закрывать или ограничивать (например, с помощью модификаторов private, protected). Для организации управления доступом к полям класса служат свойства (properties). Как правило, свойство определяет методы доступа к закрытому полю и имеет следующий синтаксис:

[ модификаторы] тип Имя { { get код_доступа } // получение значения

{ set код_доступа } } // установка значения В C# свойство имеет то же имя, что соответствующее скрытое поле,

только первая буква заглавная, например: поле private int age , свойство public int Age.

При обращении к свойству автоматически вызываются указанные в нем блоки чтения get и установки set. Может отсутствовать либо часть get, либо set, но не обе одновременно. Если отсутствует set, свойство доступно только для чтения (read only), если отсутствует get - только для записи (write only).

Технологии визуального объектно-ориентированного проектирования программ основаны на использовании принципов унифицированного языка моделирования UML (Unified Modeling Language), который представляет собой язык графического описания модели проектируемой системы, определения её структуры и поведения.

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

Основные элементы на диаграммах классов изображаются прямоугольниками и линиями (отношения). Стрелка, например, изображает наследование. Прямоугольник (класс) содержит секции, отражающие его состав. Следует подчеркнуть, что UML – это абстрактный язык описания и графического представления системы. Его реализация в Microsoft Visual Studio использует привычные для программиста обозначения и термины. На рисунке приведен пример диаграммы простейших классов в среде Visual Studio и описания класса Computer на языке C#.

Система Visual Studio позволяет автоматизировать процесс

проектирования классов. Она содержит набор инструментов визуального

РЕПОЗИТОРИЙ БГ

ПУ

Page 56: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

56

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

Тема 2.5. Наследование. Полиморфизм. Разновидности наследования. Классическое наследование. Модель

включения – делегирования. Композиция и агрегация. Стратегии наследования. Виртуальные методы. Реализации полиморфизма. Переопределение методов. Использование виртуальных методов. Раннее и позднее связывание. Параметризованные типы. Бесплодные классы. Абстрактные классы. Иерархия классов. Класс object. Интерфейсы. Реализации интерфейсов. Стандартные интерфейсы .Net. Делегаты. События. Достоинства и недостатки ООП.

Наследование (inheritance) - это процесс приобретения состояния и поведения одного класса (называемого базовым или предком) другим классом (называемым производным, наследником или потомком). Для любого класса, кроме бесплодного (модификатор sealed), можно задать классы-наследники, в которых повторяется и дополняется состояние и поведение предка.

Синтаксис объявления производного класса (потомка): [ модификаторы ] class Имя [ : класс-предок, интерфейсы…] { тело класса } Класс в C# может иметь произвольное количество потомков и только

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

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

РЕПОЗИТОРИЙ БГ

ПУ

Page 57: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

57

Фрагменты программного кода для этих иерархий: class Computer { ... } // базовый класс class Animal { ... } class Notebook : Computer // потомки class Cat : Animal { ... } { ... } class Netbook : Notebook class Dog : Animal { ... } { ... } Возможны различные стратегии наследования:

• функционал потомка остается неизменным; • функционал методов базового класса скрывается

и замещается в производном класса (модификатор new); • функционал методов базового класса, называемых виртуальными

(модификатор virtual), переопределяется в производном классе (модификатор override). Отметим важные особенности классического наследования:

• Наследуются поля, методы и свойства класса. • Конструкторы не наследуются!

Класс - потомок должен иметь собственные конструкторы. • Объекту базового класса можно присвоить объект производного,

например: public class Notebook : Computer { … }

Computer comp = new Notebook( … ); Таким образом, методы, которые у потомков должны реализовываться

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

Отметим, что элементы базового класса с модификатором private в классе-наследнике недоступны, для них следует использовать модификатор protected, а для самого базового класса public или internal.

Абстрактные (abstract) классы предназначены для представления общих понятий, которые предполагается конкретизировать в производных классах. Абстрактный класс задает общее поведение для всей иерархии, при этом его

РЕПОЗИТОРИЙ БГ

ПУ

Page 58: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

58

методы могут не выполнять никаких действий. Такие методы называются абстрактными, они имеют пустое тело и объявляются с модификатором abstract.

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

Абстрактный класс не разрешает создавать свои экземпляры. Он служит только для порождения потомков. Как правило, в нем лишь объявляются методы, которые каждый из потомков будет реализовывать по-своему. Это бывает полезным, если использовать переопределение методов базового класса в потомках затруднительно или неэффективно. Например, имеет смысл объявить класс Tovar абстрактным. В нем задать общие для всех товаров поля: name (название), price (цена), summa (стоимость). А вот конкретные характеристики для каждого вида товаров и соответствующих им классов–потомков будут разные: для класса Book (книги) это количество экземпляров (поле kvo), для класса Сandy (конфеты) – это граммы (поле ves), для класса Tkany (ткани) - это метры (поле dlina). Метод Calc (расчет) будет для каждого товара свой. Поэтому в базовом классе его надо объявить абстрактным (из-за чего и класс Tovar приходится делать абстрактным), а у каждого потомка сделать конкретные реализации. В то же время базовый абстрактный класс может содержать и обычные методы, например PrintSum (печать суммы), который наследуются всеми потомками без изменений.

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

Синтаксис интерфейса аналогичен синтаксису класса: [ модификаторы ] interface Имя [ : предки ]

{ тело_интерфейса } Тело интерфейса составляют только абстрактные методы, шаблоны

свойств, а также события. Элементы интерфейса по умолчанию общедоступны. Интерфейс не может иметь обычных методов — все элементы интерфейса должны быть абстрактными.

В C# поддерживается одиночное наследование для классов и множественное — для интерфейсов. Это позволяет придать производному классу свойства нескольких базовых интерфейсов, реализуя их по своему усмотрению. Сигнатуры методов в интерфейсе и реализации должны полностью совпадать. Для реализуемых элементов интерфейса в классе следует указывать спецификатор public. К этим элементам можно обращаться как через объект класса, так и через объект типа соответствующего интерфейса.

Интерфейс можно представлять как “контракт” о реализации объявленных в базовом классе методов потомками. Таким образом,

РЕПОЗИТОРИЙ БГ

ПУ

Page 59: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

59

наследование интерфейса заключается в его реализации (implementation) потомками. Основная идея использования интерфейса состоит в том, чтобы к объектам разных классов можно было обращаться одинаковым образом. Каждый класс может определять элементы интерфейса по-своему. Так реализуется полиморфизм: объекты разных классов по-разному реагируют на вызовы одного и того же метода. Заметим, что в библиотеке классов .NET определено множество стандартных интерфейсов, декларирующих желаемое поведение объектов.

РАЗДЕЛ 3. РАЗВИТИЕ СИСТЕМ, ЯЗЫКОВ И ТЕХНОЛОГИЙ

ПРОГРАММИРОВАНИЯ Тема 3.1. Проектирование приложений с графическим интерфейсом в

среде MS Visual Studio. Объектно-событийная модель работы Windows-приложения.

Проектирова-ние Windows-приложений. Графический интерфейс. Элементы управления Windows.Forms. Класс Control. Свойства, методы, события. Класс Form. Свой-ства, методы, события. События мыши и клавиатуры. Этапы создания Windows-приложения. Структура проекта. Разделение визуального представления и функциональности. Использование элементов TextBox, Button, Label, CheckBox, RadioButton, Picture Box, TrackBar, NumerickUpDown, ListBox, ComboBox. Основные свойства и методы. Обработка событий.

Структура программы, управляемой событиями:

Библиотека классов .NET включает пространство имен

System.Windows.Forms, содержащее огромное количество типов строительных блоков Windows-приложений. Приведем лишь наиболее используемые элементы с указанием некоторых свойств и событий. Form – форма, служит контейнером, на который устанавливаются все элементы; Button – кнопка (служит для запуска приложения, отдельной операции или процесса); Label - надпись (метка) служит для вывода текста; основное свойство Text; TextBox - поле ввода-вывода текста; основное свойство Text, событие TextChanged; CheckBox - флажок, включатель; свойство Checked, событие CheckedChanged;

Инициализация

Завершение

Подпрограмма 1

...

Подпрограмма n

Обработчик событий

События

РЕПОЗИТОРИЙ БГ

ПУ

Page 60: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

60

RadioButton – переключатель, выбор одного варианта из нескольких; свойство Checked, событие CheckedChanged; PictureBox – контейнер для изображений (bmp, jpg, gif, png…); свойства: Image - объект типа Image, Visible - видимость (true - false), SizeMode – позиционирование (Normal, StretchImage, Zoom, AutoSize).

Базовым классом (предком) для всех элементов управления является класс Control, который позволяет задавать поведение и свойства любого объекта графического интерфейса пользователя, например: BackColor, ForeColor - цвет фона и переднего плана; BackgroundImage - фоновый рисунок; Text – текст (строковые данные, ассоциированные с элементом); Font - шрифт; Cursor - вид курсора над элементом; Состояние элемента: Enabled - доступность, Focused - фокус, Visible - видимость (значения true - false); Opacity - прозрачность элемента (0.0 прозрачный, 1.0 непрозрачный).

Основные события элементов управления: Click, DoubleClick -одинарный или двойной щелчки мышью; MouseDown, MouseUp - нажатие или отпускание кнопки мыши; MouseMove - перемещение мыши; MouseHover - мышь над элементом; MouseEnter, MouseLeave - мышь входит или покидает некоторую область; KeyDown, KeyUp - нажатие или отпускание любой клавиши; KeyPress - нажатие клавиши, имеющей ASCII-код; DragDrop, DragEnter, DragLeave, DragOver –события перетаскивания.

Положение, размеры и поведение элементов относительно контейнеров, в которые они вложены (например, Form, Panel, GroupBox, PictureBox), задается свойствами позиционирования. Наиболее важные из них: Location, Top, Left, Bottom, Right, - положение элемента; Size, Width, Height - размеры элемента, Anchor - привязка стороны элемента к сторонам контейнера. Если растягивать контейнер, то вместе с ним будет растягиваться и вложенный элемент (рис. 3.7а). По умолчанию это свойство равно Top, Left. Dock - прикрепление элемент к определенной стороне контейнера (рис. 3.7 б). По умолчанию имеет значение None.

Библиотека классов .NET содержит элементы, которые можно использовать для динамического интерактивного управления параметрами Windows-приложений, что позволяет обойтись без использования текстового ввода. Приведем примеры таких элементов и событий, позволяющих отслеживать изменения их свойств. Элемент TrackBar позволяет с помощью ползунка изменять числовые

значения свойства Value типа int из диапазона Minimum, Maximum. Событие Scroll.

РЕПОЗИТОРИЙ БГ

ПУ

Page 61: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

61

NumerickUpDown позволяет изменять значение Value числового типа decimal (десятичная дробь с разделителем, заданным локализацией операционной системы, например, запятая в русскоязычных ОС). Событие ValueChanged. Приращение Increment может как целым, так и дробным. Отображаемое количество десятичных знаков задается DecimalPlaces (по умолчанию 0).

Следующие три элемента предназначены для выбора из списков. DomainUpDown возвращает строку (свойства Text типа string).

Событие TextChanged. ListBox (список) и ComboBox (поле с выпадающим списком) возвращают

индекс (свойство SelectedIndex). Событие SelectedIndexChanged; Система Microsoft Visual Studio содержит удобные средства визуальной

разработки Windows-приложений, которые позволяют в интерактивном режиме конструировать программы с графическим интерфейсом, используя готовые компоненты и шаблоны.

В процессе разработки выделяют два основных этапа: • Визуальное проектирование - создание внешнего облика приложения,

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

• Программирование логики работы приложения путем написания методов обработки событий. Рассмотрим подробнее этапы разработки и структуру Windows-

приложения. • После запуска MS Visual Studio выбирается тип Приложение Windows

Forms (Windows Forms Application) и шаблон Visual C#. Задается имя и расположение проекта и решения, например, myWin.

• В результате открывается окно с формой в режиме конструктора (Design) (рис. 3.1). Слева по умолчанию располагается Панель элементов (Toolbox), а справа Обозреватель решений (Solution Explorer). При отсутствии их можно вызвать с помощью меню Вид (View).

• Требуемые элементы (например, кнопка) перетаскиваются мышью с Панели элементов на форму (рис. 3.2). Корректируется их расположение и размеры. На панели Свойства задаются их характеристики (имя, внешний вид, поведение). Необходимые значения вводятся или выбираются из имеющихся в списке вариантов. Значок около имени свойства означает, что это свойство содержит другие, которые становятся доступными после щелчка на значке. При размещении элемента на форме автоматически создается экземпляр соответствующего класса и шаблон программного кода. Проект Windows-приложения включает ряд файлов. Его структура

отображается в окне Обозреватель решений. • Файл Program.cs содержит класс Program. Его метод Main является

точкой входа, обеспечивает запуск приложения Application.Run(new Form1()) и задает визуальный стиль (рис. 3.3). Для других целей при

РЕПОЗИТОРИЙ БГ

ПУ

Page 62: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

62

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

объектов, методов, а также обработчиков событий находится в классе Form1, который для удобства программирования разделен на две части (модификатор partial - частичный). • Файл Form1.cs содержит часть класса Form1 - конструктор с вызовом

метода инициализации компонентов InitializeComponent() и обработчики событий (рис. 3.4). Именно в обработчиках событий программируется логика работы приложения.

• Файл Form1.Designer.cs в области #region … #endregion содержит код метода InitializeComponent(), автоматически создаваемый конструктором форм при установке элементов и регистрации событий (рис. 3.5). Логика работы Windows-приложения основана на объектно-событийной

модели. Определение поведения объектов начинается с принятия решений, какие действия должны выполняться при нажатии кнопки, вводе текста, перемещении курсора мыши, выборе пунктов меню, т.е. по каким событиям будут выполняться действия, реализующие функциональность программы. Для каждого класса определен свой набор событий, на которые он может реагировать. Нужное событие для выбранного объекта сначала необходимо зарегистрировать в методе InitializeComponent() (файл Form1.Designer.cs) или даже непосредственно в конструкторе формы (файл Form1.cs), а затем запрограммировать ответные действия в обработчике этого события.

Регистрацию события (подписку на событие) выполняют на вкладке События (Events) панели Свойства двойным щелчком мыши на поле, расположенном справа от имени соответствующего события (рис. 3.6). В методе InitializeComponent() (файл Form1.Designer.cs) появляется строка:

this.button1.Click += new System.EventHandler(this.button1_Click); в файле Form1.cs автоматически создается шаблон соответствующего метода – обработчика (его имя формируется из имен объекта и события), в который предполагается вводить необходимый программный код. Обработчику передаются два параметра – объект-источник события, и тип события.

private void button1_Click(object sender, EventArgs e) { ... }

Тема 3.2. Создание приложений Windows.Forms. Разработка простого текстового редактора. Разработка

графического интерфейса. Организация меню. Диалоговые окна. Работа с папками и файлами. Работа с датой и временем. Класс Timer. Использование таймера. Анимация. Работа с базами данных.

Работа с графикой. GDI. Классы и методы рисования. Класс Graphic. Классы Pen, Brush. Рисование фигур. Разработка простого графического редактора. Обработка событий мыши и клавиатуры.

Разработка Windows-приложений в системе MS Visual Studio сводится к визуальному конструированию графического интерфейса в интерактивном

РЕПОЗИТОРИЙ БГ

ПУ

Page 63: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

63

режиме и программирование логики работы приложения путем написания методов обработки событий.

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

Неотображаемый на форме компонент Timer предназначен для запуска периодически повторяющихся действий. Свойство Interval задает период (в миллисекундах), с которым будет повторяться событие Tick. При установке свойства Enabled = true таймер включается вместе с запуском приложения. Метод Start() запускает, а Stop() останавливает таймер.

Типичные примеры использования таймера - часы и секундомер (вывод времени и даты), а также анимация (имитация плавного изменения положения, размеров и формы объектов).

Основные компоненты для построения меню: ToolStrip - панель инструментов (базовый класс - контейнер). На ней размещают элементы – объекты ToolStripItem. MenuStrip - полоска меню (наследник ToolStrip). StatusStrip - строка состояния.

Основные свойства элементов меню: вид, размеры, позиционирование (Dock, LayoutStyle), видимость (ShowItemToolTips).

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

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

Каждое приложение имеет одно главное окно. Напомним, что класс главного окна приложения содержит точку входа в приложение (статический метод Main). При закрытии главного окна приложение завершается.

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

Наиболее часто используют Окно сообщений (класс MessageBox), которое вызывается методом Show() и может принимать ряд параметров (рис 3.18): text - текст выводимого сообщения, caption - текст заголовка окна сообщения, icon - значок окна сообщения, buttons - используемые кнопки.

Это окно может иметь от 1 до 3 кнопок (рис. 3.18). Количество и назначение задается значением свойства MessageBoxButtons: OK – одна

РЕПОЗИТОРИЙ БГ

ПУ

Page 64: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

64

кнопка OK; OKCancel - две кнопки (OK и Отмена); YesNo - две кнопки (Да и Нет); YesNoCancel - три кнопки (Да, Нет, Отмена).

Метод Show() возвращает объект DialogResult, позволяющий узнать, какая кнопка в окне была нажата.

Вид значков в соответствии с содержанием сообщения можно задавать значением свойства MessageBoxIcon: Information - буква i в кружке; Error - белый знак "X" в красном круге; Warning - восклицательный знак в желтом треугольнике; Question: вопросительный знак в круге.

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

Приведем примеры таких диалогов. ColorDialog - выбор цвета (рис 3.19 а). Возвращает выбранный цвет: colorDialog1.ShowDialog(); this.BackColor = colorDialog1.Color FontDialog - выбор шрифта (рис 3.19 б). Возвращает выбранный шрифт: fontDialog1.ShowDialog(); textBox1.Font = fontDialog1.Font;

Диалоги OpenFileDialog (открытие файла) и SaveFileDialog (сохранение файла) возвращают дескрипторы выбранного файла, например: string fn = openFileDialog1.FileName; или string fn = saveFileDialog1.FileName;

Для работы с графикой в среде .NET предназначен класс Graphics пространства имен System.Drawing. Для вывода графических примитивов (линий, геометрических фигур), текста, растровых изображений необходимо создать объект класса Graphics, например, методом CreateGraphics:

Graphics g = this.CreateGraphics(); После создания объекта типа Graphics можно применять его свойства и

методы. При этом наиболее часто используются объекты и методы классов Pen (рисование линий и геометрических фигур), Brush (заполнение областей), Font (работа с текстом), Color (работа с цветом).

Для интерактивного управления свойствами графических объектов удобно использовать манипулятор мышь. События мыши MouseDown, MouseUp, MouseMove и другие работают в сочетании с делегатом MouseEventHandler.

Например, при регистрации события движения мыши по форме в методе InitializeComponent() (в файле Form1.Designer.cs) появляется строка:

MouseMove += new MouseEventHandler(Form1_MouseMove); При этом в файле кода Form1.cs создается шаблон метода–обработчика, которому передаются два параметра: объект-источник события и объект класса MouseEventArgs, который содержит информацию о событии, например: X и Y - координаты указателя мыши; Button - нажатая кнопка (левая, правая); Clicks - количество нажатий и отпусканий кнопки мыши; Delta - счетчик (со знаком) щелчков поворота колесика.

РЕПОЗИТОРИЙ БГ

ПУ

Page 65: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

65

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

public void Form1_MouseMove(object sender, MouseEventArgs e) { Text = string.Format("координаты: x={0}, y={1}", e.X, e.Y); } Для управления графическими объектами нередко используют и

клавиатуру. События клавиатуры KeyUp, KeyDown работают в сочетании с делегатом KeyEventHandler. Например, при регистрации события нажатия клавиши записывается строка

KeyDown += new KeyEventHandler(Form1_KeyUp); Создается шаблон метода–обработчика, которому передаются: объект-источник события и объект класса KeyEventArgs, который содержит информацию о событии, например: KeyCode - код клавиши для событий KeyDown или KeyUp; Modifiers -какие модифицирующие клавиши (Shift, Alt, Control) были нажаты; Handled - было ли событие полностью обработано. Эту информацию можно использовать в обработчике, например:

private void Form1_KeyDown (object sender, KeyEventArgs e) { MessageBox.Show(e.KeyCode.ToString(), “клавиша нажата!"); }

Тема 3.3. Создание приложений на основе Windows Presentation Foundation.

Основы XAML. Унификация интерфейсов. Элементы управления. Графические возможности WPF. Работа со шрифтами. Работа с растровой графикой. Анимация. Звук и видео. Использование возможностей среды MS Visual Studio С# для разработки образовательных средств. Разработка простых компьютерных моделей и демонстраций. Системы тестирования.

Windows Presentation Foundation (WPF) – система построения клиентских

приложений Windows с визуально привлекательными возможностями взаимодействия с пользователем, графическая подсистема в составе .NET Framework (с версии 3.0), использующая язык XAML. С помощью WPF можно создавать как автономные приложения, так и запускаемых в браузере.

WPF предоставляет развитые средства для создания GUI: элементы управления, привязку данных, двумерную и трёхмерную графику, анимацию, стили, шаблоны, документы, текст, мультимедиа, а также язык XAML (eXtensible Application Markup Language), В основе WPF лежит векторная система визуализации, не зависящая от разрешения устройства вывода и созданная с учётом современного графического оборудования. За счёт использования аппаратного ускорения графики через DirectX производительность WPF выше по сравнению с Windows Forms.

Значительная часть функциональности WPF может быть выражена либо в виде обычного кода на языке С#, либо в виде XAML-документа.

РЕПОЗИТОРИЙ БГ

ПУ

Page 66: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

66

XAML (eXtensible Application Markup Language) — расширяемый язык разметки для декларативного программирования WPF-приложений.

XAML используется как язык разметки пользовательского интерфейса: - для определения элементов пользовательского интерфейса, - задания свойств, - привязки данных, - поддержки событий.

Логика приложения управляется процедурным кодом (С#, VB, JavaScript и т.д.). Код процедурного языка может быть размещён непосредственно в файле XAML или же назначен при сборке проекта. XAML может использоваться как автономных, так и в запускаемых в

браузере веб- приложениях. XAML включает: четыре основные категории элементов : - панели, -

элементы управления, - графические фигуры, - элементы, связанные с документом.

XAML файлы можно создавать и редактировать при помощи инструментов визуального конструирования, таких как: Microsoft Expression Blend, Microsoft Visual Studio, WPF visual designer. Также, их можно создавать при помощи текстовых и некоторых графических редакторов. Все созданное или реализованное в XAML может быть выражено при помощи традиционных .NET языков, например, C#. XAML представляет собой язык декларативного описания интерфейса, основанный на XML. Реализована модель разделения кода и дизайна, позволяющая кооперироваться программисту и дизайнеру. Есть встроенная поддержка стилей элементов, а сами элементы легко разделить на элементы управления (ЭУ) второго уровня, которые, в свою очередь, разделяются до уровня векторных фигур и свойств/действий. Это позволяет легко задать стиль для любого элемента, например, Button (кнопка). Для работы с WPF требуется любой .NET-совместимый язык, например: C#, F#, VB.NET, C++, Ruby, Python, Delphi (Prism), Lua и другие… Для программирования может быть использована система Visual Studio, а для дизайна Expression Blend, что позволяет создавать свои элементы управления, стили, анимацию и т п. , не прибегая к ручному редактированию XAML. WPF предоставляет широкий спектр возможностей по созданию интерактивных приложений:

Привязка данных - гибкий механизм, который позволяет через расширения разметки XAML связывать различные данные (от значений свойств элементов управления до общедоступных свойств, реализующих поля базы данных через Entity Framework). Привязка данных представлена классом Binding, который в свою очередь унаследован от MarkupExtension, что позволяет использовать привязки не только в коде, но и в разметке Стили позволяют создавать стилевое оформление элементов и, как правило, используются только в разметке: <Button> <Button.Style>

РЕПОЗИТОРИЙ БГ

ПУ

Page 67: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

67

<Style TargetType="Button"> <Setter Property="FontSize" Value="20"/> <Setter Property="Foreground" Value="LimeGreen"/> </Style> </Button.Style> </Button> Если стиль задается в ресурсах (например, в словаре ресурсов), то можно использовать атрибут x:Key для указания уникального ключа. Затем в элементе управления, к которому необходимо применить стиль, нужно использовать расширение разметки StaticResource для связывания с этим стилем. Если использовать этот прием, то стили не будут нагромождать разметку.

Шаблоны элементов управления позволяют менять графическое оформление элементов. Представлены классом ControlTemplate.

В отличие от стилей, можно менять не только графическое представление элемента, но и его структуру. При этом шаблон элемента управления задается через свойство Template.

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

элементах управления задается через свойство DataContext, а в списковых через ItemsSource). Сам шаблон данных представлен классом

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

Ресурсы позволяют объединять шаблоны, стили, кисти, анимацию и многие другие интерактивные элементы, что существенно упрощает работу с ними. Ресурсы задаются в свойстве Resources класса FrameworkElement, от которого унаследованы все элементы управления, панели компоновки и даже класс Application. Это позволяет создавать многоуровневую систему ресурсов: • ресурсы внутри объекта — действительны только для этого объекта; • ресурсы внутри панели компоновки (например Grid)

позволяет задать границу контекста ресурсов на уровне этой панели; • ресурсы внутри окна Window — если в приложении используется

несколько окон, то ресурсы одного окна не будут доступны ресурсам другого окна

• ресурсы приложения доступны в любой месте приложения (как правило задаются в отдельном словаре ресурсов)

WPF представляет обширный, масштабируемый и гибкий набор графических возможностей: • Графика, не зависящая от разрешения и устройства.

Основной единицей измерения в графической системе WPF является аппаратно-независимый пиксель, который составляет 1/96 часть дюйма независимо от фактического разрешения экрана.

РЕПОЗИТОРИЙ БГ

ПУ

Page 68: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

68

• Дополнительная поддержка графики и анимации. Программирование графики упрощается за счет автоматического управления анимацией. Разработчик не должен заниматься обработкой сцен анимации, циклами отрисовки и интерполяцией

• Аппаратное ускорение. Графическая система WPF максимально использует возможности графического оборудования, чтобы уменьшить использование ЦП.

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

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

РЕПОЗИТОРИЙ БГ

ПУ

Page 69: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

69

ПРАКТИЧЕСКИЙ РАЗДЕЛ

1. СТРУКТУРНО-МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ Работа 1.1. Базовые конструкции структурного программирования:

следование Цель: формирование навыков реализации линейных алгоритмов с помощью

программы на языке Паскаль.

Пример 1. Рассмотрим программу для вычисления значений выражений:

program umn; var a,b,с,d: real; BEGIN writeln('введите a d'); readln(a,d); b:=a*a*а; c:=sin(a)+sqrt(abs(d)); writeln('Ответ b= ', b:6:2, ' c= ', c:8:1); END.

Задания для самостоятельной работы 1. Дано действительное число а. Не пользуясь никакими другими

арифметическими операциями, кроме умножения, получить: а4, а12 ,а28 за шесть операций.

2. Определить периметр правильного n-угольника, описанного около окружности радиуса r=50.

3. Определите значения следующих выражений (значения y и z задайте произвольно). Результат выведите на экран в форматах: а) а; б) а : w; в) a : w : d.:

РЕПОЗИТОРИЙ БГ

ПУ

Page 70: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

70

4. Определить время, через которое встретятся два тела, равноускоренно

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

5. Треугольник задан длинами сторон. Найти: длины медиан. Работа 1.2. Базовые конструкции структурного программирования:

альтернатива (ветвление) Цель: формирование навыков реализации ветвящихся алгоритмов с помощью

программы на языке Паскаль.

Пример 1. Решите уравнение вида ах = в. program urav; var a,b,x:real; BEGIN writeln(‘введите значения а и в’); readln(a,b); if a<>0 then begin x:=b/a; writeln(‘Ответ ‘,x:5:2); end; if (a=0) and (b=0) then writeln(‘любое число’); if (a=0) and (b<>0) then writeln(‘нет решений’); END.

Задания для самостоятельной работы

1.Запишите и выполните программу на вычисления значений функций. Число х вводите с клавиатуры.

2. Даны три действительные числа. Возведите в квадрат те из них, значения которых неотрицательны.

3. Заданы целые числа x, y, z. Вычислите значение выражения:

РЕПОЗИТОРИЙ БГ

ПУ

Page 71: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

71

4. Дано действительное число h. Выяснить, имеет ли уравнение ах2 + bx + с = 0 действительные корни, если

Если действительные корни существуют, то найти их. В противном случае ответом должно служить сообщение, что действительных корней нет.

6. Составьте программу вывода на экран различным цветом оценки Ос, которую получил ученик и текста: "Молодец.", если Ос=5; "Хорошо.", если Ос=4; "Удовлетворительно.", если Ос=3; "Плохо.", в остальных случаях. Используйте команду case.

Работа 1.3 Базовые конструкции структурного программирования: цикл Цель: формирование навыков реализации циклических алгоритмов (цикл ‘для’)

с помощью программы на языке Паскаль.

Пример 1. Составьте программу вычисления значения выражения:

program sum1; const р=10; var n:integer; s,f,f1,f2,t:real;

РЕПОЗИТОРИЙ БГ

ПУ

Page 72: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

72

BEGIN s:=0; f:=1; f2:=1 for n:=1 to p do begin f:=f*n; f1:=f*(n+1)*(n+2); f2:=f2*(2*n-1)*(2*n); t:=(sin(f)+ехр(1/n))/(cos(f1)+f2); s:=s+t; end; wrinteln(‘s= ‘,s:8:3); END.

Задания для самостоятельной работы

1. Задано натуральное число n. Вычислите:

2. Задано натуральное число n. Вычислите:

3.Задано натуральное число n и действительное число х. Вычислите:

4.Определите значение:

5.Определите значение суммы произведений:

6. Вычислите:

7.Задано натуральное число n . Составьте программу вычисления значения:

8. Составьте программу и определите сумму ряда:

РЕПОЗИТОРИЙ БГ

ПУ

Page 73: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

73

Работа 1.4. Базовые конструкции структурного

программирования: цикл Цель: формирование навыков реализации циклических алгоритмов (цикл

‘пока’) с помощью программы на языке Паскаль.

Пример 1. С помощью цикла repeat …until (цикла с постусловием) вычислить значение функции z=x2+y2, где x=x0(hx)xn, y=y0(hy)yn.

program zadacha1; var x,x0,hx,xn,y,y0,hy,yn,z:real; BEGIN writeln('vvedite x0 hx xn'); readln(x0, hx, xn); writeln('vvedite y0 hy yn'); readln(y0, hy, yn); x:=x0; while x<=xn do begin y:=y0; while y<=yn do begin z:=x*x+y*y; writeln('x=',x:7:4, ' y=',y:7:4,' z=',z:7:4); y:=y+hy; end; x:=x+hx; end; END.

Задания для самостоятельной работы 1. Определите произведение первых n отрицательных двухзначных

чисел, которые делятся на 5, без использования команды ветвления. 2. Организуйте цикл и выведите на экран таблицу значений функции

y=f(x). Рядом с формулой показаны границы изменения аргумента х, а в скобках указано значение шага изменения х (hx):

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

х=х0(hx)xn.

РЕПОЗИТОРИЙ БГ

ПУ

Page 74: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

74

4. С помощью операторов цикла repeat ...until составьте программу

определения значений функции для каждого из действительных значений х и у функции z = f(x,y), где х=х0(hx)xk, y=y0(hy)yk. Значения выведите в виде таблицы в формате с тремя знаками после запятой:

5. Задано действительное число х. Определите с точностью 0,0001

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

6. Для каждого значения х, промежутки и шаг изменения которого

указаны справа от формулы, вычислите соответствующее значение суммы.

7. Определите значение суммы с точностью 0,0001 (справа от каждой

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

Работа 1.5. Алгоритмы целочисленной арифметики.

Цель: формирование навыков решения задач с использованием алгоритмов

целочисленной арифметики.

Пример 1. Алгоритм Евклида для натуральных чисел. program nod; var a,b,m,n,f:integer;

РЕПОЗИТОРИЙ БГ

ПУ

Page 75: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

75

BEGIN writeln('vvedite a b '); readln(a,b); m:=a; n:=b; while m<>n do if m>n then m:=m-n else n:=n-m; f:=m; writeln('HOD(' , a, ' ,' , b, ')=' ,f); END.

Задания для самостоятельной работы 1. Двузначное число второе больше суммы своих цифр, а квадрат этой

суммы равен утроенному первоначальному числу. Найдите это число. 2. Найдите сумму всех постых делителей данного натурального числа n,

кроме 1 и самого числа. 3. Найти сумму двух правильных дробей. 4. Дано натуральное число n. Переставить первую и последнюю цифры

числа n. 5. Составьте программу проверки умения складывать двузначные числа. Работа 1.6. Графические возможности языка Pascal

Цель: формирование навыков создания программ для отображения на экране

графических объктов.

Пример 1. Напишите программу на языке Паскаль для создания следующего изображения.

program zadacha; uses graphABC; var i: byte; BEGIN

SetWindowSize(640,480); SetPenWidth(3); SetPenStyle(psSolid); SetPenColor(clBlack); line(280,40,340,40); line(380,40,440,40); ellipse(290,60,430,150); circle(340,90,10);

РЕПОЗИТОРИЙ БГ

ПУ

Page 76: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

76

circle(380,90,10); ellipse(290,150,430,300); line(270,170,320,190); line(320,190,320,230); line(320,230,270,170); line(400,190,450,170); line(340,40,360,80); line(380,40,360,80); line(400,190,400,230); line(400,230,450,170); line(390,290,390,310); line(390,310,410,310); line(330,290,330,310); line(330,310,310,310); FloodFill(380,90,clBlack); FloodFill(340,90,clBlack); FloodFill(380,140,clYellow); FloodFill(360,70,clYellow); FloodFill(300,200,clBlue); FloodFill(420,200,clBlue); FloodFill(380,200,clBlue);

END.

Задания для самостоятельной работы 1. Стрелка состоит из отрезка прямой и равностороннего треугольника -

острия. Сторона треугольника, пересекающая отрезок, образует с ним прямой угол; точка пересечения делит отрезок в отношении 1:5. Построить: горизонтальную стрелку, направленную из точки (100, 100) в точку (150, 100).

2. Рисунок составлен из простейших геометрических фигур: треугольников, квадратов, окружностей, точек и т. п. Получить на экране и раскрасить рисунок.

3.Записать дату своего рождения шестью цифрами, используя

девятисегментный шаблон (как на почтовых конвертах). 4. Напишите программу, движения точки по экрану в заданном

направлении с заданным шагом. Исходное положение точки (426,238 ), с шагом 6, горизонтально вправо.

5. Напишите программу, равномерного движения двух окружностей к центру экрана. Исходное положение первой окружности - правый нижний угол, второй окружности - левый нижний угол,

РЕПОЗИТОРИЙ БГ

ПУ

Page 77: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

77

6. Напишите программу, движения прямых AB и BC по нижней части экран с заданным шагом. Координаты точки А ( 54,49), точки C ( 608,51 ), шаг 5.

7. Секторная диаграмма - это круг, площади секторов которого пропорциональны соответствующим числовым величинам, взятым из некоторой совокупности. Для большей наглядности секторы диаграмм закрашивают в разные цвета. Постройте секторную диаграмму по следующим числам: 41; 24; 10; 7; 18.

Работа 1.7. Составные типы данных: массивы.

Цель: формирование навыков решения типовых задач обработки массивов.

Пример 1. Составьте программу вычисления значения выражения:

где х может принимать следующие значения {1; 2.3; 5; 6.1}

program zadacha; const n=4; var x:array[1..n] of real; i:integer; s,z:real; BEGIN for i:=1 to n do begin writeln('vvetite x[',i,']'); readln(x[i]); end; s:=0; for i:=1 to n do s:=s+sin(x[i]); z:=2+s; writeln('z=',z:7:3); END.

Задания для самостоятельной работы 1. Составьте программу определения значения выражения, заданного

формулой:

Исходные данные:

РЕПОЗИТОРИЙ БГ

ПУ

Page 78: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

78

. 2. Пусть дано натуральное n. Среди а1 ,.., аn найти все положительные

числа, среди положительных а1 .,., аn выбрать наименьшее число. 3. Даны натуральное число n, действительные числа a1, ..., аn. В

последовательности а1,..., аn все отрицательные числа увеличить на 0.5, а все неотрицательные заменить на 0.1.

4. Даны натуральное число n, действительная квадратная матрица порядка n, действительные a1, ..., аn+5. Элементы последовательности a1, ..., аn+5 домножить на 10, если наибольший элемент матрицы (в предположении, что такой элемент единственный) находится на главной диагонали, и на 0,5 в противном случае.

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

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

Работа 1.8. Составные типы данных: строки. Цель: формирование навыков решения типовых задач обработки строк.

Пример 1. В данном предложении заменим сочетание букв "ab" многоточием. program slr; var s,t:string; i:integer; BEGIN writeln('Введите предложение'); readln(s); t:=''; i:=1; while i<=length(s) do if copy(s,i,2)='ab' then begin t:=t+'...'; i:=i+2 end else begin t:=t+s[i]; i:=i+1 end; writeln(‘ ответ ‘,t); END.

РЕПОЗИТОРИЙ БГ

ПУ

Page 79: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

79

Задания для самостоятельной работы 1. Написать программу, которая бы по введенному с клавиатуры

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

2. Дана строка символов. Определите, сколько раз среди символов строки встречается пробел.

3. Дана строка символов. Замените в ней все восклицательные знаки точками до первого пробела.

4. В данном словосочетании заменить два символа "ас" на один символ "*" и удалить букву "о".

5.Определите, есть или нет в данном слове все буквы слова "авто." 6. Даны натуральное число n, символьная квадратная матрица порядка

10х14. Найти номер первого по порядку столбца, в котором число цифр равно числу пробелов.

Работа 1.9. Структурированные типы данных: множества, записи. Цель: формирование навыков решения задач с использованием множеств и

записей.

Пример 1 Сформируйте множество двузначных чисел. Выделите из него подмножество чисел, кратных 3 или 5 и выведите его на экран.

program mno1; const n=30; var i:1..99; M,C:set of 10..99;k:integer; BEGIN randomize; M:=[]; for i:=1 to n do begin k:=random(90)+10; write(k:7); M:=M+[k]; end; writeln; C:=[]; for i:=10 to 99 do if (I in M) and ( (i mod 3=0) or (i mod 5=0)) then C:=C+[i]; for i:=10 to 99 do If i in C then write(i:7); END.

Пример 2 Определить размер средней стипендии в группе. program ddd; type student = record fio:string[20];

РЕПОЗИТОРИЙ БГ

ПУ

Page 80: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

80

name: string[15]; st:real; end; var i,n:integer; s:real; x:array[1..30] of student; BEGIN writeln('введите кол-во студентов'); readln(n); for i:=1 to n do with x[i] do begin write('введите фамилию студента ',i); readln(fio); write('введите имя '); readln(name); write('размер стипендии '); readln(st); end; writeln('список студентов группы'); for i:=1 to n do writeln(x[i].fio:22,x[i].name:18,x[i].st:8:2); s:=0; for i:=1 to n do with x[i] do s:=s+st; s:=s/n; writeln('ответ ',s:8:2) END.

Задания для самостоятельной работы 1. Заданы три множества Х1, Х2, Х3, которые содержат целые числа из

диапазона 100..200. Известно, что мощность каждого из этих множеств равна 10. Сформируйте новое множество У=(Х1∩ X2) U (X2 U X3) и выведите на экран его мощность. Является ли Х1подмножеством У и принадлежит ли число 150 множеству У.

2. Напечатать список студентов, фамилии которых начинаются с буквы "А" и их оценки за последнюю сессию.

3. Известна информация о 5 странах. Вывести название и характеристики страны с наибольшим количеством ВУЗов на 1000 человек

Работа 1.10. Механизмы структорирования программ: процедуры и

функции пользователя. Цель: формирование навыков использования процедур и функций

пользователя..

РЕПОЗИТОРИЙ БГ

ПУ

Page 81: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

81

Пример 1. Оформить в виде процедурыс прараметрами алгоритм вычисления

степени ny x= с натуральным показателем Задача 1. Оформить в виде процедуры алгоритм вычисления степени с

натуральным показателем. program ap; var n:integer; x,y:real; procedure s1 (k:integer; e:real; var d:real); var i:integer; begin d:=1; for i:=1 to k do d:=d*e; end; ВEGIN writeln ('введи показатель степени'); readln (n); writeln('введи значение x'); readln(x); s1(n,x,y); writeln('y=',y) ЕND.

Пример 2 Оформить в виде функции с параметрами алгоритм вычисления

степени ny x= с натуральным показателем program primer; var n:integer; x,z:real; function s3 (n:integer; x:real):real; var i:integer; y:=real; begin y:=1; for i:=1 to n do y:=y*x; s3:=y; end; BEGIN writeln ('введи показатель степени n'); readln(n); writeln('введи основание x'); readln(x); z:=s3(n,x); writeln('y=',z); END.

РЕПОЗИТОРИЙ БГ

ПУ

Page 82: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

82

Задания для самостоятельной работы 1. Определите площадь 4-х выпуклых четырехугольников с заданными

сторонами и одной из диагоналей (при решении задачи используйте процедуру пользователя).

2. Заданы три вещественные матрицы 4-го порядка. Выведите на экран ту из них, норма которой наименьшая. Считайте, что такая матрица одна. В качестве нормы матрицы необходимо брать максимум абсолютных величин ее элементов.

3. Даны действительные числа s, t. Получить g(1.2, s) + g(t, s)-g(2s-1, st), где

4. Составьте программу получения всех значений заданной функции y

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

5. Напишите программу, которая строит заданный орнамент.

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

Работа 1.11. Алгоритмы работы с внешней и внутренней памятью

компьютера Цель: формирование навыков решения задач по обработке файлов. Пример 1. В первом файле сдержатся различные положительные и неположительные целые числа. Сформировать другой файл, в котором вначале будут расположены положительные, а затем отрицательные числа первого файла.

program zadacha; var i,c,n:integer; a,b:file of integer; BEGIN randomize;

РЕПОЗИТОРИЙ БГ

ПУ

Page 83: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

83

assign (a,'f1'); rewrite(a); writeln(‘введите кол-во чисел’); readln(n);

for i:=1 to n do begin c:=random(20)-50; write(a,c) end; close(a); writeln('файл1 готов'); assign(b,'f2');reset (a);rewrite(b); while not eof(a) do begin read(a,c); write (c:4); if c>0 then write(b,c) end; writeln; close(a); reset(a); while not eof(a) do begin read (a,c); writeln(c); if c<0 then write(b,c) end; close(a); close(b); writeln; {вывод второго файла на экран} reset(b); while not(eof(b)) do begin read(b,c); write(c:4) end; writeln; close(b); END.

Задания для самостоятельной работы 1. Дан файл f, компоненты которого являются действительными

числами. Найти произведение компонент файла f. 2. Дан файл f, компоненты которого являются действительными

числами. Найти наибольшее из компонент с четными номерами. 3. Задан файл f компоненты которого являются целыми числами.

Получите в файле g все компоненты файла f, которые делятся на 3, но не делятся на 5.

4. Задан файл f компоненты которого являются целыми числами. Получите в файле g все компоненты файла f, которые являются удвоенными нечетными числами.

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

Работа 1.12. Алгоритмы работы с внутренней памятью компьютера

Цель: формирование навыков обработки динамических переменных.

РЕПОЗИТОРИЙ БГ

ПУ

Page 84: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

84

Пример 1. Сформировать список из 10 случайных целых чисел и вывести полученный список на экран.

program gfd; type uk=^spisok; spisok=record dano:integer; nex:uk; end; var a,nach,kon:uk; i,c,n:integer; BEGIN randomize; n:=10; new (a); nach:=a; for i:=1 to n do begin c:=random( 100)+10; write(c:5); a^.dano:=c; a^.nex:=nil; kon:=a; new(a); if i<>n then kon^.nex:=a else dispose(a); end; writeln; writeln('вывод списка'); a:=nach; while a<>nil do begin c:=a^.dano; write(c:5); a:=a^.nex; end; writeln; END.

Задания для самостоятельной работы 1. Задно натуральное число n. Сформировать динамический массив А

[1..n] по следующей формуле:

РЕПОЗИТОРИЙ БГ

ПУ

Page 85: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

85

2. В поле данных каждого элемента динамического списка

записываются данные об автомобилях: марка, номер, стоимость. Выведите на экран весь список и определите, сколько машин заданной марки с четным номером.

2. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Работа 2.1. Основы работы в среде Microsoft Visual Studio Цель: знакомство с языком программирования C# и системой MS Visual

Studio. Пример 1. Создать приложение, которое по введенному радиусу вычисляет

и выводит на консоль длину окружности и площадь круга. • Создадим проект с именем сon01. • В теле метода Main наберем код программы: static void Main() { Console.Write("Введите радиус: "); // ввод и преобразование типа string в int int r = int.Parse(Console.ReadLine()); double p = 2 * Math.PI*r; double s = Math.PI*r*r; // форматный вывод - три десятичных знака Console.WriteLine("Длина окружности {0:f3}, площадь круга {1:f3}", p, s); Console.ReadKey(); }

• Протестируем программу (F5). При необходимости откорректируем программный код. Результат может выглядеть так: Введите радиус: 4

Длина окружности 25,133 , площадь круга 50,265

Задания для самостоятельной работы Создайте консольные приложения, которые вычисляют и выводят:

1. Среднее арифметическое sred двух введенных чисел а и b. 2. Стоимость поездки на автомобиле (ввод: s – расстояние, b - расход

бензина на 100 км, c - цена бензина за 1 литр). 3. Смещение от положения равновесия точки, совершающей гармонические

колебания x = A sin(w t) (ввод: амплитуда A, угловая частота w, время t).

РЕПОЗИТОРИЙ БГ

ПУ

Page 86: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

86

Работа 2.2. Алгоритмическая конструкция “ветвление” Цель: формирование навыков реализации алгоритмов ветвления Пример 1. Использование конструкции if … else

для проверки знака и четности введенного числа • Создадим проект сon111. Наберем код программы в теле метода Main:

string mes1 = "", mes2 = ""; // объявление и инициализация Console.WriteLine("Введите целое число "); // ввод строки и преобразование в целое число int n = int.Parse(Console.ReadLine()); if (n>=0) mes1 ="положительное"; else mes1 = "отрицательное"; if (n%2==0) mes2 = "четное"; else mes2 = "нечетное"; Console.WriteLine("Число {0} {1} {2}", n, mes1, mes2); Console.ReadKey();

• Протестируем программу (F5). Откорректируем программный код. Задания для самостоятельной работы

Создайте консольные приложения, в которых выполняются заданные действия: 1. Проверяется делимость введенного целого числа n на d

(ввод: число n, делитель d; оператор if ) 2. Выводится название страны и ее столицы по введенной первой букве:

б – Беларусь, Минск, р – Россия, Москва, л –Литва, Вильнюс (switch), 3. Проверяется правильность логина строго 5 букв и пароля из 6 цифр.

Работа 2.3. Алгоритмическая конструкция “цикл” Цель: формирование навыков реализации циклических алгоритмов Пример 1. Использование цикла while. За один день уровень радиации

уменьшается на 5%. За сколько дней он уменьшится вдвое? • Создадим проект сon122. Наберем код программы в теле метода Main:

Console.Write("Введите начальный уровень радиации(100 - 800 единиц:"); double rad0 = double.Parse(Console.ReadLine()); // задание начальных значений rad и day перед телом цикла double rad=rad0; int day=0; while (rad>rad0/2) // проверка условия уменьшения радиации вдвое { rad *= 0.95; day++; // ежедневное уменьшение радиации на 5% Console.WriteLine("День {0}, радиация = {1}", day, rad); } Console.ReadKey();

• Протестируем программу. Откорректируем программный код.

РЕПОЗИТОРИЙ БГ

ПУ

Page 87: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

87

Задания для самостоятельной работы Создайте консольные приложения, в которых выполняются заданные

действия:

1. Вычисляется сумма квадратов n натуральных чисел, начиная с k (ввод k и n, цикл for).

2. Генерируются случайные числа в интервале (– 40, 40) до тех пор, пока очередное число не превышает 30. Выводятся только нечетные числа и сообщения: отрицательное – положительное (while, if).

3. Ежедневно количество бактерий увеличивается на p%. Через сколько дней количество бактерий увеличится в n раз (ввод p и n).

Работа 2.4. Работа с массивами Цель: формирование навыков работы с одномерными массивами в C# Пример 1. Формирование и вывод массивов чисел. • Создадим проект сon131. Наберем код программы в теле метода Main:

Console.Write("Введите размерность массивов (от 5 до 20) "); int n = int.Parse(Console.ReadLine()); int[] a = new int[n]; int[] b = new int[n]; // объявление массивов for (int i = 0; i < n; i++) { a[i] = i; b[i] = a[i]*a[i]; // заполнение массивов Console.WriteLine("a[{0}] = {1}, b[{0}] = {2}", i, a[i], b[i] ); } Console.ReadKey();

• Протестируем программу. Откорректируем программный код. Задания для самостоятельной работы

Создайте консольные приложения, в которых выполняются заданные

действия:

1. По введенному порядковому номеру выводится название дня недели и количество дней до Вс.

2. Заданы диагонали мониторов в дюймах: 10.1, 11.6, 14, 15.6, 17, 19, 24, 27. Формируется и выводится таблица перевода диагоналей в сантиметры.

3. Формируется массив из n целых случайных чисел от 10 до 99. Выводятся четные числа и их к-во.

Работа 2.5. Обработка исключений Цель: формирование навыков обработки исключений Пример 1. Задан строковый массив дней недели. Составим программу,

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

РЕПОЗИТОРИЙ БГ

ПУ

Page 88: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

88

количество дней до Вс, а также обрабатывает ошибки формата ввода и выхода индекса за границы массива.

• Создадим проект сon152. Наберем код программы в теле метода Main: // создадим массив дней недели string[] dw = { "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" }; Console.Write("Введите номер дня недели (0 - 6) "); // в проверяемый блок включим ввод номера и вывод сообщения try { int i = int.Parse(Console.ReadLine()); Console.WriteLine("{0}, до Вс {1} дней", dw[i], 6 - i); } // обработка ошибки выхода индекса за границы диапазона catch (IndexOutOfRangeException e) { Console.WriteLine(e.Message); } // обработка ошибки формата ввода catch (FormatException e) { Console.WriteLine(e.Message); } // обработка неопознанной ошибки catch { Console.WriteLine("Ошибка"); } Console.ReadKey();

• Протестируем программу. Откорректируем программный код. • Сравним рeзультаты обработки исключений при вводе чисел > 6 и букв. • Исследуем, как влияет порядок следования блоков catch на обработку

исключений от одного блока try. Задания для самостоятельной работы

Создайте консольные приложения, в которых выполняются заданные

действия и обрабатываются исключения:

1. Вычисляется сила тока i = u/r по введенным значениям напряжения и сопротивления (тип int):

2. Расстояния до звезд a = 5 и b = 8000 световых лет вычисляется в км и м sa = a*365*24*3600*300 000 (км).

3. Проверяется правильность ввода логина и пароля, состоящих только из цифр.

Работа 2.6 Работа с символами Цель: формирование навыков работы с символами в C# Пример 1. Определение категории введенного символа • Создадим проект сon161. Наберем код программы в теле метода Main: int k; char ch; string mes = ""; //объявление переменных do { // повторение ввода в цикле с постусловием

РЕПОЗИТОРИЙ БГ

ПУ

Page 89: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

89

Console.WriteLine("Введите символ: "); k = Console.Read(); ch = (char)k; // ввод и преобразование кода в символ if (char.IsLetter(ch)) mes = "буква"; else if (char.IsDigit(ch)) mes = "цифра"; else if (char.IsPunctuation(ch)) mes = "знак пунктуации"; Console.WriteLine("Введен символ {0}, его код {1}, это {2}", ch, k, mes); } while (ch != 'Q'); // завершение цикла при вводе буквы Q Console.ReadKey(); • Протестируем программу. Откорректируем программный код.

Задания для самостоятельной работы Создайте консольные приложения, в которых выполняются заданные действия

над символами введенных строк:

1. Подсчитывается количество строчных, заглавных букв, знаков препинания в строке.

2. Заданные строчные латинские буквы преобразуются в заглавные. 3. Выводятся все повторяющиеся в строке буквы и подсчитывается

количество каждой из них.

Работа 2.7. Работа сo строками Цель: формирование навыков работы сo строками Пример 1. Использование методов класса String • Создадим проект сon171. Наберем код программы в теле метода Main: string str = "прекрасная королева"; Console.WriteLine(str); //выделяем подстроку str2, удаляем символы “ле” string str2 = str.Substring(3).Remove(12, 2); Console.WriteLine(str2); // расщепляем строку str в массив слов mas (разделитель – пробел) string[] mas = str.Split(' '); foreach (string s in mas) Console.WriteLine(s); Array.Sort(mas); // сортируем слова массива mas по алфавиту foreach (string s in mas) Console.WriteLine(s); // вывод // соединяем слова массива mas в одну строку str3 string str3 = string.Join(" !!! моя ", mas); Console.WriteLine(str3); string str4 = str3.Replace("!", "?"); Console.WriteLine(str4); int k = str4.IndexOf("моя"); //удаляем из строки str4 символы начиная с k-го до конца string str5 = str4.Remove(k); Console.WriteLine(str5);

РЕПОЗИТОРИЙ БГ

ПУ

Page 90: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

90

Console.ReadKey(); • Протестируем программу. Откорректируем программный код.

. Задания для самостоятельной работы Создайте консольные приложения, в которых выполняются заданные действия

над введенными строками:

1. Все пробелы в строке заменяются на символы подчеркивания _. 2. Подсчитывается количество слов в строке. 3. Выводятся слова, заключенные в кавычки “ ”.

Работа 2.8. Использование регулярных выражений Цель: формирование навыков использования регулярных выражений в C# Пример 1. Проверка телефонного номера вида NNN-NN-NN • Создадим проект сon181. Наберем код программы: using System; // подключаем пространство имен System.Text.RegularExpressions using System.Text.RegularExpressions; class Program { static void Main() { Console.WriteLine("Введите номер телефона"); String str= Console.ReadLine(); // создаем шаблон регулярного выражения String reg = @"^\d{3}-\d{2}-\d{2}$"; // проверяем совпадение введенной строки с шаблоном if (Regex.IsMatch(str, reg)) Console.WriteLine("{0} похоже", str); else Console.WriteLine("{0} ошибка", str); Console.ReadKey(); } } • Протестируем программу. Откорректируем программный код.

Задания для самостоятельной работы Создайте консольные приложения, в которых выполняются заданные действия

над введенными строками:

1. Проверяется, есть ли в строке слово из N букв. 2. Подсчитывается количество строчных (прописных) букв. 3. Проверяется корректность ввода номера автомобиля.

Работа 2.9. Работа с файлами Цель: формирование навыков работы с файлами Пример 1. Запись в текстовый файл my.txt и чтение строк. • Создадим проект сon191. Наберем код программы: using System; using System.IO; //подключаем пространство имен System.IO

РЕПОЗИТОРИЙ БГ

ПУ

Page 91: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

91

class Program { static void Main() { string s1 = "Привет"; int a = 15; int b = 12; // создаем объект класса StreamWriter, открываем файл на дозапись StreamWriter fw = new StreamWriter(@"D:\work\my.txt", true); // записываем строки 1 и 2 fw.WriteLine("1: Работа с файлом"); fw.WriteLine("2: "+ s1); fw.Close(); // закрываем записанный файл // создаем объект класса StreamReader - открываем файл на чтение StreamReader fr = new StreamReader("D:\\work\\my.txt"); string str; int i = 0; while ( (str = fr.ReadLine()) != null) Console.WriteLine("{0} - {1} ", ++i, str ); fr.Close(); // закрываем прочитанный файд Console.ReadKey(); } } • Протестируем программу.

Задания для самостоятельной работы 1. Составьте программу, которая дописывает в файл spis.txt

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

и записывает в файл week.txt день недели, месяц и год. 3. Составьте программу, которая считывает из файла stroki.txt

и выводит на консоль случайную пословицу.

Работа 2.10. Создание класса и объекта. Методы. Конструкторы Цель: формирование навыков создания класса, объекта, методов.

Создание и использование конструкторов.

Пример 1. Создание класса и объекта. Создание и вызов метода. Конструкторы.

• Создадим проект сon211. • В едином пространстве имен namespace con211 с шаблоном класса

Program создадим класс Build (проект строения). По умолчанию он имеет модификатор доступа internal.

• В этом классе объявим три поля name (имя), area (площадь), kvo (количество жильцов) с модификаторами доступа public. Создадим метод ShowInfo(), который вычисляет площадь на одного жильца и выводит информацию о строении.

class Build { public string name; public double area; public int kvo;

РЕПОЗИТОРИЙ БГ

ПУ

Page 92: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

92

public void ShowInfo() { Console.WriteLine("В доме {0} площадью {1} живет {2} чел, на человека {3:f2}", name, area, kvo, area/kvo); } } • В методе Main() класса Program создадим объект dom1 класса Build,

(т.е. построим дом по проекту Build), используя конструктор по умолчанию (без параметров). Зададим значения полей (параметры нашего дома). Вызовем метод ShowInfo().

class Program { static void Main() { Build dom1 = new Build(); // создание объекта dom1 dom1.name="Дача"; dom1.area=30; dom1.kvo=4; // инициализация dom1.ShowInfo(); // вызов метода Console.ReadKey(); } } • Протестируем программу, изменяя параметры объекта dom1. Заметим, что

при использовании конструктора по умолчанию значения полей задавать не совсем удобно.

• Модифицируем программу. Создадим в классе Build собственный конструктор с тремя параметрами (nm, ar, k). Конструктор по умолчанию (без параметров) теперь тоже необходимо записать в явном виде.

public Build() { } // конструктор без параметров public Build(string nm, double ar, int k) // конструктор c параметрами { this.name = nm; this.area = ar; this.kvo = k; }

Задания для самостоятельной работы Создайте приложения, в которых определяются классы, поля, конструкторы,

методы, создаются и инициализируются 2-3 объекта.

1. Класс Student. Метод ShowInfo выводит фамилию, имя, курс, возраст. 2. Kласс Transport. Метод ShowInfo выводит параметры транспортного

средства: тип (автомобиль, мотоцикл, велосипед), цвет, скорость, масса. 3. Класс Figura. Метод ShowArea выводит название (квадрат,

прямоугольник) и параметры фигуры (основание, высоту), вычисляет и выводит площадь.

Работа 2.11. Перегрузка методов Цель: формирование навыков создания перегруженных методов Пример 1. Использование перегрузки методов.

Вычисление периметров разных фигур. • Создадим проект сon221.

РЕПОЗИТОРИЙ БГ

ПУ

Page 93: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

93

• В классе Program создадим три статических метода с одинаковым именем Perim, но разными сигнатурами. В методе Main будем вызывать эти методы.

class Program { static void Perim(int a, int b) // два параметра { Console.WriteLine("Периметр прямоугольника = {0}", 2*a+2*b); } static void Perim(int a, int b, int d ) // три параметра { Console.WriteLine("Периметр треугольника = {0}", a+b+d); } static void Perim(params int[] ar) // переменное число параметров { int p = 0; foreach (int x in ar) p += x; Console.WriteLine("Периметр {0}-угольника = {1}", ar.Length, p); } static void Main() { Perim(10,20); Perim(3,4,5); Perim(2,3,4,5,6,7,9); Console.ReadKey(); } } • Протестируем программу, вызывая метод Perim с разными параметрами.

Обратим внимание на вариант метода с переменным числом параметров. Задания для самостоятельной работы

Создайте приложения, в которых определяются классы, поля, конструкторы, методы, создаются и инициализируются 2-3 объекта. 1. Класс Figura. Метод ShowArea перегружен. В зависимости от количества

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

2. Класс Tour. Метод TourCalc перегружен. Стоимость тура вычисляется в зависимости от количества и типа введенных параметров: без параметров - Минское море, бесплатно; один параметр (страна) – 1 день, 50 руб; два параметра (страна, количество дней n) – стоимость = 50*n

Работа 2.12. Инкапсуляция. Сокрытие полей, создание свойств Цель: формирование навыков управления доступом к полям Пример 1. Сокрытие полей, создание свойств. • Создадим проект сon231. • В едином пространстве имен con231 с шаблоном класса Program создадим

класс Student. В этом классе объявим два поля fam (фамилия) и kurs (курс). Создадим конструкторы и метод ShowInfo(), который выводит информацию о студенте.

class Student { public string fam; //поля сначала public public int kurs;

РЕПОЗИТОРИЙ БГ

ПУ

Page 94: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

94

public Student() { } // конструктор без параметров public Student(string fam, int kurs) // конструктор c параметрами { this.fam = fam; this.kurs = kurs; } public void ShowInfo() // метод ShowInfo { Console.WriteLine("Студент {0} курса {1}", kurs, fam); } }

Первоначальная общедоступность полей и методов класса Student позволяет при отладке прораммы в методе Main() класса Program создавать объекты класса Student, (т.е. описывать конкретных студентов по шаблону класса Student), а также вызывать метод ShowInfo(). class Program { static void Main() { Student st1 = new Student("Иванов", 3); st1.ShowInfo(); Student st2 = new Student("", -7); st2.ShowInfo(); Console.ReadKey(); } } • Протестируем программу с разными параметрами. Существенный

недостаток - незащищенность от ввода абсурдных данных (например, можно ввести, что студент st2 не имеет фамилии и учится на отрицательном курсе -7.

• Инкапсулируем данные (скроем и защитим поля), создав свойства с методами set и get для управление доступом к полям. Система Visual Studio позволяет автоматизировать этот процесс. Для этого устанавливаем курсор на имя_поля (например, fam), в меню Рефакторинг (Refactoring) выбираем пункт Инкапсулировать поле (Incapsulate field).

• Создадим правила доступа. Для этого будем вводить необходимый код в автоматически сгенерированные шаблоны set и get.

private string fam; public string Fam { get { return (fam != "") ? fam : "неизвестный"; } // получение значения set { fam = value.ToUpper(); } } // установка значения • Аналогичным образом инкапсулируем поле kurs. Защитим его от ввода и

хранения абсурдных значений. Например, при вводе чисел <1 и >4 в поле kurs будет сохранено значений 0 (поступай на подготовительный курс!).

private int kurs; public int Kurs { get { return kurs; } set { kurs = (value<1 || value>4) ? 0 : value; } } // установка значения • На завершающем этапе заменим в конструкторе имена скрываемых

полей (с малой буквы) на имена открытых свойств (с большой буквы): public Student(string fam, int kurs) { this.Fam = fam; this.Kurs = kurs;

РЕПОЗИТОРИЙ БГ

ПУ

Page 95: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

95

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

• Протестируем окончательный вариант с разными параметрами. Задания для самостоятельной работы

Создайте приложения, в которых определяются классы, поля, конструкторы, создаются и инициализируются 2-3 объекта. Поля инкапсулируются. Информация выводится методом Show. 1. Создается класс Avto с полями: марка автомобиля brand, цвет color,

скорость skor. Поля инкапсулируются с ограничениями (скорость от 20 до 120 км/ч).

2. Создается класс Kadry с полями: фамилия fam, возраст age, должность dol, стаж staj. Поля инкапсулируются с ограничениями (возраст от 16 до 60, стаж от 0 до 45).

Работа 2.13. Визуальное проектирование классов Цель: формирование навыков визуального проектирования классов Пример 1. Визуальное проектирование класса Computer

Спроектируем класс Computer, который содержит поля model (модель) и ram (оперативная память), а также методы Start (включить) и End (выключить). • Создадим новый проект con241. По умолчанию он имеет класс Program. • В этом же пространстве имен в отдельном файле создадим класс Computer

с помощью визуального Конструктора классов (Class Designer). • Для его вызова в окне Обозреватель решений (Solution Explorer) выделим

имя проекта и щелкнем по значку Перейти к схеме классов. Откроется окно Схема классов (ClassDiagrams) с созданным по умолчанию классом Program, содержащим шаблон метода Main.

Окно Обозреватель решений (а) и изображение класса Program (б)

• С помощью контекстного меню Добавить или Панели элементов добавим на схему класс Computer.

• Спроектируем теперь его элементы (поля, конструкторы, методы, свойства).

РЕПОЗИТОРИЙ БГ

ПУ

Page 96: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

96

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

• Будем создавать необходимые элементы класса Computer и задавать их параметры в соответствии с рисунком

В результате визуального проектирования в окне программы

автоматически генерируются шаблоны элементов, в которые будем вводить программный код. public class Computer { private string model; private int ram; // скрытые поля public string Model // общедоступные свойства { get { return model ; }

РЕПОЗИТОРИЙ БГ

ПУ

Page 97: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

97

set { model = (value!="") ? value : "noName"; } } public int Ram { get { return ram; } set { ram = (value < 500) ? 640 : value; } } public Computer() { } // конструктор без параметров public Computer(string model, int ram) // c параметрами { this.Model = model; this.Ram = ram; } public void Start() // общедоступный метод Start { Console.WriteLine("{0} работает, память = {1}", Model, Ram); } public void End() // общедоступный метод End { Console.WriteLine("{0} выключается", Model); } } class Program { static void Main() { Computer comp = new Computer("IBM", 2048); comp.Start(); comp.End(); Console.ReadKey(); } } • Протестируем программу, изменяя параметры.

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

приложения, в которых определяются классы, поля, конструкторы, свойства. Информация выводится методом Show. В методе Main класса Program создаются и инициализируются 2 - 3 объекта. Демонстрируется ограничение недопустимых значений. 1. Создается класс Sotrudnik с полями: фамилия fam, стаж staj, зарплата zar.

Поля инкапсулируются с ограничениями (стаж от 3 лет, зарплата от 500 руб).

2. Создается класс Build с полями: название name, площадь area (от 10 до 200), количество жильцов kvo (от 2 до 9). Поля инкапсулируются с ограничениями.

Работа 2.14. Наследование Цель: формирование навыков реализации наследования

Спроектируем класс Notebook, который имеет два поля model (модель) и ram (оперативная память), а также методы Start (включить) и End (выключить). Ранее мы уже создали класс Computer с такими полями и методами. Имеет смысл считать класс Notebook потомком класса Computer, который наследует эти поля и метод Start без изменения (при включении они работают одинаково). Особенность ноутбука – наличие батареи. Пусть после выключения ноутбука батарея заряжается. Поэтому в класс Notebook надо добавить поле time (требуемое время зарядки батареи) и переопределить метод End, чтобы он выводил это время.

РЕПОЗИТОРИЙ БГ

ПУ

Page 98: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

98

Пример 1. Спроектируем класс Notebook - наследник класса Computer. • Откроем ранее созданный проект con241 с классами Program и Computer. • С помощью визуального конструктора классов в том же пространстве имен

в отдельном файле создадим класс Notebook. • Для задания отношения предок-наследник на Панели элементов выберем

пункт Наследование и мышью с нажатой левой кнопкой протащим стрелку от прямоугольника класса Notebook до класса Computer.

• С помощью окна Сведения о классах зададим поля и методы класса Notebook в соответствии с рисунком.

• Введем в автоматически сгенерированные шаблоны элементов класса

Notebook программный код: Инкапсулируем поле time. public class Notebook : Computer { private int time; public int Time { get { return time; } set { time = (value < 10) ? 15 : value; } } // Конструкторы не наследуются, а вызываются! Поэтому их нужно создавать // в каждом классе-потомке. При этом можно ссылаться на базовый класс // и лишь добавлять новые параметры. public Notebook() { }

РЕПОЗИТОРИЙ БГ

ПУ

Page 99: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

99

public Notebook(string model, int ram, int time) : base(model,ram) { this.Time = time; } // Создадим новый метод End класса – наследника с модификатором override. public override void End() { Console.WriteLine("{0} выключается, заряд {1} мин", Model, Time); } } // Чтобы он смог переопределить одноименный метод базового класса, // зададим тому в классе – предке Computer модификатор virtual. • Протестируем программу, добавив в класс Program создание экземпляров

класса Notebook и вызовы методов: Notebook nb = new Notebook("Asus", 1024, 120); nb.Start(); nb.End(); Computer comp2 = new Notebook("Dell", 4096, 30); comp2.Start(); comp2.End(); • Обратим внимание на важное проявление принципа полиморфизма:

объект comp2 имеет тип Computer, но ведет себя как ноутбук, поскольку инициализируется с помощью конструктора Notebook.

Задания для самостоятельной работы Используя инструменты и методы визуального проектирования создайте

классы с наследниками, содержащие указанные поля, конструкторы и методы.

В классе Program создаются и инициализируются 2-3 объекта и указанными

методами выводится информация. Продемонстрируйте результаты, изменяя

параметры.

1. Спроектируйте класс Transport с полями mоdel (модель), speed (скорость), mas (масса) и методами Start, Stop, ShowInfo. Наследуйте от него классы Avto (автомобиль), Moto (мотоцикл), Velo (велосипед).

2. Спроектируйте класс Animal с полями name (имя), ves (вес), col (цвет) и методами Run (бегать), Sleep(спать), Golos (голос). Наследуйте от него классы Cat (Кот) и Dog (Собака). Переопределите метод Golos для каждого животного (мяу-мяу и гав-гав).

РЕПОЗИТОРИЙ БГ

ПУ

Page 100: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

100

Работа 2.15. Абстрактные классы. Интерфейсы Цель: формирование навыков создания абстрактных классов и интерфейсов Пример 1. Реализация абстрактных классов и интерфейсов • Создадим новый проект con241. • С помощью визуального конструктора классов спроектируем в отдельном

файле абстрактный класс Avto, и в этом же файле классы-потомки Vaz и Maz, а также интерфейсы ITurbo и IEco в соответствии с рисунком.

• Введем в сгенерированные автоматически шаблоны программный код: public abstract class Avto { // объявляем поля с модификатором protected, доступные в классах- потомках protected string model; protected int speed; protected string dop; public abstract void Drive(); // объявляем абстрактный метод Drive public void Show() // объявляем обычный метод Show { Console.WriteLine("модель {0}, скорость {1}, двигатель {2}", model, speed, dop); } } interface ITurbo { void Turbo(); } // объявляем интерфейсы interface IEco { void Eco(); } // класс Maz наследует класс Avto и реализует интерфейс ITurbo public class Maz : Avto, Iturbo { public override void Drive() // переопределяем метод Drive { model = "Maz200"; speed = 90; Turbo(); } public void Turbo() { dop="турбо"; } // реализуем интерфейс Turbo } // класс Vaz наследует класс Avto и реализует интерфейс IEco public class Vaz : Avto, IEco { public override void Drive() // переопределяем метод Drive { model = "vaz2107"; speed = 70; Eco(); }

РЕПОЗИТОРИЙ БГ

ПУ

Page 101: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

101

public void Eco() { dop = "экологичный"; } // реализуем интерфейс Eco } class Program { static void Main() { Avto myAvto = GetAvto(); // создание объекта myAvto myAvto.Drive(); myAvto.Show(); // вызов методов Console.ReadKey(); } static Avto GetAvto() // метод выбора автомобиля { Console.Write("Введите марку автомобиля (Vaz, Maz): "); string mod = Console.ReadLine(); switch (mod) { case "Vaz": return new Vaz(); case "Maz": return new Maz(); default: return new Maz(); } } } • Протестируем программу, изменяя параметры.

Задания для самостоятельной работы Используя инструменты и методы визуального проектирования создайте

классы с потомками, содержащие указанные поля, конструкторы и методы. В

классе Program создаются и инициализируются 2-3 объекта и указанными

методами выводится информация. Продемонстрируйте результаты, изменяя

параметры.

1. Спроектируйте абстрактный класс Animal c полями (name, rost, ves) и классы–потомки Cats и Dogs. Абстрактный метод Golos переопределяется для каждого вида (мяу-мяу и гав-гав).

2. Спроектируйте абстрактный класс Figura и классы–потомки: Rectangle (прямоугольник) и Circle (круг). Абстрактный метод вычисления площади Area переопределяется для каждой фигуры.

3. РАЗВИТИЕ СИСТЕМ, ЯЗЫКОВ И ТЕХНОЛОГИЙ ПРОГРАММИРОВАНИЯ

Работа 3.1. Разработка приложений Windows Forms Цель: формирование навыков создания приложений Windows Forms

Пример 1. Простейший тест с использованием элементов radioButton. Выбор единственного верного ответа.

• Создадим новый проект wf312 типа Windows Forms. • Разместим на форме надпись label1 с вопросом: "Что такое компьютерный

вирус?", три элемента radioButton с ответами "Вредный программист”,

РЕПОЗИТОРИЙ БГ

ПУ

Page 102: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

102

“Вредоносная программа”, “Живущий в компьютере микроб", а также кнопку button1 “ответ” и поле textBox1 для вывода результата.

• Зарегистрируем событие нажатия кнопки. В шаблон обработчика введем

код: private void button1_Click(object sender, EventArgs e) { textBox1.Text = (radioButton2.Checked) ? "верно" : "ошибка"; } • Протестируем программу, изменяя параметры. Пример 2. Тест с использованием элементов checkBox.

Выбор нескольких верных ответов. • Создадим новый проект wf313 типа Windows Forms. • Разместим на форме надпись label1“Устройства ввода:”, четыре элемента

checkBox с текстами ответов “клавиатура”, “рука”, “мышь”, “кошка”, кнопку “ответ” и надпись label12 для вывода результата.

• Зарегистрируем событие нажатия кнопки. В шаблон обработчика введем код:

private void button1_Click(object sender, EventArgs e) { label2.Text = (checkBox1.Checked && checkBox3.Checked && !checkBox2.Checked && !checkBox4.Checked) ? "верно" : "ошибка"; } • Протестируем программу, изменяя параметры.

Задания для самостоятельной работы Создайте Windows-приложения, в которых выполняются следующие действия. 1. При щелчке мыши по форме показывается изображение автомобиля

avto.gif. Щелчок мышью по изображению скрывает его. 2. Вычисляется площадь s и периметр p прямоугольника по сторонам a и b.

Ввод в текстовые поля, вывод по нажатию кнопки в надписи. 3. Выполняется 5 действий. Ввод и вывод в текстовые поля.

Счет по нажатию кнопок.

Работа 3.2. Разработка интерактивных приложений Цель: формирование навыков создания Windows-приложений

с интерактивным управлением параметрами

Пример 1. Вычисление площади круга. Использование элемента trackBar • Создадим проект wf321 типа Windows Forms.

РЕПОЗИТОРИЙ БГ

ПУ

Page 103: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

103

• Разместим на форме две надписи с текстами “R = ” и “S = ”, два текстовых поля и элемент trackBar. Установим его свойства Minimum=10, Maximum=80.

• Выделим элемент trackBar. Зарегистрируем событие перемещения

ползунка Scroll. В шаблон обработчика введем код: private void trackBar1_Scroll(object sender, EventArgs e) { int r = trackBar1.Value; textBox1.Text = Convert.ToString(r); textBox2.Text = Convert.ToString(Math.PI*r*r); } • Протестируем программу. Откорректируем код и свойства элементов.

Задания для самостоятельной работы Создайте приложения Windows Forms, которые вычисляют и выводят: 1. Сопротивление при последовательном (параллельном) соединении

резисторов. Вывод в надписи по событиям Scroll элементов trackBar. 2. Оплату за электроэнергию = тариф * расход. Вывод в надпись по событию

Scroll. Тариф (в руб за 1 кВт ч) задается элементом numericUpDown. Расход в кВт ч ( от 0 до 400) задается элементом trackBar,

3. Стоимость поездки на автомобиле (ввод: s – расстояние, b - расход бензина на 100 км, c - цена бензина за 1 литр). Вывод в надпись по события Scroll элемента trackBar.

Работа 3.3. Использование таймера. Анимация Цель: формирование навыков использования таймера

и создания простейшей анимации движения.

Пример 3. Простейшая анимация движения • Создадим новый проект wf333 типа Windows Forms. • Разместим на форме размером 580х200 две кнопки Старт и Стоп, а также

элемент PictureBox размером 140х100. Импортируем в него изображение из файла beg.gif.

РЕПОЗИТОРИЙ БГ

ПУ

Page 104: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

104

• Перетащим на форму Timer (свойства Enabled = false, Interval = 20). • Зарегистрируем события Tick таймера, а также нажатий кнопок Click.

В шаблоны обработчиков введем коды: // перемещение по тикам таймера вправо на 4px, если Left <340, иначе в начало private void timer1_Tick(object sender, EventArgs e) { if (pictureBox1.Left < 520) pictureBox1.Left += 4; else pictureBox1.Left = 8; } private void button1_Click(object sender, EventArgs e) { timer1.Enabled = true; } // старт private void button2_Click(object sender, EventArgs e) { timer1.Enabled = false; } // стоп • Протестируем программу.

Задания для самостоятельной работы 1. Создайте секундомер с одной кнопкой Сброс, который запускается и

останавливается щелчком мыши по форме. 2. Создайте часы, которые показывают, сколько дней (часов, минут) осталось

наступления нового года. 3. Создайте приложение, в котором анимируется движение Луны luna.gif

вокруг Земли zem.gif по эллиптической траектории.

Работа 3.4. Использование меню и диалоговых окон Цель: формирование навыков создания меню и диалоговых окон Пример 1. Создание простейшего текстового редактора.

Шрифт и цвет текста изменяется с помощью меню. • Создадим новый проект wf341 типа Windows Forms. • Разместим на форме размером 480х360 текстовое поле textBox1 (свойства:

Multiline = true, ScrollBars = Vertical, Anchor = Top, Bottom, Left, Right). • Перетащим на форму компоненты ColorDialog, FontDialog и MenuStrip. • Выделим компонент MenuStrip. Пользуясь подсказками, создадим два

пункта меню: вид (с подпунктами шрифт, цвет) и справка.

РЕПОЗИТОРИЙ БГ

ПУ

Page 105: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

105

• Поочередно выделяем созданные пункты и регистрируем события Click. • В шаблоны обработчиков выбора пунктов меню шрифт и цвет введем

коды, вызывающие диалоги задания шрифта и цвета текста: private void шрифтToolStripMenuItem_Click(object sender, EventArgs e) { fontDialog1.ShowDialog(); // вызов диалога задания шрифта textBox1.Font = fontDialog1.Font; } private void цветToolStripMenuItem_Click(object sender, EventArgs e) { colorDialog1.ShowDialog(); // вызов диалога задания цвета textBox1.ForeColor = colorDialog1.Color; } • В шаблон обработчика выбора пункта меню Справка введем код вызова

окна сообщений MessageBox: private void справкаToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show("текстовый редактор \n разработал: студент"); } • Протестируем программу, вводя текст и изменяя цвет и шрифт. Результат

может выглядеть так.

• Добавим пункт меню выход. Зарегистрируем событие Click. В шаблон

обработчика введем код вызова окна сообщений с двумя кнопками (Да - Нет) и иконкой предупреждения:

private void выходToolStripMenuItem_Click(object sender, EventArgs e) { DialogResult res = MessageBox.Show("завершить работу?", "предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (res == DialogResult.Yes) Application.Exit(); } • Протестируем окончательный вариант.

Задания для самостоятельной работы 1. Создайте приложение, в котором двойным щелчком мыши на форме

вызывается компонент colorDialog, позволяющий изменять цвет формы. 2. Создайте приложение, в котором по нажатию кнопки вызывается

компонент openFileDialog, позволяющий выбирать и загружать в pictureBox изображение из файла.

3. Создайте регистрационную форму, в которую вводится имя и город. Данные можно записывать в файл sam3.txt и читать по нажатию кнопок.

РЕПОЗИТОРИЙ БГ

ПУ

Page 106: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

106

Работа 3.5. Графические возможности C# Цель: формирование навыков работы с графикой в среде MS Visual Studio Пример 1. Простейший графический редактор. Рисование мышью. • Создадим новый проект wf352 типа Windows Forms. • Разместим на форме кнопку для очистки. • Зарегистрируем три события мыши для формы (MouseDown, MouseUp,

MouseMove) и событие нажатия кнопки Click. Введем коды в шаблоны обработчиков событий:

// инициализация: перо поднято, цвет черный, толщина 4 px bool ris = false; Color clr = Color.Black; int w = 4; // обработчики событий мыши private void Form1_MouseDown(object sender, MouseEventArgs e) { ris = true; } // перо опущено private void Form1_MouseUp(object sender, MouseEventArgs e) { ris = false; } // перо поднято // движение мыши, вывод ее координат в заголовок формы private void Form1_MouseMove(object sender, MouseEventArgs e) { this.Text = "x = " + e.X + " y = " + e.Y; if (ris) // если нажата кнопка мыши { Graphics g = CreateGraphics(); // рисуем закрашенным квадратом g.FillRectangle(new SolidBrush(clr), e.X, e.Y, w, w); } } private void button1_Click(object sender, EventArgs e) { Graphics g = CreateGraphics(); g.Clear(SystemColors.Control); }

Рис 3.24 Варианты интерфейса графического редактора

• Протестируем программу. При необходимости откорректируем свойства элементов и код.

Задания для самостоятельной работы 1. Модифицируйте пример, добавив выбор цвета пера (Red, Green, Blue)

c помощью кнопок и толщины пера с помощью клавиш Up и Down

РЕПОЗИТОРИЙ БГ

ПУ

Page 107: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

107

2. Создайте приложение, выводящее в указанное щелчком мыши место формы закрашенный кружок.

3. Создайте приложение, выводящее на форму N закрашенных квадратиков со случайными координатами.

Работа 3.6. Основы работы в среде Java NetBeans Цель: формирование навыков работы в среде Java NetBeans

Пример. Использование модальных диалоговых окон

• Создадим новый проект pro12. В блоке метода main наберем текст программы:

String name = JOptionPane.showInputDialog("Введите имя"); int vid =JOptionPane.PLAIN_MESSAGE; // задание константы вида окна: без_иконок String s = JOptionPane.showInputDialog(null,"год рождения","Введите",vid); int god = Integer.parseInt(s); // преобразование типа int age = 2014 – god; // вычисления String mes = "Привет, " + name + "\nВам " + age; // формирование строки JOptionPane.showMessageDialog(null,mes,"Вывод",vid); // вывод строки • Создадим java-архив pro12.jar. Протестируем результат.

Задания для самостоятельной работы sam*.java Составьте программы, которые выполняют заданные действия. Ввод и вывод в диалоговые окна. 1. Площадь круга s и длину окружности l по радиусу r. ( тип double) 2. Площадь поверхности s и объем шара v по радиусу r ( тип double) 3. Значение функции y = 2 x3 + 4 x2 – 12 (тип int, ввод x).

Работа 3.7. Реализация базовых алгоритмов в языке Java Цель: формирование навыков использования базовых алгоритмов в среде

Java

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

int n=Integer.parseInt(JOptionPane.showInputDialog ("Введите целое число от 5 до 9")); int sum = 0, pro =1; String mes =""; // инициализация переменных for(int i = 1; i < n; i++) { // цикл for sum += i; pro *= i; // тело цикла: вычисления… mes += "шаг= "+ i +" сумма= "+ sum +" произв= "+ pro +"\n"; } JOptionPane.showMessageDialog(null, mes); // вывод по завершению цикла . Задания для самостоятельной работы

РЕПОЗИТОРИЙ БГ

ПУ

Page 108: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

108

Составьте программы, которые выполняют заданные действия. Ввод и вывод - JOptionPane. 1. Проверка, делится ли введенное число на 2, 2, 5…. ( if ) 2. Вывод дня недели (месяца) по введенному номеру (switch) 3. Вычисление суммы всех нечетных чисел от 1 до n (цикл while,

if ) Работа 3.8. Работа с массивами в языке Java

Цель: формирование навыков работы с массивами в среде Java NetBeans

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

int row=Integer.parseInt(JOptionPane.showInputDialog("к-во строк")); int col=Integer.parseInt(JOptionPane.showInputDialog("к-во столбцов")); String txt="Двумерный массив случайных символов"; char s='A'; char[][] sym = new char[row][col]; // объявление массива символов for(int i=0; i<row; i++) { txt += "\n"; for(int j=0; j<col; j++) { sym[i][j]=(char)(s + (byte)(Math.random()*26)); // символы от A до Z txt += sym[i][j]+" "; } } JOptionPane.showMessageDialog(null,txt); // вывод

Задания для самостоятельной работы (sam*) Составьте программы, которые выполняют заданные действия. Вывод в диалоговое окно 1. Выводит таблицу перевода диагонали монитора в дюймах (10.1, 11.6, 14,

15.6, 19, 24, 27) в см. 2. Формирует массив из n натуральных четных чисел. Выводит числа

кратные 3. Работа 3.9. ООП в среде Java

Цель: формирование навыков ООП в среде Java NetBeans

Пример. Создание классов, полей, методов, объектов. • Создадим проект pro41 с главным классом Main. В этом же пакете pro41

создадим класс Computer с полями nam , ram, hdd и методами start, work, end.

public class Computer { public String nam; public int ram; public int hdd; // поля класса public void start() { // методы System.out.println(nam + " включен, память = " + ram); } public void work() { System.out.println(nam + " работает, диск = " + hdd); } public void end() { System.out.println("работа окончена"); } }

РЕПОЗИТОРИЙ БГ

ПУ

Page 109: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

109

• В методе main класса Main создадим объект comp типа Computer , (т.е. экземпляр класса Computer) и вызовем его методы

Computer comp = new Computer(); // создание объекта, конструктор без параметров comp.nam = "IBM"; comp.ram = 1024; comp.hdd = 320; // инициализация comp.start(); comp.work(); comp.end(); // вызов методов • Протестируем результат (F6).

Задания для самостоятельной работы (sam*) Создайте проекты (2-3 класса в пакете: в главном Main создаются объекты и вызываются методы, которые описаны в других классах. Класс должен содержать 3 - 5 полей, 3 – 5 общедоступных и скрытых методов, сеттеры и геттеры, конструкторы, наследование. 1. Класс Avto. Хранит информацию о марке и модели, объеме двигателя,

максимальном объеме и наполненности бензобака, о текущей скорости и расходе топлива (л/100 км). Реализовать методы для определения максимального пробега на оставшемся топливе и для отображения всех полей класса.

2. Класс Student. Хранит информацию о номере группы, номере студента в группе, фамилия, имя, отчество, оценки по 2-3 предметам (по выбору). Реализовать методы для определения среднего балла и для отображения всех полей класса.

Работа 3.10. Создание графического интерфейса программ Java

Цель: формирование навыков создания графического интерфейса в среде

Java

Пример 1. Использование компонентов библиотеки Swing • Создадим проект pro51. В методе main cоздадим экземпляр класса

JFrame с именем frm. Он будет контейнером для остальных компонентов. Зададим ширину окна 400 и высоту 300 px. Установим завершение приложения по закрытию окна.

JFrame frm = new JFrame("Графические компоненты"); // создание фрейма frm.setSize(400, 300); // задание ширины и высоты frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frm.setVisible(true); // включение видимости • Создадим и установим на фрейм менеджер расположения компонентов

FlowLayout (в строку). Добавим компоненты: кнопку JButton с именем bt, текстовое поле ввода JTextField с именем tf и надпись для вывода текста JLabel с именем lb.

FlowLayout fl = new FlowLayout(); // создание менеджера расположения frm.setLayout(fl); // установка на фрейм JButton bt= new JButton(" нажми "); frm.add(bt); // добавление кнопки

РЕПОЗИТОРИЙ БГ

ПУ

Page 110: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

110

JTextField tf = new JTextField("", 10); frm.add(tf); // текстове поля ввода JLabel lb = new JLabel("вывод"); frm.add(lb); // надпись • Протестируем результат, изменяя размеры окна. Исследуем работу

менеджера размещения. Задания для самостоятельной работы

1. Модифицируйте вывод в диалоговое окно: JOptionPane.showMessageDialog(lb,"Прощай!"); Исследуйте результат, изменяя размеры окна.

2. Исследуйте размещение компонентов без использования менеджера расположения:

frm.setLayout(null); tf.setBounds(20, 40, 120, 40); bt.setBounds(80, 100, 120, 40); lb.setBounds(200, 160, 120, 40);

Работа 3.11. Визуальное программирование графического интерфейса Цель: формирование навыков создания графического интерфейса в среде

Java

Пример. Использование слайдера, полосы прокрутки и счетчика • Создадим проект. Добавим класс MyFrm с формой JFrame. • Перетащим на фрейм ползунок JSlider, счетчик JSpinner, полосу прокрутки

JScrollBar, 2 надписи, текстовое поле и кнопку. Оформим в соответствии с рисунком.

• Создадим обработчики событий: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

int a = jSlider1.getValue(); int b = jScrollBar1.getValue(); int k =(int)jSpinner1.getValue(); int st = k*(a + b); jTextField1.setText("" + st ); }

private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) { int a = jSlider1.getValue(); jLabel1.setText("" + a ); }

private void jScrollBar1AdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) {

int b = jScrollBar1.getValue(); jLabel2.setText("" + b ); }

Задания для самостоятельной работы 1. Калькулятор арифметических действий

Создайте проект pro63. Добавьте класс MyFrm. Установите 2 текстовых поля, 4 кнопки и надпись. Оформите в соответствии с рисунком. Создайте обработчики нажатий кнопок., например:

РЕПОЗИТОРИЙ БГ

ПУ

Page 111: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

111

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { double a = Double.parseDouble(jTextField1.getText()); double b = Double.parseDouble(jTextField2.getText()); String sum = String.valueOf(a+b); jLabel1.setText(sum); }

2. Создайте приложение, которое вычисляет объем кирпича по длине, ширине и высоте a, b. h. Ввод слайдерами, вывод в диалоговое окно по щелчку мыши.

Работа 3.12 Основы программирования на языке Python Цель: - формирование навыков программирования на языке Python в среде

IDLE. Пример 1. Ввод и преобразование данных, вычисления и вывод • Для работы в режиме программирования необходимо создать файл (меню

File - New или Ctrl+N), либо открыть сохраненный ранее (меню File - Open).

• Наберем код программы, которая по введенному радиусу вычисляет и выводит площадь круга.

r = float(input("Введите радиус ")) # ввод и преобразование import math # импорт библиотеки math s = math.pi*r*r # вычисление print(s) # вывод на консоль

• Протестируем результат (F5). Перед запуском программу необходимо сохранить в рабочую папку (диск) под именем p03.py. Откорректируем программный код, например, изменим строки 2 и 3

from math import * # импорт всех функций из math s = pi*r*r # вычисление

• Снова протестируем результат (F5). Задания для самостоятельной работы

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

1. Проверяется знак и четность введенного целого числа. 2. По введенным логину log и паролю psw функция vhod(log, psw)

разрешает или запрещает вход в компьютерную систему.

Работа 3.13 Работа со списками на языке Python Цель: - формирование навыков работы со списками Пример 1. По введенной первой букве из списка фруктов выводится название • В новом файле с именем p04.py наберем код программы.

РЕПОЗИТОРИЙ БГ

ПУ

Page 112: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

112

fruits = ["груша","яблоко","апельсин","банан","лимон","киви"] s = (input("Введите первую букву: ")) for fr in fruits: if fr[0] == s: print("Это ", fr)

• Протестируем результат (F5): При необходимости откорректируем программный код

Задания для самостоятельной работы Создайте программы, в которых выполняются заданные действия: 1. Формируется список из n натуральных нечетных чисел. Выводятся числа

кратные 3. 2. Из списка по введенному номеру выводится название дня недели и

сообщение: рабочий день или выходной.

Работа 3.14 Работа со строками на языке Python Цель: - формирование навыков работы со строками Пример 1. Генератор логина из первых трех букв имени и трех последних

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

• В новом файле с именем p05.py наберем код • import random # импорт модуля работы со случайными числами nm = input("Введите имя: ") fm = input("Введите фамилию: ") n = len(fm) # количество букв фамилии log = nm[:3] + fm[n-3:].upper() # срезы имени и фамилии par = "" for p in fm: # формирование пароля par += random.choice(fm) # случайный выбор букв фамилии print("Ваш логин:”, log, пароль:", par)

• Протестируем результат (F5): При необходимости откорректируем программный код

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

_. 2. Строка разбивается на слова, которые выводятся в обратном порядке

через “-“ 3. Подсчитывается количество слов в строке. Выводится первое и последнее

слово.

РЕПОЗИТОРИЙ БГ

ПУ

Page 113: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

113

Работа 3.15 Создание и использование функций Цель: - формирование навыков создание и использования функций Пример 1. Создание функции вычисляющей корни квадратного уравнения • В новом файле с именем p06.py создадим функцию kvad(a, b,c):

def kvad(a,b,c): import math D = b ** 2 - 4 * a * c print("Дискриминант = ", D) if D >= 0: root1 = (-b + math.sqrt(D)) / (2 * a) root2 = (-b - math.sqrt(D)) / (2 * a) print("Корни: ", root1, root2 ) else: print("Корней нет")

• Протестируем ее, вызывая с разными параметрами, например: kvad(2,-8,4) Задания для самостоятельной работы

Создайте программы, в которых выполняются заданные действия: 1. Функция sred(a,b) вычисляет и выводит среднее арифметическое двух

( трех, n ) чисел 2. Функция stoim(s, b, c) вычисляет и выводит стоимость поездки на

автомобиле где s – расстояние, b - расход бензина на 100 км, c - цена бензина за 1 литр.

РЕПОЗИТОРИЙ БГ

ПУ

Page 114: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

114

РАЗДЕЛ КОНТРОЛЯ ЗНАНИЙ Перечень вопросов

Вопросы к зачёту

1. Понятие о структурном программировании. 2. Понятие алгоритма, типы алгоритмов. Изображение основных

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

арифметические операции, функции, выражения. 4. Простые и перечисляемые типы данных в языке Паскаль. 5. Структура программы на языке Паскаль. 6. Операторы присваивания, ввода, вывода в языке Паскаль. 7. Операторы безусловного и условного переходов в языке Паскаль.

Составные условия. 8. Оператор выбора варианта в языке Паскаль. 9. Оператор цикла с заданным числом повторений в языке Паскаль. 10. Оператор цикла с предусловием в языке Паскаль. 11. Оператор цикла с пост условием в языке Паскаль. 12. Алгоритмы определения наибольшего общего делителя,

наименьшего общего кратного (реализация на языке Паскаль) 13. Поиск простых и взаимнопростых чисел (реализация на языке

Паскаль). 14. Одномерные массивы в языке Паскаль. Определение количества и

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

15. Реализация на языке Паскаль алгоритма определение наличия или отсутствия отрицательных элементов в одномерном массиве.

16. Двумерные массивы в языке Паскаль (определение максимального элемента в матрице и его номера).

17. Пример реализации на языке Паскаль алгоритма определения произведения четных элементов в каждой строке прямоугольной матрицы.

18. Особенности работы с элементами квадратной матрицы, расположенными на главной и побочной диагонали (реализация на языке Паскаль).

19. Процедуры пользователя с параметрами и без параметров в языке Паскаль. Примеры.

20. Функции пользователя в языке Паскаль. Локальные и глобальные переменные. Примеры.

21. Символьные и строковые типы в языке Паскаль. Процедуры и функции для работы со строками.

22. Множества в языке Паскаль. Операции и функции работы с множеством.

23. Записи в языке Паскаль. Пример алгоритма обработки записей.

РЕПОЗИТОРИЙ БГ

ПУ

Page 115: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

115

24. Работа в текстовом режиме в среде Pascal ABC: управление цветом, окна, перемещение курсора, примеры работы процедур модуля crt.

25. Работа графическом режиме в среде Pascal ABC Инициализация. Управление текущим курсором. Рисование контурных изображений, закрашенных изображений, вывод текста и чисел.

26. Типизированные файлы с числовыми компонентами в языке Паскаль. Функции и процедуры обработки типизированных файлов. Прямой доступ к файлу. Пример записи заданного числа в заданную позицию файла.

27. Типизированные файлы с числовыми компонентами в языке Паскаль. Поиск суммы отрицательных и количества положительных элементов файла из вещественных чисел.

28. Текстовые файлы в языке Паскаль. Понятие, процедуры и функции для работы с файлами пример добавления к концу файла заданной строки и вывода полученного файла на экран.

29. Указатели и динамические массивы в языке Паскаль. Пример создания динамического массива в языке Паскаль.

30. Связный список в языке Паскаль. Вопросы к кзамену1

1. Парадигмы программирования. Структурно-модульное программирование.

2. Событийно-ориентированное программирование. Интерактивное управле-ние программой в среде Pascal. События клавиатуры и мыши. Обработка событий.

3. Платформа .Net Framework. Архитектура платформы .Net Framework. 4. Общеязыковая исполнительная среда CLR платформы .Net

Framework. 5. Трансляция программного кода в .Net. Виртуальная машина. 6. Библиотеки классов .Net. Пространство имен. Сборка, решение,

проект. 7. Системы и технологии быстрой разработки программ (RAD). Среды визуального проектирования программного обеспечения (IDE). 8. Система Microsoft Visual Studio (С# Developer). Интерфейс. Окна. Основные инструменты. Разработка консольных приложений. 9. Основные понятия языка C#. Переменные. Операторы. Выражения. 10. Основные понятия языка C#. Синтаксис. 11. Язык программирования С#. Арифметические операции. Инкремент, декремент. Операции присваивания. Логические

операции. 12. Типы данных в C#. 13. Типы как классы .Net Framework. Преобразования типов. 14. Базовые алгоритмические конструкции языка C#: ветвление, выбор. Тернарный оператор. 15. Базовые алгоритмические конструкции языка C#: циклы (while, for,

foreach).

РЕПОЗИТОРИЙ БГ

ПУ

Page 116: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

116

16. Ввод и вывод данных в C#. Преобразования типов. 17. Работа с целыми и вещественными числами в C#. Класс Math. 18. Работа со случайными числами в C#. Класс Random. 19. Значимые и ссылочные типы данных в C#. Массивы в C#. 20. Одномерные массивы в C#. Формирование. Работа с элементами. 21. Прямоугольные массивы в C#. Формирование. Работа с элементами. 22. Ступенчатые массивы в C#. Формирование. Работа с элементами. 23. Работа с массивами в C#. Класс Array. 24. Исключительные ситуации. Обработка исключений. 25. Символы в C#. Класс Сhar. Работа с символами. 26. Строки в C#. Классы String и StringBuilder. Работа со строками. 27. Регулярные выражения. 28. Особенности использования регулярных выражений в C#. 29. Потоки ввода-вывода. Классы StreamWriter и StreamReader. 30. Работа с файлами в C#. Запись и чтение. 31. Основы объектно-ориентированного программирования. Принципы

ООП, 32. Основы ООП. Понятие класса и объекта. 33. Создание класса. Модификаторы доступа. 34. Состав класса. Поля. Методы. Модификаторы элементов класса. 35. Методы. Параметры методов. Вызов методов. Способы передачи

парамет-ров. 36. Перегрузка методов. Полиморфизм. 37. Создание и инициализация объекта. Конструкторы. 38. Статические классы. Статические поля и методы. 39. Организация доступа к полям класса в C#. Свойства. Инкапсуляция. 40. Наследование. Разновидности наследования. Классическое

наследование. 41. Наследование. Модель включения – делегирования. Композиция и

агрега-ция. 42. Стратегии наследования. Виртуальные методы. 43. Реализация полиморфизма. Переопределение методов. 44. Использование виртуальных методов. Раннее и позднее связывание. 45. Абстрактные классы. Абстрактные методы. Бесплодные классы. 46. Иерархия классов в C#. Класс Object. 47. Основы ООП. Интерфейсы. Делегаты. События. 48. Основы ООП. Реализации интерфейсов. Стандартные интерфейсы

.Net. 49. Этапы разработки объектно-ориентированных программ в среде MS Visual Studio. Рефакторинг. 50. Визуальное представление классов. Основы UML. 51. Конструирование классов с помощью визуального дизайнера. 52. Достоинства и недостатки ООП.

РЕПОЗИТОРИЙ БГ

ПУ

Page 117: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

117

Вопросы к кзамену2 1. Системы и технологии быстрой разработки программ (RAD).

Среды визуального проектирования программного обеспечения. 2. Платформа .Net Framework. Система MS Visual Studio .Net. 3. Общеязыковая исполнительная среда CLR платформы .Net

Framework. 4. Работа в системе Microsoft Visual Studio .Net. Интерфейс. Окна.

Основные инструменты. 5. Система MS Visual Studio. Разработка консольных приложений.

Консольный ввод – вывод. 6. Основные понятия языка C#. Синтаксис. 7. Язык программирования С#. Типы данных. 8. Язык программирования С#. Переменные. Операторы. Выражения. 9. Базовые алгоритмические конструкции: ветвление, выбор. 10. Базовые алгоритмические конструкции: циклы (for, while, foreach). 11. Типы - как классы .Net Framework. Преобразования типов. 12. Работа с целыми и вещественными числами в C#. 13. Классы Math, Random. 14. Массивы в C#. Одномерные массивы. 15. Массивы в C#. Прямоугольные и ступенчатые массивы. 16. Класс Array. Работа с массивами. 17. Исключительные ситуации. Обработка исключений. 18. Символы в C#. Класс Сhar. 19. Строки. Классы String и StringBuilder. 20. Работа с символами и строками. 21. Регулярные выражения в C#. 22. Потоки ввода-вывода. 23. Классы StreamWriter и StreamReader. 24. Работа с файлами в C#. Запись и чтение. 25. Объектно-ориентированное программирование в среде MS Visual

Studio С#. Классы. Поля. Методы. Модификаторы доступа. 26. Создание объекта. Конструкторы. 27. Доступ к полям класса. Свойства. Инкапсуляция. 28. Реализация полиморфизма. Перегрузка методов. 29. Статические поля и методы. Статические классы. 30. Иерархия классов. Наследование. 31. Реализация полиморфизма. Виртуальные методы. Переопределение

методов. 32. Абстрактные классы. Интерфейсы. 33. Визуальное представление классов. UML.

РЕПОЗИТОРИЙ БГ

ПУ

Page 118: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

118

34. Конструирование классов с помощью визуального дизайнера. 35. Проектирование Windows-приложений. Графический интерфейс. 36. Создание приложений с графическим интерфейсом. Разделение

визуального представления и функциональности. Унификация интерфейсов. 37. Объектно-событийная модель работы Windows-приложения. 38. Класс Control. Свойства, методы, события. Обработка событий. 39. Элементы управления Windows.Forms.

Использование элементов TextBox, Button, Label. 40. Элементы управления Windows.Forms.

Использование элементов CheckBox, RadioButton, ListBox. 41. Элементы управления Windows.Forms. Использование элементов

TrackBar. 42. События мыши и клавиатуры. 43. Элементы управления Windows.Forms. PictureBox. Класс Timer.

Анимация. 44. Элементы управления Windows.Forms. Диалоговые окна.

Организация меню. 45. Работа с графикой. GDI+. Классы и методы рисования. Класс

Graphic. 46. Работа с графикой в C#. Классы Pen, Brush. Рисование фигур. 47. Парадигмы программирования. Процедурное, структурное,

объектно-ориентированное программирование. 48. Тенденции развития языков и технологий программирования.

Функциональное программирование. Проблемно-ориентированные языки. 49. Язык программирования Python. Основные понятия. Синтаксис.

Операторы. Выражения. Интерактивный режим. Особенности программирования.

50. Язык программирования Python. Типы данных. Строки. Списки. Кортежи. Словари.

51. Язык программирования Python. Базовые алгоритмические конструкции.

52. Язык программирования Python в науке, технике, образовании. Библиотеки Python. Приложения с графическим интерфейсом.

РЕПОЗИТОРИЙ БГ

ПУ

Page 119: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

119

ВСПОМОГАТЕЛЬНЫЙ РАЗДЕЛ

РЕПОЗИТОРИЙ БГ

ПУ

Page 120: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

РЕПОЗИТОРИЙ БГ

ПУ

Page 121: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

1

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

Учебная дисциплина «Технологии программирования и методы алгорит-

мизации» предназначена для студентов учреждений высшего образования, обу-

чающихся по специальности 1–02 05 02 «Физика и информатика». Типовая

учебная программа по учебной дисциплине «Технологии программирования и

методы алгоритмизации» составлена в соответствии с требованиями образова-

тельного стандарта Республики Беларусь и типового учебного плана этой спе-

циальности.

В современном информационном обществе значительно возрос спрос на

специалистов в области информационных технологий, которые получают фун-

даментальные основы подготовки в этой области при изучении школьного кур-

са информатики. Учебная дисциплина «Технологии программирования и мето-

ды алгоритмизации» играет ключевую роль в системе профессиональной подго-

товки преподавателей информатики, являясь основой и неотъемлемым компо-

нентом их профессиональной деятельности. Будущему преподавателю инфор-

матики необходимо знать основные парадигмы и технологии программирова-

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

Это позволяет быть конкурентоспособным и мобильным как в системе образо-

вания, так и в профессиональной сфере в целом. Учебная дисциплина

базируется на усвоенном ранее студентами учебном материале учебной

дисциплины «Компьютерная графика и мультимедиа».

Целью преподавания учебной дисциплины является формирование профес-

сиональных компетенций преподавателя физики и информатики в области тех-

нологий программирования и методов алгоритмизации.

Задачи изучения дисциплины:

формирование знаний о современных парадигмах, системах, языках и

технологиях программирования;

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

решении задач из разных предметных областей;

формирование практических навыков разработки программных про-

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

Требования к освоению учебной дисциплины

В результате изучения дисциплины обучаемый должен:

знать:

основные технологии, языки и системы программирования;

структуры данных, базовые структуры алгоритмов, методы анализа ал-

горитмов;

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

задач;

принципы и технологии структурного и объектно-ориентированного про-

граммирования;

методы и этапы разработки и отладки программ;

уметь:

РЕПОЗИТОРИЙ БГ

ПУ

Page 122: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

2

работать в современных системах программирования;

реализовывать в компьютерной среде базовые алгоритмы;

осуществлять сравнительный анализ языков программирования;

разрабатывать объектные модели в различных предметных областях;

создавать приложения на основе объектных моделей;

владеть:

способами проектирования алгоритмов и их реализацией с помощью

современных средств программирования;

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

на объектно-ориентированном языке высокого уровня;

приемами использования современных технологий программирования

в профессиональной деятельности учителя физики и информатики.

Требования к освоению учебной дисциплины

в соответствии с образовательным стандартом

Согласно образовательному стандарту высшего образования ОСВО

1-02 05 02 - 2013 специальности 1-02 05 02 Физика и информатика изучение

учебной дисциплины «Информационные технологии в образовании» должно

обеспечить формирование у студентов академических, социально-личностных и

профессиональных компетенций.

Требования к академическим компетенциям

Специалист должен:

− АК-1. Уметь применять базовые научно-теоретические знания для ре-

шения теоретических и практических задач.

− АК-2. Владеть методами научно-педагогического исследования.

− АК-4. Уметь работать самостоятельно.

− АК-5. Быть способным порождать новые идеи (обладать креативно-

стью).

− АК-7. Иметь навыки, связанные с использованием технических

устройств, управлением информацией и работой с компьютером.

− АК-9. Уметь учиться, повышать свою квалификацию в течение всей

жизни.

Требования к социально-личностным компетенциям

Специалист должен:

− СЛК-4. Владеть навыками здоровьесбережения.

− СЛК-6. Уметь работать в команде.

− СЛК-7. Быть способным к осуществлению самообразования и самосо-

вершенствования профессиональной деятельности.

Требования к профессиональным компетенциям

Специалист должен быть способен:

Обучающая деятельность

− ПК-1-О. Эффективно реализовывать обучающую деятельность.

− ПК-6-О. Организовывать самостоятельную работу обучающихся.

Развивающая деятельность

РЕПОЗИТОРИЙ БГ

ПУ

Page 123: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

3

− ПК-2-Р. Развивать навыки самостоятельной работы обучающихся с

учебной, справочной, научной литературой и др. источниками информации.

Ценностно-ориентационная деятельность

− ПК-4-Ц. Осуществлять самообразование и самосовершенствование

профессиональной деятельности.

Распределение общего количества часов по семестрам.

Трудоёмкость учебной дисциплины составляет 9 зачётных единиц.

Дневная форма получения образования.

Всего на учебную дисциплину «Технологии программирования и методы

алгоритмизации» учебным планом предусмотрено 338 часов, из них 150 часов

аудиторных занятий (58 лекционных, 92 лабораторных).

Текущая аттестация проводится в соответствии с учебным планом специ-

альности в форме зачёта (3 семестр), экзаменов (4 и 5 семестр).

Семестр Всего

Количество аудиторных ча-

сов Количество

часов

самостоя-

тельной

работы

Форма

кон-

троля

Зачёт-

ных

единиц

Лекции

Лабора-

торные

занятия

Всего

3 64 10 24 34 30 зачёт 2

4 132 26 32 58 38 экза-

мен(36) 3

5 142 22 36 58 48 экза-

мен(36) 4

Всего 338 58 92 150 116 72 9

Структура содержания учебной дисциплины.

Дисциплина изучается на протяжении трех семестров и содержит три раз-

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

модульного программирования; во втором – технологии объектно-ориентирован

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

гий программирования. Особое внимание уделяется применению различных

технологий программирования при решении практических задач в контексте

специализации и будущей педагогической деятельности студентов.

Изучение структурно-модульного программирования предлагается реализовать

на языке Pascal (Pascal ABC). Для обучения технологиям объектно-ориентированного

программирования выбран язык C#, который реализуется на платформе .Net в среде

Microsoft Visual Studio (C# Develop). В завершение рассматривается язык программи-

рования Python. Такой выбор обусловлен направленностью на школьную информати-

ку и соответствует принципу преемственности при изучении технологий программи-

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

программирования.

Методы и формы обучения.

РЕПОЗИТОРИЙ БГ

ПУ

Page 124: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

4

Обучение учебной дисциплине проходит в рамках организации лекцион-

ных и лабораторных занятий. В лекционном курсе рассматриваются новейшие

концепции и подходы к программированию, обсуждаются возможности и осо-

бенности языка и выбранного программного обеспечения. Обращается внима-

ние на методологию постановки и решения задач, выбор и анализ алгоритмов,

эффективность программ. При чтении лекций особое внимание следует уделять

демонстрации реальных программных продуктов и мультимедийным презента-

циям, которые должны служить для будущих учителей образцом объяснения

материала. Электронные учебно-методические комплексы обеспечивают сту-

дентов необходимыми теоретическими и справочными материалами.

Лабораторные занятия направлены на формирование навыков практиче-

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

Методика их проведения должна содействовать развитию индивидуально-

творческих способностей каждого студента и приобретению навыков самостоя-

тельной работы. Акцент сделан на практической работе с системами програм-

мирования. С целью подготовки будущего учителя к решению задач информа-

тизации сферы образования рекомендуется предусмотреть задания по разработ-

ке компьютерных программ образовательного назначения.

Текущий контроль осуществляется при выполнении и сдаче лабораторных

работ. Наряду с традиционными методами и формами обучения целесообразно

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

новые формы: веб-занятие, коллективная работа в сети др. Важную роль играет ис-

следовательская работа студентов. Эта работа должна органично включаться в учеб-

ный процесс со всеми видами занятий.

Освоение системы знаний и умений по учебной дисциплине «Технологии

программирования и методы алгоритмизации» позволит студентам продуктивно

осваивать учебный материал по таким учебным дисциплинам, как «Информаци-

онные системы и сети», «Методика преподавания информатики», «Информаци-

онные технологии в образовании».

РЕПОЗИТОРИЙ БГ

ПУ

Page 125: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

5

СОДЕРЖАНИЕ УЧЕБНОГО МАТЕРИАЛА

РАЗДЕЛ 1. СТРУКТУРНО-МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ

Тема 1.1. Основы технологии программирования.

Понятие технологии программирования. Методология решения задач с по-

мощью компьютера. Модульный принцип в программировании. Отладка и те-

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

стирование на контрольных примерах. Документирование программ. Оценки

качества программ.

Тема 1.2. Языки и системы программирования.

Роль и характеристики языков программирования. История развития язы-

ков программирования. Классификации языков программирования. Проблема

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

машины. Основные понятия языков программирования. Компилируемые и ин-

терпретируемые языки. Стандартизация графического представления алгорит-

мов. Состав и назначение систем программирования. Компиляторы и интерпре-

таторы. Языки школьной информатики.

Тема 1.3. Язык программирования Pascal. Базовые алгоритмические

конструкции.

Концепция структурного программирования. Отражение идей структурно-

го программирования в языке Pascal. Состав языка. Основные понятия. Пере-

менные, операции, выражения. Процедуры и функции. Структура программы.

Типы данных. Ввод/вывод данных.

Базовые алгоритмические конструкции структурного программирования:

следование, ветвление, цикл. Алгоритмы целочисленной арифметики. Нахожде-

ние наибольшего общего делителя, наименьшего общего кратного. Поиск чисел

с заданными свойствами (простых, палиндромов, и др…) Разложение чисел на

простые множители. Перевод чисел из одной системы счисления в другую. Де-

лимость чисел. Действия с многозначными числами. Задачи комбинаторики. Ра-

бота с вещественными числами. Анализ алгоритмов.

Тема 1.4. Графические возможности языка Pascal.

Графические примитивы. Процедуры и функции для работы с графикой. Дей-

ствия с пером и кистью. Работа с цветом. Действия со шрифтом Действия с графи-

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

Анимация.

Тема 1.5. Составные типы данных.

Массивы: описание, способы ввода и вывода элементов массива. Одномер-

ные и многомерные массивы: Типовые задачи обработки массивов. Методы ра-

боты с элементами массивов. Алгоритмы сортировки. Символы. Процедуры и

функции работы с символами. Строки. Процедуры и функции работы со строко-

выми данными. Типовые задачи обработки строк. Множества. Описание. Опера-

ции над множествами. Примеры работы с числовыми и символьными множе-

РЕПОЗИТОРИЙ БГ

ПУ

Page 126: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

6

ствами. Записи. Описание. Примеры работы с записями. Организация обработки

массивов записей.

Тема 1.6. Механизмы структурирования программ.

Процедуры и функции как средство структурирования программ. Создание

процедур и функций пользователя: правила записи и вызова. Локальные и гло-

бальные переменные. Параметры процедур и функций, обмен данными с основ-

ной программой. Рекурсия. Создание и использование модулей. Библиотеки

пользователя.

Тема 1.7. Алгоритмы работы с внешней и внутренней памятью

компьютера.

Файловые типы. Обмен данными с диском и внешними устройствами. Ти-

пизированные, текстовые, нетипизированные файлы. Указатели и динамические

структуры данных: списки, стеки, очереди.

Тема 1.8. Событийно-ориентированное программирование.

Парадигмы программирования. Событийно-ориентированное программи-

рование в среде Pascal. События клавиатуры и мыши. Виртуальные коды кла-

виш. Обработка событий. Объектно-ориентированное программирование в среде

Pascal. Классы и объекты. Описание класса. Состав класса. Процедуры и функ-

ции как методы класса. Расширение графических возможностей языка Pascal

ABC. Проектирование графического интерфейса. Новые возможности програм-

мирования в среде Pascal ABC.Net.

РАЗДЕЛ 2. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ

ПРОГРАММИРОВАНИЕ

Тема 2.1. Платформа .Net Framework. Система MS Visual Studio .Net.

Архитектура платформы .Net Framework. Виртуальная машина. Общеязы-

ковая исполнительная среда CLR платформы .Net Framework. Трансляция про-

граммного кода в .Net. Библиотеки классов. Пространства имен. Сборка, реше-

ние, проект. Системы и технологии быстрой разработки программ (RAD). Сре-

ды визуального проектирования программного обеспечения (IDE). Система

Microsoft Visual Studio .Net. Работа в среде MS Visual Studio (C# Develop). Ин-

терфейс. Окна. Основные инструменты. Разработка консольных приложений.

Тема 2.2. Язык программирования C#.

Основные понятия языка C#. Переменные. Операторы. Выражения. Син-

таксис. Ввод и вывод данных. Типы данных. Типы - как классы .Net Framework.

Преобразования типов. Базовые алгоритмические конструкции: ветвление if,

выбор switch, циклы while, for, foreach. Работа с целыми и вещественными чис-

лами. Классы Math, Random.

Тема 2.3. Ссылочные типы данных.

Массивы. Класс Array. Одномерные, многомерные, прямоугольные, сту-

пенчатые массивы. Формирование массивов. Работа с массивами. Сортировка и

поиск в массивах. Операции с векторами и матрицами.

Исключительные ситуации. Обработка исключений.

РЕПОЗИТОРИЙ БГ

ПУ

Page 127: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

7

Символы и строки. Класс Char. Работа с символами. Классы String и

StringBuilder. Работа со строками. Регулярные выражения. Особенности исполь-

зования регулярных выражений при обработке текстов.

Потоки ввода-вывода. Работа с файлами. Запись и чтение. Классы

StreamWriter и StreamReader.

Тема 2.4. Основы объектно-ориентированного программирования.

Понятие класса и объекта. Состав класса. Модификаторы элементов класса.

Поля. Методы. Статические классы. Статические поля и методы. Параметры

методов. Вызов методов и способы передачи параметров. Перегрузка методов.

Создание и инициализация объекта. Конструкторы. Организация доступа к по-

лям класса. Свойства. Инкапсуляция. Сокрытие полей, создание свойств.

Принципы ООП. Реализация ООП в среде MS Visual Studio. Этапы разра-

ботки программ. Рефакторинг. Визуальное представление классов. Основы

UML. Конструирование классов с помощью визуального дизайнера.

Тема 2.5. Наследование. Полиморфизм.

Разновидности наследования. Классическое наследование. Модель включе-

ния – делегирования. Композиция и агрегация. Стратегии наследования. Вирту-

альные методы. Реализации полиморфизма. Переопределение методов. Исполь-

зование виртуальных методов. Раннее и позднее связывание. Параметризован-

ные типы. Бесплодные классы. Абстрактные классы. Иерархия классов. Класс

object. Интерфейсы. Реализации интерфейсов. Стандартные интерфейсы .Net.

Делегаты. События. Достоинства и недостатки ООП.

РАЗДЕЛ 3. РАЗВИТИЕ СИСТЕМ, ЯЗЫКОВ И ТЕХНОЛОГИЙ

ПРОГРАММИРОВАНИЯ

Тема 3.1. Проектирование приложений с графическим интерфейсом

в среде MS Visual Studio.

Объектно-событийная модель работы Windows-приложения. Проектирова-

ние Windows-приложений. Графический интерфейс. Элементы управления

Windows.Forms. Класс Control. Свойства, методы, события. Класс Form. Свой-

ства, методы, события. События мыши и клавиатуры. Этапы создания Windows-

приложения. Структура проекта. Разделение визуального представления и

функциональности. Использование элементов TextBox, Button, Label, CheckBox,

RadioButton, Picture Box, TrackBar, NumerickUpDown, ListBox, ComboBox.

Основные свойства и методы. Обработка событий.

Тема 3.2. Создание приложений Windows.Forms.

Разработка простого текстового редактора. Разработка графического ин-

терфейса. Организация меню. Диалоговые окна. Работа с папками и файлами.

Работа с датой и временем. Класс Timer. Использование таймера. Анимация.

Работа с базами данных.

Работа с графикой. GDI. Классы и методы рисования. Класс Graphic. Клас-

сы Pen, Brush. Рисование фигур. Разработка простого графического редактора.

Обработка событий мыши и клавиатуры.

РЕПОЗИТОРИЙ БГ

ПУ

Page 128: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

8

Тема 3.3. Создание приложений на основе Windows Presentation

Foundation.

Основы XAML. Унификация интерфейсов. Элементы управления. Графи-

ческие возможности WPF. Работа со шрифтами. Работа с растровой графикой.

Анимация. Звук и видео.

Использование возможностей среды MS Visual Studio С# для разработки

образовательных средств. Разработка простых компьютерных моделей и демон-

страций. Системы тестирования.

Тема 3.4. Перспективные языки и технологии программирования.

Тенденции развития языков и систем программирования. Эволюция пара-

дигм и технологий программирования.

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

нию. Проблемно-ориентированные языки. Языки и технологии web-

программирования. Языки и технологии инженерии знаний. Языки машинного

обучения и искусственного интеллекта.

Тема 3.5. Основы языка программирования Python.

Возможности и особенности языка программирования Python. Основные

понятия. Синтаксис. Переменные. Операторы. Выражения. Типы данных. Ин-

терактивный режим работы.

Структурно-модульное программирование на языке Python. Динамическая

типизация. Работа со списками и строками. Кортежи. Словари. Базовые алго-

ритмические конструкции. Использование библиотек Python.

Разработка приложений с графическим интерфейсом. Графические библио-

теки Функциональное программирование на языке Python. Объектно-

ориентированное программирование на языке Python. Возможности использо-

вания языка Python в науке и образовании.

РЕПОЗИТОРИЙ БГ

ПУ

Page 129: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

9

9

УЧЕБНО-МЕТОДИЧЕСКАЯ КАРТА УЧЕБНОЙ ДИСЦИПЛИНЫ Н

ом

ер р

азд

ела,

тем

ы, за

няти

я

Название раздела, темы, занятия;

перечень изучаемых вопросов

Количество

аудиторных

часов

Сам

ост

ояте

льн

ая р

або

та

сту

ден

та

Мат

ери

альн

ое

об

есп

ечен

ие

зан

яти

я

(наг

ляд

ны

е, м

ето

ди

чес

ки

е

по

соб

ия и

др

)

Ли

тер

ату

ра

Фо

рм

а ко

нтр

оля з

нан

ий

Лек

ци

и

Лаб

ор

ато

рн

ые

зан

яти

я

1 2 3 4 5 6 7 8

3 семестр 1. 1. Структурно-модульное программирование (48 ч.) 18 30

1.1. Основы технологии программирования (2 ч.) 2 2

1.1.1. Понятие технологии программирования. Методология решения задач с

помощью компьютера. Модульный принцип в программировании. От-

ладка и тестирование программ. Тестирование на контрольных приме-

рах. Документирование программ. Оценки качества программ.

2 2 Компью-

терная

презента-

ция

1,3 Входной

тест

1.2. Языки и системы программирования (2 ч.) 2 2

1.2.1. Роль и характеристики языков программирования. История развития

языков программирования. Классификации языков программирования.

Основные понятия языков программирования. Компилируемые и ин-

терпретируемые языки. Стандартизация графического представления

алгоритмов. Состав и назначение систем программирования. Компи-

ляторы и интерпретаторы. Языки школьной информатики.

2 2 Компью-

терная пре-

зентация

1,3,4 Тест

1.3. Язык программирования Pascal. Базовые алгоритмические

конструкции (12 ч.)

2 10 10

1.3.1.

1.3.2

Концепция структурного программирования. Отражение идей струк-

турного программирования в языке Pascal. Состав языка. Основные

понятия. Переменные, операции, выражения. Процедуры и функции.

Структура программы. Типы данных. Ввод/вывод данных. Базовые

конструкции структурного программирования: следование, ветвление,

2 2

2

2

2

2

Электрон.

сопровож-

дение лек-

ций

(ЭСЛк)

1,2,3

Тест

РЕПОЗИТОРИЙ БГ

ПУ

Page 130: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

10

10

1.3.3

1.3.4

1.3.5

цикл.

Алгоритмы целочисленной арифметики. Нахождение наибольшего

общего делителя, наименьшего общего кратного. Поиск чисел с задан-

ными свойствами (простых, палиндромов, и др…)

Разложение чисел на простые множители. Перевод чисел из одной си-

стемы счисления в другую. Делимость чисел. Действия с многознач-

ными числами. Задачи комбинаторики.

Работа с вещественными числами. Анализ алгоритмов.

2

2

2

2

2

Инструк-

ции

к лаб.

работам

Тест

Контроль-

ные задания,

тесты

Рейтинговая

работа

1.4. Графические возможности языка Pascal (6 ч.) 2 4 6

1.4.1.

1.4.2.

1.4.3

Графические примитивы. Процедуры и функции для работы с графикой.

Действия с пером и кистью. Работа с цветом. Действия со шрифтом

Действия с графическим окном. Действия с рисунками.

Использование растровых изображений. Анимация.

2

2

2

2

2

2

ЭСЛк

Инструк-

ции к лаб.

работам

1,4,6 Контроль-

ные задания,

тесты

1.5. Составные типы данных (12 ч.) 2 10 10

1.5.1.

1.5.2.

1.5.3.

1.5.4.

1.5.5

Массивы: описание, способы ввода и вывода элементов массива.

Одномерные и многомерные массивы: Символы. Строки.

Типовые задачи обработки массивов. Методы работы с элементами мас-

сивов. Алгоритмы сортировки.

Процедуры и функции работы с символами. Процедуры и функции

работы со строковыми данными. Типовые задачи обработки строк.

Множества. Операции над множествами. Записи.

Примеры работы с числовыми и символьными множествами. Приме-

ры работы с записями. Организация обработки массивов записей.

2

2

2

2

2

2

2

2

2

2

2

Презента-

ция

ЭСЛк

Инструк-

ции к лаб.

работам

1,4,6 Контроль-

ные задания,

тесты

Рейтинговая

работа

Всего за 3 семестр 10 24 30 Зачёт

4 семестр

1.6. Механизмы структурирования программ (4ч.) 2 2 6

1.6.1.

1.6.2.

1.6.3.

1.6.4.

Процедуры и функции как средство структурирования программ.

Создание процедур и функций пользователя: правила записи и вызова.

Локальные и глобальные переменные. Параметры процедур и функ-

ций, обмен данными с основной программой. Рекурсия.

Создание и использование модулей. Библиотеки пользователя.

2 2

2

2

2

Презента-

ция

Инструк-

ции к лаб.

работам

1,4,5 Контроль-

ные задания,

тесты

1.7. Алгоритмы работы с внешней и внутренней памятью компьютера 2 2 6

РЕПОЗИТОРИЙ БГ

ПУ

Page 131: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

11

11

(4 ч.)

1.7.1.

1.7.2.

1.7.3

Файловые типы. Типизированные, текстовые, нетипизированные

файлы.

Обмен данными с диском и внешними устройствами.

Указатели и динамические структуры данных: списки, стеки, очереди.

2

2

2

2

2

Презентация

Инструкции

к лаб.

работам

1,3,6 Контроль-

ные задания

Рейтинговая

работа

1.8. Событийно-ориентированное программирование (6 ч.) 4 2 6

1.8.1.

1.8.2.

1.8.3

Парадигмы программирования. Событийно-ориентированное про-

граммирование. Объектно-ориентированное программирование в среде

Pascal. Классы и объекты. Состав класса. Процедуры и функции как

методы класса. Обработка событий. События клавиатуры и мыши.

Виртуальные коды клавиш.

Расширение графических возможностей языка Pascal ABC. Проекти-

рование графического интерфейса. Новые возможности программиро-

вания в среде Pascal ABC.Net.

2

2

2

2

2

2

Презента-

ция

Инструк-

ции к лаб.

работам

5,6

Контроль-

ные задания

Коллоквиум

2. Объектно-ориентированное программирование (50 ч.) 20 32

2.1. Платформа .Net Framework. Система MS Visual Studio.Net (8ч.) 4 4 6

2.1.1.

2.1.2.

Архитектура платформы .Net Framework. Виртуальная машина. Обще-

языковая исполнительная среда CLR. Трансляция программного кода в

.Net. Библиотеки классов. Пространства имен.

Системы и технологии быстрой разработки программ (RAD). Среды

визуального проектирования программного обеспечения (IDE).

Система Microsoft Visual Studio .Net.

Работа в среде MS Visual Studio (C# Develop). Интерфейс. Окна.

Основные инструменты. Разработка консольных приложений.

2

2

2

2

2

2

2

Электрон.

сопровож-

дение лек-

ций

(ЭСЛк)

Инструк-

ция к лаб.

работе

9, 10

Контроль-

ные задания

Рейтинговая

работа

2.2. Язык программирования C# (10 ч.) 4 6 4

2.2.1.

2.2.2.

2.2.3.

2.2.4

2.2.5

2.2.6

Основные понятия языка C#. Переменные. Операторы. Выражения.

Синтаксис. Ввод и вывод данных.

Типы данных. Типы - как классы .Net Framework. Преобразования

типов. Базовые алгоритмические конструкции.

Реализация алгоритмов ветвления и выбора: if, switch.

Реализация циклических алгоритмов: while, for, foreach.

Работа с целыми и вещественными числами. Классы Math, Random.

2

2

2

2

2

2

2

Презента-

ции.

ЭСЛк.

Инструк-

ции к лаб.

работам

8, 9 Контроль-

ные задания

Рейтинговая

работа

2.3. Ссылочные типы данных (14 ч.) 4 10 4

РЕПОЗИТОРИЙ БГ

ПУ

Page 132: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

12

12

2.3.1.

2.3.2.

2.3.3.

2.3.4.

2.3.5.

2.3.6.

2.3.7.

Массивы. Класс Array. Одномерные, многомерные, прямоугольные,

ступенчатые массивы. Сортировка и поиск в массивах.

Формирование массивов. Работа с одномерными массивами.

Работа с прямоугольными и ступенчатыми массивами.

Исключительные ситуации. Обработка исключений.

Символы и строки. Класс Char. Классы String и StringBuilder. Регуляр-

ные выражения.

Работа с символами.

Работа со строками. Использование регулярных выражений.

Потоки ввода-вывода. Классы StreamWriter и StreamReader.

Работа с файлами. Запись и чтение.

2

2

2

2

2

2

2

2

2

Презента-

ции

ЭСЛк.

Инструк-

ции к лаб.

работам

8, 9

Контроль-

ные задания

Рейтинговая

работа

Контроль-

ные задания

2.4. Основы объектно-ориентированного программирования (12 ч.) 6 6 6

2.4.1.

2.4.2.

2.4.3.

2.4.4.

2.4.5.

2.4.6.

Понятие класса и объекта. Состав класса. Модификаторы элементов

класса. Поля. Методы. Статические классы, поля и методы

Параметры методов. Вызов методов и способы передачи параметров.

Создание классов. Создание и инициализация объектов.

Создание конструкторов. Перегрузка методов.

Организация доступа к полям класса. Свойства. Инкапсуляция.

Сокрытие полей, создание свойств.

Принципы ООП. Реализация ООП в среде MS Visual Studio. Этапы

разработки программ. Рефакторинг. Визуальное представление клас-

сов. Основы UML.

Конструирование классов с помощью визуального дизайнера.

2

2

2

2

2

2

2

2

2

Презента-

ции

ЭСЛк.

Инструк-

ции к лаб.

работам

Инструк-

ции к лаб.

работам

8, 9,

12

Контроль-

ные задания

Коллоквиум

Всего за 4 семестр 26 32 38 Экзамен

5 семестр 2.5. Наследование. Полиморфизм (8 ч.) 2 6 4

2.5.1

2.5.2

2.5.3

Разновидности наследования. Классическое наследование. Модель

включения – делегирования. Композиция и агрегация. Стратегии

наследования. Виртуальные методы. Раннее и позднее связывание.

Параметризованные типы. Бесплодные классы.

Наследование. Реализация полиморфизма. Переопределение методов.

Использование виртуальных методов.

Абстрактные классы. Иерархия классов. Класс object. Интерфейсы.

2

2

2

2

2

Презента-

ции.

ЭСЛк.

Инструк-

ции к лаб.

работам

8, 9,

12

Контроль-

ные задания

Рейтинговая

работа

РЕПОЗИТОРИЙ БГ

ПУ

Page 133: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

13

13

Реализации интерфейсов. Стандартные интерфейсы .Net. Делегаты.

События. Достоинства и недостатки ООП.

2

РЕПОЗИТОРИЙ БГ

ПУ

Page 134: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

14

14

3. Развитие систем, языков и технологий программирования (50 ч.) 20 30

3.1. Проектирование приложений с графическим интерфейсом

в среде MS Visual Studio (8 ч.).

4 4 10

3.1.1.

3.1.2.

3.1.3.

3.1.4.

Объектно-событийная модель работы Windows-приложения. Проекти-

рование Windows-приложений. Графический интерфейс. Элементы

управления Windows.Forms. Класс Control. Свойства, методы, собы-

тия. Класс Form. Свойства, методы, события.

Этапы создания Windows-приложения. Структура проекта. Разделение

визуального представления и функциональности. События мыши и

клавиатуры.

Использование элементов TextBox, Button, Label, CheckBox, Radio-

Button, Picture Box. Основные свойства и методы. Обработка событий.

Разработка интерактивных приложений. Использование элемен-

тов TrackBar, NumerickUpDown, ListBox, ComboBox.

2

2

2

2

2

2

2

2

2

Презента-

ция.

ЭСЛк.

Демонстра

ции

Инструк-

ция к лаб.

работе

10,

12

Контроль-

ные задания,

тест

3.2. Создание приложений Windows.Forms (12 ч.) 4 8 12

3.2.1.

3.2.2.

3.2.3.

3.2.4.

3.2.5.

3.2.6.

Разработка графического интерфейса. Организация меню. Диалоговые

окна. Работа с датой и временем.

Разработка простого текстового редактора. Использование диалоговых

окон. Работа с папками и файлами.

Класс Timer. Использование таймера. Анимация.

Работа с базами данных.

Работа с графикой. GDI. Классы и методы рисования. Класс Graphic.

Классы Pen, Brush. Обработка событий мыши и клавиатуры.

Рисование фигур. Разработка простого графического редактора.

2

2

2

2

2

2

2

2

2

2

2

2

Презента-

ции.

ЭСЛк.

Демонстра

ции

Инструк-

ции к лаб.

работам

10,

12

Контроль-

ные задания,

тест

Рейтинговая

работа

3.3. Создание приложений на основе Windows Presentation Foundation.

(8 ч.)

4 4 10

3.3.1.

3.3.2.

3.3.3.

3.3.4.

Графические возможности WPF. Основы XAML. Унификация интер-

фейсов. Элементы управления. Звук и видео. Анимация.

Работа со шрифтами. Работа с растровой графикой.

Использование возможностей среды MS Visual Studio для разработки

образовательных средств.

Разработка простых компьютерных моделей и демонстраций. Системы

2

2

2

2

2

2

2

2

2

ЭСЛк.

Демонстра

ции

Инструк-

ции к лаб.

9, 12 Экспресс-

контроль

Контроль-

РЕПОЗИТОРИЙ БГ

ПУ

Page 135: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

15

15

3.3.5. тестирования. работам ные задания

3.4. Перспективные языки и технологии программирования (6 ч.). 2 4 4

3.4.1.

3.4.2.

3.4.3.

Тенденции развития языков и систем программирования. Эволюция

парадигм и технологий программирования. Языки и технологии инже-

нерии знаний. Языки машинного обучения и искусственного интел-

лекта. Проблемно-ориентированные языки.

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

рованию.

Языки и технологии web-программирования.

2

2

2

2

2

ЭСЛк.

Демонстра

ции

Инструк-

ции к лаб.

работам

3, 11

Контроль-

ные задания

Рейтинговая

работа

3.5. Основы языка программирования Python (16 ч.). 6 10 8

3.5.1.

3.5.2.

3.5.3.

3.5.4.

3.5.5.

3.5.6.

3.5.7.

3.5.8.

Возможности и особенности языка программирования Python.

Основные понятия. Синтаксис. Переменные. Операторы. Выражения.

Типы данных. Интерактивный режим работы.

Структурно-модульное программирование на языке Python. Динами-

ческая типизация.

Работа со списками и строками. Кортежи. Словари.

Базовые алгоритмические конструкции.

Использование библиотек Python.

Разработка приложений с графическим интерфейсом. Графические

библиотеки

Функциональное программирование на языке Python. Объектно-

ориентированное программирование на языке Python.

Возможности использования языка Python в науке и образовании.

2

2

2

2

2

2

2

2

2

2

2

2

Презента-

ции.

ЭСЛк.

Инструк-

ции к лаб.

работам

Демонстра

ции

11

Контроль-

ные задания

Рейтинговая

работа

Коллоквиум

Всего за 5 семестр 22 36 48 Экзамен Всего по учебной дисциплине 58 92 116

РЕПОЗИТОРИЙ БГ

ПУ

Page 136: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

16

ИНФОРМАЦИОННО-МЕТОДИЧЕСКАЯ ЧАСТЬ

ЛИТЕРАТУРА

О с н о в н а я :

1. Вабищевич, С. В. Рабочая тетрадь по программированию на языке

Паскаль / С. В. Вабищевич; М-во образования Респ. Беларусь, Белорус. гос. пед.

ун-т. – Минск : БГПУ, 2018. – 42 с.

2. Вабищевич, С. В. УМК по учебной дисциплине «Технологии про-

граммирования и методы алгоритмизации» [Электронный ресурс]. – Режим до-

ступа: http: //elib.bspu.by/handle/doc/6915. – Дата доступа: 14.04.2019.

3. Городко, С. И. Современные технологии программирования : учеб.-

метод. пособие для студентов / С. И. Городко, С. В. Снисаренко ; М-во образо-

вания Респ. Беларусь, Белорус. гос. ун-т информатики и радиоэлектроники,

Фак. компьютер. проектирования. – Минск : БГУИР, 2017. – 67 с.

4. Кутыш, А. З. Взаимосвязное обучение технологиям программирова-

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

по специальности 1-02 05 01 Математика и информатика / А. З. Кутыш ; М-во

образования Респ. Беларусь, Белорус. гос. пед. ун-т. – Минск : БГПУ, 2017. –

200 с.

Д о п о л н и т е л ь н а я :

5. Алгоритмы: построение и анализ / Т. Х. Кормен, [и др.]. – М. : Виль-

ямс, 2013. – 1328 с.

6. Окулов, С. М. Программирование в алгоритмах / С. М. Окулов. – М.:

БИНОМ, 2013. – 384 с.

7. Медведик, В. Практика программирования на Паскаль. Задачи и ре-

шения / В. Медведик. – М. : ДМК-Пресс, 2015. – 590 с.

8. Павловская, Т. А. С#. Программирование на языке высокого уровня /

Т. А. Павловская. – СПб. : Питер, 2014. – 432 с.

9. Подбельский, В. В. Язык С#. Базовый курс / В. В. Подбельский. – М. :

Финансы и статистика, 2015. – 408 с.

10. Культин, Н. Б. Основы программирования в Microsoft Visual C# 2010.

– СПб. : БХВ-Петербург, 2014. – 368 с.

11. Фёдоров, Д. Ю. Основы программирования на примере языка Python /

Д. Ю. Фёдоров. – СПб. : БХВ-Петербург, 2018. – 164 с.

12. Флёнов, М. Библия C# / М. Флёнов. – СПб. : БХВ-Петербург, 2016. –

544 с.

РЕПОЗИТОРИЙ БГ

ПУ

Page 137: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

17

ТЕМАТИЧЕСКИЙ ПЛАН

№ Наименование раздела, темы Всего

Лек-

ции

Лабора-

торные

занятия

1 Структурно-модульное программирование 48 18 30

1.1 Основы технологии программирования 2 2

1.2 Языки и системы программирования 2 2

1.3 Язык программирования Pascal.

Базовые алгоритмические конструкции 12 2 10

1.4 Графические возможности языка Pascal 6 2 4

1.5 Составные типы данных 12 2 10

1.6 Механизмы структурирования программ 4 2 2

1.7 Алгоримы работы с внешней и внутренней

памятью компьютера 4 2 2

1.8 Событийно-ориентированное

программирование 6 4 2

2 Объектно-ориентированное программиро-

вание 52 20 32

2.1 Платформа .NET Framework.

Система MS Visual Studio .Net 8 4 4

2.2 Язык программирования C# 10 4 6

2.3 Ссылочные типы данных 14 4 10

2.4 Основы объектно-ориентированного програм-

мирования. 12 6 6

2.5 Наследование. Полиморфизм 8 2 6

3 Развитие систем, языков и технологий

программирования 50 20 30

3.1 Проектирование приложений с графическим

интерфейсом в среде MS Visual Studio. 8 4 4

3.2 Создание приложений Windows.Forms. 12 4 8

3.3 Создание приложений на основе Windows

Presentation Foundation. 8 4 4

3.4 Перспективные языки и технологии програм-

мирования. 6 2 4

3.5 Основы языка программирования Python. 16 6 10

Всего: 150 58 92

РЕПОЗИТОРИЙ БГ

ПУ

Page 138: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

18

МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО ОРГАНИЗАЦИИ И ВЫ-

ПОЛНЕНИЮ САМОСТОЯТЕЛЬНОЙ РАБОТЫ СТУДЕНТОВ

ПО УЧЕБНОЙ ДИСЦИПЛИНЕ

Содержание и формы самостоятельной работы студентов разрабатывают-

ся в соответствии с целями и задачами подготовки специалиста. Для управле-

ния самостоятельной работой рекомендуется использовать: - среды программирования (Pascal ABC, Microsoft Visual Studio, C# Develop.

IDLE Python и др…); - электронные средства обучения (презентации, демонстрации готовых

примеров компьютерных программ и моделей);

- работу с электронным ресурсным центром;

- тестирующие программы.

Текущий контроль осуществляется в ходе выполнения и защиты лабора-

торных работ. Самостоятельная работа студента методически организуется пу-

тем выполнения заданий по материалу каждой лабораторной работы.

Особое внимание необходимо обращать на организацию индивидуальной

работы студента под руководством преподавателя. Эта работа должна прово-

диться с учётом индивидуальных особенностей каждого студента с помощью

системы индивидуальных заданий, которые студент может выполнять на осно-

ве образцов.

РЕПОЗИТОРИЙ БГ

ПУ

Page 139: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

19

ТРЕБОВАНИЯ К ВЫПОЛНЕНИЮ САМОСТОЯТЕЛЬНОЙ РАБОТЫ СТУДЕНТА

№ п/п Название раздела, темы, К-во

часов

СРС Задание

Форма

выполнения

1. Структурно-модульное

программирование

48

1.1. Основы технологии программирования 2 Отладка и тестирование программ.

Тестирование на контрольных примерах.

Пример документиро-

ванной программы

1.2. Языки и системы программирования 2 История развития языков программирования.

Классификации языков программирования.

Обзор

Отчёт о самостоятель-

ной работе

1.3. Язык программирования Pascal.

Базовые алгоритмические конструкции

10 Использование языка Pascal в школе.

Решение задач на реализацию базовых конструкций

структурного программирования.

Решение задач целочисленной арифметики.

Примеры алгоритмов.

Коды программ

1.4. Графические возможности языка Pascal 6 Решение типовых задач программирования графики Коды программ

1.5. Составные типы данных 10 Решение задач с использованием массивов.

Решение задач с использованием символов и строк.

Решение задач с использованием записей и множеств.

Примеры алгоритмов.

Коды программ

1.6. Механизмы структурирования программ 6 Создание процедур и функций.

Решение задач с использованием собственных

процедур и функций

Примеры алгоритмов.

Коды программ

1.7. Алгоритмы работы с внешней и внутрен-

ней памятью компьютера

6 Работа с файлами.

Работа с динамическими структурами

Примеры алгоритмов.

Коды программ

1.8. Событийно-ориентированное программи-

рование

6 Проектирование графического интерфейса.

Создание программы учебного назначения

с использованием обработки событий.

Проект интерфейса

и код программы

учебного назначения

2. Объектно-ориентированное

программирование

24

2.1. Платформа .Net Framework.

Система MS Visual Studio.Net

6 Сравнение систем разработки программного обеспе-

чения. Обзор

РЕПОЗИТОРИЙ БГ

ПУ

Page 140: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

20

2.2. Язык программирования C# 4 Преобразования типов в C#.

Решение задач на реализацию базовых алгоритми-

ческих конструкций.

Таблица преобразова-

ний. Коды программ

Примеры алгоритмов.

2.3. Ссылочные типы данных 4 Решение задач с использованием массивов.

Решение задач с использованием символов и строк.

Решение задач с регулярными выражениями

Примеры алгоритмов.

Коды программ

Шаблоны выражений.

2.4. Основы объектно-ориентированного

программирования.

6 Создание классов и объектов.

Решение задач с перегрузкой методов.

Инкапсуляция. Защита данных.

Конструирование классов с помощью визуально-

го дизайнера.

Коды программ.

Алгоритмы защиты.

Схемы классов.

2.5. Наследование. Полиморфизм 4 Решение задач с использованием наследования.

Использование виртуальных методов.

Решение задач с классами сложной структуры

Схемы классов.

Коды программ

3. Развитие систем, языков и технологий

программирования

44

3.1. Проектирование приложений с графичес-

ким интерфейсом в среде MS Visual Studio

10 Проектирование интерфейсов Windows-приложений.

Использование элементов управления. Проект интерфейса.

Обзор компонентов.

3.2. Создание приложений Windows.Forms. 12 Разработка приложений учебного назначения (тек-

стовый или графический редактор, система тестиро-

вания, компьютерная модель физического явления)

Описание разработки.

Рабочая версия прило-

жения.

3.3. Создание приложений на основе Windows

Presentation Foundation.

10 WPF-приложение с элементами мультимедиа.

Разработка образовательных средств с использовани-

ем WPF.

Описание разработки.

Рабочая версия прило-

жения.

3.4. Перспективные языки и технологии про-

граммирования.

4 Эволюция парадигм программирования.

Эволюция языков и технологий программирования

Обзор.

Обзор.

3.5. Основы языка программирования Python. 8 Использования языка Python в науке и образовании.

Решение задач на реализацию базовых алгоритмов.

Разработка программ учебного назначения

Обзор.

Примеры алгоритмов.

Коды программ

Всего 116

РЕПОЗИТОРИЙ БГ

ПУ

Page 141: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

21

ПЕРЕЧЕНЬ ИСПОЛЬЗУЕМЫХ СРЕДСТВ ДИАГНОСТИКИ

РЕЗУЛЬТАТОВ УЧЕБНОЙ ДЕЯТЕЛЬНОСТИ

Для оценки достижений и уровня знаний студента при изучении дисци-

плины целесообразно применить комплексный инструментарий, который

включает:

− входной контроль перед выполнением лабораторной работы;

− контроль выполнения заданий лабораторной работы;

− контроль выполнения заданий для самостоятельной работы по каждой

лабораторной работе;

− контроль выполнения самостоятельной работы по темам;

− отчеты о самостоятельной работе;

− экспресс контроль по темам;

− компьютерное тестирование по разделам и темам;

− коллоквиумы по разделам и темам;

− рейтинговые оценки прохождения дисциплины в семестре.

РЕПОЗИТОРИЙ БГ

ПУ

Page 142: M= I B CJL HA B I H J£МК...3) Разработка алгоритма: выбор метода проектирования алгоритма; выбор формы записи

22

Протокол согласования рабочей программы

с другими дисциплинами специальности

Название учебной

дисциплины,

с которой

требуется

согласование

Название

кафедры

Предложения

об изменениях в

содержании учеб-

ной программы

учреждения выс-

шего образования

по учебной дисци-

плине

Решение, принятое ка-

федрой, разработавшей

учебную программу

(с указанием даты и

номера протокола)

Компьютерная

графика и муль-

тимедиа

Кафедра мате-

матики и ме-

тодики препо-

давания мате-

матики

Предусмотреть

изучение основ

математической

логики

Протокол № 11

от 23.05.2019

РЕПОЗИТОРИЙ БГ

ПУ