![]() |
| ||
|
|
Новости |
Поиск |
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;
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. Можно перевести на др. язык при надобности.