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 16:03:00) [81]

Не, во-первых названия недостаточно понятны, во-вторых сти ль написания не приятый в Delphi

Примерно так:
procedure Dice(DiceNumber, DiceSide: Integer; var Res: String);

что имелось ввиду под Res я не понял.

Ну а тут:
var
  i,m,min,z,k:integer;


Порядок навести? Стиль написание исправь. + I и K  оставь — это нормально, а что такое Z и M ?


repus   (2008-01-16 15:57:00) [82]

Исправил))
Еще исправил ошибку в поиске минимального значения. Я for не там записал


> for i:=1 to a do
>      begin
>        m:=Random(b)+1;
>        if i=1 then
>            s:=IntToStr(m)
>          else
>            s:=s+'+'+IntToStr(m);
>        z:=z+m;
>    end;
>
>    s:=s+'='+IntToStr(z)+#13;
>    if a=4 then
>      begin
>        min:=m;
>          for k:=2 to a do
>              if min>m then
>                  min:=m;


Теперь вот:

procedure Dice(num_dice,dice_side:integer;var res:string);
 var
   i,m,min,z,k:integer;
 begin
   z:=0;
   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;

   res:=res+'='+IntToStr(z)+#13;
   if num_dice=4 then
     begin
       z:=z-min;
       res:=res+'Минимальное значение - '+IntToStr(min)
        +#13+'3 из 4d'+IntToStr(dice_side)+' = '+IntToStr(z);

   end;
end;

procedure TForm1.Button1Click(Sender:TObject);
 var
   num_dice,dice_side:integer;
   res:string;
 begin
   num_dice:=StrToInt(Edit1.Text);
   dice_side:=StrToInt(Edit2.Text);
   Dice(num_dice,dice_side,res);
   Label2.Caption:='';

   Label2.Caption:=res;
end;


Kolan   (2008-01-16 14:33:00) [83]

> Поправьте, если что где не так сделал. ))

Уже чуть лучьше. Теперь твою процедуру Dice можно использовать и в других программа, так как она не зависит от контролов(Edit'ов, Label'ов).

Но лучьше достаточно.

вот представь я даю тебе процедуру:
ProcessWord(d,nr: Integer; L: string);
И прошу использовать её.

Первое что ты спросишь, а что такое d, nr и L.

Так и любой другой человек глядя на твою
Dice(a,b:integer;var s:string);
спросит что такое a,b и s

Чтобы такого вопоса не возникало надо назвать их внятно.

Исправляй…


repus   (2008-01-16 14:28:00) [84]

упс(( обнаружил ошибку((


repus   (2008-01-16 14:25:00) [85]


> pavel_guzhanov ©   (16.01.08 11:28) [22]
>
> > Delphi 6 качал
>
> Скачай еще и по Delphi5 этих же авторов. Очень рекомендую.
>  Книга есть по той же ссылке.


ок. Как-нибудь скачаю, спасибо. Сейчас просто траффика мало осталось((

Вот что у меня получилось из предыдущей проги))

procedure Dice(a,b:integer;var s:string);
 var
   i,m,min,z,k:integer;
 begin
   z:=0;
   for i:=1 to a do
     begin
       m:=Random(b)+1;
       if i=1 then
           s:=IntToStr(m)
         else
           s:=s+'+'+IntToStr(m);
       z:=z+m;
   end;

   s:=s+'='+IntToStr(z)+#13;
   if a=4 then
     begin
       min:=m;
         for k:=2 to a do
             if min>m then
                 min:=m;
       z:=z-min;
       s:=s+'Минимальное значение - '+IntToStr(min)
        +#13+'3 из 4d'+IntToStr(b)+' = '+IntToStr(z);
   end;
end;

procedure TForm1.Button1Click(Sender:TObject);
 var
   a,b:integer;
   s:string;
 begin
   a:=StrToInt(Edit1.Text);
   b:=StrToInt(Edit2.Text);
   Dice(a,b,s);
   Label2.Caption:='';

   Label2.Caption:=s;
end;


Поправьте, если что где не так сделал. ))


Kolan   (2008-01-16 11:42:00) [86]

Да, благодарю, перезалил…


pavel_guzhanov   (2008-01-16 11:28:00) [87]


> Delphi 6 качал

Скачай еще и по Delphi5 этих же авторов. Очень рекомендую. Книга есть по той же ссылке.


Kolan   (2008-01-16 11:12:00) [88]

Ок проверю…


repus   (2008-01-16 11:10:00) [89]

Delphi 6 качал. Там она написан 7.11 мб, у меня так и весит. А вот по новой ссылке она весит почти 9 метров. Скачаю оттуда.


Kolan   (2008-01-16 10:50:00) [90]

> Два раза скачивал, оба раза при открытии говорит, что файл
> поврежден((

Странно. Какую качал? Может проблемы с нетом и не дкачал, какой размер скаченного?
Возьми тут:
http://www.podgoretsky.com/ddp.html


repus   (2008-01-16 10:42:00) [91]

ок.

з.ы.
Че-то с ссылкой на книгу проблемы :(
Два раза скачивал, оба раза при открытии говорит, что файл поврежден((


Kolan   (2008-01-16 10:39:00) [92]

> [16] repus ©   (16.01.08 10:38)

Весьма похвально. Сделай то, что тебе советывали, выкладывай сюда…


repus   (2008-01-16 10:38:00) [93]


> oldman ©


Не, не курсач. Я просто сам решил поучить Delphi.
А это програмка. Если ты знаком с ролевыми играми, там используются кубики с различным количеством граней. Edit2 - это количество граней этого самого кубика, а Евше1 - это количество этих кубиков. Таких прог в инете много, но так как я только начал bexbnmcz? мне интересно было сделать самому :) А с 4 дело в том, что при создании в игре перса, кидаются 4 кости(вообще 6-гранных, но я просто не стал писать это), самая меньшая убирается, а остальные три суммируются.


oldman   (2008-01-16 10:29:00) [94]


> repus ©   (16.01.08 10:26) [13]


Вместо данных 2,4 можно использовать 1,8
То есть, первый Edit не нужен.
И с 4 какая-то фигня. На фиг это надо?

ЗЫ: Курсач пишешь или лабу?


oldman   (2008-01-16 10:27:00) [95]

А зачем для поиска минимального использовать массив?
Запоминаем первый random в переменную.
Если следующий random меньше переменной, то присваиваем его этой переменной,
если нет, не присваиваем
:)))


repus   (2008-01-16 10:26:00) [96]


> >
> > какие еще вопросы?
>
> Дык это он так и хотел что бы было, и сделал…


ага. Я просто спрашивал насчет упрощения кода :)


oldman   (2008-01-16 10:23:00) [97]

А зачем вместо random выдавать сумму random???
Не понимаю...


Kolan   (2008-01-16 10:20:00) [98]

>
> какие еще вопросы?

Дык это он так и хотел что бы было, и сделал…


repus   (2008-01-16 10:17:00) [99]

спасибо за книжку. Скачаю, почитаю.
а то тот самоучитель, что у меня, так плохо распознан, что иногда в новых примерах приходится долго сидеть и пытаться понять что там должно быть, вместо того, что написано :)


oldman   (2008-01-16 10:17:00) [100]


> Но если в первое поле вместо 1 ввести 2 или другое число,
>  то случайное число вычисляется 2 раза или больше


a:=StrToInt(Edit1.Text);
...
for i:=1 to a do
  begin
     m:=Random(b)+1;


какие еще вопросы?


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

Наверх

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