- •Тема, цель работы, вариант задания.
- •Тема, цель работы, вариант задания.
- •Модуль GraphObj.
- •Модуль Point.
- •Модуль Circle.
- •Модуль Rect.
- •Модуль Line.
- •Модуль Square.
- •Модуль Trian.
- •Основной модуль oop_Lab3.
- •Тема, цель работы, вариант задания.
- •Тема, цель работы, вариант задания.
- •Тема, цель работы, вариант задания.
-
Тема, цель работы, вариант задания.
-
Описание иерархии классов (рисунок диаграммы классов, текстовое описание свойств и методов каждого класса).
-
Исходный текст модулей программы.
Пример.В поток записан текстовый файл. Удалить все строки, начинающиеся с гласной буквы, не используя дополнительных потоков.
Текст программы
unit MainForm;
interface
uses
Windows, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Memo1: TMemo;
bOpen: TBitBtn;
bSave: TBitBtn;
bExit: TBitBtn;
bStart: TBitBtn;
eFileName: TEdit;
lFileCont: TLabel;
lFileName: TLabel;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
procedure DelVowersStr;
procedure FormCreate(Sender: TObject);
procedure bExitClick(Sender: TObject);
procedure bOpenClick(Sender: TObject);
procedure bSaveClick(Sender: TObject);
procedure bStartClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: ShiftState);
procedure OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean);
public
FName: string; // имя выбранного файла данных
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ диалог открытия файла }
procedure TForm1.bOpenClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
FName := OpenDialog1.FileName; // в FName - имя выбранного файла
eFileName.Text := FName; // в Edit заносим имя файла с полным путём
Memo1.Lines.LoadFromFile(FName); // выводим в Memo1 содержимое этого файла
end;
end;
{ сохраняем файл }
procedure TForm1.bSaveClick(Sender: TObject);
begin
SaveDialog1.FileName := FName;
if SaveDialog1.Execute then
begin
// выбор имени сохраняемого файла из диалога
FName := SaveDialog1.FileName;
Memo1.Lines.SaveToFile(FName); // заносим в файл содержимое Memo1
end
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FName := ''; // начальная инициализация переменной имени файла
end;
{ процедура, реализующая алгоритм удаления строк,
начинающихся с гласных букв, из загруженного в поток файла - FName }
procedure TForm1.DelVowersStr;
const
// множества гласных букв
VowelsEng = ['A', 'E', 'I', 'J', 'O', 'U', 'Y', 'a', 'e', 'i', 'j', 'o', 'u', 'y'];
VowelsRus = ['А', 'а', 'Е', 'е', 'Ё', 'ё', 'И', 'и', 'Й', 'й', 'О', 'о', 'У', 'у', 'Э', 'э', 'Ю', 'ю', 'Я', 'я'];
var
i, j, k: Word;
c: Char;
l: Integer;
f: Boolean;
S: TStream; // переменная потокового типа
begin
S := TFileStream.Create(FName, fmOpenReadWrite);
// загружаем в поток типа FileStream содержимое файла FName
// тело алгоритма
with S do
begin
Position := 0; // установка указателя потока в начало
i := 0;
k := Size; // в k - размер потока в байтах
while i <> k do
begin
Read(c, 1);
inc(i);
f := false;
if (c in VowelsEng) or (c in VowelsRus) then f := true;
j := 1;
while (c <> #10) and (i <= k - 1) do
begin
Read(c, 1);
inc(i);
inc(j);
end;
if f then
begin
dec(k, j);
for l := i - j to k - 1 do
begin
Read(c, 1);
Position := l;
Write(c, 1);
Position := l + j + 1;
end;
dec(i, j);
Position := i;
end;
end;
Size := i; // обрезание потока до текущего положения указателя
Free;
// загружаем в Memo1 содержимое преобразованного файла
Memo1.Lines.LoadFromFile(FName);
end
end;
{ запуск основной процедуры обработки файла при нажатии на кнопку }
procedure TForm1.bStartClick(Sender: TObject);
begin
if FName <> '' then DelVowersStr
else MessageDlg('Не выбран файл!', mtWarning, [mbOk], 0)
end;
{ вывод при нажатии клваиши F1 информации о разработчике программы }
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_F1 then MessageDlg('Выполнил Фёдоров Виталий, гр. ПВ-33.', mtInformation, [mbOk], 0)
end;
procedure TForm1.OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean);
begin
// если в диалоге открытия файла выбрали имя несуществующего,
// то выводим предупреждение и запрещаем закрытие диалога
if not FileExists(OpenDialog1.FileName) then
begin
MessageDlg('Файл не найден!', mtError, [mbOk], 0);
CanClose := false
end
end;
{ завершение работы приложения }
procedure TForm1.bExitClick(Sender: TObject);
begin
Application.Terminate
end;
end.
Главная форма.
Варианты заданий:
-
В поток TMemoryStream записан записан набор строк в ASCIIZ формате. Изменить порядок следования этих строк на противоположный, не используя дополнительных потоков.
-
В поток TMemoryStream записан записан набор строк в ASCIIZ формате. Выполнить сортировку этих строк в алфавитном порядке, не используя дополнительных потоков.
-
В поток записан текстовый файл. Удалить все строки, начинающиеся с гласной буквы, не используя дополнительных потоков.
-
В поток записаны матрицы различных порядков. Удалить все вырожденные матрицы, не используя дополнительных потоков.
-
В поток записана последовательность целых чисел. Найти минимум и максимум и поменять их местами, не используя дополнительных потоков.
-
В поток записана последовательность целых чисел. Найти сумму чисел, стоящих перед отрицательными числами.
-
В поток записана последовательность целых чисел. Удалить минимальное число, не используя дополнительных потоков.
-
В поток записана последовательность символов. Преобразовать поток таким образом, чтобы в начале находились гласные буквы, в середине согласные, а в конце остальные символы, не используя дополнительных потоков.
-
В поток записан текстовый файл. Удалить самую короткую строку, не используя дополнительных потоков.
-
В поток записана последовательность символов. Подсчитать количество слов, разделенных пробелами.
-
Записать в поток последовательность чисел от 1 до N в символьном виде через пробел.
-
В поток записана последовательность чисел в символьном виде через пробел. При помощи дополнительного потока заменить все числа их квадратами.
-
В поток записана последовательность целых и вещественных чисел в символьном виде через пробел. Удалить все вещественные числа, не используя дополнительных потоков.
-
В поток записана последовательность слов и чисел, разделенных пробелами. Удалить все числа, не используя дополнительных потоков.
-
В поток записана последовательность цифр. При помощи дополнительного потока заменить их прописью.
Лабораторная работа №6
Разработка компонентов
Цель работы: приобретение навыков разработки компонентов в интегрированной среде Delphi.
Задание:
-
Изучить основные приемы создания компонентов в Delphi.
-
Разработать компонент в соответствии с вариантом задания. Компонент должен содержаться в собственном пакете, пакет и демонстрационный проект должны содержаться в «Project – Group». Главный компонент должен содержать ссылки (свойства), указывающие на вспомогательные компоненты, при удалении вспомогательных компонент эти ссылки должны автоматически принимать значение NIL. Обработчики событий у вспомогательных компонент должны назначаться автоматически компонентом – владельцем.
Содержание отчёта: