
- •Лабораторная работа № 1 Решение задачи на работу с целым типом данных.
- •Лабораторная работа № 2. Решение задачи на работу с вещественным типом данных.
- •Лабораторная работа № 3 Решение задачи на ввод, вывод данных.
- •Лабораторная работа № 4 Решение задачи на условный оператор и оператор выбора
- •Лабораторная работа № 5 Решение задачи на работу с множеством.
- •Лабораторная работа № 6 Решение задачи с применением оператора цикл с параметром и перечисляемый тип.
- •Лабораторная работа № 7 Решение задачи с применением операторов цикла итерационного типа.
- •Лабораторная работа № 8
- •Лабораторная работа № 9. Решение задачи на создание наследника.
- •Лабораторная работа № 10 Решение задач на перегружаемые и виртуальные методы.
- •Лабораторная работа № 11. Знакомство со средой Delphi.
- •Лабораторная работа № 12 Решение задачи на линейные алгоритмы в среде Delphi.
- •Пример написания программы
- •Индивидуальные задания
- •Лабораторная работа № 13
- •Лабораторная работа № 14.
- •Лабораторная работа № 15
- •Размещение многострочного окна вывода (tMemo)
- •Лабораторная работа № 16
- •Лабораторная работа № 17. Использование компонентов таблиц для работы с двумерным массивом..
- •Лабораторная работа № 18. Использование компонентов кнопок обычных, графических и с фиксацией.
- •1.Дано двузначное число. Определить: а) входит ли в него цифра 3;
- •Лабораторная работа № 19. Использование компонента таймер для управления при выполнении программы.
- •Запоминание времени и инициализация счетчика тактов
- •Лабораторная работа № 20. Использование компонентов зависимых и независимых переключателей.
- •Лабораторная работа №21 Использование диалоговых окон.
- •Лабораторная работа №22 Использование операторов обработки исключений.
Лабораторная работа № 9. Решение задачи на создание наследника.
Цель работы: Создание объектов-наследников и использование их в программах.
Теория.
Наследование - этот принцип означает, что если вы хотите создать новый класс, лишь немного отличающийся от старого, то совершенно нет необходимости в переписывании заново уже существующих полей и методов. Вы объявляете, что новый класс TNewObject
TNewObject = class(TOldObject);
является потомком или дочерним классом старого класса TOldObject, называемого предком или родительским классом, и добавляете к нему новые поля, методы и свойства — иными словами, то, что нужно при переходе от общего к частному.
Унаследованные от класса-предка поля и методы доступны в дочернем классе; если имеет место совпадение имен методов, то говорят, что они перекрываются.
Поведение методов при наследовании, без преувеличения, является краеугольным камнем объектно- ориентированного программирования. В зависимости от того, какие действия происходят при вызове, методы делятся на три группы. В первую группу отнесем статические методы, во вторую — виртуальные (virtual) и динамические (dynamic) и, наконец, в третью — появившиеся только в Delphi 4 — перегружаемые (overload) методы.
Методы первой группы полностью перекрываются в классах-потомках при их переопределении. При этом можно полностью изменить объявление метода. Методы второй группы при наследовании должны сохранять наименование и тип. Перегружаемые методы дополняют механизм наследования возможностью использовать нужный вариант метода (собственный или родительский) в зависимости от условий применения.
Задание 1.
Все входные строковые параметры, задающие имена файлов, для экономии памяти целесообразно описывать как параметры-константы.
Вариант 1. Описать функцию getInt(Name,k) целого типа, возвращающую k-й элемент файла целых чисел с именем Name (элементы нумеруются от 0). Если файл не существует или не содержит k-го элемента, то функция возвращает 0. С помощью этой функции вывести пять элементов данного файла с указанными номерами.
Вариант 2. Описать функцию getLine(Name,k) строкового типа, возвращающую k-ю строку текстового файла с именем Name (строки нумеруются от 0). Если файл не существует или не содержит k-й строки, то функция возвращает пустую строку. С помощью этой функции вывести пять строк данного файла с указанными номерами.
Вариант 3. Описать функцию IntFileSize(Name) целого типа, возвращающую размер файла целых чисел с именем Name. Если файл не существует, то функция возвращает –1. С помощью этой функции определить размер трех файлов с данными именами.
Вариант 4. Описать функцию TextSize(Name) целого типа, возвращающую число строк в текстовом файле с именем Name. Если файл не существует, то функция возвращает –1. С помощью этой функции определить размер трех файлов с данными именами.
Вариант 5. Описать процедуру InvertIntFile(Name), меняющую порядок следования элементов файла целого типа с именем Name на противоположный. Если файл не существует или содержит менее двух элементов, то процедура не выполняет никаких действий. Обработать с помощью этой процедуры три файла с данными именами.
Вариант 6. Описать процедуру SplitIntFile(Name0,k,Name1,Name2), jnohps~ys~ первые k (>= 0) элементов существующего файла целых чисел с именем Name0 в файл Name1, а остальные элементы — в файл Name2 (прежнее содержимое результирующих файлов стирается). Один из результирующих файлов может оказаться пустым. Применить эту процедуру к файлу Name0, используя указанные значения Name1, Name2 и k.
Вариант 7. Описать процедуру SplitText(Name0,k,Name1,Name2), копирующую первые k (>= 0) строк существующего текстового файла с именем Name0 в файл Name1, а остальные элементы — в файл Name2 (прежнее содержимое результирующих файлов стирается). Один из результирующих файлов может оказаться пустым. Применить эту процедуру к файлу Name0, используя указанные значения Name1, Name2 и k.
Вариант 8. Описать процедуру ConcatFile(NameA,NameB,NameAB), позволяющую объединить содержимое двух двоичных файлов NameA и NameB одного и того же типа в новом файле NameAB. Использовать процедуры BlockRead и BlockWrite. Применить эту процедуру к парам исходных файлов Name1–Name2, Name1–Name3 и Name2–Name3, создав файлы с именами Name12, Name13, Name23.
Вариант 9. Описать процедуру StringFileToText(Name)1|TextToStringFile(Name)2, преобразующую [двоичный строковый]1|текстовый2 файл с именем Name в текстовый1|[двоичный строковый]2 файл с тем же именем. Используя эту процедуру, преобразовать два данных строковых1|текстовых2 файла с именами Name1 и Name2 в текстовые1|строковые2.
Вариант 10. Описать процедуру CodeText(Name,k), шифрующую текстовый файл с именем Name, выполняя циклическую замену каждой русской буквы на букву, расположенную в алфавите на k-й позиции после исходной (0 < k < 11). Например, при k = 3 "А" перейдет в "Г", "а" — в "г", "Я" — в "В". Букву "ё" в алфавите не учитывать, прочие символы файла не изменять. Используя эту процедуру и зная k, зашифровать1|расшифровать2 данный файл.
Вариант 11. Даны два файла вещественных чисел с именами NameA и NameB, содержащие ненулевые части [верхних треугольных]1|[нижних треугольных]2 матриц A и B (по строкам). Создать новый файл с именем NameC, содержащий ненулевую часть произведения A·B исходных матриц (по строкам). Если матрицы A и B нельзя перемножать, то оставить файл NameC пустым.
Вариант 12. Дано целое число N (< 5) и N файлов целых чисел разного размера с именами Name1,..., Name. Объединить их содержимое в новом файле целых чисел с именем Name0, используя следующий формат: в начальном элементе файла Name0 хранится число N, в следующих N элементах хранятся размеры исходных файлов, а затем последовательно размещаются данные из каждого исходного файла.
Вариант 13. Дан файл целых чисел, содержащий данные из нескольких (не более четырех) файлов в формате, описанном в задании File41. Восстановить файлы, использованные при создании исходного файла, присвоив им имена вида " .tst", где — порядковый номер файла (n = 1, 2, ...).
Вариант 14. Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы, расположенные после первого1|последнего2 символа пробела, включая и сам этот пробел.
Вариант 15. Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы, расположенные перед первым1|последним2 символом пробела, включая и сам этот пробел.
Вариант 16. Дан символьный файл. Упорядочить его элементы по возрастанию1|убыванию2 их кодов.
Вариант 17. Дано число k и строковый файл с именем Name1, содержащий непустые строки. Создать два новых файла: строковый с именем Name2, содержащий первые1|последние2 k символов каждой строки исходного файла (если строка короче k символов, то она сохраняется целиком), и символьный с именем Name3, содержащий k-й символ каждой строки (если строка короче k, то в файл Name3 записывается пробел).
Вариант 18. Дан строковый файл, содержащий непустые строки. Создать новый файл, содержащий все строки исходного файла наименьшей1|наибольшей2 длины (в том же порядке).
Вариант 19. Дан строковый файл с именем NameS, содержащий даты в формате "день/месяц/год", причем под день и месяц отводится по две позиции, а под год — четыре. Создать файлы целых чисел с именами Name1 и Name2, содержащие соответственно значения [дней и месяцев]1|[дней и лет]2|[месяцев и лет]3 для дат из исходного строкового файла (в том же порядке).
Контрольные вопросы :
Описание объекта ?
Как использовать методы объекта ?
Назначение Private и Public ?