Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Минский государственный высший радиотехнический колледж ПОДЛЕЖИТ ВОЗВРАТУ

Работа добавлена на сайт samzan.net:


ОСНОВЫ  АЛГОРИТМИЗАЦИИ

И  ПРОГРАММИРОВАНИЯ

Учебная  программа,  методические  указания

и  контрольные  задания

МИНСК  2006

Министерство  образования  республики  беларусь

Учреждение  образования

«Минский  государственный  высший

радиотехнический  колледж»

ПОДЛЕЖИТ ВОЗВРАТУ                     Утверждаю

Проректор по учебной работе

___________ В. И. Федосенко

« 14 » июня 2006 г.

ОСНОВЫ  АЛГОРИТМИЗАЦИИ

И  ПРОГРАММИРОВАНИЯ

Учебная программа, методические указания

и контрольные задания

для учащихся безотрывной формы обучения специальности 2-40 01 01

«Программное обеспечение информационных технологий»

МИНСК  2006

УДК 681.3.06+519.688(075)

ББК 32.973–018+22.18я7

        О-75

Рекомендовано к изданию кафедрой информатики и Научно-методическим советом Учреждения образования «Минский государственный высший радиотехнический колледж»

С о с т а в и т е л ь

Г. В. Данилова, ассистент кафедры информатики МГВРК

Р е ц е н з е н т

Л. В. Назаров, старший преподаватель кафедры информатики МГВРК

Основы алгоритмизации и программирования : учеб.

О-75   программа, метод. указания и контрол. задания для учащихся безотрыв. формы обучения специальности 2-40 01 01 «Программное обеспечение информационных технологий» / сост. Г. В. Данилова. – Мн. : МГВРК, 2006. – 84 с.

ISBN 985-6754-47-Х

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

Предназначено для учащихся и преподавателей колледжа

УДК 681.3.06+519.688(075)

ББК 32.973–018+22.18я7

© Данилова Г. В., составление, 2006

ISBN 985-6754-47-Х © Оформление. Учреждение образования «Минский государственный высший радиотехнический колледж», 2006

Предисловие

Цель предмета «Основы алгоритмизации и программирования» (ОАиП) – изучение основ алгоритмизации, методов проектирования и разработки программ на языках программирования Pascal и Delphi.

В качестве базового языка для изучения основ программирования Pascal выбран по следующим причинам:

- относительно небольшое количество базовых конструкций;

- структурированность языка;

- четкое разделение секций описания и реализации;

- широкие возможности для написания самых различных по направленности программ;

- гибкие возможности в отношении представления данных.

Система программирования Delphi – логическое продолжение языка Object Pascal и поэтому является хорошим средством разработки объектно-ориентированных приложений.

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

В результате изучения курса учащиеся должны:

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

- знать способы описания и представления алгоритмов;

- владеть навыками разработки стандартных алгоритмов;

- применять эффективные средства языка для написания программ;

- строить программы исходя из современных подходов к проектированию и программированию;

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

- знать и применять различные структуры данных;

- использовать все возможные средства для автоматизации программирования;

- разрабатывать надежные программы.


1. Учебная программа предмета

1.1. Примерный тематический план

Т а б л и ц а 1.1

Наименование

раздела, темы

Количество часов

Дневная форма

обучения

Безотрывная форма обучения

Теория

Практика

Самостоятель-ное изучение

Обзорная

лекция

Практика

Введение

1

1

Раздел 1. Технологический цикл обработки информации на компьютере

5

4

3

2

1.1. Этапы подготовки и обработки информации

1

1

1.2. Понятие алгоритма. Типы вычислительных процессов. Знакомство с ЕСПД

2

2

2

1.3. Метод пошаговой детализации алгоритма

2

2

2

Раздел 2. Алгоритмы, структуры данных и система программирования Pascal

44

46

33

14

20

2.1. Структура программного модуля. Лексемы языка

2

1

2

2.2. Ввод/вывод данных

2

2

2.3. Базовые конструкции языка

2

4

2

2

2.4. Массивы

2

2

2

2

2.5. Сортировка и поиск информации

2

4

2

2.6. Процедуры и функции

2

2

2

2

Продолжение табл. 1.1

Наименование

раздела, темы

Количество часов

Дневная форма

обучения

Безотрывная форма обучения

Теория

Практика

Самостоятель-ное изучение

Обзорная

лекция

Практика

2.7. Рекурсия

2

2

2

2.8. Организация библиотек. Структура Unit-a

2

2

2

2

2.9. Символьные переменные и строки

2

2

2

2

2.10. Множества

2

2

2

2

2.11. Записи

2

2

2

2

2.12. Файлы в Pascal

2

2

2

2.13. Типизированные файлы

2

2

2.14. Создание пользовательского интерфейса

2

2

2

2

2.15. Нетипизированные файлы

2

4

2

2.16. Модуль Graph

2

2

2

2

2.17. Модуль Crt

2

2

2.18. Организация памяти

2

2

2.19. Динамические структуры данных

2

2

2

2

2.20. Введение в теорию графов

2

2

2

2.21. Алгоритмы с возвратом

2

4

2

2.22. Доступ к системным ресурсам

2

2

2

2.23. Процедурные типы

2

2

2

Окончание табл. 1.1

Наименование

раздела, темы

Количество часов

Дневная форма

обучения

Безотрывная форма обучения

Теория

Практика

Самостоятель-ное изучение

Обзорная

лекция

Практика

Раздел 3. Объектно-ориентированное программирование

6

4

4

2

2

3.1. Объект. Свойства

2

2

2

3.2. Инициализация и разрушение объекта

2

4

2

3.3. Виртуальные функции

2

2

Раздел 4. Система программирования Delphi

18

16

14

4

6

4.1. Введение в Delphi. Окна

2

2

4.2. Основы визуального программирования

2

2

2

4.3. Компоненты страницы Additional

2

2

2

2

4.4. Компоненты страницы Win32

2

4.5. Компоненты страницы System

2

2

2

2

4.6. Компоненты страницы Data Access

2

2

2

4.7. Компоненты страницы Data Controls

2

2

4.8. Компоненты страницы Decision Cube

2

2

2

4.9. Компоненты страницы QReport

2

2

2

4.10. Компоненты страниц Dialogs, ActiveX

2

2

2

2

Итого

74

70

54

23

28

1.2. Содержание предмета

РАЗДЕЛ 1. Технологический цикл обработки информации

на компьютере

Тема 1.1. Этапы подготовки и обработки информации

Постановка задачи. Математическая постановка задачи. Формализация задачи.

Литература [23, с. 202]

Тема 1.2. Понятие алгоритма. Типы вычислительных

процессов. Знакомство с ЕСПД

Понятие «алгоритм»: свойства, способы описания. Типы вычислительных процессов. Знакомство с ЕСПД, ГОСТ 19.701–90 «Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения».

Литература [23, с. 18]

Тема 1.3. Метод пошаговой детализации алгоритма

Различные подходы к реализации алгоритма.

Литература [28, с. 58, с. 87]

РАЗДЕЛ 2. Алгоритмы, структуры данных

и система программирования Pascal

Тема 2.1. Структура программного модуля. Лексемы языка

Состав интегрированной программной среды.

Литература [4, с. 20, с. 312], [45, с. 13, с. 88, с. 525]

Лексемы языка: алфавит, константы, зарезервированные слова. Идентификаторы. Типы. Совместимость типов. Выражения. Стандартные функции языка Pascal.

Литература [4, с. 5], [45, с. 27, с. 81]

Тема 2.2. Ввод/вывод данных

Ввод/вывод данных в Pascal.

Литература [1, с. 224] [4, с. 29], [45, с. 22].

Тема 2.3. Базовые конструкции языка

Базовые конструкции языка: оператор присваивания, условный оператор, оператор выбора, операторы организации циклов. Простой и составной оператор. Пустой оператор.

Литература [45, с. 36]

Тема 2.4. Массивы

Массивы: определение, описание, размещение в памяти, использование.

Литература [4, с. 60], [8, с. 33], [45, с. 45]

Тема 2.5. Сортировка и поиск информации

Методы внутренней сортировки.

Литература [8, с. 90]

Тема 2.6. Процедуры и функции

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

Литература [4, с. 44], [45, с. 144]

Тема 2.7. Рекурсия

Рекурсия: прямая и косвенная. Достоинства и недостатки рекурсивных программ. Примеры рекурсивных процедур и функций.

Литература [8, с. 171], [45, с. 178]

Тема 2.8. Организация библиотек. Структура Unit-a

Стандартные библиотечные модули и модули пользователя. Общая структура Unit-a. Компиляция и использование модулей.

Литература [4, с. 26, с. 195], [14, с. 213], [45, с. 182]

Тема 2.9. Символьные переменные и строки

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

Литература [8, с. 51], [45, с. 112]

Тема 2.10. Множества

Множества: определение, размещение в памяти, операции, процедуры и функции над множествами.

Литература [8, с. 50], [45, с. 108]

Тема 2.11. Записи

Организация, размещение. Записи с вариантами.

Литература [8, с. 49], [45, с. 104]

Тема 2.12. Файлы в Pascal

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

Литература [1, с. 213], [45, с. 119]

Тема 2.13. Типизированные файлы

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

Литература [14, с. 192]

Тема 2.14. Создание пользовательского интерфейса

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

Литература [4, с. 128], [45, с. 262]

Тема 2.15. Нетипизированные файлы

Нетипизированные файлы, их назначение и использование.

Литература [14, с. 208]

Тема 2.16. Модуль Graph

Назначение и установка режимов модуля Graph. Стандартные процедуры и функции модуля. Создание анимации.

Литература [4, с. 157], [29, с. 172]

Тема 2.17. Модуль Crt

Назначение и установка режимов. Стандартные процедуры и функции модуля Crt.

Литература [29, с. 166]

Тема 2.18. Организация памяти

Стековая память. Директива управления памятью ($M). Статическое и динамическое распределение памяти. Понятие указателя. Процедуры управления heap-областью. Описание и обработка динамических массивов.

Литература [45, с. 140]

Тема 2.19. Динамические структуры данных

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

Литература [8, с. 213], [1, с. 269]

Тема 2.20. Введение в теорию графов

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

Литература [8, с. 245], [22, с. 79]

Тема 2.21. Алгоритмы с возвратом

Алгоритмы с возвратом, их реализация с помощью рекурсий и с использованием стека.

Литература [22, с. 102]

Тема 2.22. Доступ к системным ресурсам

Определение переменной как ABSOLUTE. Предопределенные массивы МЕМ. Функции библиотеки DOS. Прерывания. Обработка прерываний. Структура резидентной программы. Структура .exe-, .com-файлов. Вызов исполняемых программ. Передача параметров вызываемым программам.

Литература [45, c. 212, c. 224]

Тема 2.23. Процедурные типы

Процедурные типы. Передача функций как параметров.

Литература [4, c. 274], [45, c. 173]

РАЗДЕЛ 3. Объектно-ориентированное программирование

Тема 3.1. Объект. Свойства

Объект. Свойства. Способы описания. Инкапсуляция. Полиморфизм. Наследование.

Литература [4, с. 282, с. 193], [14, с. 237], [45, с. 192]

Тема 3.2. Инициализация и разрушение объекта

Инициализация и разрушение объекта. Конструктор и деструктор.

Литература [4, с. 296], [45, с. 202]

Тема 3.3. Виртуальные функции

Отличие виртуальной функции от статической. Назначение виртуальных функций.

Литература [4, с. 294, с. 299], [45, с. 202]

РАЗДЕЛ 4. Система программирования Delphi 

Тема 4.1. Введение в Delphi. Окна

Особенности разработки программ под Windows. Введение в Delphi. Главное окно: пиктографические кнопки, палитра компонентов. Окна: формы, инспектора объектов, кода программы.

