
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Строковый тип данных
- •Описание констант
- •Операция присваивания
- •Приоритет операций
- •Оператор присваивания
- •Совместимость и преобразование типов
- •Элементарный ввод-вывод
- •Лекция 5 Выражения
- •Математические операции
- •Логические операции
- •Операции отношения
- •Приоритет операций
- •Основные математические функции
- •Уменьшает значение числа X на y. Если число y не указано, то уменьшение происходит на 1. Циклы
- •Арифметические циклы
- •Итерационные циклы с предусловием
- •Итерационные циклы с постусловием
- •Операторы завершения цикла
- •Операторы ветвления и цикла Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Операторы ветвления и цикла
- •Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Лекция 7. Подпрограммы: процедуры и функции
- •Пример 27
- •Обмен данными
- •4.2. Множества
- •4.2.1. Объявление типа множества
- •4.2.2. Операции над множествами
- •4.2.3. Пример использования множества
- •Пример 33
- •4.3. Строки
- •4.3.1. Объявление типа String
- •4.3.2. Операции над строковыми переменными
- •4.3.3. Встроенные процедуры и функции обработки строк
- •Пример 34
- •4.1. Матрица
- •4.1.1. Ввод-вывод элементов матрицы
- •4.1.2. Определение индексов элементов матрицы
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Определение и особенности файлов
- •Доступ к компонентам файла
- •Текстовый файл
- •Чтение из текстового файла
- •Запись в текстовый файл
- •Файлы в Тубо Паскаль
- •Файловые процедуры и функции
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Графика Турбо Паскаля
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Статические и динамические памяти переменные
- •Объявление указателей
- •Выделение и освобождение динамической памяти
- •Операции с указателем
- •Пример 41
- •Связанные списки
- •Понятие бинарные деревья. Операции над бинарными деревьями
- •Применение бинарных деревьев
- •Сравнение рекурсии и итерации
- •Пример 51
- •Реализация объектно-ориентированного подхода в турбо-паскале
- •Алгоритмическая и объектная декомпозиция
- •Объектный тип в Турбо-Паскале
- •Способы наследования и переопределения
- •Виртуальные методы
- •Модуль c r t
- •Модуль g r a p h
Массивы записей
Тип записи может быть использован при объявлении компонентов массива. Например, используя тип записи Student, можно объявить массив Gruppa:
type Student = record Fam: string; Ball: array[1..4] of 2..5; end; var Gruppa: array [1..30] of Student; |
Каждый элемент этого массива представляет собой запись, содержащую фамилию студента и его 4 оценки. Для занесения в массив отличной оценки за первый экзамен второму студенту группы можно использовать оператор:
Gruppa[2].Ball[1] := 5;
а для I-того студента за третий экзамен хорошей оценки: Gruppa[I].Ball[3] := 4;
Пример обработки массива записей
Рассмотрим задачу обработки массива записей. Запись имеет следующую структуру:
Требуется определить в заданном массиве записей "стул" фамилию директора, выпускающего самые дешевые в среднем стулья. Опишем структуру записи:
type Izgot = record {запись "изготовитель"} Gor, Fab, Fam : string; end; Stul = record Mater: string; {запись "стул"} H : real; Cena : integer; Iz : Izgot; end; MasZap = array[1..100] of Stul; |
Исходные данные: |
N - число записей в массиве; |
|
Mas[1..N] - массив записей "стул" типа MasZap |
Результат: |
фамилия директора |
Предполагаем, что нет одноименных фабрик. Задачу можно разбить на две подзадачи:
1. Формирование массивов:
MasFab - содержит все различные фабрики-изготовители; KolSt - содержит число видов стульев, выпускаемых каждой фабрикой; SumCen - содержит сумму цен всех видов стульев, выпускаемых на соответствующей фабрике.
2. Вычисление номера фабрики (в массиве MasFab), выпускающей стулья с минимальной средней ценой. После этого можно напечатать фамилию директора этой фабрики.
Покажем, как можно, осуществив систематическую декомпозицию, свести поставленную задачу к комбинации простых типовых алгоритмов.
Алгоритм Обработка_массива_записей Начало обнуление счетчика числа различных фабрик цикл перебора всех записей поиск фабрики в массиве MasFab если фабрика-изготовитель текущего стула еще не встречалась ранее то - запоминание новой записи "изготовитель" в массиве MasFab; - инициализация счетчика числа видов стульев в массиве KolSt; - инициализация суммарной цены стульев в массиве SumCen; иначе - увеличение счетчика числа видов стульев в массиве KolSt для найденной фабрики; - увеличение суммарной цены стульев в массиве SumCen для найденной фабрики; все кц Min = большое положительное число цикл перебора средних цен стульев всех различных фабрик если средняя цена < Min то - запоминание номера соответствующей фабрики; - запоминание в Min средней цены; все кц вывод (фамилии директора фабрики с найденным номером) Конец |
Решение использует следующие типовые алгоритмы:
- вычисление нового массива, число элементов которого заранее неизвестно (использование счетчика); - вычисление массива, содержащего все различные элементы ("отсутствие/присутствие"); - вычисление суммы элементов массива; - поиск номера минимального элемента в массиве.