Форум: "Начинающим";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];
ВнизВопрос по написанному мной коду :) Найти похожие ветки
← →
repus © (2008-01-16 09:09) [0]Дело в том, что изучаю 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 09:19) [1]> Но мне хотелось бы узнать у более знающих людей, можно ли
> сделать это как-то по проще и красивее что-ли…?
Начни со внятных имен для переменных.(используйCamelCase
в названиях)
Отдели твой расчет от работы с полями и лэйблами, то есть в кнопке получай значения из полей ввода(a:=StrToInt(Edit1.Text);
и т.д…), и выдели отдельную процедуру/функцию, которая ничего не будет знать не о какких полях, а значения передавай в кач параметров.
Пример маленький:
было:
← →
Kolan © (2008-01-16 09:21) [2]было:
procedure TForm1.Button1Click(Sender:TObject);
begin
a:=StrToInt(Edit1.Text);
…
for i:=1 to a do
…
Сделай так:procedure DoSmth(ACount: Integer);
begin
for i:=1 to ACount
…
end;procedure TForm1.Button1Click(Sender:TObject);
begin
a:=StrToInt(Edit1.Text);
…
DoSmth(a)
…
Ну и так далее…
← →
Sonia © (2008-01-16 09:51) [3]
> 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:56) [4]> А я бы еще определение объединила. Типа того:
>
> var
> a,b,i,m,z,min,r:integer;
:) LOL
← →
MsGuns © (2008-01-16 10:06) [5]Пример качественно оформленного кода можно посмотреть у Тексейры с Пачеко или в самой VCL
← →
repus © (2008-01-16 10:10) [6]спасибо большое, попробую так сделать.
А что такое Тексейра с Пачеко?
← →
Kolan © (2008-01-16 10:11) [7]> А что такое Тексейра с Пачеко?
Это авторы книжкиРуководство разработчика
, которую обязательно надо прочесть дл яработы с Delphi.
Брать тут:
http://www.ksoftware.ru/library.html
← →
Palladin © (2008-01-16 10:11) [8]Люди. Книжки пишут иногда.
← →
repus © (2008-01-16 10:17) [9]спасибо за книжку. Скачаю, почитаю.
а то тот самоучитель, что у меня, так плохо распознан, что иногда в новых примерах приходится долго сидеть и пытаться понять что там должно быть, вместо того, что написано :)
← →
oldman © (2008-01-16 10:17) [10]
> Но если в первое поле вместо 1 ввести 2 или другое число,
> то случайное число вычисляется 2 раза или больше
a:=StrToInt(Edit1.Text);
...
for i:=1 to a do
begin
m:=Random(b)+1;
какие еще вопросы?
← →
Kolan © (2008-01-16 10:20) [11]>
> какие еще вопросы?
Дык это он так и хотел что бы было, и сделал…
← →
oldman © (2008-01-16 10:23) [12]А зачем вместо random выдавать сумму random???
Не понимаю...
← →
repus © (2008-01-16 10:26) [13]
> >
> > какие еще вопросы?
>
> Дык это он так и хотел что бы было, и сделал…
ага. Я просто спрашивал насчет упрощения кода :)
← →
oldman © (2008-01-16 10:27) [14]А зачем для поиска минимального использовать массив?
Запоминаем первый random в переменную.
Если следующий random меньше переменной, то присваиваем его этой переменной,
если нет, не присваиваем
:)))
← →
oldman © (2008-01-16 10:29) [15]
> repus © (16.01.08 10:26) [13]
Вместо данных 2,4 можно использовать 1,8
То есть, первый Edit не нужен.
И с 4 какая-то фигня. На фиг это надо?
ЗЫ: Курсач пишешь или лабу?
← →
repus © (2008-01-16 10:38) [16]
> oldman ©
Не, не курсач. Я просто сам решил поучить Delphi.
А это програмка. Если ты знаком с ролевыми играми, там используются кубики с различным количеством граней. Edit2 - это количество граней этого самого кубика, а Евше1 - это количество этих кубиков. Таких прог в инете много, но так как я только начал bexbnmcz? мне интересно было сделать самому :) А с 4 дело в том, что при создании в игре перса, кидаются 4 кости(вообще 6-гранных, но я просто не стал писать это), самая меньшая убирается, а остальные три суммируются.
← →
Kolan © (2008-01-16 10:39) [17]> [16] repus © (16.01.08 10:38)
Весьма похвально. Сделай то, что тебе советывали, выкладывай сюда…
← →
repus © (2008-01-16 10:42) [18]ок.
з.ы.
Че-то с ссылкой на книгу проблемы :(
Два раза скачивал, оба раза при открытии говорит, что файл поврежден((
← →
Kolan © (2008-01-16 10:50) [19]> Два раза скачивал, оба раза при открытии говорит, что файл
> поврежден((
Странно. Какую качал? Может проблемы с нетом и не дкачал, какой размер скаченного?
Возьми тут:
http://www.podgoretsky.com/ddp.html
← →
repus © (2008-01-16 11:10) [20]Delphi 6 качал. Там она написан 7.11 мб, у меня так и весит. А вот по новой ссылке она весит почти 9 метров. Скачаю оттуда.
← →
Kolan © (2008-01-16 11:12) [21]Ок проверю…
← →
pavel_guzhanov © (2008-01-16 11:28) [22]
> Delphi 6 качал
Скачай еще и по Delphi5 этих же авторов. Очень рекомендую. Книга есть по той же ссылке.
← →
Kolan © (2008-01-16 11:42) [23]Да, благодарю, перезалил…
← →
repus © (2008-01-16 14:25) [24]
> 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;
Поправьте, если что где не так сделал. ))
← →
repus © (2008-01-16 14:28) [25]упс(( обнаружил ошибку((
← →
Kolan © (2008-01-16 14:33) [26]> Поправьте, если что где не так сделал. ))
Уже чуть лучьше. Теперь твою процедуру 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 15:57) [27]Исправил))
Еще исправил ошибку в поиске минимального значения. Я 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 16:03) [28]Не, во-первых названия недостаточно понятны, во-вторых сти ль написания не приятый в 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 16:07) [29]ок. Завтра исправлю. Сегодня уже домой пора.
Стиль написания учту.
Просто не привык еще))
← →
Kolan © (2008-01-16 16:09) [30]Учти еще выравнивание:
Не
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;
← →
ketmar © (2008-01-16 19:03) [31]>[28] Kolan©(16.01.08 16:03)
я бы ещё посоветовал имена переменных начинать с маленькой буквы, а процедур/функций — с большой. но это уже вкусовщина.
← →
ketmar © (2008-01-16 19:06) [32]2Kolan: что за дискриминация? почему книги на нормальном языке в уродской chm?! /me обиделсо.
← →
Kolan © (2008-01-16 19:09) [33]> посоветовал имена переменных начинать с маленькой буквы
ненадо :)
> на нормальном языке в уродской chm
Ты про Refactoring? Да ниче кстати сделана chm"ка — удобно пользоваться…
← →
ketmar © (2008-01-16 19:17) [34]>[33] Kolan©(16.01.08 19:09)
>>посоветовал имена переменных начинать с маленькой буквы
>ненадо :)
с чего бы? визуально читать удобней намного, чем когда всё с большой. я не даю советов, которые личной кровью не проверял. %-)
>Ты про Refactoring?
и не только. паттерны тоже.
>Да ниче кстати сделана chm"ка — удобно пользоваться…
неудобно. chm никогда неудобно пользоваться. плюс — это проприетарный формат, для которого надо проприетарный IE. так что всё равно в итоге приходится разбирать его на части, чтобы читать Оперой. ну нафига такой геморрой, если pdf удобней? а чистый html вообще удобней всех.
← →
Kolan © (2008-01-16 19:22) [35]> с чего бы?
Венгерская нотация позволяется только в именах перечислимых типов. ©
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=802
:)
← →
ketmar © (2008-01-16 19:51) [36]>[35] Kolan©(16.01.08 19:22)
>>с чего бы?
>Венгерская нотация позволяется только в именах перечислимых типов. ©
а) если ты читал Джоэля, то знаешь ведь разницу между «венгерской нотацией» и «системной венгерской нотацией»? если не знаешь и читаешь быдлосоветы тех, кто не знает — ты ССЗБ;
б) ГДЕ я писал про венгерскую нотацию вообще? O_o
← →
ketmar © (2008-01-16 19:52) [37]>[35] Kolan©(16.01.08 19:22)
кстати, никогда не считал эти рекомендации удобными во всём.
← →
Игорь Шевченко © (2008-01-17 10:08) [38]Kolan © (16.01.08 19:22) [35]
Не надо стараться быть правовернее Аллаха.
Никакая нотация, никакое оформление имен переменных, никакие паттерны и прочие умствования яйцеголовых не поможет плохо написанному неструктурированному коду.
← →
Kolan © (2008-01-17 11:36) [39]> если ты читал Джоэля, то знаешь ведь разницу между
Читал но не знаю :(
> Никакая нотация, никакое оформление имен переменных, никакие
> паттерны и прочие умствования яйцеголовых не поможет плохо
> написанному неструктурированному коду.
Я не спорю, просто не оч., имхо правильно учить именовать переменные а-ля iCount, dValue итд…
Или
> посоветовал имена переменных начинать с маленькой буквы
value, i, j, simpleText
Это непее распространено чем, CamelCase(или как там его)…
← →
Игорь Шевченко © (2008-01-17 12:03) [40]Kolan © (17.01.08 11:36) [39]
Да пофиг, как начинать имена переменных. Главное, чтобы каждая переменная была на своем очевидном месте.
> не оч., имхо правильно учить именовать переменные а-ля iCount,
> dValue итд…
именовать переменные Count или Value, равно как и count и value не менее "не оч. правильно" - я все к этому веду. А как именовать - это уже сугубо от места именования, то есть, от задачи, зависит.
Страницы: 1 2 3 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.045 c