- •Практикум по Турбо Паскалю
- •Первые занятия Первое знакомство с системой программирования Турбо Паскаль
- •Команды редактора
- •Задания
- •Режим помощи
- •Первая программа
- •Запуск программы
- •Сохранение программы
- •Выход из системы программирования Турбо Паскаль
- •Простейшие линейные программы
- •Арифметический квадрат. Абсолютная величина
- •Целый и логический типы данных Условный оператор
- •Логический тип данных
- •Условный оператор
- •Вложенные операторы условия
- •Целый тип данных. Цикл с параметром
- •Цикл с параметром (разбор на примере)
- •Работа с окнами. Метод пошагового выполнения программ
- •Работа с окнами
- •Решение задач с использованием цикла с параметром
- •Вопросы для обсуждения
- •Трассировка примера
- •Цикл с постусловием
- •Алгоритм Евклида
- •Вложенные циклы
- •Решение задач с использованием циклов с условием
- •Простые типы данных
- •Задания
- •Решение задач
- •Вещественный тип данных
- •Задание
- •Решение задач
- •Ограниченный, перечисляемый типы данных. Оператор варианта
- •Ограниченный тип данных
- •Оператор варианта
- •Перечисляемый тип данных
- •Решение задач
- •Описание переменных, констант и типов Раздел описания констант
- •Раздел описания переменных
- •Раздел описания типов
- •Решение задач
- •Преобразование типов. Совместимость типов
- •Задания
- •Решение задач
- •Решение задач
- •Контрольные работы Контрольная работа №1
- •Контрольная работа №2
- •Основы Паскаля
- •X y22m размер gamma alfa r15
- •Процедуры и функции
- •Описание процедур и функций
- •Файловый тип
- •Описание файлового типа
- •Подпрограммы
- •Процедура Assign
- •Процедура Reset
- •Процедура Rewrite
- •Процедура Write
- •Процедура Close
- •Функция FileSize
- •Функция FilePos
- •Текстовые файлы
- •Описание текстового файла
- •Консоль
- •Устройства
- •Соответствие текстовых файлов и логических устройств
- •Операции над текстовыми файлами
- •Процедура Assign
- •Процедура Reset
- •Процедура Rewrite
- •Процедура Append
- •Процедура Close
- •Функция Eof
- •Функция SeekEof
- •Блочные файлы Описание типа блочного файла
- •Процедура BlockRead
- •Процедура BlockWrite
- •Операции ввода-вывода
- •Регулярные типы данных Одномерные массивы. Работа с элементами
- •Способы задания одномерных массивов
- •Работа с элементами массива (разбор на примерах)
- •Методы работы с элементами одномерного массива Изменение значения некоторых элементов
- •Создание массива
- •Работа с несколькими массивами
- •Удаление элементов из одномерного массива Удаление элемента
- •Вставка элементов в одномерный массив Вставка одного элемента
- •Вставка нескольких элементов
- •Перестановка элементов массива
- •Перестановка части массива
- •Найти сумму элементов
- •Работа с несколькими массивами
- •Двумерный массив. Работа с элементами Изменение значений некоторых элементов, удовлетворяющих заданному свойству
- •Заполнение двумерного массива по правилу.
- •Вставка и удаление элементов двумерного массива
- •Перестановка элементов массива
- •Комбинированный тип данных (записи)
Перестановка элементов массива
Перестановка двух элементов
Пример
Поменять местами два элемента с номерами k1 и k2, где k1 и k2 вводятся с клавиатуры.
Решение
Опишем процедуру, которой будем передавать номера переставляемых элементов и массив.
Procedure Swap (k1, k2: Integer; Var m: myarray); Var x : Integer; Begin x: =m[k1]; m[k1]:=m[k2]; m[k2]:=x; End;
Примечание. Задача о перестановке двух элементов с заданными свойствами сводится к этой задаче - надо найти только их номера.
Перестановка части массива
Пример
Дан одномерный массив А, состоящий из 2n элементов. Поменять местами первую и вторую его половины.
Решение
Пусть массив А состоит из 10 элементов, то есть n = 5:
1, 12, 23, 3, 7, 13, 27, 6, 9, 11.
Тогда, если мы поменяем местами первую и вторую его половины, то получим такой массив А:
13, 27, 6, 9, 11, 1, 12, 23, 3, 7.
Заметим, что мы меняем местами элементы с номерами 1 и n + 1, 2 и n + 2 и так далее, последняя пара - n и 2n. Поэтому можно вывести правило перестановки - элемент с номером i меняется местами с элементом с номером n + i. Поэтому, используя процедуру Swap из примера 1, можно в основной программе сделать так:
For i := 1 To n Do Swap (i, i+n, A).
Двумерные массивы
Описание
Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Их можно представить в виде прямоугольной таблицы или матрицы.
Рассмотрим матрицу А размерностью 2*3, то есть в ней будет две строки, а в каждой строке по три элемента:
Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел - номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a12 - это элемент, стоящий в первой строке и во втором столбце.
Существуют несколько способов объявления двумерного массива.
Способ 1. В Паскале двумерный массив можно описать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы А, приведённой выше:
Const n = 2; m = 3; Type omyarray = Array[1..m] Of <тип элементов >; dmyarray = Array[1..n] Of omyarray; Var v : omyarray; a : dmyarray;
В данном случае переменная v объявлена как одномерный массив из трёх элементов вещественного типа. Переменная а описана как двумерный массив из двух строк, каждую из которых включено по три элемента.
Способ 2. Описание массива А можно сократить, исключив определение типа omyarray в определении типа dmyarray:
Const n = 2; m = 3; Type dmyarray = Array[1..n, 1..m] Of <тип элементов>; Var a : dmyarray.
Способ 3. Ещё более краткое описание массива А можно получить, указывая имя массива и диапазоны изменения индексов для каждой размерности массива:
Const n = 2; m = 3; Type dmyarray = Array[1..n, 1..m] Of <тип элементов >;
Var a : dmyarray.
Если указанный тип используется для определения одного массива в программе, то удобно объявление массива в разделе описания переменных:
Var a: Array [1..n, 1..m] Of < тип элементов >.
Рассмотренные выше методы решения задач обработки одномерных массивов могут применяться для обработки двумерных массивов. Поскольку положение элемента в двумерном массиве описывается двумя индексами [первый - номер строки, второй - номер столбца], программы большинства матричных задач строятся на основе вложенных циклов. Обычно внешний цикл работает по строкам матрицы, то есть с его помощью выбирается требуемая строка матрицы, а внутренний цикл - по столбцам матрицы, то есть здесь выбирается нужный элемент из выбранной уже строки. Для задания значений элементам массива могут быть использованы операторы присваивания и операторы ввода данных.
Пример 1
В приведённом ниже примере осуществляется ввод и вывод двумерного массива А размерностью 10*15. Формирование и вывод массива описаны в виде двух процедур, которые вызываются последовательно из основной программы. Надо заметить, что формирование двумерного массива можно осуществлять всеми тремя способами, описанными для одномерных массивов, то есть: ввод с клавиатуры, через генератор случайных чисел или с помощью файла. Пусть в нашем примере элементы задаются генератором случайных чисел.
Program Example_45; Const n = 2; m = 15; Type dmyarray = Array[1..n., 1..m] Of Integer; Var A : dmyarray;
Procedure Init(Var x: dmyarray); {процедура формирования массива} Var i, j : Integer; Begin For i:=1 To n Do For j:=1 To m Do x[i,j]:=-25+Random(51); End;
Procedure Print(x: dmyarray); {процедура вывода массива на экран} Var i, j : Integer; Begin For i:=1 To n Do Begin {ввод i-ой строки массива} For j:=1 To n Do Write(x[i,j]:5); Writeln; {переход на начало следующей строки} End;
Begin{основная программа} Init(A); {вызов процедуры формирования массива} Writeln('Массив А:'); Print(A); {вызов процедуры вывода} Readln; End.
При решении задач с двумерными массивами можно выделить несколько видов задач.
