•  
Создано: 04.09.2010 5:05:49 · Исправлено: 04.09.2010 5:05:49 · Прочтений: 7464

Пример 1. Использование функции random без параметров

Однострочный редактор Edit применяется для задания количества чисел. Формируемая последовательность выводится в Memo. Вспомогательная переменная х облегчает запись и восприятие программы. Её использование не является обязательным.

procedure TForm2.Button1Click(Sender: TObject);
var i:word;
x:begin
extended;
for i:=0 to strtoint(Edit1.Text)-1 do
begin
x:=random;
Memo1.Lines.Add(floattostr(x));
end;
end;

Пример 2. Использование randomize, random и SpinEdit

Целочисленный параметр функции random задаётся в компоненте SpinEdit. Случайные числа выводятся в Memo.

procedure TForm2.Button4Click(Sender: TObject);
var i:word;
begin
Randomize;
for i:=0 to 9 do
Memo2.Lines.Add(inttostr(random(strtoint(SpinEdit1.Text))));
end;

Пример 3. Ввод целых положительных чисел

Данные вводятся в Edit1. Для этой компоненты в обработчике события нажатия клавиши разрешается ввод только десятичных цифр. До вызова функции перевода строки в число проверяется, не является ли строка пустой. Введённое число с комментарием отображается в метке Label3. При отсутствии значения в поле ввода на экран выводится окно с сообщением (в две строчки) и компоненте Edit1 передаётся фокус ввода.

procedure TForm1.Button3Click(Sender: TObject);
var a:integer;
begin
if Edit1.Text<>''
then begin
a:=strtoint(Edit1.Text);
Label3.Caption:='Введено число '+inttostr(a);
Label3.Visible:=true;
end
else begin
ShowMessage('В поле ввода пусто.'#13#10'Введите число');
Edit1.SetFocus;
exit;
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key<'0')or (key>'9')then key:=#0;
end;

Пример 4. Ввод вещественного числа процедурой Val

Данные вводятся в Edit2. Преобразование строки в число выполняется процедурой Val. Анализируется код ошибки. Если в записи числа нет ошибки (значение кода 0), то полученное число b используется в программе. При наличии ошибки выводится номер «неверного» символа, компоненту Edit2 передаётся фокус ввода и прерывается выполнение процедуры.

procedure TForm1.Button5Click(Sender: TObject);
var b:extended;
Code:integer;
begin
Val(Edit2.Text,b,Code);
if Code=0
then begin
Label4.Caption:='Введено число '+floattostr(b);
Label4.Visible:=true;
end
else begin
ShowMessage('Ошибка в записи числа в позиции '
+inttostr(Code)+#13#10'Повторите ввод');
Edit2.SetFocus;
exit;
end;
end;

Пример 5. Использование события OnChange и свойства Modified

Обработчик события OnChange компонента Edit3 анализирует вводимую строку. Если оказывается, что количество введённых символов «a» больше двух, то выводится сообщение. Программно строка не корректируется.

procedure TForm1.Edit3Change(Sender: TObject);
var i,k:byte;
st:string;
begin
k:=0;
st:=Edit3.text;
for i:=1 to length(st) do if st[i]='a' then inc(k);
if k>2 then ShowMessage('Ошибка в записи строки');
end;

В обработчик события формы OnClose, которое происходит непосредственно перед закрытием формы, введена проверка свойства Modified компонента Edit3. Если текст в этом компоненте был изменён, то выполняется запись в файл.

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var f:textfile;
begin
if Edit3.Modified=true
then begin
assignfile(f,'data.txt');
rewrite(f);
write(f,Edit3.Text);
end;
end;

Пример 6. Использование компонент Memo и StaticText

При вводе данных в каждой строке записывается по одному числу, для перехода к следующей строке нажимается клавиша Enter. Для контроля ввода данных в редакторы Memo1 и Memo2 сформированы защищённые блоки try… except. Анализ причин исключительных ситуаций не выполняется, просто выдаётся сообщение и осуществляется выход их процедуры. При вводе данных в Memo2 и Memo3 используется процедура Val. Введённые данные записываются в массивы. С целью уменьшения ошибок для Memo2 и Memo3 определены обработчики события OnKeyPress, в которых разрешается использование клавиши Enter, ввод десятичных цифр, знака «минус» и разделителя.

var y:array[0..100] of integer;
r,rval:array[0..100] of extended;
const n=5;
procedure TForm1.Button6Click(Sender: TObject);
var Code,i:integer;
b:extended;
st:string;
begin //Ввод из Memo
try // Ввод целых чисел
for i:=0 to n-1 do y[i]:=strToInt(Memo1.Lines[i]);
except
ShowMessage('Ошибка при вводе данных');
Memo1.SetFocus;
exit;
end;
//Ввод вещественных чисел
try
for i:=0 to Memo2.Lines.Count-1 do
r[i]:=strTofloat(Memo2.Lines.Strings[i]);
except
ShowMessage('Ошибка при вводе данных');
Memo2.SetFocus;
exit;
end;
//Ввод вещественных чисел процедурой Val
for i:=0 to Memo3.Lines.Count-1 do
begin
Val(Memo3.Lines.Strings[i],b,Code);
if=0 then rval[i]:=b else
Code begin
ShowMessage('Ошибка в записи числа в позиции ' +inttostr(Code)+#13#10'В строке '+inttostr(i));
Memo3.SetFocus;
end ;
end;
end;
procedure TForm1.Memo2KeyPress(Sender: TObject; var Key: Char);
begin
if not(key in ['0'..'9',#13,#10,'-',','])then key:=#0;
end;
procedure TForm1.Memo3KeyPress(Sender: TObject; var Key: Char);
bi
egn if not(key in ['0'..'9',#13,#10,'-','.'])then key:=#0;
end;
procedure TForm1.Button4Click(Sender: TObject);
var st:string;
m,i:integer;
begin
//Вывод данных в StaticText
st:='123';
StaticText1.Caption:='stroka';
m:=strtoint(st);
StaticText1.Caption:=StaticText1.Caption+inttostr(m);
//Вывод данных в Memo
for i:=0 to n-1 do Memo4.Lines.Add(inttostr(y[i]));
for i:=0 to Memo2.Lines.Count-1 do Memo4.Lines.Add(floattostr(r[i]));
for i:=0 to Memo3.Lines.Count-1 do
Memo4.Lines.Add(floattostr(rval[i]));
if OpenDialog1.Execute then Memo4.Lines.LoadFromFile(OpenDialog1.FileName);
end;

Пример 7. Использование компонент ListBox, ComboBox и StringGrid

В обработчике OnCreate формы задаётся начальный выбор для списка ListBox1 и заносятся сведения в StringGrid2. Комбинированный список ComboBox1 используется для задания варианта исходных данных. В процессе работы приложения функция выбирается в списке ListBox1. Вычисленные значения аргумента и функции отображаются в StringGrid1, причём для преобразования числа в строку используется функция FloatToStrF, позволяющая задать нужный формат выводимого числа. Сформирован защищённый блок try… except и предусмотрена обработка исключительной ситуации, связанной с невозможностью преобразовать строку в число.

procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.ItemIndex:=0;
With StringGrid2 do
begin Cells[1,0]:='Вариант 1';
Cells[2,0]:='Вариант 2';
Cells[3,0]:='Вариант 3';
Cells[0,1]:='Начальное значение';
Cells[0,2]:='Конечное значение';
Cells[0,3]:='Шаг';
Cells[1,1]:='2'; Cells[1,2]:='3'; Cells[1,3]:='0,2';
Cells[2,1]:='1'; Cells[2,2]:='1,8'; Cells[2,3]:='0,1';
Cells[3,1]:='10'; Cells[3,2]:='14'; Cells[3,3] :='1';
end;
end;
procedure TForm1.Button7Click(Sender: TObject);
var xn,xk,hx,x,f:extended;
i,m:integer;
begin
try
case ComboBox1.ItemIndex of
0: begin
xn:=strtofloat(StringGrid2.Cells[1,1]);
xk:=strtofloat(StringGrid2.Cells[1,2]);
hx:=strtofloat(StringGrid2.Cells[1,3]);
end;
1: begin
xn:=strtofloat(StringGrid2.Cells[2,1]);
xk:=strtofloat(StringGrid2.Cells[2,2]);
hx:=strtofloat(StringGrid2.Cells[2,3]);
end;
2: begin
xn:=strtofloat(StringGrid2.Cells[3,1]);
xk:=strtofloat(StringGrid2.Cells[3,2]);
hx:=strtofloat(StringGrid2.Cells[3,3]) ;
end
else begin
xn:=0.1; xk:=1.2; hx:=0.1;
end;
end;
except
on EConvertError do
begin
ShowMessage('Ошибка преобразования числа');
exit;
end;
end;
m:=round((xk-xn)/hx)+1;
StringGrid1.RowCount:=m+1;
StringGrid1.Cells[1,0]:='x';
StringGrid1.Cells[2,0]:='f';
x:=xn;
for i:=1 to m do
begin
case ListBox1.ItemIndex of
0: f:=sin(x);
1: f:=cos(x);
2: f:=arctan(x-1)+2*x;
3: f:=exp(x*ln(1.5));
end;
StringGrid1.Cells[1,i]:=FloatToStrF(x,ffFixed,8,3);
StringGrid1.Cells[2,i]:=FloatToStrF(f,ffFixed,8,3);
x:=x+hx;
end;
end;