Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по написанному мной коду :) [D7, XP]


Страницы:   1 2 3 4 5 6

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);и т.д…), и выдели отдельную процедуру/функцию, которая ничего не будет знать не о какких полях, а значения передавай в кач параметров.

Пример маленький:

было:


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо