
- •Учебно-методический комплекс
- •Пояснительная записка.
- •Рабочая программа дисциплины Основы алгоритмизации и программирования
- •Тематический план учебной дисциплины
- •Раздел 1. Основные принципы алгоритмизации.
- •Тема 1.1. Алгоритм, свойства алгоритма. Способы описания алгоритмов. Базовые алгоритмические конструкции..
- •Тема 1.2. Языки программирования и их классификация. Этапы решения задач на компьютере .
- •Раздел 2. Основные понятия языка программирование Turbo Pascal .
- •Тема 2.1 Среда программирования Турбо Паскаль. Операторы ввода-вывода.
- •Тема 2.2. Типы данных. Стандартные функции и процедуры.
- •Раздел 3. Работа с графическим модулем.
- •Тема 3.1. Текстовый и графический режимы работы монитора. Выбор и переключение графического режима в языке Pascal .
- •Тема 3.2. Рисование простых графических элементов (линия, точка, прямоугольник). Цвет объектов. Графический шрифт. Вывод текста.
- •Раздел 4. Основные алгоритмические конструкции и их реализация на языке Pascal .
- •Тема 4.1. Разветвляющиеся алгоритмы. Оператор условия If. Логические операции not, and, or. Нахождение значений логических выражений.
- •Тема 4.2. Вложенные условные операторы. Решение задач.
- •Тема 4.3. Оператор выбора case. Решение задач.
- •Тема 4.4. Циклические алгоритмы. Операторы организации циклов. Простой и составной оператор.
- •Тема 4.5. Цикл с предусловием в графике.
- •Тема 4.6. Рекурсия. Примеры задач рекурсивного решения в текстовом и графическом режимах.
- •Раздел 5. Процедуры и функции.
- •Тема 5.1.Глобальные и локальные переменные. Парадигма модульного программирования.
- •Тема 5.2. Процедуры. Входные и выходные данные процедуры.
- •Тема 5.3. Функции. Отличие функции от процедуры. Тип функции.
- •Раздел 6. Массивы. Стандартные алгоритмы на массивах.
- •Тема 6.1. Одномерные массивы. Способы задания одномерных массивов. Обработка массива.
- •Тема 6.2. Двумерные массивы. Действия с двумерными массивами.
- •Тема 6.3. Методы сортировки массивов.
- •Раздел 7. Символы и строки. Процедуры и функции работы со строками
- •Тема 7.1. Символьный тип данных. Функции работы с символами.
- •Тема 7.2. Строки. Тип string. Сравнение строк. Понятие подстроки.
- •Тема 7.3. Процедуры и функции работы со строками.
- •Раздел 10. Файлы.
- •Тема 10.1. Файлы. Виды файлов. Типизированные файлы.
- •Тема 10.2. Процедуры и функции для работы с типизированными файлами.
- •Тема 10.3. Процедуры и функции работы с файлами. Решение задач.
- •Тема 10.4. Тeкстовые файлы, их описание и основные отличия от типизированных файлов.
- •Тема 10.5. Способы обмена с текстовыми файлами.
- •Раздел 11. Стандартные модули.
- •Тема 11.1. Стандартные процедуры и функции модулей crt и dos. Обработка прерываний.
- •Тема 11.2. Стандартные процедуры и функции Unit Graph. Методы создания анимации.
- •Тема 11.3. Создание библиотечных модулей.
- •Раздел 12. Динамические переменные и структуры данных.
- •Тема 12.1. Динамические структуры данных и их организация с помощью указателей.
- •Тема 12.2. Представление деревьев. Основные операции над деревом.
- •Тема 12.3. Стек. Отличия стека от списка. Основные операции со стеком.
- •Тема 12.4. Очереди. Основные операции над очередью.
- •Тема 12.5. Кольцо. Формирование кольца. Основные операции над кольцом.
- •Тема 12.6. Список. Создание списка путем добавления элементов в конец списка. Просмотр списка.
- •Тема 12.7. Динамические структуры данных. Статические и динамические переменные. Адреса. Указатели и их объявление.
- •Раздел 1. Основные принципы алгоритмизации. Тема 1.1. Алгоритм, свойства алгоритма. Способы описания алгоритмов. Базовые алгоритмические конструкции.
- •Формы записи алгоритма.
- •Тема 1.2. Языки программирования и их классификация. Этапы решения задач на компьютере .
- •Раздел 2. Основные понятия языка программирование Turbo Pascal . Тема 2.1 Среда программирования Турбо Паскаль. Операторы ввода-вывода.
- •Оператор присваивания. Арифметические выражения
- •Основные определения. Типы данных.
- •Операторы Write и WriteLn
- •Операторы Read и ReadLn
- •Тема 2.2. Типы данных. Стандартные функции и процедуры.
- •I Арифметические функции
- •II Функции преобразования типов
- •III Функции для порядковых типов
- •IV Процедуры для порядковых типов
- •Лабораторная работа №1. Линейные программы.
- •Лабораторная работа №2. Составление простейших программ. Вычисления по формулам.
- •Раздел 3. Работа с графическим модулем . Тема 3.1. Текстовый и графический режимы работы монитора. Выбор и переключение графического режима в языке Pascal .
- •1) Инициализация графики, подготовительные работы, управление цветом, закрытие режима:
- •Система координат в графическом режиме.
- •Тема 3.2. Рисование простых графических элементов (линия, точка, прямоугольник). Цвет объектов. Графический шрифт. Вывод текста
- •Лабораторная работа №3. Графические возможности Турбо Паскаль.
- •Тема 4.2. Вложенные условные операторы. Решение задач.
- •Лабораторная работа №4. Разветвляющиеся вычислительные процессы. Условный оператор if.
- •Лабораторная работа №5. Применение условных операторов в решении задач.
- •Тема 4.3. Оператор выбора case. Решение задач.
- •Оператор безусловного перехода Goto. Решение задач.
- •Лабораторная работа №6. Программирование разветвляющихся алгоритмов
- •Тема 4.4. Циклические алгоритмы. Операторы организации циклов. Простой и составной оператор (4 часа)
- •Общая форма записи цикла со счетчиком
- •Лабораторная работа №7.
- •Лабораторная работа №8.
- •Индивидуальные задания.
- •Лабораторная работа №9.
- •Цикл с предусловием while
- •Лабораторная работа №10.
- •Индивидуальное задание
- •Тема 4.5. Цикл с предусловием в графике.
- •Задачи для самостоятельного решения
- •Раздел 5. Процедуры и функции. Тема 5.1.Глобальные и локальные переменные. Парадигма модульного программирования.
- •Тема 5.2. Процедуры. Входные и выходные данные процедуры.
- •Задачи для самостоятельного решения
- •Лабораторная работа №11.
- •Решение задач
- •Тема 5.3. Функции. Отличие функции от процедуры. Тип функции.
- •Общий вид (формат) функции
- •Различие между процедурами и функциями.
- •Задачи для самостоятельного решения
- •Лабораторная работа №12.
- •Актуализация опорных знаний
- •Пример выполнения задания
- •Индивидуальные задания.
- •Тема5.4. Рекурсия. Примеры задач рекурсивного решения в текстовом и графическом режимах.
- •Лабораторная работа № 13.
- •Задания
- •Лабораторная работа №14.
- •Решение задач по вариантам.
- •Раздел 6. Массивы. Стандартные алгоритмы на массивах. Тема 6.1. Одномерные массивы. Способы задания одномерных массивов. Обработка массива.
- •Способы задания одномерных массивов
- •Типичные задачи на обработку массивов.
- •Лабораторная работа №15. Тема: Одномерные массивы
- •Описание массива
- •Лабораторная работа №16.
- •Тема 6.2. Двумерные массивы. Действия с двумерными массивами.
- •Лабораторная работа №17.
- •Лабораторная работа №18.
- •Актуализация опорных знаний
- •Пример выполнения задания
- •Индивидуальные задания.
- •Тема 6.3. Методы сортировки массивов.
- •Лабораторная работа № 19.
- •Пример выполнения задания
- •Индивидуальные задания
- •Лабораторная работа №20.
- •Раздел 7. Символы и строки. Процедуры и функции работы со строками.
- •Тема 7.1. Символьный тип данных. Функции работы с символами.
- •Тема 7.2. Строки. Тип string. Сравнение строк. Понятие подстроки.
- •Лабораторная работа №21.
- •Тема 7.3. Процедуры и функции работы со строками.
- •Лабораторная работа №22.
- •Лабораторная работа № 23.
- •7.4. Обязательная контрольная работа.
- •Раздел 8. Множества. Тема 8.1. Множество. Элемент множества. Способы задания множества.
- •Лабораторная работа №24.
- •Тема 8.2. Операции над множествами.
- •Лабораторная работа №25. Тема: Множества. (Продолжение)
- •Раздел 9. Записи. Тема 9.1. Определение и правила записи.
- •Лабораторная работа №26.
- •Тема 9.2. Записи с вариантами.
- •Лабораторная работа № 27-28.
- •Раздел 10. Файлы. Тема 10.1. Файлы. Виды файлов. Типизированные файлы.
- •План урока
- •Тема 10.2. Процедуры и функции для работы с типизированными файлами.
- •Функция ioResult
- •Лабораторная работа № 29.
- •Актуализация опорных знаний
- •Пример выполнения задания
- •Задания
- •Тема 10.3. Процедуры и функции работы с файлами. Решение задач. Лабораторная работа №30. Тема: Разработка программ обработки созданных файлов.
- •Актуализация опорных знаний
- •Пример выполнения задания
- •Лабораторная работа № 31. Тема: Разработка программ обработки созданных файлов.
- •Актуализация опорных знаний
- •Пример выполнения задания
- •Тема 10.4. Тeкстовые файлы, их описание и основные отличия от типизированных файлов.
- •План урока
- •Тема 10.5. Способы обмена с текстовыми файлами.
- •I Операции чтения из файла
- •II Операции записи в файл
- •III Логическая функция Eoln
- •IV Процедура открытия файла для дополнения
- •Лабораторная работа №32.
- •Лабораторная работа № 33.
- •Актуализация опорных знаний
- •Раздел 11. Стандартные модули. Тема 11.1. Стандартные процедуры и функции модулей crt и dos. Обработка прерываний.
- •План урока
- •Процедуры управления звуком
- •Функции работы с клавиатурой
- •Лабораторная работа № 34.
- •Актуализация опорных знаний
- •Задания
- •Тема 11.2. Стандартные процедуры и функции Unit Graph. Методы создания анимации.
- •2. Установка цвета
- •3. Управление экраном
- •4. Работа с точками изображения
- •Лабораторная работа № 35.
- •Актуализация опорных знаний
- •Задания
- •Тема 11.3. Создание библиотечных модулей.
- •Лабораторная работа № 36. Тема: Разработка алгоритмов и программ решения различных задач с использованием библиотечных модулей пользователя.
- •Актуализация опорных знаний
- •Раздел 12. Динамические переменные и структуры данных. Тема 12.1. Динамические структуры данных и их организация с помощью указателей. (4 часа)
- •Указатели и их объявление
- •Оператор @ с переменной
- •Оператор @ с параметром процедуры, переданным по значению
- •Оператор @ с параметром процедуры, переданным по ссылке
- •Тема 12.2. Представление деревьев. Основные операции над деревом.
- •Представление деревьев. Основные операции над деревом.
- •Лабораторная работа № 37.
- •Тема 12.3. Стек. Отличия стека от списка. Основные операции со стеком.
- •Занесение элемента в стек
- •Извлечение элемента из стека
- •Примеры решения задач.
- •Лабораторная работа № 38.
- •Актуализация опорных знаний
- •Примеры выполнения заданий
- •Задания
- •Тема 12.4. Очереди. Основные операции над очередью.
- •Занесение элемента в очередь
- •Извлечение элемента из очереди
- •Примеры решения задач
- •Лабораторная работа № 39.
- •Задания
- •Тема 12.5. Кольцо. Формирование кольца. Основные операции над кольцом.
- •Формирование кольца
- •Обход кольца
- •Лабораторная работа № 40. Тема. Примеры решения задач с применением динамической структуры кольцо. Творческая работа.
- •Тема 12.6. Список. Создание списка путем добавления элементов в конец списка. Просмотр списка.
- •Лабораторная работа № 41. Тема. Примеры задач, решаемых с помощью списка. Решение задач.
- •Лабораторная работа № 42.
- •Экзаменационные вопросы по дисциплине: «Основы алгоритмизации и программирования»
- •Перечень практических задач для подготовки к экзамену.
Тема 9.2. Записи с вариантами.
Цель: дополнить комбинированный тип данных вариантами;
научить решать задачи.
Записи, рассмотренные выше – это записи с фиксированными частями. Они имеют в различных ситуациях строго определенную структуру. Соответственно записи с вариантами в различных ситуациях могут иметь различную структуру.
Предположим, что написана программа для введения списка библиографических ссылок. Если известно, что все входы в этом списке – ссылки на книги, то можно использовать следующее описание:
Const
Kol = 1000;
Type
Entry = Record
Autor, Title, Publisher, City : String;
Year : 1..2000;
End;
Var
List : Array[1..Kol] of Entry;
Что произойдет, если некоторые из входов не являются ссылками на книги, а содержат ссылки на журнальные статьи. Если ограничиваться только записями с фиксированными частями, то следует описать различные массивы для каждого вида записей. Использование записей с вариантами позволяет образовать структуру, каждый вход которой соответствует содержанию записи. Опишем новый тип, в котором перечислены различные входы:
Type
EntryType = (Book, Magazine);
Теперь можно привести скорректированное описание Entry
Type
Entry = Record
Autor, Title : String;
Year : 1..2000;
Case EntryType of
Book : (Publisher, City : String);
Magazine : (MagName : String,
Volume, Issue : Integer)
End;
Это описание делится на две части: фиксированную и вариантную. Поля Autor, Title, Year составляют фиксированную часть. Оставшаяся часть описания Entry образует вариантную часть, структура которой, подобно хамелеону, может меняться в пределах двух альтернативных определений.
Первая строка вариантной части представляет оператор Case, который отличается тем, что в качестве селектора применяется идентификатор типа. Значения EntryType используются в качестве имен двух альтернатив определения записи. Когда эта компонента имеет значение Book, можно обращаться к следующим полям:
Autor, Title, Year, Publisher, City
С другой стороны, когда она принимает значение Magazine, то можно обращаться к таким полям:
Autor, Title, Year, MagName, Volume, Issue
В такой ситуации возникает естественный вопрос: как программа может хранить информацию о текущем состоянии каждой записи? Другими словами, каким образом можно узнать , что List[3] содержит ссылку на книгу, а List[4] – ссылку на журнал?
Естественное решение этой проблемы заключается в добавлении в каждой записи нового поля, называемого полем тега. Язык Паскаль позволяет за счет совмещения задать описание поля тега в сокращенной форме:
Type
Entry = Record
Autor, Title : String;
Year : 1..2000;
Case TAG : EntryType of
Book : (Publisher, City : String);
Magazine : (MagName : String,
Volume, Issue : Integer)
End;
Поле, названное TAG, является переменной типа EntryType. Когда запись содержит ссылку на книгу, TAG следует присвоить значение Book. Когда запись содержит ссылку на журнал, TAG следует присвоить значение Magazine.
Рассмотрите последовательность операторов, где в RefList[12] помещается ссылка на книгу:
RefList[12].TAG := Book;
RefList[12].Autor := ‘Thomas Hobbes’;
RefList[12].Title := ‘Leviathan’;
RefList[12].Year := 1651;
RefList[12].Publisher := ‘Andrew Crooke’;
RefList[12].City := ‘London’;
Для определения состояния записи с вариантами достаточно проверить значение поля тега. Рассмотрите процедуру, выводящую на экран переданную ей запись.
Procedure PrintRef(Citation : Entry);
Begin
Writeln(Citation.Autor);
Writeln(Citation.Title);
Writeln(Citation.Year);
If Citation.TAG = Book
Then
Writeln(Citation.Publisher,’, ‘,Citation.City)
Else
Begin
Writeln(Citation.MagName);
Writeln(Citation.Volume’–’,Citation.Issue)
End;
End;
Вариантная часть может содержать произвольное число альтернатив. Хотя перечисляемые типы предпочтительнее, так как они более понятны, тем не менее для именования альтернатив записи с вариантами могут использоваться идентификаторы произвольного порядкового типа.
Очевидно, что один и тот же идентификатор поля не может дважды использоваться при описании записи, даже если он применяется в определении различных альтернатив записи с вариантами. Если же это условие не выполняется, то обращение к такому идентификатору приведет к непредсказуемому результату.
Наверное Вы уже обратили внимание, что описание записи с вариантами может иметь единственный закрывающий оператор End. Поскольку любая запись может иметь лишь одну вариантную часть, то End, который является индикатором конца описания записи, служит для обозначения конца и ее вариантной части.
Задание. Опишите под именем Figure вариантную запись. Если переменная типа Figure представляет собой круг, то она должна содержать радиус соответствующей окружности. Если эта переменная представляет прямоугольник, то она должна содержать величину угла и длины двух сторон, образующих этот угол и т. д. Выполните одну из следующих задач:
а) Напишите процедуру, которая запрашивает и получает значение типа Figure от пользователя.
б) Напишите функцию, которая получает на входе значение типа Figure и вычисляет площадь фигуры.
в) Напишите функцию, которая получает на входе значение типа Figure и вычисляет периметр фигуры.
г) Напишите булеву функцию, которая получает на входе два значения типа Figure и определяет, помещается ли первая фигура внутри второй.
Рассмотрите два примера решения задачи с вариантами.
Задача. В массиве хранятся данные об учениках класса: фамилия, имя, отчество, адрес (улица, дом , квартира) и домашний телефон (если есть). Вывести список учеников, до которых нельзя дозвониться.
Program LipovsevM;
Uses
Crt;
Type
Uchenik=record
Name:string[10];
Fam:string[15];
Otch:string[15];
Ulica:string[20];
Dom:string[5];
Kvartira: integer;
case tel: boolean of
False:();
True:(Telefon:string[15]);
end;
Var
Massiv : array[1..100] of Uchenik;
I,n : integer;
Otvet : 0..1;
Begin
ClrScr;
TextColor(9);
write(‘Введите число учеников->‘);
readln(n);
for i:=1 to n do
begin
with massiv[i] do
begin
write(‘Введите имя ‘,i,’-го ученика ->‘);
readln(name);
write(‘‘Введите фамилию ‘,i,’-го ученика ->‘);
readln(fam);
write(‘‘Введите отчество ‘,i,’-го ученика ->‘);
readln(otch);
write(‘‘Введите улицу ‘,i,’-го ученика ->‘);
readln(ulica);
write(‘‘Введите дом ‘,i,’-го ученика ->‘);
readln(dom);
write(‘‘Введите квартиру ‘,i,’-го ученика ->‘);
readln(kvartira);
write(‘Есть ли у ‘,i,’-го ученика телефон (0-нет, 1-да->‘);
readln(otvet);
if otvet=1
then
begin
tel:=True;
write(‘‘Введите телефон ‘,i,’-го ученика ->‘);
readln(telefon);
end;
end;
End;
TextColor(red);
writeln(‘Список учеников, до которых нельзя дозвониться:’);
for i:=1 to n do
begin
with massiv[i] do
if tel=False
then
begin
writeln(‘Имя:’,name);
writeln(‘Фамилия:’,fam);
writeln(‘Отчество:’,otch);
writeln(‘Улица:’,ulica);
writeln(‘Дом:’,dom);
writeln(‘Квартира:’,kvartira);
end;
end;
ReadKey;
End.
Задание. Будьте готовы объяснить решение предыдущей задачи.
Домашнее задание
1. Составьте список группы спортсменов, участвовавших в соревнованиях по спортивной гимнастике, включающей N человек. Для каждого гимнаста указажите фамилию, имя, название общеобразовательной школы, класс, результаты по следующим видам:
- брусья, - вольные упражнения, - прыжки на дорожке, - прыжки через коня;
для юношей
- кольца, - перекладина, для девушек - бревно
Составьте программу, которая обеспечивает ввод полученной информации, распечатку ее в виде таблицы, а также распечатайте анкетные данные спортсменов,
а) показавших лучший результат по каждому виду;
б) показавших лучший результат по всем видам многоборья,
в) не получивших ни одного призового места.