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;


repus   (2008-01-19 14:56:00) [1]

ой, уже сам догнал)) спасибо))


repus   (2008-01-19 14:26:00) [2]

а не подскажете, как это сделать? я просто еще не знаю, как это делается :( ток начал изучать


Palladin   (2008-01-19 14:05:00) [3]

добавить вызов randomize... например на FormCreate...


repus   (2008-01-19 14:04:00) [4]

Програмка поста [27]. Та, насчет которой я спрашивал. Я тут заметил кое-что, так и не смог понять. Вроде же там Random, но при каждом новом запуске она выдает те же самые значения и в том же порядке, какой был при предыдущем запуске, и при всех остальных запусках до них(проверил 50 первых результатов)  :((
Подскажите, как это исправить, чтоб она постоянно разные значения выдавала.


bang bang gangsta   (2008-01-19 10:43:00) [5]


> Всё верно. Только какое отношение это имеет к сабжу?

Да просто человек, создавший топик, показал вам код а вы его исправляли, показывая более качественно оформленный код. Вот и мне захотелось узнать, как енто нужно офорМЛЯТЬ.

> правильно так:
> const choiseVector: array [1..2] of TMyFunction = (Choise1,
>  Choise2);
> ...
> choiseVector[n]();

Способ мне понравился, не знал что и так можно. Я вообще много чего не знаю.


guav   (2008-01-19 01:15:00) [6]

> [100] ketmar ©   (18.01.08 22:08)


> const choiseVector: array [1..2] of TMyFunction = (Choise1,
> Choise2);
> ...
> choiseVector[n]();

Мне нравится. Если n вне диапазона, то имеем Undefined Behaviour в полном объёме, а не детский лепет типа ни одна не вызовется :)


Palladin   (2008-01-18 22:30:00) [7]

кетмар не жжот, чего он, горчичник чтоли?... он жестоко выжигает сверхвысокими температурами... склоняя всех достойных к волшебным способам получения дохода с использовании отполированной палки судьбы с намонатанным на нее кустом славы...


Dib@zol   (2008-01-18 22:25:00) [8]

> [100] ketmar ©   (18.01.08 22:08)

Ога кул способ. Кетмарь снова в деле, и снова жжот %)


> [99] bang bang gangsta   (18.01.08 20:49)
Всё верно. Только какое отношение это имеет к сабжу?


ketmar   (2008-01-18 22:08:00) [9]

>[99] bang bang gangsta (18.01.08 20:49)
правильно так:
const choiseVector: array [1..2] of TMyFunction = (Choise1, Choise2);
...
choiseVector[n]();


bang bang gangsta   (2008-01-18 20:49:00) [10]

Здравствуйте! Я вижу вы тут обсуждали правильное оформление кода. Скажите, как правильно оформлять case ... of ... ? Случайно не так?:

case nnn of
 1: begin
   { ... }
 end;
 2: begin
   { ... }
 end;
end;

Правильно ли оформлять так?


ketmar   (2008-01-18 17:19:00) [11]

>[67] Игорь Шевченко ©(18.01.08 10:01)
см. [62]


DiamondShark   (2008-01-18 17:17:00) [12]

Удалено модератором
Примечание: В чат.


oxffff   (2008-01-18 16:50:00) [13]

Удалено модератором
Примечание: В чат.


DiamondShark   (2008-01-18 16:16:00) [14]

Удалено модератором
Примечание: В чат.


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


> Я его и имел ввиду. (Правда не пользуюсь, так как ненадо,
>  крутил пару раз его, пользоваться не умею можно сказать…).
>


зато resourcestring надо, чтобы код распухал.

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


> Я их взял, вставил в вёрд, и проверил орфографию, например…
> А когда они как рис по всему коду, то что мне делать?


Русский учить. Оно рулез.


Kolan   (2008-01-18 14:21:00) [16]


>
> Это полный. Потому как локальные строки ты делаешь глобальными,
> замусоривая код.

Поясняю зачем я их делаю глобальными.

допустим у меня строки:
resourcestring
 rsGuaranteedVolumesCaption = 'Сведения о гарантированных объемах (%s):';
 rsPeriodDescription = 'c %s по %s';
 rsExample = 'Например: «%s».';


Я их взял, вставил в вёрд, и проверил орфографию, например…
А когда они как рис по всему коду, то что мне делать?

> С этого момента подробнее, как ты собираешься переводить
> строки на другой язык без ITE ?

Я его и имел ввиду. (Правда не пользуюсь, так как ненадо, крутил пару раз его, пользоваться не умею можно сказать…).


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

guav ©   (18.01.08 14:14) [91]

Особенно префиксы для типов переменных. Существует соглашение, с блаженной памяти 1995 года, эксперты среды генерируют код с учетом этого соглашения. Можно убирать буковку T перед классами (и в dfm тоже), но зачем делать лишние телодвижения в этом случае - я честно не понимаю.


guav   (2008-01-18 14:14:00) [18]

> [81] Игорь Шевченко ©   (18.01.08 13:15)

Я к тому что префиксы Delphi нужны чтобы хотя бы хватило имён идентификаторов.


Игорь Шевченко   (2008-01-18 14:06:00) [19]

Kolan ©   (18.01.08 14:01) [89]


> 1. Хронение строк в 1 месте, чтобы не искать по всему модулю.


Это полный. Потому как локальные строки ты делаешь глобальными, замусоривая код.


> 2. Есть такой рефакторинг.


Заставь дурака богу молиться, он себе лоб расшибет


> 3. Можно перевести на др. язык при надобности.


С этого момента подробнее, как ты собираешься переводить строки на другой язык без ITE ?


Kolan   (2008-01-18 14:01:00) [20]

> компилятор его и так знает

Да понятно это, не об нем речь.

> а программисту — лишний мусор в коде

Вот это кто определяет я непойму, я вот программист, мне это не мешает, а помогает. Джоэл, вот, как программист советует.
На QC видел на счет ExtractResourceString жалобу, что они пользуют rs, а там по умолчанию Str. (Убейте не могу найти её)…

Кто сказал, что это мусор?


> А в чем проблема ? А ты вообще с какой целью resourcestring
> используешь — чтобы исполняемый код распухал ?

Проблеммы нет, а цель:
1. Хронение строк в 1 месте, чтобы не искать по всему модулю.
2. Есть такой рефакторинг.
3. Можно перевести на др. язык при надобности.


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

Наверх

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