![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по написанному мной коду :) [D7, XP]
repus © (2008-01-16 09:09:00)Дело в том, что изучаю Delphi по самоучителю и всего несколько дней как начал, и меня некому поправить, если что. В общем, сделал небольшую прогу. В ней 2 поля ввода, в первом по умолчанию стоит 1, во второе вводиться произвольное число. И при нажатии на кнопку прога выдает случайное число от 1 до Числа, введеного во второе поле ввода. Но если в первое поле вместо 1 ввести 2 или другое число, то случайное число вычисляется 2 раза или больше, в зависимости от введеного в первое поле числа, а потом результат складывается. Допустим, если в первом поле - 1, а во втором 6, то результатом будет случайное число от 1 до 6. А если 2 и 6, то результатом будет сумма 2-х разных случайных чисел от 1 до 6, и т.д.
Но есть еще дополнения, если число в поле Edit1 равно 4, то одно самое маленькое значение выкидывается, и в результат выводится сумма только трех случайных чисел.
Код который я написал работает так, как надо :) Но мне хотелось бы узнать у более знающих людей, можно ли сделать это как-то по проще и красивее что-ли...? И нет ли там чего лишнего?
Код:
procedure TForm1.Button1Click(Sender:TObject);
const
size=4;
var
a:integer;
b:integer;
i:integer;
m:integer;
z:integer;
u:array[1..size] of integer;
min:integer; //минимальный элемент массива
r:integer;
begin
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);
z:=0;
Label2.Caption:='';
for i:=1 to a do
begin
m:=Random(b)+1;
if i=1 then
Label2.Caption:=IntToStr(m)
else
Label2.Caption:=Label2.Caption+'+'+IntToStr(m);
z:=z+m;
if a=4 then
u[i]:=m;
end;
Label2.Caption:=Label2.Caption+'='+IntToStr(z)+#13;
if a=4 then
begin
min:=1;
for i:=2 to a do
if u[i]<u[min] then
min:=i;
r:=u[min];
z:=z-r;
Label2.Caption:=Label2.Caption+'Минимальное значение - '+IntToStr(r)
+#13+'3 из 4d'+IntToStr(b)+' = '+IntToStr(z);
end;
end;
Kolan (2008-01-16 10:11:00) [101]> А что такое Тексейра с Пачеко?
Это авторы книжкиРуководство разработчика, которую обязательно надо прочесть дл яработы с Delphi.
Брать тут:
http://www.ksoftware.ru/library.html
Palladin (2008-01-16 10:11:00) [102]Люди. Книжки пишут иногда.
repus (2008-01-16 10:10:00) [103]спасибо большое, попробую так сделать.
А что такое Тексейра с Пачеко?
MsGuns (2008-01-16 10:06:00) [104]Пример качественно оформленного кода можно посмотреть у Тексейры с Пачеко или в самой VCL
Kolan (2008-01-16 09:56:00) [105]> А я бы еще определение объединила. Типа того:
>
> var
> a,b,i,m,z,min,r:integer;
:) LOL
Sonia (2008-01-16 09:51:00) [106]
> a:integer;
> b:integer;
> i:integer;
> m:integer;
> z:integer;
> u:array[1..size] of integer;
> min:integer; //минимальный элемент массива
> r:integer;
А я бы еще определение объединила. Типа того:
var
a,b,i,m,z,min,r:integer;
Kolan (2008-01-16 09:21:00) [107]было:
procedure TForm1.Button1Click(Sender:TObject);
begin
a:=StrToInt(Edit1.Text);
for i:=1 to ado
Сделай так:
procedure DoSmth(ACount: Integer);
begin
for i:=1 to ACount
end;
procedure TForm1.Button1Click(Sender:TObject);
begin
a:=StrToInt(Edit1.Text);
DoSmth(a)
Ну и так далее
Kolan (2008-01-16 09:19:00) [108]> Но мне хотелось бы узнать у более знающих людей, можно ли
> сделать это как-то по проще и красивее что-ли ?
Начни со внятных имен для переменных.(используйCamelCaseв названиях)
Отдели твой расчет от работы с полями и лэйблами, то есть в кнопке получай значения из полей ввода(a:=StrToInt(Edit1.Text);и т.д ), и выдели отдельную процедуру/функцию, которая ничего не будет знать не о какких полях, а значения передавай в кач параметров.
Пример маленький:
было: