
- •Учебно-методический комплекс
- •Пояснительная записка.
- •Рабочая программа дисциплины Основы алгоритмизации и программирования
- •Тематический план учебной дисциплины
- •Раздел 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.
- •Экзаменационные вопросы по дисциплине: «Основы алгоритмизации и программирования»
- •Перечень практических задач для подготовки к экзамену.
Типичные задачи на обработку массивов.
Изменение значения некоторых элементов
Задача. Заменить отрицательные элементы на противоположные по знаку.
Для этого опишем процедуру. Ей будем передавать один параметр – массив, который будет результатом ее выполнения, так как некоторые элементы могут быть заменены.
Procedure Zamena (Var m : MyArray; n:integer);
Var
i : integer;
Begin
for i := 1 to n do
if m[i] < 0
then
m[i] := -1*m[i];
End;
Нахождение номеров элементов с заданным свойством
Задача. Найти и вывести на экран номера четных элементов.
Для решения задачи необходимо просмотреть весь массив, и если просматриваемый элемент является четным, то выводить его номер. Опишем процедуру, которой передается данный массив и выводятся нужные номера.
Procedure PoiskChet(m : MyArray; n:integer);
Var
i : integer;
Begin
for i := 1 to n do
if m[i] mod 2 =0
then
Write(i:5);
End;
Нахождение количества элементов с заданным свойством
Задача. Найти количество положительных и отрицательных элементов в данном массиве.
Опишем процедуру, которой будем отправлять три параметра – массив и два счетчика, один для элементов, больших нуля, а второй – для отрицательных элементов.
Procedure OtrPol(m : MyArray; ; n:integer; Var k1,k2 : Integer);
Var
i : integer;
Begin
k1 :=0;
k2 :=0;
for i := 1 to n do
if m[i] > 0
then
Inc(k1)
else
if m[i] < 0
then
Inc(k2);
End;
Есть ли в данном массиве элементы с данным свойством?
Для решения таких задач удобнее использовать циклы с условиями и составлять функции, результат которых имеет логический тип.
Задача. Есть ли отрицательный элемент в массиве?
Начинаем с первого элемента (i=1). пока не просмотрен последний элемент (i<=n) и не найден отрицательный (m[i]>=0), будем переходить к следующему (Inc(i)). Таким образом, мы закончим просмотр массива в одном из двух случаев: первый – просмотрели все элементы и не нашли отрицательный, тогда i>n, второй – нашли нужный, при этом i<=n. Опишем функцию, значение которой истина (True), если такой элемент есть, и ложь (False), если его нет.
Function Control (m : MyArray; n:integer) : Boolean;
Var
i : integer;
Begin
i := 1;
while (i<=n) and (m[i]>0) do
Inc(i);
Control := (i<=n);
End;
Задачи для самостоятельного решения.
1. Дан одномерный массив. Найдите разность наибольшего и наименьшего чисел в этом массиве.
2. Даны два одномерных массива А и В. Подсчитайте количество тех i, для которых:
а) А[i] < B[i]
б) A[i] = B[i];
в) A[i] > B[i]
3. Составьте программу определения количества элементов массива, больших среднего арифметического всех его элементов.
4. Дан одномерный массив. Подсчитайте, сколько раз встречается в этой таблице максимальное по величине число.
5. Дан одномерный целочисленный массив. Составьте программу определения значения наибольшего элемента этого массива.
6. Дан одномерный целочисленный массив. Составьте программу определения индекса(-ов) минимального элемента массива.
7. Составьте программу, проверяющую упорядочены ли элементы одномерного массива по возрастанию.
8. Дан одномерный массив чисел. Определите сумму его элементов.
9. Дан одномерный массив чисел. Измените знаки всех его элементов на противоположные.
10. Дан одномерный массив чисел. Подсчитайте, сколько раз встречается число 1.
11. Дан одномерный массив чисел. Подсчитать в нем количество элементов равных нулю, отрицательных элементов и положительных элементов.
12. В массиве А (m,n) найдите количество чисел, по модулю меньших заданного Т.
Самостоятельная работа.
1. Сформировать массив B из элементов массива C, кратных трем. Массив C состоит из 25 элементов целого типа.
V
ar
k,I: real;
C,B: array[1 . . 25] of integer;
begin
for I:=1 to 25 do begin
write('Ввод С',i); readln(C[ i ]);
if C[ i ] mod 3 = 0 then begin
k:=k+1; B[ k ]:=C[ i ] end;
end;
writeln('Массив B:');
for I:=1 to k do write(B[ i ]:6); {печать в строку}
writeln; {перевод курсора} End
2. Организовать циклический сдвиг элементов массива A на m позиций влево, при этом m элементов из конца массива перемещается в начало. Массив состоит из n элементов.
Ц
иклический
сдвиг будем организовывать с помощью
вспомогательной переменной P. Во вспомогательную переменную каждый раз пересылается последний элемент массива A, затем все элементы сдвигаются влево на одну позицию (в обратном порядке) и на место первого элемента помещается содержимое вспомогательной переменной.
Эта процедура повторяется m раз. Такой вариант сдвига
требует больших затрат времени на многократное перемещение элементов массива.
Var n, m, i, k: byte;
A: array[1 . . 50] of real; P: real;
begin write('Ввод n, m');
readln(n,m); writeln('Ввод ',n,'элементов');
for i:=1 to n do read(A[ i ]);
for i:=1 to m do begin
P:=A[ 1 ];
For k:=2 to n do
A[k–1]:=A[ k ];
A[ n ]:=P end;
writeln; writeln('преобразованный
массив');
for i:=1 to n do write(A[ i ]:8:3);
writeln End.
3. Организовать циклический сдвиг элементов массива A на m позиций влево, при этом m элементов из конца массива перемещается в начало. Массив состоит из n элементов.
Циклический сдвиг будем организовывать с помощью вспомогательного массива P. “Хвост” массива пересылается во вспомогательный массив, все остальные элементы перемещаются влево на m позиций. Далее, в первые элементы массива A пересылаются элементы вспомогательного массива, в котором временно хранится “хвост” исходного массива. Такой вариант сдвига требует больше памяти для вспомогательного массива.
V
ar
n, m, i:
byte;
A: array[1 . . 50] of real;
P: array[1 . . 10] of real;
begin write('Ввод m ≤ 10, n');
readln(m,n);
writeln('Ввод ',n,'элементов');
For i:=1 to n do read(A[ i ]);
For i:=1 to m do P[ i ]:=A[ i ];
For i:=m+1 to n do A[i–m]:=A[ i ];
For i:=n–m+1 to n do
A[ i ]:=P[I–n+m];
writeln;
writeln('преобразованный
массив');
For i:=1 to n do write(A[ i ]:8:3);
writeln End
4. Требуется определить, сколько элементов заданного массива P,
содержащего n элементов, удовлетворяет заданному условию. Условие
имеет вид P[ i ]>T, где T – заданное число.
Для решения задачи следует организовать цикл по i и для каждого
значения i проверять условие P[ i ]>T. Если условие удовлетворяется, то к
счетчику числа элементов прибавляется 1, а если не удовлетворяется, то
осуществляется переход к следующему элементу
м
ассива.
Программа 4
Var i, k, n: byte;
P:array[1 . . 30] of real;
T:real;
begin k:=0;
write('Введите n и число T');
readln(n,T);
write('Ввод ',n,'элемента');
For i:=1 to n do begin
Read (P[ i ]);
If P[ i ]>T then k:=k+1;
end;
Writeln('Количество удовлетворяющих
элементов ',k)
End.
5. Требуется объединить два массива A и B, содержащие по n
э
лементов,
в один массив C, (который будет содержать
2n элементов) с чередованием элементов
исходных массивов. Можно заметить, что
индекс массива C зависит от индекса
пересылаемого в него элемента массива
A или B. Организовав цикл по i, и выполняя
для каждого i присваивания, мы решим
задачу.
Var i: byte;
A, B:array[1 . . 40] of integer;
C:array[1 . . 80] of integer;
begin write('Введите n<40');
readln(n);
for i:=1 to n do begin
writeln('Введите A',i,' B',i);
readln(A[ i ],B[ i ]);
C[2*i-1]:=A[ i ];
C[2*i ]:=B[ i ];
end;
Writeln('Массив C');
For i:=1 to 2*n do write(C[ i ]:6);
Writeln
End.
6. Требуется изменить порядок следования элементов массива A,
состоящего из n элементов, на обратный порядок, используя одну
вспомогательную переменную. Результат получить в том же массиве A.
Сначала поменяем местами первый и n-й элементы, используя
вспомогательную переменную C. Для этого перешлем A1 в C (C=A1).
З
атем
в A1 перешлем
An (A1=An). Значение A1, которое временно
находится в C, перешлем в An (An=C). Также поступим с элементами A2 и
An-1 и так далее, пока не дойдем до середины массива.
Последними элементами, которые нужно поменять местами, будут
An\2 и An\2+1, если n – четно, и An\2 и An\2+2 , если n – нечетно, то есть
цикл по i в общем случае можно организовать от i = 1 до n\2.
Var i, n, m: byte;
C: integer;
A: array[1 . . 50] of integer;
begin write('Введите n<50');
readln(n);
for i:=1 to n do
writeln('Введите A',i);
readln(A[ i ]);
m:=n div 2;
for i:=1 to m do begin
C:= A[ i ];
A[ i ]:= A[n– i +1];
A[ i ]:=C end;
Writeln('Инвертированный массив A');
For i:=1 to n do write(A[ i ]:6);
Writeln End.