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;


Игорь Шевченко   (2008-01-17 14:03:00) [61]

ketmar ©   (17.01.08 13:53) [44]


> эк вы упорно не знаете, что «системная венгерская» — это
> искажение оригинальной идеи…


оригинальная идея была для С без классов. Там это было вполне разумно. С классами можно реализовать гораздо понятнее, и проверку типов выполнять на уровне компиляции, а не на уровне просмотра исходного кода.
Более того, даже на Паскале проверку можно реализовать на уровне компиляции, путем объявления типов для тех переменных, имена которых в оригинале префиксировались.

Ку ?


l_v   (2008-01-17 14:00:00) [62]

function Dice(num_dice,dice_side:integer): string;
//////////////////////////////

Label1.caption:=Dice(a,b);

так вроде правильней...


ketmar   (2008-01-17 13:59:00) [63]

>[45] Kolan©(17.01.08 13:55)
>Пойду читать Джоэла…

всегда полезно. можешь даже в переводах посмотреть, эта статья переведена.


Kolan   (2008-01-17 13:55:00) [64]

> эк вы упорно не знаете,

Пойду читать Джоэла…


Kolan   (2008-01-17 13:53:00) [65]

«прилВенгерская сущНотация, предлПри числВсем сущУважении предлК собсущВенгрии союзИ местЕе сущЧленстве предлВ прилЕвропейском сущСоюзе союзИ прилДругих прилКрутых сущОрганизациях, глагЯвляется прилПервым сущВрагом сущЧитабельности.»

Класс, серьезно…


ketmar   (2008-01-17 13:53:00) [66]

эк вы упорно не знаете, что «системная венгерская» — это искажение оригинальной идеи…

впрочем, я не проповедник.


Skyle   (2008-01-17 12:30:00) [67]

Автор, а я вообще думаю, что Dice должно быть не процедурой, а функцией...


Игорь Шевченко   (2008-01-17 12:29:00) [68]

Кстати, о венгерской нотации:

"прилВенгерская сущНотация, предлПри числВсем сущУважении предлК собсущВенгрии союзИ местЕе сущЧленстве предлВ прилЕвропейском сущСоюзе союзИ прилДругих прилКрутых сущОрганизациях, глагЯвляется прилПервым сущВрагом сущЧитабельности."

(с) http://bugtraq.ru/library/programming/badcode.html


Игорь Шевченко   (2008-01-17 12:03:00) [69]

Kolan ©   (17.01.08 11:36) [39]

Да пофиг, как начинать имена переменных. Главное, чтобы каждая переменная была на своем очевидном месте.


> не оч., имхо правильно учить именовать переменные а-ля iCount,
>  dValue итд…


именовать переменные Count или Value, равно как и count и value не менее "не оч. правильно" - я все к этому веду. А как именовать - это уже сугубо от места именования, то есть, от задачи, зависит.


Kolan   (2008-01-17 11:36:00) [70]

> если ты читал Джоэля, то знаешь ведь разницу между

Читал но не знаю :(


> Никакая нотация, никакое оформление имен переменных, никакие
> паттерны и прочие умствования яйцеголовых не поможет плохо
> написанному неструктурированному коду.

Я не спорю, просто не оч., имхо правильно учить именовать переменные а-ля iCount, dValue итд…
Или

> посоветовал имена переменных начинать с маленькой буквы

value, i, j, simpleText

Это непее распространено чем, CamelCase(или как там его)…


Игорь Шевченко   (2008-01-17 10:08:00) [71]

Kolan ©   (16.01.08 19:22) [35]

Не надо стараться быть правовернее Аллаха.

Никакая нотация, никакое оформление имен переменных, никакие паттерны и прочие умствования яйцеголовых не поможет плохо написанному неструктурированному коду.


ketmar   (2008-01-16 19:52:00) [72]

>[35] Kolan©(16.01.08 19:22)
кстати, никогда не считал эти рекомендации удобными во всём.


ketmar   (2008-01-16 19:51:00) [73]

>[35] Kolan©(16.01.08 19:22)
>>с чего бы?
>Венгерская нотация позволяется только в именах перечислимых типов. ©

а) если ты читал Джоэля, то знаешь ведь разницу между «венгерской нотацией» и «системной венгерской нотацией»? если не знаешь и читаешь быдлосоветы тех, кто не знает — ты ССЗБ;
б) ГДЕ я писал про венгерскую нотацию вообще? O_o


Kolan   (2008-01-16 19:22:00) [74]

> с чего бы?

Венгерская нотация позволяется только в именах перечислимых типов. ©
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=802

:)


ketmar   (2008-01-16 19:17:00) [75]

>[33] Kolan©(16.01.08 19:09)
>>посоветовал имена переменных начинать с маленькой буквы
>ненадо :)

с чего бы? визуально читать удобней намного, чем когда всё с большой. я не даю советов, которые личной кровью не проверял. %-)

>Ты про Refactoring?
и не только. паттерны тоже.

>Да ниче кстати сделана chm'ка — удобно пользоваться…
неудобно. chm никогда неудобно пользоваться. плюс — это проприетарный формат, для которого надо проприетарный IE. так что всё равно в итоге приходится разбирать его на части, чтобы читать Оперой. ну нафига такой геморрой, если pdf удобней? а чистый html вообще удобней всех.


Kolan   (2008-01-16 19:09:00) [76]

> посоветовал имена переменных начинать с маленькой буквы

ненадо :)


> на нормальном языке в уродской chm

Ты про Refactoring? Да ниче кстати сделана chm'ка — удобно пользоваться…


ketmar   (2008-01-16 19:06:00) [77]

2Kolan: что за дискриминация? почему книги на нормальном языке в уродской chm?! /me обиделсо.


ketmar   (2008-01-16 19:03:00) [78]

>[28] Kolan©(16.01.08 16:03)
я бы ещё посоветовал имена переменных начинать с маленькой буквы, а процедур/функций — с большой. но это уже вкусовщина.


Kolan   (2008-01-16 16:09:00) [79]

Учти еще выравнивание:
Не


  for i:=1 to num_dice do
    begin
      m:=Random(dice_side)+1;
      for k:=2 to num_dice do
          if min>m then
              min:=m;
      if i=1 then
          res:=IntToStr(m)
        else
          res:=res+'+'+IntToStr(m);
      z:=z+m;
  end;


А:

 
  for i:=1 to num_dice do
  begin
    m:=Random(dice_side)+1;
    for k:=2 to num_dice do
      if min>m then
        min:=m;
    if i=1 then
      res:=IntToStr(m)
    else
      res:=res+'+'+IntToStr(m);
    z:=z+m;
  end;


repus   (2008-01-16 16:07:00) [80]

ок. Завтра исправлю. Сегодня уже домой пора.
Стиль написания учту.
Просто не привык еще))


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

Наверх

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