Литература [44, с. 15]

Тема 4.2. Основы визуального программирования

Пустая форма и ее модификация. Компоненты страницы Standard. Размещение нового компонента. Обработка событий. Динамическое изменение свойств объекта.

Литература [44, с. 32, c.44, с. 322]

Тема 4.3. Компоненты страницы Additional

Компоненты страницы Additional, их назначение, свойства, примеры применения.

Литература [44, с. 46, с. 350]

Тема 4.4. Компоненты страницы Win32

Компоненты страницы Win32, их назначение, свойства, примеры применения.

Литература [41, с. 48, с. 392]

Тема 4.5. Компоненты страницы System

Компоненты страницы System, их назначение, свойства, примеры применения.

Литература [44, с. 50, с. 447]

Тема 4.6. Компоненты страницы Data Access

Компоненты страницы Data Access, их назначение, свойства, примеры применения.

Литература [44, с. 24]

Тема 4.7. Компоненты страницы Data Controls

Компоненты страницы Data Controls, их назначение, свойства, примеры применения.

Литература [44, с. 24]

Тема 4.8. Компоненты страницы Decision Cube

Компоненты страницы Decision Cube, их назначение, свойства, примеры применения.

Литература [44, с. 24]

Тема 4.9. Компоненты страницы QReport

Компоненты страницы QReport, их назначение, свойства, примеры применения.

Литература [44, с. 694]

Тема 4.10. Компоненты страниц Dialogs, ActiveX

Компоненты страниц Dialogs, ActiveX, их назначение, свойства, примеры применения.

Литература [44, с. 50, с. 52, с. 466]

1.3. Лабораторные работы

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

  1.  Разработка линейных, разветвляющихся и циклических алгоритмов.
  2.  Разработка циклических программ с использованием массивов.
  3.  Разработка программ с использованием процедур и функций.
  4.  Разработка программ с использованием библиотек пользователя.
  5.  Разработка программ с использованием рекурсивных процедур и функций.
  6.  Разработка программ, включающих процедуры и функции над множествами и строками, с использованием текстовых файлов.
  7.  Записи, массивы записей. Разработка программ создания и обработки типизированных файлов.
  8.  Разработка программ с использованием процедур и функций модуля CRT.
  9.  Разработка программ с использованием процедур и функций графической библиотеки.
  10.  Разработка процедур и функций для создания и обработки стеков, очередей.
  11.  Изучение основных принципов объектного программирования: инкапсуляция, наследование и полиморфизм. Разработка простейших объектных программ.
  12.  Разработка простейших программ, управляемых с помощью компонентов Standard, Additional.
  13.  Разработка программ, управляемых с помощью компонентов Win32, System.
  14.  Разработка программ, управляемых с помощью компонентов Dialogs, ActiveX.

2. Краткие теоретические сведения

2.1. Pascal

Комментарии

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

(* Комментарий, выделенный первым способом *)

{Комментарий, выделенный вторым способом}

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

Структура программы

Pascal задумывался как учебный язык структурного программирования. Как следствие этого, программы, на нем написанные, имеют достаточно простую, но жесткую структуру. Она такова:

{ часть объявления имени программы: }

Program NameOfProgram;

{часть объявления списка подключаемых модулей:}

Uses {список модулей через запятую};

{ часть объявления констант: }

Const

{список констант и их значений через ; };

{ часть объявления типов пользователя: }

Type

{список типов пользователя через ; };

{ часть объявления переменных: }

Var

{список переменных и их типов через ;};

{ часть основной программы }

Begin {точка входа}

{операторы основной программы}

End. {основная точка выхода и конец программы}

Части Program и Uses не являются обязательными, однако должны быть первыми и единственными в программе. Частей вида Const, Type и Var в программе может существовать множество, их порядок не нормируется и определяется требованиями программирования. Часть основной программы всегда является последней, признаком ее завершения является ключевое слово End с точкой после него. Любая информация после завершения основной части игнорируется компилятором.

Идентификаторы

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

Каждое данное (каждый элемент данных) может (и должен) иметь определенное имя (идентификатор). То же самое относится и к каждому типу данных, и к процедурам, и к функциям. Идентификатором на языке Pascal считается любая последовательность, имеющая не более чем 126 символов, состоящая из букв латинского алфавита, цифр и символа «_», причем первым символом должна быть буква. Большие и маленькие буквы не различаются. Идентификаторы, у которых одинаковы первые 63 символа, считаются идентичными.

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

Стандартные типы данных

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

  1.  целочисленные:

Integer 

2 байта со знаком

ShortInt

2 байта со знаком

Longint

4 байта со знаком

Word

2 байта без знака

byte

1 байт без знака

  1.  дробные:

Real

6 байт

Single

4 байта

Double

8 байт

Extended

10 байт

Comp

8 байт

  1.  логические:

Boolean

1 байт

WordBool

2 байта

ByteBool

1 байт

LongBool

4 байта

  1.  символьные:

Char

1 байт

String

от 1 до 255 байт + байт длины

  1.  указатели:

Pointer

4 байта, нетипизированный указатель

^<имя_типа>

4 байта, типизированный указатель

  1.  массивы – несколько однотипных элементов, объединенных одним именем. Доступ к элементам производится по их номерам (индексам);
  2.  записи – несколько разнотипных элементов, объединенных одним именем. Доступ к элементам производится по их уникальным «подименам»;
  3.  множества – несколько однотипных элементов, объединенных одним именем, причем элементы не повторяются. Доступ к элементам производится через специальные функции;
  4.  файлы – несколько элементов, объединенных одним именем и расположенных вне оперативной памяти. Доступ к ним производится с помощью специфических процедур и функций;
  5.  типы, определяемые программистом, – поименованные структуры из некоторых стандартных типов (эти типы не являются стандартными).

Следует отметить, что диапазон значений числовых типов определяется их размером и наличием знака для целочисленных типов, а для дробных – размером и спецификацией IEEE. Например, диапазон переменной типа байт – от минус двух в седьмой степени до плюс двух в седьмой без единицы (–128...127). Логические переменные могут принимать значения False и True (ложь и истина соответственно), символьные – любое из значений ASCII набора, строки – набор символов ASCII длиной от 0 до указанной длины (максимально – 255).

Переменные

Элементы данных (в данном случае переменные) простых типов описываются так:

<имя_переменной> : <имя_типа>;

Переменные типа «массив элементов типа ...» объявляются следующим образом:

<имя_переменной>: Array [нижняя_граница ..

верхняя_граница] Of <имя_типа>;

При этом доступ к элементам производится через индексы: i-й элемент массива k есть k[i]. Это показано для одномерных массивов – линейной последовательности элементов; в принципе возможно описание двухмерных массивов – матриц элементов; трехмерных – кубов из элементов и т. д., до семимерных. Добавление дополнительного измерения к описанию массива производится добавлением после запятой пары «нижняя_граница .. верхняя_граница».

Переменные типа «запись» объявляются следующим образом:

<идентификатор>: Record 

<имя_поля>: <тип>;

[<имя_поля>: <тип>;]

End;

Доступ к полям записи производится следующим образом: «Поле pole переменной f» есть f.pole.

Нестандартные типы

Рассмотрим способы определения программистом собственных типов. Для того чтобы объявить собственный тип, программист должен в Type-части (т. е. после ключевого слова Type) написать сначала имя типа, а затем, после символа «=» – его определение, т. е. структуру. Как правило, программисты определяют собственными типами записи, массивы, объекты или типизированные указатели:

Type

TMyArray = Array[4..18] Of Real;

PMyArray = ^MyArray;

TMyRecrd = Record 

I: Integer;

C: Word;

S: String[4];

End;

Операторы

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

Все действия производятся с помощью операторов. Операторы делятся на два типа: простые и составные. К простым относятся:

  1.  пустой оператор:

;

  1.  оператор присваивания:

<переменная> := <выражение>;

  1.  оператор условия:

If <логическое условие> Then

<оператор1>

[Else 

<оператор2>]; 

  1.  оператор множественного выбора:

Case <переменная> Of 

<значение1>: <оператор1>;

[<значениеN>: <операторN>;]

[Else 

<оператор>;]

End; 

  1.  оператор параметрического цикла:

For <переменная> := <начальное_значение> To 

<конечное_значение> Do

<оператор>;

  1.  оператор цикла с предварительной проверкой условия:

While <логическое условие> Do 

<оператор>;

  1.  оператор цикла с постфиксной проверкой условия:

Repeat <оператор>;

[<оператор>;]

Until <логическое условие>; 

  1.  вызов процедуры.

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

Составным оператором называется любой набор простых и составных операторов, начинающийся с Begin и оканчивающийся End.

В описании простых операторов <оператор> означает оператор любого типа – простой либо составной. Однако следует помнить, что, если при выполнении условия (или в теле цикла) необходимо выполнять несколько действий, применение составного оператора обязательно. Также следует отметить, что любой оператор – простой или составной – должен оканчиваться точкой с запятой, за исключением тех случаев, когда он находится перед ключевым словом Else условного оператора или непосредственно перед словом End.

Выполнение простых операторов

Пустой оператор попросту не выполняется, управление сразу передается следующему оператору.

Оператор присваивания выполняется стандартным образом: <переменной> в левой части присваивается значение предварительно вычисленного <выражения>. Выражением могут служить:

  1.  константа;
  2.  переменная;
  3.  вызов функции;
  4.  правильно построенный набор из предыдущих элементов, объединенных операциями.

Тип выражения должен соответствовать типу переменной в левой части оператора присваивания или может быть приведенным к этому типу. Операции в последнем пункте зависят от типа вычисляемого выражения: арифметические (+ – * / mod div), логические (And, Or, Not, =), строковые (+) и т. д.

Также стандартным образом выполняется оператор условия. При равенстве логического выражения True выполняется <оператор1>, в противном случае выполняется <оператор2>, если таковой присутствует.

Оператор множественного выбора выполняется следующим образом: значение <переменной> последовательно сравнивается со <значениями>, указанными в теле оператора, и при равенстве значений выполняется соответствующий <оператор>. Если все сравнения прошли безуспешно и существует часть Else оператора, то выполняется принадлежащий ей оператор.

Оператор параметрического цикла выполняется следующим образом. В первую очередь переменной (называемой параметром цикла) присваивается начальное значение. Затем производится сравнение значения параметра цикла с конечным значением. Если значение параметра больше конечного значения, цикл считается завершенным. В противном случае выполняется <оператор> (называемый телом цикла), после чего параметр цикла увеличивается на 1. Затем все повторяется, начиная с этапа сравнения.

У параметрического цикла есть разновидность: если вместо слова To написать DownTo, то параметр цикла будет не увеличиваться, а уменьшаться на 1, и, соответственно, условием окончания цикла будет достижение параметром цикла конечного значения.

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

Оператор цикла с предварительной проверкой условия выполняется так. До первого выполнения оператора (т. e. тела цикла) вычисляется значение логического условия. Если условие принимает значение True, то выполняется тело цикла и вновь вычисляется значение логического условия, в противном случае оператор считается выполненным (цикл завершается). Следует заметить, что изменение значения логического условия – личное дело программиста.

Оператор цикла с постфиксной проверкой условия выполняется, в известном смысле, наоборот. Сначала выполняется <оператор> (тело цикла), затем вычисляется логическое условие. При равенстве его False цикл повторяется. Изменение значения логического условия также должно быть предусмотрено разработчиком программ.

Следует напомнить, что цикл While может не выполниться ни разу, а цикл Repeat выполнится как минимум один раз.

Процедуры и функции

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

Procedure <имя процедуры> [(<список_параметров>)];

[Var часть]

[Const часть]

