- •Оглавление
- •Этапы разработки программы
- •Оформление решения
- •Структура программы
- •Характеристики программы
- •Типы данных
- •Целые числа
- •Вещественные числа
- •Лабораторная работа № 2 Алфавит языка Паскаль. Операторы языка
- •Теоретические сведения Алфавит языка
- •Контрольные вопросы
- •Специальные символы
- •Составные символы
- •Зарезервированные слова
- •Стандартные функции и процедуры языка
- •Комментарии и директивы
- •Операторы
- •Простые операторы
- •Структурные операторы
- •Полезные формулы
- •Запись числовых констант, переменных и выражений
- •Контрольные вопросы
- •Лабораторная работа № 3 Программирование алгоритмов линейной структуры
- •Теоретические сведения
- •Задание к работе
- •Пример выполнения работы
- •Варианты заданий
- •Задание 2
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Примеры задач Программа 1
- •Программа 2
- •Программа 3
- •Варианты заданий
- •Задание2
- •Примеры задач Программа 1
- •Программа 2
- •Программа 3
- •Варианты заданий
- •Алгоритм цикла с предусловием – While
- •Алгоритм цикла с постусловием Repeat
- •Алгоритм цикла со счетчиком For
- •Практические примеры Задачи с использованием оператора while
- •Задачи с использованием оператора repeat
- •Задачи с использованием оператора for
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа № 7 Программирование алгоритмов со структурой вложенных циклов
- •Теоретические сведения
- •Практические примеры
- •Задачи для решения
- •Лабораторная работа № 8 Обработка одномерных массивов
- •Теоретические сведения
- •Обработка массивов
- •Действия с одномерными массивами
- •Практические примеры
- •Варианты заданий
- •Контрольные вопросы
- •Что представляет собой массив в Pascal'е?
- •Лабораторная работа № 9 Обработка двумерных массивов, матрицы
- •Теоретические сведения
- •Описание массива
- •Заполнение массива данными (ввод элементов)
- •Вывод массива
- •Обработка массивов
- •Квадратная матрица
- •Транспонирование матрицы
- •Практические примеры
- •Варианты заданий
- •Сформировать матрицу по следующему правилу
- •Контрольные вопросы
- •1. Как можно описать следующий массив?
- •2. В какой ячейке находится элемент d[2,6] ?
- •3. Каким образом выведется массив на экран монитора?
- •4. Сколько элементов находится в массиве х(4;7):
- •Метод линейной сортировки
- •Сортировка методом «пузырька»
- •Практические примеры
- •Варианты заданий
- •Практические примеры
- •Варианты заданий
- •Практические примеры
- •Шифрование и дешифрование текста
- •Варианты заданий
- •Контрольные вопросы
- •Порядок выполнения лабораторных работ
- •Содержание пояснительной записки
- •Литература
Варианты заданий
Вариант 1
Отсортировать последовательность некоторых чисел. Выяснить на сколько максимальный элемент больше минимального.
Дан двумерный массив, упорядочить строки по убыванию среднего арифметического каждой строки.
Вариант 2
Найти минимальный элемент массива, используя сортировку. Заменить его на максимальный элемент другого массива.
Отсортировать двумерный массив, упорядочив столбец по убыванию максимальных элементов.
Вариант 3
Проверить является ли последовательность целых чисел упорядоченной.
Отсортировать двумерный массив, упорядочив строки по возрастанию элементов на главной диагонали.
Вариант 4
Дана последовательность вывести те, которые входят в данную последовательность по одному разу.
Отсортировать двумерный массив, упорядочив столбцы по возрастанию элементов на главной диагонали.
Вариант 5
Последовательность a1, a2, ..., an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.
Отсортировать двумерный массив, упорядочив строки по возрастанию элементов на побочной диагонали.
Вариант 6
Дан массив. Получить новый массив такой, что в нём сначала идут положительные элементы, затем нулевые, затем отрицательные. Сжать полученный массив отбрасыванием нулевых элементов.
Отсортировать двумерный массив, упорядочив столбцы по возрастанию элементов на побочной диагонали.
Вариант 7
Дан массив целых чисел. Используя случайные числа, заполнить массив. Найти максимальный элемент. Все числа, кратные семи, заменить единицей, а все отрицательные – абсолютной величиной. Полученный массив упорядочить по возрастанию. Новый массив вывести на экран.
Отсортировать двумерный массив, упорядочив столбцы по убыванию сумм отрицательных четных элементов.
Вариант 8
Дана последовательность из n вещественных чисел. Поменять в последовательности местами наибольший элемент и элемент с номером m. Для нахождения максимального элемента использовать метод сортировки.
Упорядочить строки массива по убыванию элементов.
Вариант 9
По фигурному катанию N судей выставляют оценки. Наибольшая и наименьшая отбрасываются, а по остальным выставляется средний бал. Напишите программу, вычисляющую среднюю оценку и выдайте номера судей, которые поставили наибольшую и наименьшую оценки. Для нахождения максимального и минимального элемента использовать метод сортировки.
Упорядочить столбцы массива по возрастанию элементов.
Вариант 10
Дана последовательность из n действительных чисел. Оставить ее без изменения, если она упорядочена по не убыванию или по не возрастанию; в противном случае получить положительные элементы исходной последовательности, упорядоченные по возрастанию.
Упорядочить строки массива по возрастанию модулей элементов.
Вариант 11
В одномерном массиве вычислить произведение элементов массива, расположенных между максимальным и минимальным элементом. Массив упорядочить.
Упорядочить строки массива по убыванию элементов, а столбцы массива по возрастанию.
Вариант 12
Дан массив. Сжать его, удалив из него все элементы, модуль которых находится в интервале [a, b]. Предварительно массив упорядочить.
Отсортировать двумерный массив, упорядочив строки по убыванию элементов на главной диагонали.
Вариант 13
Найти сумму элементов массива, расположенных после максимального элемента. Все элементы, меньшие максимального на 5, увеличить вдвое. Массив упорядочить.
Упорядочить столбцы матрицы по убыванию суммы отрицательных элементов.
Вариант 14
Найти сумму модулей элементов массива, расположенных после минимального элемента. Заменить все отрицательные элементы их квадратами и упорядочить элементы массива по возрастанию.
Отсортировать двумерный массив, упорядочив столбцы по возрастанию минимальных элементов.
Вариант 15
Найти сумму положительных элементов массива, расположенных до максимального элемента. Элементы, равные нулю, заменить на максимальные. Массив упорядочить.
Отсортировать двумерный массив, упорядочив строки по убыванию максимальных элементов.
Контрольные вопросы
Определение сортировки.
Способы сортировки.
Метод линейной сортировки.
Сортировка методом «пузырька».
Различия методов сортировки.
Лабораторная работа № 11
Комбинированный тип данных (записи)
Цель работы научить студентов работать с комбинированным типом данных «Запись».
Теоретические сведения
При решении задач обработки большого количества значений используются массивы. Но при работе с массивами основное ограничение заключается в том, что каждый элемент массива должен иметь один и тот же тип данных. Иногда для решения задач, в которых возникает необходимость хранить и обрабатывать данные различных типов, используются отдельные массивы для каждого типа данных, а установление соответствия между ними выполняется при помощи индексов. Но есть способ лучше.
Распространенным случаем является необходимость описать атрибуты (характеристики) некоторого объекта, представляемого и обрабатываемого в программе. Таким объектом может быть человек, некоторый вычислительный комплекс и т.д. В этих и во всех подобных случаях атрибуты объекта представляются значениями различных типов и поэтому для их описания не могут быть использованы массивы. Для описания объекта "человек" могут понадобиться, например, следующие характеристики:
фамилия, имя, отчество (символьные массивы или строки);
пол (перечислимый тип из двух значений);
индекс специальности (целое) и т.д.
Таким образом, описание комбинированного типа представляет собой список описаний его элементов (которое называется также полями записи).
Для записи комбинации данных разных типов в Turbo Pascal применяется комбинированный тип данных "запись". Запись представляет собой наиболее общий и гибкий структурированный тип данных, т.к. она может быть образована из неоднотипных компонентов, и в ней явным образом выражена связь между элементами данных, которые характеризуют реальный объект.
Запись – это структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов, называемых полями записи. Каждое поле имеет свое имя.
Объявление типа записи
type
ИмяТипа= record
ИмяПоля1: ТипПоля1;
ИмяПоля2: ТипПоля2;
ИмяПоляN: ТипПоляN;
end;
Затем объявляются переменные соответствующего типа.
var
ИмяПеременной: ИмяТипа;
Например:
Пример 1.
type
avto=record
number: integer; {номер автомобиля}
marka: string[20]; {марка автомобиля}
fio: string[40]; {фамилия, инициалы владельца}
address: string[60]; {адрес владельца}
end;
var
m: avto;
Пример 2.
type address=record
k: longint; {почтовый индекс}
city: string[10]; {название города}
street: string; {название улицы}
house: integer; {номер дома}
flat: integer; {номер квартиры}
end;
Значение полей записи могут использоваться в выражениях. Обращение к значению поля осуществляется с помощью имени переменной и имени поля, разделенных точкой. Такая комбинация называется составным именем. Например, чтобы получить доступ к полям записи avto, надо записать:
m.number, m.marka, m.fio, m.address
Составное имя можно использовать везде, где допустимо применение типа поля: в операторах присваивания, операторах ввода и вывода.
Обращение к полям записи имеет несколько громоздкий вид. Для решения этой проблемы в языке Turbo Pascal имеется оператор присоединения with в виде:
with m do
begin
number:=1954;
marka:='Audi – 100'
fio:='Иванов И.И.';
address:='ул. Бочкарева 7 кв.38';
end;
Записи могут быть элементами массивов. Отдельные поля записей тоже могут быть записями. За счет этого в Паскале можно создавать сложные структуры данных:
type
anketa=record
facult: string;
group: 1..6;
fio: string;
address=record
k: longint;
city: string[10];
street: string;
house, flat: integer;
flat: integer; {номер квартиры}
end;
bd=record
date: 1..31;
month: 1..12;
year: integer;
end;
end;
var
ved: array[1..20] of anketa;
Здесь переменная ved – это массив записей. Каждая запись состоит из пяти полей, причем два последних поля сами являются записями. Обращение к элементам таких сложных структур происходит по составным именам, например: ved[5].address.city:=’Корытово’.
Данную запись можно рассмотреть в виде таблицы:
Anketa |
||||||||||
facult |
group |
fio |
address |
bd |
||||||
k |
city |
street |
house |
flat |
date |
month |
year |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Корытово
|
|
|
|
|
|
||
Сортировка записи
Для сортировки некоторого поля записи можно использовать любой способ сортировки массивов. Главное помнить: сортировать необходимо одно поле, а меняем всю запись:
for i:= n downto 2 do
for j:=1 to i-1 do
begin
if a[j].city>a[j+1 ].city then {Если элемент справа поля city
меньше элемента слева этого же поля,
то произвести обмен всей записи}
begin
k:=a[j+1];
a[j+1]:= a[j];
a[j]:= k;
end;
end;
Записи с вариантами
Записи, имеющие строго определенную структуру, весьма ограничены по возможностям применения. Однако в языке Turbo Pascal есть возможность задать тип записи, содержащий несколько вариантов структуры. Такие записи называются записями с вариантами и являются средствами объединения записей, которые похожи, но не идентичны по форме.
Записи с вариантами состоят из фиксированной и вариантной частей.
Фиксированная часть задается так же, как и в простых записях. Вариантная часть формируется с помощью оператора case ... of и может состоять из нескольких вариантов. Оператор задает особое поле записи — поле признака, которое определяет, какой из вариантов в данный момент будет активизирован. Значением признака в каждый текущий момент выполнения программы должна быть одна из расположенных в операторе case констант. Константа, служащая признаком, задает вариант записи и называется константой выбора.
В любой записи может быть только одна вариантная часть, и, если она есть, она должна располагаться за всеми фиксированными полями. Имена полей должны быть уникальными в пределах той записи, где они объявлены. Однако если записи содержат поля-записи, т. е. вложены одна в другую, имена могут повторяться на разных уровнях вложенности. Формат записи с вариантами:
type
ИмяТипа=record
фиксированная часть
саsе ПолеПризнака: ИмяТипа of
КонстантаВыбора1 : (Поле : Тип, ...);
КонстантаВыбора2 : (Поле : Тип,... );
end;
Компоненты каждого варианта (идентификаторы полей и их типы) заключаются в круглые скобки. У части case нет отдельного end, как этого следовало бы ожидать по аналогии с обычным оператором case. Одно слово end заканчивает всю конструкцию записи с вариантами. Необходимо отметить, что количество полей каждого из вариантов не ограничено.
При использовании записей с вариантами необходимо придерживаться следующих правил:
все имена полей должны отличаться друг от друга, по крайней мере, одним символом, даже если они встречаются в разных вариантах;
запись может иметь только одну вариантную часть, причем вариантная часть должна размешаться в конце записи;
если вариантная часть, соответствующая какой-либо константе выбора, является пустой, то она записывается следующим образом: Константа Выбора N().
