
- •Учебно-методический комплекс
- •Пояснительная записка.
- •Рабочая программа дисциплины Основы алгоритмизации и программирования
- •Тематический план учебной дисциплины
- •Раздел 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.
- •Экзаменационные вопросы по дисциплине: «Основы алгоритмизации и программирования»
- •Перечень практических задач для подготовки к экзамену.
Лабораторная работа №15. Тема: Одномерные массивы
Цель: Научиться составлять программы с использованием одномерных массивов.
До настоящего момента мы использовали в программах простые переменные стандартных типов данных. В этом случае каждой области памяти для хранения одной величины соответствует свое имя. Если переменных много, программа, предназначенная для их обработки, получается длинной и однообразной. Поэтому в любом процедурном языке есть понятие массива — ограниченной совокупности однотипных величин. Элементы массива располагаются в памяти непрерывным блоком и имеют одно и то же имя (рис.). Различают элементы по порядковому номеру (индексу).
Пять простых переменных:
a |
b |
c |
d |
e |
|
|
|
|
|
Массив из пяти элементов:
-
a[1]
a[2]
a[3]
a[4]
a[5]
a
Рис. Простые переменные и массив
Описание массива
Чтобы описать массив, надо сообщить компилятору:
сколько в нем элементов;
какого типа эти элементы;
как они нумеруются.
Массив не является стандартным типом данных, поэтому он задается в разделе описания типов:
type имя_типа = аrrау [тип_индекса] of тип_элемента
Здесь tуре — признак начала раздела описания типов, array и of — ключевые слова, тип индекса задается в квадратных скобках, например:
type mas = аrrау [1 .. 10] of rеаl;
Здесь описан тип массива из вещественных элементов, которые нумеруются от 1 до 10. После задания типа его можно использовать точно так же, как любой стандартный тип, то есть описывать с его помощью переменные, например:
var a, b : mas;
Компилятор, встретив такой оператор, выделит по 60 байт под каждый из массивов а и b (10 элементов по 6 байт). К элементу массива обращаются, указав его имя, за которым в квадратных скобках записывается порядковый номер элемента:
а[4] b[i]
С элементом массива можно делать все, что допустимо для переменных того же типа.
Если тип массива используется только в одном месте программы, можно задать тип прямо при описании переменных, например:
const n = 100:
var x,у : array [1 . . n] of integer;
С массивами в целом можно выполнять только одну операцию — присваивание. При этом массивы должны быть одного типа, например:
х := у;
Задача. Количество элементов между минимумом и максимумом
………………………………………………………………………………………………………………..
Написать программу, которая для 10 целочисленных элементов определяет, сколько положительных элементов располагается между максимальным и минимальными элементами.
Запишем алгоритм в самом общем виде:
Считать исходные данные в массив.
Определить, где расположены его максимальный и минимальный элементы, то есть найти их индексы.
Просмотреть все элементы, расположенные между ними. Если элемент массива больше нуля, увеличить счетчик элементов на единицу.
Перед написанием программы полезно составить тестовые примеры, чтобы более наглядно представить себе алгоритм. Ниже представлен массив из 10 чисел и обозначены искомые величины:
6 |
-8 |
15 |
9 |
-1 |
3 |
5 |
-10 |
12 |
2 |
|
|
макс |
+ |
|
+ |
+ |
мин |
|
|
Для этого примера программа должна вывести число 3.
Порядок расположения элементов в массиве заранее не известен — сначала может следовать как максимальный, так и минимальный элемент, более того, они могут совпадать. Поэтому прежде чем искать количество положительных элементов, требуется определить, какой из этих индексов больше, чтобы просматривать массив от меньшего номера к большему.
Рассмотрим подробно принцип поиска максимального элемента в массиве. Он весьма прост. Очевидно, что для его отыскания нужно сравнить между собой все элементы массива. Поскольку компьютер может сравнивать одновременно только два числа, элементы выбираются попарно.
Например, сначала первый элемент сравнивается со вторым, затем тот из них, который оказался больше — с третьим, тот, который оказался больше — с четвертым, и так далее до последнего элемента.
Иными словами, при каждом сравнении из двух чисел выбирается наибольшее. Поскольку его надо где-то хранить, в программе описывается переменная того же типа, что и элементы массива. После окончания просмотра массива в ней окажется самый большой элемент. Для того чтобы все элементы сравнивались единообразно, перед началом просмотра в эту переменную заносится первый элемент массива.
Сформулируем алгоритм поиска максимума:
Принять за максимальный первый элемент массива.
Просмотреть массив, начиная со второго элемента.
Если очередной элемент оказывается больше максимального, принять его за максимальный.
Для решения поставленной задачи нам требуется знать не значение максимума, а его положение в массиве, то есть индекс:
Как видите, в этой программе в переменной imax запоминается номер максимального из просмотренных элементов. По этому номеру осуществляется выборка элемента из массива.
Запишем уточненный алгоритм решения нашей задачи:
1. Определить, где в массиве расположены его максимальный и минимальный элементы:
задать начальные значения индексов искомых максимального и минимального элементов;
просмотреть массив, поочередно сравнивая каждый его элемент с ранее найденными максимумом и минимумом. Если очередной элемент больше ранее найденного максимума, принять этот элемент за максимум (то есть запомнить его индекс). Если очередной элемент меньше ранее найденного минимума, принять этот элемент за минимум.
2. Определить границы просмотра массива для поиска положительных элементов, находящихся между его максимальным и минимальным элементами:
если максимум расположен в массиве раньше, чем минимум, принять левую границу просмотра равной индексу максимума, иначе — индексу минимума;
если максимум расположен в массиве раньше, чем минимум, принять правую границу просмотра равной индексу минимума, иначе — индексу максимума.
3. Определить количество положительных элементов в найденном диапазоне:
обнулить счетчик положительных элементов;
просмотреть массив в указанном диапазоне. Если очередной элемент больше нуля, увеличить счетчик на единицу.
Для экономии времени значения элементов массива при отладке задаются путем инициализации.
program num_positive_1;
uses crt;
const
n=10;
a:array[1..n] of integer=(1,3,-5,1,-2,1,-1,3,8,4);
var
i:integer; {индекс текущего элемента}
imax:integer; {индекс максимального элемента}
imin:integer; {индекс минимального элемента}
ibeg:integer; {начало интервала}
iend:integer; {конец интервала}
count:integer; {количество положительных элементов}
begin
clrscr;
for i:=1 to n do write(a[i]:3);writeln; {отладочная часть}
imax:=1;imin:=1; {начальные значения номеров макс. и мин. эл-ов}
for i:=1 to n do begin
if a[i]>a[imax] then imax:=i; {новый номер максимума}
if a[i]<a[imin] then imin:=i; {новый номер минимума}
end;
writeln ('max=',a[imax],' min=',a[imin]); {отладочная печать}
if imax<imin then ibeg:=imax else ibeg:=imin; {левая граница}
if imax<imin then iend:=imin else iend:=imax; {правая граница}
writeln('ibeg=',ibeg,' iend=',iend); {отладочная печать}
count:=0;
for i:=ibeg+1 to iend-1 do {подсчет кол-ва положительных}
if a[i]>0 then inc(count);
writeln('Количество положительных: ',count);
readln;
end.
Замечание: inc(x) – увеличивает на 1;
dec(x) – уменьшает на 1.