Begin 

{тело процедуры}

[<операторы>]

End;

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

[Var] <имя формального параметра>: <тип параметра>

разделенных точками с запятой, где именем параметра является идентификатор, с которым ассоциируется значение фактически переданного процедуре параметра (именно значение, а не переменная, передаваемая в качестве параметра), а типом параметра – стандартный или ранее определенный тип. Если перед именем параметра стоит ключевое слово Var, то изменение данного параметра в теле процедуры приведет к изменению значения переменной, переданной в качестве параметра.

Вызов процедуры производится так:

<имя процедуры> [(<список фактических параметров>)];

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

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

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

Function <имя_функции> [(<список_параметров>)]:

тип_результата;

[Var часть]

[Const часть]

Begin 

{тело функции}

[<операторы>]

End;

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

Первая программа

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

Program Hello;              {имя программы}

Var

S: string;

begin                             {основная программа}

writeln('Привет! Как вас зовут?');

readln(S);                          {читаем имя пользователя}

writeln('Bас зовут ',S);     {выводим на экран}

{и т.д.}

end.

После первого запуска программы можно увидеть пустое окно и саму интегрированную среду (рис. 2.1).

Рис. 2.1. Внешний вид экрана

Цифрами обозначено следующее:

  1.  окно редактирования;
  2.  комментарии, выделенные цветом (цветовое выделение – одна из полезных функций редактора);
  3.  непосредственно операторы языка;
  4.  строка меню – способ выбора действий пользователя (вызывается клавишей F10 или мышью);
  5.  строка состояния – подсказка и способ быстрого вызова наиболее частых действий;
  6.  полосы вертикальной и горизонтальной прокрутки (для быстрого перемещения по файлу);
  7.  уголок, ухватившись мышью за который, можно изменять размер окна. Нажатие клавиши F5 приводит к разворачиванию окна во весь экран (повторно-обратное действие);
  8.  курсор-указатель текущей позиции редактирования;
  9.  кнопка развертки/свертки окна мышью;
  10.  указатель номеров строки и колонки положения курсора;
  11.  номер окна (запомнив (однозначный) номер окна, можно быстро переключиться в него, нажав Alt и цифру с номером.)

После выполнения программы появится окно (рис. 2.2).

Рис. 2.2. Результат выполнения программы

Элементарные алгоритмы

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

- если их много, то цикл;

- если к моменту обработки первого известно, сколько их всего, то цикл от 1 до N;

- если нужно не сбиться со счета, необходима переменная цикла;

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

- если они нужны не раз, то последовательность (массив, файл, список);

- значение переменной можно использовать, если переменная действительно им обладает;

- если нужно сделать что-то неочевидное, то это – процедура;

- если процедура вычисляет что-то одно, то это – функция;

- у процедуры бывают параметры – входные и выходные.

Сразу оговоримся, что под ними подразумевается все, что угодно: элементы данных, выводы на экран букв и/или точек, этапы управления аппаратурой и т. д.

Комбинации клавиш

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

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

2.2. Delphi

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

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

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

Инспектор объектов

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

Окно инспектора объектов состоит из трех основных частей:

  •  селектора компонентов;
  •  страницы Properties (свойства);
  •  страницы Events (события).

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

Меmo: ТМеmo

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

Страница Properties инспектора объектов отображает все свойства выбранного компонента, доступные на стадии проектирования.

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

Свойства определяют функционирование компонента.

Страница разделена на два столбца. Столбец Property слева показывает имя свойства. Столбец Value справа предназначен для выбора или ввода значения свойства.

Если выбранный компонент имеет больше свойств, чем вмещает окно инспектора объектов, можно использовать линейку прокрутки.

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

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

Если внимательно посмотреть на инспектор объектов, то можно заметить, что перед именами некоторых свойств стоит знак плюс. Он указывает на то, что данное свойство представляет собой множество или класс; свойство любого из этих видов может быть раскрыто для отображения набора значений или свойств класса. Для раскрытия свойства надо дважды щелкнуть на его имени в столбце Property или выбрать пункт Expand в контекстном меню инспектора объектов. Для закрытия списка надо дважды щелкнуть на имени свойства еще раз или выбрать в контекстном меню пункт Collapse.

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

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

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

Использование страницы Events очень просто. Для создания обработчика события нужно дважды щелкнуть в столбце Value рядом с именем этого события. При этом Delphi создаст функцию со всеми параметрами, необходимыми для обработки. На экране появится окно редактора кода с курсором, расположенным внутри обработчика. Остается только начать ввод кода. Имя генерируемой функции составляется из значения свойства Name компонента и имени обрабатываемого события. Например, если имеется кнопка ОК и обрабатывается событие OnClick, функция получит имя OKClick.

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

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

Столбец Value страницы Events содержит кнопку для вызова списка обработчиков, совместимых с текущим событием. Все, что нужно сделать – это выбрать нужное имя из списка.

Пример написания программы

Считая заданными значения длин отрезков x, y, z, выяснить, можно ли из этих отрезков построить треугольник.

Панель диалога программы можно организовать, как показано на рис. 2.4.

Рис. 2.4. Форма для решения задачи

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

Новая форма имеет одинаковые имя (Name) и заголовок (Caption) – Form1. Для изменения заголовка надо вызвать окно инспектора объектов (F11) и щелкнуть кнопкой мыши на форме. В форме инспектора объектов надо найти и щелкнуть мышью на свойстве Caption страницы Properties. В выделенном окне набрать «КР2. учащегося(ейся) гр. № ФИО».

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

В данной программе с помощью однострочного редактора будут вводиться переменные x, y, z типа integer. Для этого нужно выбрать в меню компонентов Standard пиктограмму , щелкнуть мышью в том месте формы, где нужно ее поставить; вставить три компонента TEdit в форму; захватывая их «мышью» отрегулировать размеры окон и их положение. Обратите внимание на то, что в тексте программы появились три новых однотипных переменных Edit1, Edit2, Edit3. В каждой из этих переменных с расширением .Text будет содержаться строка символов (тип String) и отображаться в соответствующем окне Edit.

Так как численные значения переменных x, y, z имеют целый тип для преобразования строковой записи числа, находящегося в переменной Edit1.Text, в действительное, используется стандартная функция х:=StrToInt(Edit1.Text).

Если исходные данные имеют вещественный тип, например real, то используется стандартная функция X:=StrToFloat(Edit1.Text).

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

С помощью инспектора объектов надо установить шрифт и размер символов, отражаемых в строке Edit (свойство Font).

На форме (рис. 2.4) имеются три пояснительные надписи (x, y, z). Для нанесения таких надписей на форму используется компонент TLabel. Для этого нужно в меню компонентов Standard выбрать пиктограмму , щелкнуть на ней мышью. После этого в нужном месте формы щелкнуть мышью, появится надпись Label1. Проделать это для трех надписей. Для каждой надписи, щелкнув на ней мышью, отрегулировать размер и, изменив свойство Caption инспектора объектов, ввести строку, например х, а также выбрать размер символов (свойство Font: Times New Roman, жирный, 16).

Обратите внимание, что в тексте программы автоматически появились три новых переменных типа .TLabel. В них хранятся пояснительные строки, которые можно изменять в процессе работы программы.

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

If ((x+y)>z) and ((x+z)>y) and ((y+z)>x) then

Label4.Caption:='Можно построить треугольник'

Else

Label4.Caption:='Нельзя построить треугольник'

Для вывода многострочного текста обычно используется текстовое окно, которое представлено компонентом (TMemo). Для этого в меню компонентов надо выбрать пиктограмму и поместить компонент TMemo на форму. С помощью мыши отрегулировать его размеры и местоположение. Для того, чтобы в окне появились вертикальная и горизонтальная полосы прокрутки, надо установить с помощью инспектора свойства ScrollBars ssBoth (по умолчанию ssNone).

В тексте программы появилась переменная Memo1 типа ТMemo. Информация, которая отображается построчно в окно типа ТMemo, находится в массиве строк Memo1.Lines. Каждая строка имеет тип String.

Для чистки окна используется метод Memo1.Clear. Для того чтобы добавить новую строку в окно, используется метод Memo1.Lines.Add (переменная типа String). Например, добавим условие задачи Memo1.Lines.Add('Начальные значения отрезков задаются в программе.')

Если нужно вывести число, находящееся в переменной действительного или целого типа, то его надо предварительно преобразовать к типу String и добавить в массив Memo1.Lines.

Например, если переменная х:=34 целого типа, то метод Memo1.Lines.Add(‘Значение х=’+IntToStr(u)) преобразует это число, и в окне появится строка «Значение х=34». Если переменная х:= –112,548 – действительная, то при использовании метода Memo1.Lines.Add(‘Значение х=’+FloatToStrF(u.fffixed,8,2)) будет выведена строка «Значение = –112.55». При этом под все число отводится восемь позиций, из которых две позиции занимает его дробная часть.

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

Чтобы написать программу обработки события создания формы (FormCreate), нужно выполнить следующие действия. При запуске программы возникает событие «создание формы» (OnCreate). Создадим программу-обработчик этого события, которая заносит начальные значения переменных x, y, z в соответствующие окна TEdit, а в окне ТMemo помещает условие задачи. Для этого надо дважды щелкнуть мышью на любом свободном месте формы. На экране появится текст, в котором автоматически внесен заголовок процедуры-обработчика события создания формы:

Procedure TForm1.FormCreate(Sender:TObject).

Между begin и end вставим текст программы, приведенный на с. 31 данного пособия.

Чтобы написать программу обработки события нажатия кнопки (ButtonClick), нужно выполнить следующие действия. Поместить на форму кнопку, которая описывается компонентом ТButton. Для чего выбрать в меню компонентов Standard пиктограмму . С помощью инспектора объектов изменить заголовок (Caption) – Button1 на слово «Выполнить» или другое (по желанию). Отрегулировать положение и размер кнопки.

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

После этого два раза щелкнуть мышью на кнопке, появится текст программы, дополненной заголовком процедуры обработчика события – нажатия кнопки (Procedure TForm1.ButtonClick (Sender:TObject);). Для обработки события Выход надо использовать процедуру Form1.Close. Для обработки события Выполнить надо набрать текст этой процедуры, приведенный далее в примере.

Запустить программу можно нажав Run в главном меню Run, или клавишу F9, или пиктограмму . При этом происходит трансляция, если нет ошибок, компоновка программы и создание единого загружаемого файла с расширением .exe. На экране появляется активная форма программы (рис. 2.4).

Работа с программой происходит следующим образом: надо нажать (щелкнуть мышью) кнопку Выполнить. В поле Label4 появляется результат; изменить исходные значения x, y, z в окнах Edit1, Edit2, Edit3 и снова нажать кнопку Выполнить – появится новый результат. Завершить работу программы можно, нажав кнопку Выход или ProgramReset в главном меню Run, или кнопку на форме.

Пример

unit Unit1;

// Считая заданными значения отрезков x, y, z, выяснить,

// можно ли из этих отрезков построить треугольник

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

 TForm1 = class(TForm)

   Label1: TLabel;

   Edit1: TEdit;

   Label2: TLabel;

   Label3: TLabel;

   Edit3: TEdit;

   Button1: TButton;

   Edit2: TEdit;

   Button2: TButton;

   Label4: TLabel;

   Memo1: TMemo;

   procedure Button1Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure Button2Click(Sender: TObject);

 private

   {Private declarations}

 public

   {Public declarations}

 end;

var

 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

 var

 x, y, z: integer;

 begin

// Вводим стороны треугольника

 x:=StrToInt(Edit1.Text); //Считывается значение X

 Y:=StrToInt(Edit2.Text); //Считывается значение Y

 Z:=StrToInt(Edit3.Text); //Считывается значение Z

