- •Оглавление
- •§1. Первое знакомство с системой программирования Турбо Паскаль
- •§2. Основные элементы языка
- •§3. Команды редактора Команды управления движением курсора
- •§4. Первая программа
- •Пояснения к программе
- •Запуск программы
- •Сохранение программы
- •§5. Управление позициями и цветом вывода
- •§6. Арифметический квадрат.Абсолютная величина
- •§7. Типы данных
- •§8. Целый тип данных
- •Пример 6
- •Пример 7
- •Пример 8
- •§9. Вещественный тип данных
- •Пример 7
- •Пример 8
- •§10. Логический тип данных
- •§11. Условный оператор
- •Пример 1
- •Пример 2
- •Решение
- •§12. Оператор безусловного перехода. Раздел описания меток
- •§13. Вложенные условные операторы
- •Решение
- •Задание
- •Решение задач Задача 1
- •Задача 8
- •Задача 9
- •Задача 10
- •§14. Цикл с параметром
- •Пример 1
- •Пример 2
- •Пример 3
- •§15. Работа с окнами. Метод пошагового выполнения программ
- •§16. Решение задач с использованием цикла с параметром Задача 1
- •Решение
- •Задача 2.
- •§17. Цикл с предусловием
- •Оператор цикла с предусловием
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •§18. Цикл с постусловием
- •Пример 1
- •Решение
- •Пример 2
- •§19. Алгоритм Евклида
- •§20. Вложенные циклы Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Пример 4
- •Решение
- •Пример 5
- •§21. Решение задач с использованием циклов с условием Задача 1
- •Решение
- •Задача 2
- •§22. Символьный тип данных
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •§23. Ограниченный тип данных
- •Var b:3..8; а не просто Vаг b:Integer;
- •Решение
- •§24. Оператор варианта (выбора)
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Пример 4
- •§25. Перечисляемый тип данных
- •§26. Описание переменных, констант и типов. Раздел описания констант
- •Раздел описания типов
- •§27. Преобразование типов. Совместимость типов
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение.
- •§28. Процедуры
- •Описание процедуры
- •Решение
- •Begin {основная программа}
- •Пример 2
- •Решение
- •Пример 3
- •§29. Функции
- •Пример 1
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •§30. Примеры рекурсивного программирования
- •Задачи с рекурсивной формулировкой
- •Пример 3
- •Задачи, которые можно решить как частный случай обобщенной
- •Задание
- •Задачи, в которых можно использовать характеристику или свойство функции Пример
- •Решение
- •§31. Файловый тип данных Операции для работы с файлами последовательного доступа
- •§32. Обработка файлов Связь переменной файлового типа с файлом на диске
- •Чтение из файла
- •Закрытие файла
- •Признак конца файла
- •Запись в файл
- •§33. Прямой доступ к элементам файла
- •Удаление файлов. Процедура
- •Переименование файлов. Процедура
- •Пример 2
- •§34. Текстовые файлы
- •Обработка текстовых файлов
- •Пример 1
- •Решение
- •Пример 2
- •Нетипизированные файлы
- •§35. Одномерные массивы. Работа с элементами(разбор на примерах) Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Begin {Считываем очередную строку}
- •§36. Работа с элементами массива (разбор на примерах)
- •Пример 2
- •§37. Методы работы с элементами одномерного массива
- •Создание массива
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Работа с несколькими массивами Пример
- •Решение
- •§38. Удаление элементов из одномерного массива Пример 1
- •Решение
- •Begin {Сдвиг элементов на один влево}
- •Пример 2
- •Решение
- •§39. Вставка элементов в одномерный массив
- •Вставка нескольких элементов
- •Решение
- •§40. Перестановки элементов массива
- •§41. Двухмерные массивы Описание. Работа с элементами
- •§42. Найти сумму элементов
- •Решение
- •§43.Нахождение количества элементов с данным свойством
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •§44. Работа с несколькими массивами Пример
- •Решение
- •§45. Определить, отвечает ли заданный массив некоторым требованиям Пример 1
- •Решение
- •Пример 2
- •Решение
- •§46. Изменение значений некоторых элементов, обладающих заданным
- •§47. Заполнение двухмерного массива по правилу
- •Пример 2
- •Решение
- •§48. Вставка и удаление элементов Вставка строки
- •Решение
- •Примечания
- •Удаление строки Пример
- •Решение
- •Примечания
- •§49. Перестановка элементов массива Перестановка двух элементов Пример 1
- •Решение
- •Пример 2
- •§50. Строковый тип данных
- •Операции со строками
- •Склеивание
- •Сравнение
- •Примеры
- •Пример 8
- •Пример 9
- •Пример 10
- •§51. Множественный тип данных
- •Операции над множествами
- •Примеры
- •Сравнение множеств
- •Пример 1
- •Пример 2
- •Вопросы для обсуждения
- •Пример 3
- •Вопросы для обсуждения
- •Пример 4
- •Решение
- •Пример 5
- •Решение
- •§52. Комбинированный тип данных (записи)
- •Пример 1
- •Пример 2
- •Пример 3
- •Решение
Begin {Сдвиг элементов на один влево}
For i:=k1 To n-1 Do m[i]:=m[i+1];
{i-му элементу присваиваем значение
(i+1)-го}
m[n]:=0;
{Последний элемент равен 0}
End;
Begin
Randomize;
{Инициализация генератора случайных
чисел}
Init2(A);
{Заполнение массива А}
Print1(n, A);
{Вывод заполненного массива А}
k:=Maximum(A);
{Поиск номера максимального элемента}
Delete(k, A);
{Удаление элемента с номером k}
Print1(n-1, А);
{Вывод нового массива А}
Readln;
End.
Пример 2
Решить предыдущую задачу, считая, что максимальный элемент может встречаться несколько раз.
Решение
Когда необходимо удалять несколько элементов, то это лучше всего делать с конца массива, так как иначе нужно будет снова возвращаться к элементу, который только что удаляли (эта проблема возникает в том случае, когда подряд идут два максимальных элемента: если первый удалить, то на его место снова встанет максимальный элемент). Просматривать массив с конца можно при помощи цикла с параметром, который имеет следующий вид:
For i:=В Downto A Do <тело цикла>
Значение переменной i будет уменьшаться на единицу начиная от В до А.
Кроме того, номер максимального элемента запоминать не будем, а просмотрим массив с конца, и если элемент имеет максимальное значение, то удалим его, при этом значение счетчика k будем увеличивать на 1. Для решения этой задачи надо изменить функцию Maximum, сейчас нам нужен не номер, а значение максимального элемента. В программе это будет выглядеть так:
Program Example_104;
Const n=30; dd=51;
Type myarray=Array[1..n] Of Integer;
Var A: myarray;
m, k, i: Integer;
{m - значение максимального элемента
k - количество удаленных элементов}
Procedure Init2 (Var m:myarray);
{Процедура заполнения (инициализации)
массива случайными числами}
...
Procedure Print1 (n1: Integer; m: myarray);
{Процедура вывода (распечатки) массива}
...
Function Maximum (m: myarray): Integer;
Var i, max: Integer;
Begin
max:=-32768;
For i:=1 To n Do
{Просмотр всех элементов массива}
If m[i]>max Then max:=m[i];
{Новое значение максимального элемента}
Maximum:=max;
End;
Procedure Delete (k1: Integer;
Var m: myarray);
{Процедура удаления элемента с
данным номером}
...
Begin
Randomize;
{Инициализация генератора случайных чисел}
Init2 (А);
{Заполнение массива А}
Print1 (n, А);
{Вывод заполненного массива А}
{Поиск значения максимального элемента}
m:=Maximum(A); k:=0;
{Просмотр всех элементов начиная
с последнего}
For i:=n Downto 1 Do
If A[i]=m Then
{Если данный элемент имеет
максимальное значение, то}
Begin
{Удаляем элемент с номером i}
Delete(i, A);
Inc(k);
End;
Print1(n-k, A); {Вывод нового массива А}
Readln;
End.
§39. Вставка элементов в одномерный массив
Вставка элемента после элемента
с заданным номером
Пример
Вставить число 100 после пятого элемента массива.
Решение
Пусть k − номер элемента, после которого мы должны вставить элемент х (k и х будем вводить с клавиатуры). Вставка осуществляется следующим образом:
-
первые k элементов массива остаются без изменений;
-
все элементы, начиная с (k+1)−го необходимо сдвинуть вправо;
-
элементу с номером (k+1) присваиваем значение х.
Рассмотрим конкретный пример. Пусть дан следующий одномерный массив из N (N=10) элементов:
3, -12, 5, 14, 27, -6, 1, -34, 10, -15.
Надо вставить элемент со значением 100 после пятого элемента массива. Мы получим следующий массив:
3, -12, 5, 14, 27, 100, -6, 1, -34, 10, -15.
Таким образом, после вставки в массиве станет 11 элементов, и это надо учесть при описании типа myarray:
Type myarray=Array[1..n+1] Of Integer;
Будем выводить массив два раза − до и после вставки нового элемента, используя уже известную процедуру Print1.
Составим теперь основную программу с использованием новой процедуры Insert1(k1, x1, m), которой передаются: k1 − номер элемента, после которого надо вставить новый элемент, x1 − значение нового элемента, m − массив. Сдвиг элементов будем начинать с конца массива.
Program Example_105;
Const n=10; dd=51;
Type myarray=Array[1..n+1] Of Integer;
Var A: myarray;
x, k: Integer;
{x - значение нового элемента, k - номер
элемента,после которого вставляем}
Procedure Init2(Var m: myarray);
{Процедура заполнения (инициализации)
массива случайными числами}
...
Procedure Print1(n1: Integer; m: myarray);
{Процедура вывода (распечатки) массива}
...
Procedure Insert1(k1, x1: Integer;
Var m: myarray);
Var i: Integer;
Begin
{Сдвиг элементов на одну позицию назад}
For i:=n Downto k1+1 Do m[i+1]:=m[i];
m[k1+1]:=x1;
{Вставка элемента после k1-го}
End;
Begin
Init2(А);
Print1(n, А); {Вывод начального массива
из n элементов}
Writeln('Номер элемента, после которого
вставлять, ');
Writeln('и значение нового элемента');
Readln(k, x);
Insert1(k, x, A);
Print1(n+1,A);{Вывод массива после вставки нового элемента}
Readln;
End.
Вставка элемента перед элементом с
данным номером
Пример
Вставить число 100 перед пятым элементом массива.
Решение
Эта задача немного отличается от предыдущей: в предыдущей мы сдвигали вправо все элементы, стоящие после k−го, то есть с (k+1)−го, а на его место записывали новый элемент, в этой − сдвигаем все элементы с k−го, а затем на его место записываем новый.
Пусть дан следующий одномерный массив из N (N=10) элементов:
3, -12, 5, 14, 27, -6, 1, 34, 10, -15.
Надо вставить элемент со значением 100 перед пятым элементом массива. Получим следующий массив:
3, -12, 5, 14, 100, 27, -6, 1, 34, 10, -15.
Program Example_106;
Const n=10; dd=51;
Type myarray=Array[1..n+1] Of Integer;
Var A: myarray;
x, k: Integer;
{x - значение нового элемента, k - номер элемента, после которого вставляем}
Procedure Init2(Var m:myarray);
{Процедура заполнения (инициализации)
массива случайными числами}
...
Procedure Print1(n1: Integer; m: myarray);
{Процедура вывода (распечатки) массива}
...
Procedure Insert2(k1, x1: Integer;
Var m: myarray);
Var i: Integer;
Begin {Сдвиг на одну позицию вправо}
For i:=n Downto k1 Do m[i+1]:=m[i];
m[k1]:=x1; {Вставка x1 на место элемента
с номером k1}
End;
Begin
Init2(А);
Print1(n,А); {вывод начального массива}
Writeln('Номер элемента, перед которым
вставлять, ');
Writeln('и значение нового элемента');
Readln(k,x);
Insert2(k, x, A);
Print1(n+1, A); {Вывод массива после
вставки нового элемента}
Readln;
End.