
5.2.3. Входные и выходные данные
Входными данными являются:
путь к текстовому файлу, содержащему целые числа;
границы a и b интервала, которому принадлежат искомые числа.
Выходными данными являются:
наименьшее нечетное и наибольшее числа из интервала [a, b], содержащиеся в указанном файле с числами.
5.2.4. Сообщения оператору
В случае если задан путь к несуществующему файлу или у программы нет доступа к файлу, выводится сообщение, что не удалось открыть указанный файл (см. рисунок 12). Если задана нижняя граница интервала больше, чем верхняя, выводится сообщение об этом (см. рисунок 10). Если текстовый файл содержит не только целые числа, выводится соответствующее сообщение (см. рисунок 11). Если в полях ввода границ интервала введены нечисловые данные, выводится сообщение (см. рисунок 13).
6. Приложение
6.1. Исходный код модуля UnitMain.Pas
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellAPI;
type
TFormMain = class(TForm)
LabelFileName: TLabel;
EditFileName: TEdit;
ButtonOpen: TButton;
OpenDialog: TOpenDialog;
LabelA: TLabel;
EditA: TEdit;
LabelB: TLabel;
EditB: TEdit;
ButtonFind: TButton;
ButtonHelp: TButton;
LabelResults: TLabel;
LabelMinOdd: TLabel;
EditMinOdd: TEdit;
LabelMax: TLabel;
EditMax: TEdit;
procedure ButtonFindClick(Sender: TObject);
procedure ButtonOpenClick(Sender: TObject);
procedure ButtonHelpClick(Sender: TObject);
procedure EditFileNameChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormMain: TFormMain;
implementation
{$R *.dfm}
// Обработчик щелчка по кнопке поиска
procedure TFormMain.ButtonFindClick(Sender: TObject);
var
f: TextFile; // Файл, в котором ищутся строки
a: Integer; // Нижняя граница интервала
b: Integer; // Верхняя граница интервала
minOdd: Integer; // Минимальное нечетное число
max: Integer; // Максимальное число
temp: Integer; // Временная переменная
begin
// Получение исхоных данных
try
a := StrToInt(EditA.Text);
b := StrToInt(EditB.Text);
except
ShowMessage('Нецелочисленное значение границы интервала');
Exit;
end;
if a > b then
begin
ShowMessage('Нижняя граница интервала больше верхней');
Exit;
end;
AssignFile(f, EditFileName.Text);
// Инициализация рзультатов
minOdd := b + 1;
max := a - 1;
// Поиск по файлу
try
Reset(f);
while not EoF(f) do
begin
if EoLn(f) then
Readln(f);
if not EoF(f) then
begin
try
Read(f, temp);
except
ShowMessage('Нецелочисленные данные в исходном файле');
Exit;
end;
if (temp >= a) and (temp <= b) then
begin
if (temp < minOdd) and Odd(temp) then
minOdd := temp;
if temp > max then
max := temp;
end;
end;
end;
CloseFile(f);
// Вывод результатов
if minOdd <= b then
EditMinOdd.Text := IntToStr(minOdd)
else
EditMinOdd.Text := 'Не найдено';
if max >= a then
EditMax.Text := IntToStr(max)
else
EditMax.Text := 'Не найдено';
LabelResults.Visible := true;
LabelMinOdd.Visible := true;
LabelMax.Visible := true;
EditMinOdd.Visible := true;
EditMax.Visible := true;
except
ShowMessage('Не удалось открыть файл "' + EditFileName.Text + '"');
end;
end;
// Обработчик щелчка по кнопке открытия файла
procedure TFormMain.ButtonOpenClick(Sender: TObject);
begin
if OpenDialog.Execute then
EditFileName.Text := OpenDialog.FileName;
end;
// Обработчик щелчка по кнопке вызова справки
procedure TFormMain.ButtonHelpClick(Sender: TObject);
begin
ShellExecute(0, 'open', 'MinOddMaxNum.chm', nil, nil, SW_MAXIMIZE);
end;
// Обработчик изменения исходных данных
procedure TFormMain.EditFileNameChange(Sender: TObject);
begin
// Сокрытие результатов
LabelResults.Visible := false;
LabelMinOdd.Visible := false;
LabelMax.Visible := false;
EditMinOdd.Visible := false;
EditMax.Visible := false;
end;
end.