// Проверяем возможность построения треугольника

 If ((x+y)>z) and ((x+z)>y) and ((y+z)>x) then

  Label4.Caption:='Можно построить треугольник '

 Else

  Label4.Caption:='Нельзя построить треугольник ';

// Выводим в поле Label4 ответ

 end;

procedure TForm1.FormCreate(Sender: TObject);

begin

 Memo1.Clear;

 Memo1.Lines.Add('Начальные значения отрезков задаются в программе');

 Memo1.Lines.Add('Вы можете ввести другие длины ');

 Memo1.Lines.Add('Для того, чтобы узнать, можно ли из этих отрезков построить');

 Memo1.Lines.Add('треугольник, нажмите кнопку Вычислить');

 Edit1.Text:='34';   // Начальное значение Х

 Edit2.Text:='74';  // Начальное значение Y

 Edit3.Text:='19'; // Начальное значение Z

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

 Form1.Close;

end;

end.

3. Методические указания по выполнению

контрольных работ

В процессе изучения предмета ОАиП учащиеся безотрывной формы обучения должны выполнить 2 контрольные работы. Контрольная работа 1 содержит 5 заданий, которые должны быть выполнены на языке программирования Pascal. Контрольная работа 2 содержит 5 заданий, 2 из которых должны быть выполнены на языке программирования Pascal с использованием модулей Crt и Graph, а 3 задания должны быть выполнены в системе программирования Delphi. При выполнении контрольных заданий необходимо изучить теоретический материал по каждому вопросу, разобрать приведенные в пособии примеры, выполнить задания в соответствии со своим вариантом. Номер варианта определяется по последней цифре шифра учащегося. В контрольной работе необходимо представить тексты программ в формате А4 с подробными комментариями, распечатку результатов работы программ, а также электронный носитель (дискета, диск CD-R, диск CD-RW), содержащий программы. На электронном носителе все файлы должны быть расположены в одной папке. Имя папки должно состоять из номера группы и фамилии учащегося, разделенных знаком «подчеркивания», например, учащийся группы 44411 Сидоренко Константин Петрович должен назвать папку следующим образом: 44411_СидоренкоКП.

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

4. Контрольная работа 1

4.1. Варианты контрольной работы 1

Задание 1

Напечатать таблицу значений функции на отрезке [a, b] с шагом h. Найти корень функции на этом интервале.

  1.    

                   Ответ:

  1.   

               Ответ:

  1.  

                    Ответ:

  1.  

                    Ответ:

  1.  

                    Ответ:

  1.  

                      Ответ:

  1.  

                     Ответ:

  1.  

                   Ответ:

  1.  

                    Ответ:

  1.  

                 Ответ:

Задание 2

Разработать программу и испытать ее на контрольных примерах.

Вариант 0

Задан двухмерный массив целых чисел А размером N на М. Найти максимальный элемент и поменять его местами с элементом А[1, 1].

Вариант 1

Задан двухмерный массив целых чисел А размером N на М, состоящий из нулей и единиц. Найти количество нулей и единиц в этом массиве.

Вариант 2

Задан двухмерный массив целых чисел А размером N на М. Сформировать одномерный массив В[К], состоящий из положительных элементов массива, и вычислить их произведение.

Вариант 3

Задан двухмерный массив целых чисел А размером N на М. Сформировать одномерный массив В[К], состоящий из отрицательных элементов массива, и вычислить их сумму.

Вариант 4

Задан двухмерный массив целых чисел А размером N на М, состоящий из положительных и отрицательных чисел. Найти количество положительных элементов массива и вычислить их произведение.

Вариант 5

Задан двухмерный массив целых чисел А размером N на М. Найти сумму элементов, расположенных под главной диагональю.

Вариант 6

Задан двухмерный массив целых чисел А размером N на М. Найти минимальный элемент и поменять его местами с элементом А[N, М].

Вариант 7

Задан двухмерный массив целых чисел А размером N на М. Найти произведение элементов, расположенных над главной диагональю.

Вариант 8

Задан двухмерный массив целых чисел А размером N на М. Сформировать одномерный массив В[К], состоящий из элементов массива А, больших значения Т, и вычислить их произведение.

Вариант 9

Задан двухмерный массив целых чисел А размером N на М. Сформировать одномерный массив В[К], состоящий из элементов массива А в диапазоне от –2 до 5, и вычислить их сумму.

Задание 3

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

Вариант 0.  

Вариант 1.  

Вариант 2.  

Вариант 3.  

Вариант 4.  

Вариант 5.  

Вариант 6.  

Вариант 7.  

Вариант 8.  

Вариант 9.  

Задание 4

Использование текстовых файлов для ввода/вывода.

Вариант 0

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

Вариант 1

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

Вариант 2

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

Вариант 3

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

Вариант 4

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

Вариант 5

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

Вариант 6

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

Вариант 7

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

Вариант 8

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

Вариант 9

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

Задание 5

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

Вариант 0

Структура STUDENT содержит следующие поля:

- фамилия и инициалы;

- номер группы;

- успеваемость (массив из пяти элементов).

Выполнить следующие действия:

- вывод на дисплей фамилий и номеров групп тех студентов, средний балл успеваемости которых больше 4.0;

- если таких студентов нет, вывести соответствующее сообщение.

Вариант 1

Структура STUDENT содержит следующие поля:

- фамилия и инициалы;

- номер группы;

- успеваемость (массив из пяти элементов).

Выполнить следующие действия:

- вывод на дисплей фамилий и номеров групп всех студентов, имеющих оценки 4 и 5;

- если таких студентов нет, вывести соответствующее сообщение.

Вариант 2

Структура STUDENT содержит следующие поля:

- фамилия и инициалы;

- номер группы;

- успеваемость (массив из пяти элементов).

Выполнить следующие действия:

- вывод на дисплей фамилий и номеров групп всех студентов, имеющих хотя бы одну оценку 2;

- если таких студентов нет, вывести соответствующее сообщение.

Вариант 3

Структура AEROFLOT содержит следующие поля:

- название пункта назначения рейса;

- номер рейса;

- тип самолета.

Выполнить следующие действия:

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

- если таких рейсов нет, выдать на дисплей соответствующее сообщение.

Вариант 4

Структура AEROFLOT содержит следующие поля:

- название пункта назначения рейса;

- номер рейса;

- тип самолета.

Выполнить следующие действия:

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

- если таких рейсов нет, выдать на дисплей соответствующее сообщение.

Вариант 5

Структура WORKER содержит следующие поля:

- фамилия и инициалы работника;

- название занимаемой должности;

- год поступления на работу.

Выполнить следующие действия:

- вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры;

- если таких работников нет, вывести на дисплей соответствующее сообщение.

Вариант 6

Структура TRAIN содержит следующие поля:

- название пункта назначения;

- номер поезда;

- время отправления.

Выполнить следующие действия:

- вывод на экран информации о поездах, отправляющихся после введенного с клавиатуры времени;

- если таких поездов нет, выдать на дисплей соответствующее сообщение.

Вариант 7

Структура TRAIN содержит следующие поля:

- название пункта назначения;

- номер поезда;

- время отправления.

Выполнить следующие действия:

- вывод на экран информации о поездах, направляющихся в пункт, название которого введено с клавиатуры;

- если таких поездов нет, выдать на дисплей соответствующее сообщение.

Вариант 8

Структура TRAIN содержит следующие поля:

- название пункта назначения;

- номер поезда;

- время отправления.

Выполнить следующие действия:

- вывод на экран информации о поезде, номер которого введен с клавиатуры;

- если таких поездов нет, выдать на дисплей соответствующее сообщение.

Вариант 9

Структура MARSH содержит следующие поля:

- название начального пункта маршрута;

- название конечного пункта маршрута;

- номер маршрута.

Выполнить следующие действия:

- вывод на экран информации о маршруте, номер которого введен с клавиатуры;

- если таких маршрутов нет, выдать на дисплей сообщение.

4.2. Методические указания по выполнению

заданий контрольной работы 1

Задание 1

Напечатать таблицу значений функции  на отрезке [0, 1] с шагом 0,1. Найти корень функции на этом интервале с точностью 0,01.

Решение

Для нахождения корня функции используем метод деления отрезка пополам.

Program Koren;       {название программы}

{Задание1 выполнено учащимся № группы ФИО № варианта}

uses 

 crt;                   {подключение модуля для работы с экраном}

var                     {объявление переменных}

 a,b,eps,h,x,y,y1: real;

begin                 {начало программы}

 clrscr;               {очистка экрана}

 {вывод сообщений на экран}

 writeln('Задание 1');

 writeln('Программа нахождения корня функции

y = exp(x) – exp(–x) – 2');

 writeln('Введите интервал, на котором нужно найти корень');

 readln(a,b);         {чтение переменных a, b}

 writeln('Введите шаг изменения переменной');

 readln(h);            {чтение переменной h}

 {печать шапки таблицы}

 writeln('i==========Т==========i');

 writeln('|    x     |     y    |');

 writeln('|==========+==========|');

 x:=a;

 repeat                 {начало цикла х=а}

  y:=exp(x)-exp(-x)-2;    {вычисление очередного значения у}

  {печать полученных значений}

  writeln('| ',x:8:2,' | ',y:8:2,' |');

  x:=x+h;                        {вычисление очередного значения х}

 until(x>b);                    {конец цикла х>b}

 writeln('i==========T==========i');

 writeln('Введите точность, с которой нужно найти корень');

 readln(eps);                   {ввод точности вычисления}

 x:=(b+a)/2;                   {устанавливаем х на середину отрезка}

 y:=exp(x)-exp(-x)-2;     {вычисляем у от х}

 {организуем цикл, который будет выполняться до тех пор, пока отрезок не станет очень маленьким или у не станет равным 0}

 while (((b-a)>eps) and (y<>0)) do

 begin

  y1:=exp(a)-exp(-a)-2;  {вычисляем у от а}

  if y*y1>0 then          {если на отрезке от а до х корня нет, то}

   a:=x                         {а=х}

  else                           {иначе}

   b:=x;                        {в=х}

  x:=(b+a)/2;                {находим новую середину отрезка}

  y:=exp(x)-exp(-x)-2;   {и значение функции в этой точке}

 end;                              {конец цикла}

 {вывод на экран корня данного уравнения}

 writeln('Корень функции равен ',x:5:2);

 readkey;                     {ожидание нажатия клавиши}

end.                              {конец программы}

Результат выполнения программы представлен на рис. 4.1.

Рис. 4.1. Результат выполнения программы

Задание 2

Задана матрица B(bij), сформировать матрицу A(aij), где

.

Вычислить суммы элементов нечетных строк матрицы А.

Решение

program Matrica;      {название программы}

{Задание2 выполнено учащимся № группы ФИО № варианта }

uses 

 crt;        {подключение модуля для работы с экраном}

var         {объявление переменных}

    i,j,n,m,s:integer;

    a,b:array[1..50,1..50] of integer;

begin                        {начало программы}

 clrscr;                      {очистка экрана}

 writeln('Задание 2');   {вывод сообщений на экран}

 write('Введите количество строк матрицы В n=');

 readln(n);              {чтение переменной n}

 write('Введите количество столбцов матрицы В m=');

 readln(m);              {чтение переменной m}

 {печать разделительной линии}

 writeln('======================================');

 writeln('Введите исходный массив В');

 for i:=1 to n do {цикл по i от 1 до n}

  for j:=1 to m do {цикл по j от 1 до m}

   read(b[i,j]);  {ввод элемента b[i,j] с клавиатуры}

 writeln('======================================');

 writeln('Полученный массив А');

 {формирование нового массива А}

 for i:=1 to n do {цикл по i от 1 до n}

 begin

  for j:=1 to m do {цикл по j от 1 до m}

  begin

 {вычисление элемента a[i,j]}

   a[i,j]:=2*b[i,j]+1;

   write(a[i,j]:5); {вывод элемента а[i,j] на экран}

  end;   {конец цикла по j}

  writeln;

 end;   {конец цикла по i}

 writeln('=====================================');

 writeln('Суммы нечетных строк');

 {вычисление сумм нечетных строк}

 for i:=1 to n do {цикл по i от 1 до n}

 begin

  s:=0;

  for j:=1 to m do {цикл по j от 1 до m}

 {если i – нечетное, то накапливается сумма s}

   if odd(i) then 

      s:=s+a[i,j];

  {если i – нечетное, то s выводится на печать}

 if odd(i) then 

   write (s:8);

  end;    {конец цикла по i}

 readkey;                            {ожидание нажатия клавиши}

 end.                           {конец программы}

Результат выполнения программы представлен на рис. 4.2.

Рис. 4.2. Результат выполнения программы

Задание 3

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

; Y(x) =

Решение

program ProcFunc;    {название программы}

{Задание3 выполнено учащимся № группы ФИО № варианта}

uses 

 crt;        {подключение модуля для работы с экраном}

var 

 i,n:integer;            {объявление переменных}

 s,x,y:real;     

procedure SumRyad(n:integer;x:real;var s:real);

var   {объявление переменных}

   i,i1:integer;      

  fact:longint;

   y1:real;

   s:=0;  {инициализация переменных}

   fact:=1;

   i1:=1;

   for i:=1 to n do {цикл по i от 1 до n}

   begin

    fact:=fact*i;  {вычисляем факториал}

    i1:=i1*(-1);  {вычисляем -1 в степени}

    x1:=x1*x;  {вычисляем х в степени}

    y1:=i1*x1/(fact*(2*i-1)); {вычисляем очередной член ряда}

    s:=s+y1;  {накапливаем сумму}

   end;

   writeln;  

   writeln('сумма ряда =',s:9:3); {выводим на печать s }

 end;

function FuncY(x,s:real):real;

 begin

 if x>0 then

  FuncY:=1+3*s

 else

  if x=0 then

   FuncY:=2*x-0.75

  else

   FuncY:=-2*x-x*x*x;

 end;

 begin                          {начало программы}

 clrscr;                       {очистка экрана}

 writeln('Задание 3');

 writeln('Вычисление значения ряда и функции для заданного х');

 writeln('Введите количество итераций');

 readln(n);                    {чтение количества итераций n}

 write('Введите х=');

 readln(x);                    {чтение переменной х}

 SumRyad(n,x,s);               {вызов процедуры}

 y:=FuncY(x,s);              {вычисление у с помощью функции}

 writeln('Значение функции y=',y:9:3);

 readkey;                      {ожидание нажатия клавиши}

end.

Результат выполнения программы представлен на рис. 4.3.

Рис. 4.3. Результат выполнения программы

Задание 4

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

Решение

Program Text; {название программы}

{Задание4 выполнено учащимся № группы ФИО № варианта}

type

 stroka  =string[30];

uses 

  crt; {подключение модуля для работы с экраном}

var  {объявление переменных}

 s:string;

 mas:array[1..100] of string;

 i,j,k:integer;

 namefilein:stroka;

 t: text;

procedure delblanks(var ss:string);

{процедура удаления пробелов}

begin

 while ss[1]=' ' do 

   delete(ss,1,1);

end;

begin                        {начало программы}

 clrscr;                      {очистка экрана}

 writeln('Задание 4');

 writeln('Переставить слова в предложении, введенном из файла');

 write(' Введите имя входного файла ');

 readln(namefilein);

  assign(t,namefile);   {подключение файла}

 Reset(t);  {открытие файла для чтения}

 {вывод сообщений на экран}

 write('Начальное предложение:');

 read(t,s);  {чтение предложения}

 writeln(s);  {печать предложения}

 k:=1;   {счетчик слов в предложении}

if s[length(s)]='.' then {удаляем точку в конце предложения}

  delete(s,length(s),1);

 s:=s+' ';  {вставляем пробел}

 while length(s)>0 do

 begin

   delblanks(s);

   i:=pos(' ',s);

   mas[k]:=copy(s,1,i-1);

   inc(k);

   delete(s,1,i);

 end;

 write('Измененное предложение:');

 for i:=1 to k do

  for j:=i to k do

  begin

     if UpCase(mas[i][1])>UpCase(mas[j][1]) then 

     begin

        s:=mas[i];

        mas[i]:=mas[j];

        mas[j]:=s;

     end;

   end;

   for i:=1 to k-1 do 

   begin

      delblanks(mas[i]);

      write(mas[i],' ')

     end;

  write(mas[k],'.');

  close(t);

 readkey;                      {ожидание нажатия клавиши}

end.

Результат выполнения программы приведен на рис. 4.4.

Рис. 4.4. Результат выполнения программы

Задание 5

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

Описать структуру с именем TOVAR, содержащую следующие поля:

- название товара;

- изготовитель;

- год выпуска;

- гарантия;

- цена.

Выполнить следующие действия:

- выбрать товары указанного производителя, выпущенные после 2002 г. с гарантией больше 12 месяцев и ценой, указанной в пределах, заданных с клавиатуры;

- отсортировать полученный список по алфавиту.

Решение

program KR1_5;      {название программы}

{Задание5 выполнено учащимся № группы ФИО № варианта}

uses 

  crt; {подключение модуля для работы с экраном}

type 

 stroka  =string[30];

 tovar=record   {объявление записи}

      ima:string[19];  {название товара}

      izg:string[10];  {имя изготовителя}

      god:integer;   {год выпуска}

      gar:integer;   {гарантия}

      cena:integer;   {цена}

    end;

var  {объявление переменных}

    tov:text;

    tovtip:file of tovar;

    izgot:string;

   z,i,o,np,vp,j,k:integer;

   st,p,r:array [1..25] of tovar;

   pr:array [1..30] of integer;

   temp:tovar;

   pos1: byte;

   namefilein,namefileout:stroka;

begin

write(' Введите имя входного файла ');

readln(namefilein);

write(' Введите имя выходного файла ');

 readln(namefileout);

assign(tov, namefilein);  

assign(tovtip, namefileout);

reset(tov);

reset(tovar);

clrscr;

writeln('':30,'Список электротоваров');

writeln('Наименование товара','':5,'Производитель','':7,

'Год','':5, 'Гарантия','':4,'Цена');

readln;

 z:=1;

 repeat

 readln(tov,st[z].ima,st[z].izg,st[z].god,st[z].gar,st[z].cena);

 writeln(st[z].ima,'':6,st[z].izg,'':7,st[z].god, '':7,st[z].gar,'':7,st[z].cena);

 write(tovtip,st[z]);

 z:=z+1;

 until eof(tov);

for i:=1 to z do

 begin

  pos1:=pos(' ',st[i].izg);

  while pos1>0 do

  begin

      delete(st[i].izg,pos1,1);

      pos1:=pos(' ',st[i].izg);

  end;

 end;

writeln('Количество товаров ',z);

readln;

write('Введите изготовителя:');

readln(izgot);

write('Введите нижний предел цены:');

readln(np);

write('Введите верхний предел цены:');

readln(vp);

writeln('    Отсортированный список:');

 writeln;

k:=0;

 for i:=1 to z do

if(st[i].izg=izgot)and(st[i].cena>=np)and(st[i].cena<=vp)and
(st[i].god>=2002)and(st[i].gar>=12)
then

begin

  k:=k+1;

  r[k]:=st[i];

 end;

 for j:=1 to k-1 do

 for i:=j+1 to k do

  if r[i].ima<r[j].ima then

  begin

    temp:=r[i];

    r[i]:=r[j];

    r[j]:=temp;

  end;

writeln('Количество найденных товаров ',k);

 for i:=1 to k do

 writeln(r[i].ima,'':6,r[i].izg,'':7,r[i].god, '':7,r[i].gar,'':7,r[i].cena);

 readln;

close(tov);

close(tovar);

end.

Результат выполнения программы представлен на рис. 4.5.

Рис. 4.5. Результат выполнения программы

5. Контрольная работа 2

5.1. Варианты контрольной работы 2

Pascal

Задание 1

Вариант 0

Разработать программу, которая при нажатии клавиши F9 выводит на экран текстовое окно. При нажатии клавиши Курсор влево сдвигается влево левая рамка окна, при нажатии клавиши Курсор вправо – вправо правая рамка окна, при нажатии клавиши Курсор вниз – вниз нижняя рамка окна, при нажатии клавиши Курсор вверх – вверх верхняя рамка окна.

Вариант 1

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

Меню:

Вариант 1     Вариант 2

Вариант 3

Вариант 2

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

Меню:

Вариант 3

Разработать программу вывода на экран меню следующего вида:

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

Вариант 4

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

Вариант 5

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

Вариант 6

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

Вариант 7

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

Вариант 8

Разработать программу вывода на экран текстовой информации в форме «бегущей строки».

Вариант 9

Разработать программу вывода на экран меню следующего вида:

Выбор конкретного режима из этого меню должен осуществляться с помощью клавиш Курсор вверх и Курсор вниз. При нажатии этих клавиш должен генерироваться звук продолжительностью 0,5 с. При этом строка, на которую падает выбор, должна выделяться цветом и фоном. Выбор фиксируется нажатием клавиши Enter. После этого должно быть выдано сообщение о выбранном режиме.

Задание 2

Построить график функции в графическом режиме.

Исходные данные по вариантам приведены в контрольной работе 1, задание 1, с. 33 и 34 данного пособия.

Delphi

Задание 3

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

Вариант 0

Определить, является ли заданное целое число А нечетным двузначным числом.

Вариант 1

Определить, имеется ли среди заданных целых чисел A, B, C хотя бы одно четное.

Вариант 2

Даны три числа. Выбрать те из них, которые принадлежат заданному отрезку [e, f].

Вариант 3

Определить, есть ли среди цифр заданного целого трехзначного числа одинаковые.

Вариант 4

Заданы площади круга и квадрата. Определить, поместится ли квадрат в круге.

Вариант 5

Заданы площади круга и квадрата. Определить, поместится ли круг в квадрате.

Вариант 6

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

Вариант 7

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

Вариант 8

Проверить, можно ли построить треугольник из отрезков с длинами x, y, z. Если можно построить, то какой это треугольник – остроугольный, прямоугольный или тупоугольный?

Вариант 9

Проверить, можно ли построить параллелограмм из отрезков с длинами x, y, v, w.

Задание 4

Построить график функции, используя компонент TСhart.

Вариант 0.   

Вариант 1.   

Вариант 2.   

Вариант 3.   

Вариант 4.   

Вариант 5.   

Вариант 6.   

Вариант 7.   

Вариант 8.   

Вариант 9.   

Задание 5

Разработать приложение в соответствии с заданием. Организовать ввод массивов как из текстовых файлов, так и с клавиатуры. Для представления массивов на экране использовать компоненты StringGrid, ListBox, ComboBox и т. п.

Вариант 0

Дана матрица A(N, M). Найти ее наибольший элемент и номера строки и столбца, на пересечении которых он находится.

Вариант 1

В каждой строке заданной матрицы A(N, M) вычислить сумму, количество и среднее арифметическое положительных элементов.

Вариант 2

Для заданной целочисленной матрицы A(N, M) определить, является ли сумма ее элементов четным числом, и вывести на печать соответствующий текст.

Вариант 3

Дана матрица A(N, M). Найти количество элементов этой матрицы, больших среднего арифметического всех ее элементов.

Вариант 4

Дана целочисленная матрица A(N, M). Вычислить сумму и произведение тех ее элементов, которые при делении на два дают нечетное число.

Вариант 5

В заданной матрице A(N, M) поменять местами столбцы с номерами P и Q.

Вариант 6

Построить матрицу A(N, N), элементы которой определяются равенствами  а также найдите произведение четных элементов этой матрицы, удовлетворяющих условию aij < P  (0 < P < 3N).

Вариант 7

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

Вариант 8

Дана целочисленная матрица A(N, M). Вычислить сумму и произведение нечетных отрицательных элементов матрицы, удовлетворяющих условию | aij | < i.

Вариант 9

Для заданной матрицы А(N, N) найти:

- сумму всех элементов;

- сумму элементов главной диагонали;

- значения наибольшего и наименьшего из элементов главной диагонали.

5.2. Методические указания по выполнению

заданий контрольной работы 2

Задание 1

Заполнить основной экран повторяющимся текстом 'Полноэкранный режим*'. Cформировать два «непрозрачных» окна, в одном из которых будет повторяющийся текст '*Окно 1', а в другом – '*Окно 2'.

Решение

Program Windows;

{КР2 Задание1 выполнено учащимся  группы ФИО  варианта}

Uses 

 Crt;                       {используется модуль CRT}

Var 

 I: Integer;

Begin

 TextAttr:=White+16*Black;   {цвет белый на черном}

 ClrScr;

   {вывод на основной экран}

 For I:=1 To 153 Do 

   Write('Полноэкранный режим*');

 Repeat

   TextAttr:=White+16*Red;    {цвет белый на красном}

   Window(5,5,20,15);              {задание одного окна}

   For I:=1 To 153 Do 

     Write('*Окно 1');               {вывод текста в это окно}

   ClrScr;                                  {очистка первого окна}

   TextAttr:=White+16*Blue;  {цвет белый на синем}

   Window(40,10,55,20);         {задание другого окна}

   For I:=1 To 153 Do 

     Write('*Окно 2');                {вывод текста в это окно}

   ClrScr;                                   {очистка другого окна}

 Until KeyPressed;                   {цикл до нажатия клавиши}

End.

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

Решение

Program Wind;

{КР2 Задание1 выполнено учащимся  группы ФИО  варианта}

Uses 

 сrt;                        {используется модуль CRT}

Var

 i,xn,xk,yn,yk: Integer;

 Key: Char;

 St: String[255];

Begin

 TextBackGround(7);             {серый фон}

 ClrScr;

 TextAttr:=Yellow+16*Blue;

 Window(10,20,72,22);

 TextBackGround(11);            {бирюзовый фон}

 ClrScr;

 Write('Enter – формирование второго окна, Esc – выход из второго окна');

 Write('Стрелки управления курсором служат для

перемещения второго окна');

 Write('                    внутри первого');

 xn:=7;

 yn:=7;

 xk:=15;

 yk:=10;

 While Key<>#27 do

 begin

   TextAttr:=Yellow+16*Blue;       {цвет желтый на синем}

   Window(5,5,20,15);              {задание одного окна}

   For I:=1 To 255 Do

   begin

      St[i]:=' ';

      Write(St[i]);

   end;

   ClrScr;

   Repeat

     Key:=ReadKey;

     St:=St+Key;

     Write(Key);                 {вывод текста в это окно}

   Until Key=#13;

   Repeat

     TextAttr:=Yellow+16*Blue;

     ClrScr;

     Window(5,5,20,15);

     ClrScr;

     For I:=1 To Length(St) Do

       Write(St[i]);

     Window(5,5,20,15);

     Window(xn,yn,xk,yk);                 {задание другого окна}

     TextBackGround(0);                   {черный фон}

     ClrScr;

     Window(xn,yn,xk,yk);

     ClrScr;

     Key:=ReadKey;

     If Key=#0 then

     begin

       Key:=ReadKey;

       if Key=#72 then

         if yn>5 then

         begin

           yn:=yn-1;

           yk:=yk-1;

         end;

         if Key=#75 then

           if xn>5 then

           begin

             xn:=xn-1;

             xk:=xk-1;

           end;

           if Key=#77 then

             if xk<20 then

             begin

               xn:=xn+1;

               xk:=xk+1;

            end;

            if Key=#80 then

              if yk<15 then

     begin

       yn:=yn+1;

       yk:=yk+1;

     end;

     Window(xn,yn,xk,yk);

   end;

 Until Key=#27;

 ClrScr;

 end;

End.

Задание 2

Построить график функции в графическом режиме.

Решение

Program GraficFun;

{КР2 Задание2 выполнено учащимся  группы ФИО  варианта}

uses 

 Crt,Graph; {подключаем стандартные библиотеки}

type

 TFunction=function(x:real):real; {тип "Функция вида f(x)"}

var

 f:TFunction;  {объявляем переменную-функцию}

 grDriver,   {переменная: тип видеоадаптера}

 grMode,   {переменная: номер видеорежима}

 grError:integer;  {переменная: результат инициализации}

{процедура прорисовки осей графика}

procedure DrawGrid(a,b:real);

 var

  s:string[4];

  max:real;

 begin

  Line(0,GetMaxY div 2,GetMaxX,GetMaxY div 2);

  Line(GetMaxX div 2,0,GetMaxX div 2,GetMaxY);

  if a>b then

    max:=a

  else

    max:=b;

  Str(-max:4:1,s);

  OutTextXY(0,(GetMaxY div 2)+10,s);

 end;

{процедура инициализации графического видеорежима}

 procedure InitMyGraph;

 begin

{автоматическое определение типа драйвера}

  grDriver:=Detect;

  InitGraph(grDriver,grMode,''); {ИНИЦИАЛИЗАЦИЯ}

  grError:=GraphResult;   {результат инициализации}

  if grError<>grOk then  {если возникла ошибка}

  begin

    writeln('Ошибка инициализации графики');

{вывод текста конкретной ошибки}

  writeln(GraphErrorMsg(grError));

  Halt(1); {завершение программы, код возврата 1}

  end;

 end;

{выход из графического режима}

 procedure CloseMyGraph;

 begin

  CloseGraph; {выход из графического режима в текстовый}

 end;

{процедура построения графика функции;

а, b – границы отрезка, n – количество промежутков}

 procedure DrawFunction(var f:TFunction;a,b:real;n:integer);

 var

  i:integer; {счетчик циклов}

  x,y:real; {x – аргумент, y – значение функции}

  dx:real; {dx – приращение аргумента}

  sDx,sDy:real; {приращение x и y на пиксель}

  y0,x0:integer; {экранные координаты: (x0,y0) – старые}

  yi,xi:integer; {(xi,yi) – новые}

  fmin,fmax:real; {макс./мин. значения f(x) на отрезке}

  maxy,maxx:real; {макс. абсолютные значения на X и Y }

 begin

  SetColor(Cyan);  {цвет рисования – бирюзовый}

  DrawGrid(a,b);  {рисование осей системы координат}

  SetColor(Yellow);  {цвет рисования – желтый}

{считаем, что dx<>0, т.е. отрезок не вырожден (или а<>b)}

  dx:=(b-a)/n;

{нахождение макс./мин. значений f(x) на отрезке}

  x:=a;    {начальное значение х}

  fmin:=f(x);   {начальное значение fmin}

  :=f(x);   {начальное значение fmax}

  for i:=0 to n do    {поиск действительных значений fmin/fmax}

  begin

    x:=x+dx;

    if f(x)>fmax then

      fmax:=f(x);

    if f(x)<fmin then

      fmin:=f(x);

  end;

  if abs(fmax)>abs(fmin) then  {если функцияконстанта}

    maxy:=abs(fmax)

  else

    maxy:=abs(fmin);

  if abs(a)>abs(b) then

    maxx:=abs(a)

  else

    maxx:=abs(b);

{вывод графика на экране}

  x:=a;    {начальные значения}

  y:=f(a);

{расчет относительного приращения координат}

  sDy:=2*maxy/(GetMaxY);

  sDx:=2*maxx/(GetMaxX);

  x0:=(GetMaxX div 2)+Trunc(a/sDx);

{расчет "старой" точки}

  y0:=(GetMaxY div 2)-Trunc(y/sDy);

  for i:=1 to n do {цикл рисования графика}

  begin

    x:=x+dx;   {увеличить х}

    y:=f(x);   {новое значение y }

    xi:=(GetMaxX div 2)+Trunc(x/sDx); {расчет "новой" точки}

    yi:=(GetMaxY div 2)-Trunc(y/sDy);

    Line(x0,y0,xi,yi);   {рисуем линию }

    x0:=xi; {"новые" значения стали "старыми"}

    y0:=yi;

  end;

{вывод пояснительного текста текущим цветом (желтым)}

  OutTextXY(330,15,'Grafic mashtabirovan');

  OutTextXY(330,30,'po max abs znacheniam X i Y');

 end;

{$F+}

 function MyFunc(t:real):real;

 begin

  MyFunc:=exp(-t)*sin(2*t);

end;

 begin

 f:=MyFunc;

 InitMyGraph;    {инициализация графики}

 DrawFunction(f,-Pi,Pi,50);  {рисуем функцию}

 Repeat 

 until KeyPressed;

 ReadKey;

 CloseMyGraph;  {выходим из графического режима}

 end.

Задание 3

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

Решение

Примерный вид формы представлен на рис. 5.1.

Рис. 5.1. Результат выполнения программы

unit Unit1;

// КР2 Задание3 выполнено учащимся № группы ФИО

// № варианта

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

 TForm1 = class(TForm)

   Label1: TLabel;

   ComboBox1: TComboBox;

   Button1: TButton;

   Label2: TLabel;

   procedure Button1Click(Sender: TObject);

   procedure ComboBox1Change(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

implementation

{$R *.dfm}

// кнопка Выход

procedure TForm1.Button1Click(Sender: TObject);

begin

 Form1.Close;

end;

// в зависимости от числа выводим сообщение

procedure TForm1.ComboBox1Change(Sender: TObject);

begin

 case ComboBox1.ItemIndex of

0: Label2.Caption:='Январь-Зима';

1: Label2.Caption:='Февраль-Зима';

2: Label2.Caption:='Март-Весна';

3: Label2.Caption:='Апрель-Весна';

4: Label2.Caption:='Май-Весна';

5: Label2.Caption:='Июнь-Лето';

6: Label2.Caption:='Июль-Лето';

7: Label2.Caption:='Август-Лето';

8: Label2.Caption:='Сентябрь-Осень';

9: Label2.Caption:='Октябрь-Осень';

10:Label2.Caption:='Ноябрь-Осень';

11:Label2.Caption:='Декабрь-Зима';

 end;

end;

end.

Задание 4

Построить график функции y=sin(x), используя компонент TСhart.

Решение

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

Рис. 5.2. Вкладка Series компонента Chart

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

unit Unit1;

// КР2 Задание4 выполнено учащимся № группы ФИО

// № варианта

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls, Buttons;

type

 TForm1 = class(TForm)

   Label1: TLabel;

   Chart1: TChart;

   Series1: TLineSeries;

   BitBtn1: TBitBtn;

 procedure FormActivate(Sender: TObject);

 procedure BitBtn1Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);

var

k:integer;

begin

 for k:=0 to 20 do

 Chart1.SeriesList[0].AddXY(k,sin(k*pi/10),'',clred);

end;

// кнопка Выход

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

Form1.Close;

end;

end.

Результат выполнения программы приведен на рис. 5.3. 

Рис. 5.3. Результат выполнения программы

Задание 5

Найти определитель данной матрицы, воспользовавшись методом Гаусса.

Организовать ввод массивов как из текстовых файлов, так и с клавиатуры. Для представления массивов на экране использовать компоненты StringGrid, ListBox, ComboBox и т. п.

Решение

При работе с массивами ввод и вывод информации на экран удобно организовывать в виде таблиц. Компонент TStringGrid предназначен для отображения информации в виде двухмерной таблицы, каждая ячейка которой представляет собой окно однострочного редактора. Доступ к информации осуществляется с помощью свойства Cells[ACol,ARow:Integer]:string, где ACol, Arow – индекс элемента двухмерного массива. Свойства ColCount и RowCount устанавливают количество строк и столбцов в таблице, а свойства FixedCols и FixedRows задают количество строк и столбцов фиксированной зоны. Фиксированная зона выделена другим цветом и в нее запрещен ввод информации с клавиатуры.

Примерный вид формы приведен на рис. 5.4.

Рис. 5.4. Форма в режиме редактирования

В данном случае: ColCount=3, RowCount=3, FixedCols=0 и FixedRows=0. По умолчанию в компонент TStringGrid запрещен ввод информации с клавиатуры, поэтому необходимо свойство Options goEditing для компонентов StringGrid1 установить в положение True.

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;

type

 matrix=array[1..50,1..50] of extended;

 TForm1 = class(TForm)

   StringGrid1: TStringGrid;

   Button1: TButton;

   Button2: TButton;

   Button3: TButton;

   ComboBox1: TComboBox;

   Label1: TLabel;

   Label2: TLabel;

   OpenDialog1: TOpenDialog;

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure ComboBox1Change(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

  a:matrix;

  Form1: TForm1;

implementation

{$R *.dfm}

// кнопка Загрузить

procedure TForm1.Button1Click(Sender: TObject);

 var

   n, cyc1, cyc2: integer;

  F: TextFile;

 begin

  n:=StringGrid1.ColCount;

 //С помощью стандартного диалога получаем имя файла

  if not OpenDialog1.Execute then

   Exit;

// Пользователь отказался выбрать файл

// Пытаемся открыть файл

 AssignFile(F, OpenDialog1.FileName) ;

 try

 Reset(F) ;

 except

 // Файл нельзя открыть:

  ShowMessage(' Невозможно открыть файл ' +

OpenDialog1.FileName);

 Exit;

 end;

// Изменяем курсор перед длительной работой

 Screen.Cursor := crHourGlass;

// Читаем файл по строкам

 for cyc1:=0 to n-1 do

 for cyc2:=0 to n-1 do

  readln(F,a[cyc1,cyc2]);

Screen.Cursor := crDefault; // Восстанавливаем курсор

CloseFile(F); // Закрываем файл

 for cyc1:=0 to n-1 do

 for cyc2:=0 to n-1 do

  StringGrid1.Cells[cyc1,cyc2]:=FloatToStr(a[cyc1,cyc2]);

//переводит в строку

 end;

// кнопка Определитель

procedure TForm1.Button2Click(Sender: TObject);

var

 cyc1,cyc2,cyc3,n:integer;

 k:extended;

begin

n:=StringGrid1.ColCount;

 for cyc1:=0 to n-1 do

 for cyc2:=0 to n-1 do

  a[cyc1,cyc2] := StrToInt(StringGrid1.Cells[cyc1,cyc2]);

//переводит в целое число

 for cyc1:=0 to n-2 do

  if a[cyc1,cyc1]<>0 then

  for cyc2:= cyc1+1 to n-1 do

  begin

    k:=a[cyc2,cyc1]/a[cyc1,cyc1];

    for cyc3:= cyc1 to n-1 do

      a[cyc2,cyc3]:=a[cyc2,cyc3]-k*a[cyc1,cyc3];

  end;

k:=1;

 for cyc1:= 0 to n-1 do

  k:=k*a[cyc1,cyc1];

Label2.Caption:=FloatToStr(k);

//переводит в строку

end;

// кнопка Очистить

procedure TForm1.Button3Click(Sender: TObject);

 var

cyc1,cyc2,n:integer;

begin

n:=StringGrid1.ColCount;

 for cyc1:=0 to n-1 do

 for cyc2:=0 to n-1 do

  StringGrid1.Cells[cyc1,cyc2]:='';

Label2.Caption:='';

 end;

// кнопка Выберите порядок матрицы

procedure TForm1.ComboBox1Change(Sender: TObject);

begin

  StringGrid1.ColCount:= StrToInt(ComboBox1.Text);

  StringGrid1.RowCount:= StrToInt(ComboBox1.Text);

end;

end.

Результат выполнения программы представлен на рис. 5.5.

Рис. 5.5. Результат выполнения программы

6. Вопросы для самоподготовки

  1.  Этапы подготовки и обработки информации.
  2.  Понятие «алгоритм», его свойства, способы описания.
  3.  Метод пошаговой детализации алгоритма.
  4.  Структура программного модуля.
  5.  Лексемы языка: алфавит, константы, зарезервированные слова.
  6.  Идентификаторы. Типы. Совместимость типов.
  7.  Выражения. Правила построения выражений. Логические выражения.
  8.  Строки. Стандартные процедуры и функции обработки строк.
  9.  Стандартные функции языка Pascal.
  10.  Операторы языка Pascal.
  11.  Особенности выполнения операторов: циклов, условных, ввода/вывода.
  12.  Структурированные типы данных: массивы, символьные переменные и строки, множества.
  13.  Записи. Организация, размещение. Записи с вариантами.
  14.  Процедуры и функции. Формальные и фактические параметры.
  15.  Сортировка и поиск информации. Методы внутренней сортировки.
  16.  Рекурсия: прямая и косвенная. Достоинства и недостатки рекурсивных программ.
  17.  Текстовые файлы: их организация, методы обработки. Стандартные процедуры и функции обработки текстовых файлов.
  18.  Стандартные библиотечные модули  и модули пользователя. Структура Unit-a.
  19.  Организация библиотек. Стандартные библиотечные модули  и модули пользователя.
  20.  Файлы в Паскале: текстовые файлы, типизированные файлы, нетипизированные файлы, их назначение и использование.
  21.  Создание удобного пользовательского интерфейса: системы меню, окна для ввода, корректировки, просмотра информации. Модуль Crt.
  22.  Стандартные процедуры и функции Unit Graph. Методы создания анимации.
  23.  Организация памяти. Стековая память.
  24.  Статическое и динамическое распределение памяти. Понятие указателя. Динамические структуры данных и их организация с помощью указателей.
  25.  Введение в теорию графов. Способы представления графов: матрицы смежности и инцидентности, списки инцидентностей. Очереди и операции над ними.
  26.  Алгоритмы с возвратом, их реализация с помощью рекурсий и с использованием стека. Гамильтоновы циклы.
  27.  Доступ к системным ресурсам. Определение переменной как ABSOLUTE. Предопределенные массивы МЕМ.
  28.  Объект. Способы описания. Инкапсуляция. Полиморфизм. Наследование.
  29.  Объект. Свойства объектов. Способы описания.
  30.  Объект. Конструктор и деструктор. Виртуальные функции.
  31.  Объект. Инициализация и разрушение объекта.
  32.  Методология разработки информационных объектов.
  33.  Введение в Delphi. Главное окно: пиктографические кнопки, палитра компонентов. Окна: формы, инспектора объектов, кода программы. Основы визуального программирования.
  34.  Основы визуального программирования. Пустая форма и ее модификация. Компоненты страницы Standard. Размещение нового компонента. Обработка событий. Динамическое изменение свойств объекта.
  35.  Компоненты страницы Additional, их назначение, свойства, примеры применения.
  36.  Компоненты страницы Win32, их назначение, свойства, примеры применения.
  37.  Компоненты страницы System, их назначение, свойства, примеры применения.
  38.  Компоненты страницы Data Access, их назначение, свойства, примеры применения.
  39.  Компоненты страницы Data Controls, их назначение, свойства, примеры применения.
  40.  Компоненты страницы Decision Cube, их назначение, свойства, примеры применения.
  41.  Компоненты страниц Dialogs, ActiveX, их назначение, свойства, примеры применения.
  42.  Визуализация данных. Компоненты TDataSource, TDBGrid.

Рекомендуемая литература

  1.  Абрамов, С. А. Задачи по программированию / С. А. Абрамов, Г. Г. Гнездилова, Е. Н. Капустина, М. И. Селюн. – М. : Наука, 1988. – 224 с.
  2.  Ахо, А. Построение и анализ вычислительных алгоритмов / А. Ахо, Дж. Хопкрофт, Дж. Ульман. – М. : Мир, 1979.
  3.  Бондарев, В. М. Основы программирования / В. М. Бондарев, В. И. Рублинецкий, Е. Г. Качко. – Харьков : Фолио ; Ростов н/Д : Феникс, 1997. – 368 с.
  4.  Бородич, Ю. С. Паскаль для персональных компьютеров : справ. пособие / Ю. С. Бородич, А. Н. Вальвачев, А. И. Кузьмич. – Мн. : Выш. шк. ; БФ ГИТМП «Ника», 1991. – 365 с.
  5.  Бородич, Ю. С. Разработка программных систем на языке Паскаль : справ. пособие / Ю. С. Бородич. – Мн. : Выш. шк., 1992. – 143 с.
  6.  Вальвачев, А. Н. Графическое программирование на языке Паскаль : справ. пособие / А. Н. Вальвачев. – Мн. : Выш. шк., 1992. – 143 с.
  7.  Вальвачев, А. Н. Программирование на языке Паскаль для персональных ЭВМ ЕС / А. Н. Вальвачев, В. С. Крисевич. – Мн. : Выш. шк., 1989. – 223 с.
  8.  Вирт, Н. Алгоритмы и структуры данных / Н. Вирт. – М. : Мир, 1989.
  9.  Галисеев, Г. В. Компоненты в Delphi 7. Профессиональная работа / Г. В. Галисеев. – М. : Диалектика, 2004. – 624 с.
  10.  Галисеев, Г. В. Программирование в среде Delphi 2005 : самоучитель / Г. В. Галисеев. – М. : Диалектика, 2005. – 400 с.
  11.  Галисеев, Г. В. Программирование в среде Delphi 7 : самоучитель / Г. В. Галисеев. – М. : Диалектика, 2003. – 288 с.
  12.  Галисеев, Г. В. Программирование в среде Delphi 8 for .NET : самоучитель / Г. В. Галисеев. – М. : Диалектика, 2004. – 304 с.
  13.  Зубов, В. С. Структуры и методы обработки данных : практикум в среде Delphi / В. С. Зубов, И. В. Шевченко. – М. : Изд-во «Филинъ», 2004. – 304 с.
  14.  Зуев, Е. А. Язык программирования Турбо Паскаль 6.0 / Е. А. Зуев. – М. : «Унитех», 1992. – 298 с.
  15.  Касьянов, В. Н. Сборник заданий по практикуму на ЭВМ : учеб. пособие для вузов / В. Н. Касьянов, В. К. Сабельфельд. – М. : Наука, 1986. – 272 с.
  16.  Керман, М. К. Программирование и отладка в Delphi™ : учеб. курс / М. К. Керман. – М. : Изд. дом «Вильямс», 2004. – 720 с.
  17.  Киммел, П. Создание приложений в Delphi / П. Киммел. – М. : Изд. дом «Вильямс», 2003. – 640 с.
  18.  Климов, Ю. С. Программирование в среде Turbo Pascal 6.0 : справ. пособие / Ю. С. Климов, А. И. Касаткин, С. М. Мороз. – Мн. : Выш. шк., 1992. – 158 с.
  19.  Климова, Л. М. Pascal 7.0. Практическое программирование : решение типовых задач / Л. М. Климова. – М. : КУДИЦ-ОБРАЗ, 2000, – 528 с.
  20.  Кнут, Д. Искусство программирования для ЭВМ : в 3 т. Т. 3 / Д. Кнут. – М. : Мир, 1978. – 844с.
  21.  Котов, В. М. Методы алгоритмизации / В. М. Котов, И. А. Волков, А. И. Харитонович. – Мн. : Нар. асвета, 1996. – 127 с.
  22.  Липский, В. Комбинаторика для программистов / В. Липский. – М. : Мир, 1988. – 213 c.
  23.  Ляхович, В. Ф. Основы информатики / В. Ф. Ляхович. – Ростов н/Д : Изд-во «Феникс», 1996 – 640 с.
  24.  Мануйлов, В. Г. Разработка программного обеспечения на Паскале / В. Г. Мануйлов. – М. : «Приор», 1996. – 238 с.
  25.  Мейер, Б. Методы программирования : в 2 т. Т. 1 / Б. Мейер, К. Бодуэн. – М. : Мир, 1982. – 356 с.
  26.  Мейер, Б. Методы программирования : в 2 т. Т. 2. / Б. Мейер, К. Бодуэн. – М. : Мир, 1982. – 368 с.
  27.  Мизрохи, С. В. TURBO PASCAL и объектно-ориентированное программирование / С. В. Мизрохи. – М. : Финансы и статистика, 1992. – 192 с.
  28.  Основы алгоритмизации и программирования : лаб. практикум для учащихся специальности 2-40 01 01 «Программное обеспечение информационных технологий» : в 2 ч. Ч. 1 / сост. Л. В. Назаров. – Мн. : МГВРК, 2004. – 100 с.
  29.  Офицеров, Д. В. Программирование на персональных ЭВМ : практикум : учеб. пособие / Д. В. Офицеров. – Мн. : Выш. шк., 1993. – 256 с.
  30.  Пачеко, К. Delphi for .NET. Руководство разработчика / К. Пачеко. – М. : Изд. дом «Вильямс», 2005. – 960 с.
  31.  Пильщиков, В. Н. Сборник упражнений по языку Паскаль / В. Н. Пильщиков. – М. : Наука, 1989. – 160 с.
  32.  Полянский, А. Среда программирования Delphi 5–6 : справ. пособие / А. Полянский. – М. : Познавательная книга, 2001.
  33.  Рейнгольд, Э. Комбинаторные алгоритмы. Теория и практика / Э. Рейнгольд, Ю. Нивергельт, Н. Део. – М. : Мир, 1980. – 476 с.
  34.  Свами, М. Графы, сети и алгоритмы / М. Свами, К. Тхуласираман. – М. : Мир, 1984. – 455 с.
  35.  Симонович, С. Занимательное программирование : Delphi : книга для детей, родителей и учителей / С. Симонович, Г. Евсеев. – М. : АСТ-ПРЕСС, 2001. – 368 с.
  36.  Тейксейра, С. Программирование в Borland Delphi 2006 для профессионалов / С. Тейксейра. – М. : Изд. дом «Вильямс», 2006. – 944 с.
  37.  Тейксейра, С. Borland Delphi 6. Руководство разработчика / С. Тейксейра, К. Пачеко. – М.: Изд. дом «Вильямс», 2002. – 1120 с.
  38.  Тейксейра, С. Delphi 5. Руководство разработчика : в 2 т. Т. 1. Основные методы и технологии программирования / С. Тейксейра, К. Пачеко. – М. : Изд. дом «Вильямс», 2000. – 832 с.
  39.  Уилсон, И. Р. Практическое введение в Раскаль / И. Р. Уилсон, А. И. Эддиман ; под ред. Л. Д. Райкова ; пер. с англ. – М. : Радио и связь, 1983. – 143 с.
  40.  Фаронов, В. Искусство создания компонентов Delphi (+CD) / В. Фаронов. – СПб. : Питер, 2004. – 464 с.
  41.  Фаронов, В. Программирование баз данных в Delphi 7 : учеб. курс / В. Фаронов. – СПб. : Питер, 2005. – 464 с.
  42.  Фаронов, В. Delphi. Программирование на языке высокого уровня : учебник для вузов / В. Фаронов. – СПб. : Питер, 2005. – 640 с.
  43.  Фаронов, В. Delphi 2005. Разработка приложений для баз данных и Интернета / В. Фаронов. – СПб. : Питер, 2005. – 608 с.
  44.  Фаронов, В. В. Система программирования Delphi / В. В. Фаронов. – СПб. : БХВ, 2003. – 912 с.
  45.  Фаронов, В. В. Турбо Паскаль 7.0. Начальный курс : учеб. пособие / В. В. Фаронов. – М. : «Нолидж», 1997. – 616 с.
  46.  Фаронов, В. В. Турбо Паскаль 7.0 : практика программирования / В. В. Фаронов. – М. : «Нолидж», 1997.
  47.  Фаронов, В. Delphi 2005. Язык, среда, разработка приложений / В. Фаронов. – СПб. : Питер, 2005. – 560 с.
  48.  Фаронов, В. В. Turbo Pascal / В. В. Фаронов. – СПб. : БХВ, 2003. – 1056 с.
  49.  Филлипс, Д. Методы анализа сетей / Д. Филлипс, А. Гарсиа-Диас. – М. : Мир, 1984. – 496 с.
  50.  Фленов, М. В. Библия Delphi / М. В. Фленов. – СПб. : «БХВ-Петербург», 2004. – 865 с.
  51.  Хармон, Э. Разработка COM-приложений в среде Delphi / Э. Хармон – М. : Изд. дом «Вильямс», 2000. – 464 с.
  52.  Хьюз, Дж. Структурный подход к программированию /  Дж. Хьюз, Дж. Мичтом. – М. : Мир, 1980. – 278 с.
  53.  Чип, С. Turbo Pascal 6.0 Professional. ООП : Теория и практика / С. Чип. – Мн. : SCI, 1992. – 138 с.

Приложение  А

(справочное)

Комбинации клавиш

Комбинация клавиш

Действие

F1

Помощь

Ctrl+F1

Помощь к слову, на котором стоит курсор

F2

Сохранение файла в текущем окне

Shift+F2

Сохранение с другим именем

F3

Открытие файла

F5

Распахнуть/свернуть окошко

Alt+F5

Переключение в пользовательский экран

F7

Выполнение шага трассировки (с заходом в процедуры)

Ctrl+F7

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

F8

Выполнение шага трассировки (или функции/процедуры целиком)

Ctrl+F8

Поставить/удалить точку останова

F9

Компиляция программы

Ctrl+F9

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

F10

Обращение к меню IDE

Приложение Б

(справочное)

Некоторые математические формулы

Язык Object Pascal имеет ограниченное количество встроенных математических функций. Поэтому при необходимости использовать другие функции следует применять известные соотношения. В табл. Б.1 приведены выражения наиболее часто встречающихся функций через встроенные функции языка Pascal.

Т а б л и ц а  Б.1

Функция

Выражение

Выражение на языке

Object Pascal

Exp(a*Ln(x))

Приложение В

(справочное)

Пример оформления титульного листа

контрольной работы


Содержание

Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

1. Учебная программа предмета . . . . . . . . . . . . . . . . . . . . . . . .

4

1.1. Примерный тематический план . . . . . . . . . . . . . . . . . . . . .

4

1.2. Содержание предмета . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7

1.3. Лабораторные работы для учащихся

безотрывной формы обучения . . . . . . . . . . . . . . . . . . . . . .

11

2. Краткие теоретические сведения . . . . . . . . . . . . . . . . . . . . .

12

2.1. Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

2.2. Delphi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

3. Методические указания по выполнению

контрольных работ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

4. Контрольная работа 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

4.1. Варианты контрольной работы 1 . . . . . . . . . . . . . . . . . . .

33

4.2. Методические указания по выполнению заданий

контрольной работы 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

5. Контрольная работа 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52

5.1. Варианты контрольной работы 2 . . . . . . . . . . . . . . . . . . .

52

5.2. Методические указания по выполнению заданий

контрольной работы 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

58

6. Вопросы для самоподготовки . . . . . . . . . . . . . . . . . . . . . . . .

73

Рекомендуемая литература . . . . . . . . . . . . . . . . . . . . . . . . . . . .

76

Приложение А  Комбинации клавиш . . . . . . . . . . . . . . . . . .

80

Приложение Б  Некоторые математические формулы . . .

81

Приложение В  Пример оформления титульного листа

контрольной работы . . . . . . . . . . . . . . . . . .

82

Учебное издание

ОСНОВЫ  АЛГОРИТМИЗАЦИИ

И  ПРОГРАММИРОВАНИЯ

Учебная программа, методические указания

и контрольные задания

для учащихся безотрывной формы обучения специальности 2-40 01 01

«Программное обеспечение информационных технологий»

Составитель
Данилова Галина Владимировна
Зав. ред.-издат. отд. О. П. Козельская
Редактор Г. Л. Говор
Корректор Н. Г. Михайлова
Компьютерная верстка Н. М. Олейник
План издания 2006 г. (поз. 4)
Изд. лиц. № 02330/0131735 от 17.02.2004.
Подписано в печать 14.06.2006. Формат 6084 1/16.
Бумага писчая. Гарнитура Таймс. Печать ризографическая.
Усл. печ. л. 4,88. Уч.-изд. л. 2,79. Тираж 70 экз. Заказ 139.
Издатель и полиграфическое исполнение Учреждение образования
«Минский государственный высший радиотехнический колледж»
220005, г. Минск, пр-т Независимости, 62.

                                                                                                                     44                                             44

8

7

3

4

11

9

10

5

2

1

7

панели инструментов

палитра компонентов

инспектор объектов

код программы

форма

Рис. 2.3. Интегрированная среда Delphi

Memo1

Label1

Label2

Label3

Label4

Button1

Edit1

Edit2

Edit3

Button2

Вариант 1

Вариант 2

Вариант 3

Выбор

Меню:

Вариант 3

Вариант 2

Вариант 1

Выберите режим:

Режим 1

Режим 2

Режим 3

Label

заголовок формы

Combobox

Button

StringGrid

Button

ComboBox

Label

OpenDialog

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ

«МИНСКИЙ ГОСУДАРСТВЕННЫЙ ВЫСШИЙ

РАДИОТЕХНИЧЕСКИЙ КОЛЛЕДЖ»

Кафедра

информатики

Контрольная работа 1

по ОАиП

учащегося безотрывной формы обучения

Сидоренко К. П.

Группа №44411

Проверил:

Данилова Г. В.

Минск 2006




1. а Радиационная гигиена 1 Понятия Активность вещес.
2. Московский государственный университет культуры и искусств УЧЕБНЫЙ ГРАФИК на 2013-2014 учебный год Зао
3. Русский язык обладает всеми средствами для выражения самых тонких ощущений и оттенков мысли Напишите
4. либо другой дисциплине кинологического спорта имеет смысл научить свою собаку двигаться назад
5. Тема 7 Глобалізація і стратегії розвитку ПЛАН 1
6. Тема 10 Облік грошових коштів Тема 10
7. .П. Драгоманова в контексті соціального і національного розвитку Європейсько відомий український
8. Cодержательная модель региональной социальной политики
9. А Мерзлякова Философия ее предмет функции
10. Владельцы идентификатор
11. Курсовая работа- Агрессивное поведение детей
12. Конвенции Урегулирование споров
13. Лабораторная работа- Изучение работы с файлами на языке Delphi.html
14. реферат дисертації на здобуття наукового ступеня кандидата медичних наук Луганськ 2007 Ди.
15. Отчет о практике специальности Разработка и эксплуатация нефтегазовых месторождений
16. Особенности преодоления социально-экономических противоречий в Англии и Франции
17. Законы сохранения в механике
18. Ветряная оспа
19. Экономическая интерпретация коэффициента регрессии
20. Инвестиционный проект по производству электроплит и пути его реализации