Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2007, 09:31   #1
Apollo_13
Пользователь Подтвердите свой е-майл
 
Аватар для Apollo_13
 
Регистрация: 29.05.2007
Сообщений: 20
Вопрос Подскажите как сделать цикл...

Суть проблемы такова, что есть куча переменных и куча формул в которые подставляются эти переменные. Надо сделать цикл что-бы небыло повторений формул для каждой переменной... Вобщем я туплю, незнаю. Как это сделать?

МОЙ СТРАШНЫЙ И УЖАСНО ЛАММЕРСКИЙ КОД:

-----------------------------------------------------------------------
var
Form1: TForm1;
a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,m1 ,n1,o1,p1,q1,s1,t1,u1,w1,z1,cx1,cy1 : real;
a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,m2 ,n2,o2,p2,q2,s2,t2,u2,w2,z2,cx2,cy2 : real;
a3,b3,c3,d3,e3,f3,g3,h3,i3,j3,k3,m3 ,n3,o3,p3,q3,s3,t3,u3,w3,z3,cx3,cy3 : real;
a4,b4,c4,d4,e4,f4,g4,h4,i4,j4,k4,m4 ,n4,o4,p4,q4,s4,t4,u4,w4,z4,cx4,cy4 : real;
a5,b5,c5,d5,e5,f5,g5,h5,i5,j5,k5,m5 ,n5,o5,p5,q5,s5,t5,u5,w5,z5,cx5,cy5 : real;
a6,b6,c6,d6,e6,f6,g6,h6,i6,j6,k6,m6 ,n6,o6,p6,q6,s6,t6,u6,w6,z6,cx6,cy6 : real;
a7,b7,c7,d7,e7,f7,g7,h7,i7,j7,k7,m7 ,n7,o7,p7,q7,s7,t7,u7,w7,z7,cx7,cy7 : real;
a8,b8,c8,d8,e8,f8,g8,h8,i8,j8,k8,m8 ,n8,o8,p8,q8,s8,t8,u8,w8,z8,cx8,cy8 : real;
v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11, v12: integer; // переменные для координат
l1,l2: real;
r1,r2: real; // переменные для расстояния
ctrl1,ctrl2,ctrl3: integer; // перменные для проверки

-----------------------------------------------------------------------

begin
if CheckBox1.Checked then begin
X := Round(X / Image1.Width * Image1.Picture.Width);
Y := Round(Y / Image1.Height * Image1.Picture.Height);
end;
if CheckBox2.Checked then
begin
if ctrl1>3 then
exit;
case ctrl1 of
1:begin
// расчетная точка 1 'green'
Gauge1.Progress:=Gauge1.Progress+30 ; // +30% в процентной шкале
Image1.Canvas.Brush.Style:=bsClear;
Image1.Canvas.Pen.Color:=clGreen;
Image1.Canvas.Pen.Width:=3;
Image1.Canvas.Ellipse(X-2,Y-2,X+2,Y+2);
Image1.Canvas.TextOut(X-6,Y-18,'РТ1');
RichEdit1.Lines.Add('- Расчетная точка 1 ('+IntToStr(X)+';'+IntToStr(Y)+')') ;
v7:=X; // запаминаем координаты 'X' в переменной 'v7'
v8:=Y; // запаминаем координаты 'Y' в переменной 'v8'
// расчет 63
r1:= Round (sqrt(sqr(v7-v1) +sqr(v8-v2))); // расстояние от РТ1 до ИШ
RichEdit1.Lines.Add('- Расстояние от РТ1 до ИШ ('+FloatToStr(r1)+')');
RichEdit1.Lines.Add('');
m1:=r1*r1;
s1:=Form4.Table1.FieldValues['S'];
a1:=Form3.Table1.FieldValues['63'];
c1:=(s1*a1)+s1;
b1:=c1/s1;
d1:=c1/1-b1;
f1:=1.2/(m1*2);
g1:=4/(d1*1.6);
h1:=f1+g1;
i1:=Log10(h1);
j1:=i1*10;
k1:=Round (j1+a1);
RichEdit1.Lines.Add('- Результат расчета РТ1 до преграды, по октавной полосе 63 ('+FloatToStr(k1)+') ДБ');
RichEdit1.Lines.Add('');
// расчет 125
m2:=r1*r1;
s2:=Form4.Table1.FieldValues['S'];
a2:=Form3.Table1.FieldValues['125'];
c2:=(s2*a2)+s2;
b2:=c2/s2;
d2:=c2/1-b2;
f2:=1.2/(m2*2);
g2:=4/(d2*1.6);
h2:=f2+g2;
i2:=Log10(h2);
j2:=i2*10;
k2:=Round (j2+a2);
RichEdit1.Lines.Add('- Результат расчета РТ1 до преграды, по октавной полосе 125 ('+FloatToStr(k2)+') ДБ');
RichEdit1.Lines.Add('');
// расчет 250
m3:=r1*r1;
s3:=Form4.Table1.FieldValues['S'];
a3:=Form3.Table1.FieldValues['250'];
c3:=(s3*a3)+s3;
b3:=c3/s3;
d3:=c3/1-b3;
f3:=1.2/(m3*2);
g3:=4/(d3*1.6);
h3:=f3+g3;
i3:=Log10(h3);
j3:=i3*10;
k3:=Round (j3+a3);
RichEdit1.Lines.Add('- Результат расчета РТ1 до преграды, по октавной полосе 250 ('+FloatToStr(k3)+') ДБ');
RichEdit1.Lines.Add('');
-----------------------------------------------------------------------
дальше точно такойже код но с другими переменными, и так до 8...
Apollo_13 вне форума Ответить с цитированием
Старый 26.06.2007, 09:41   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

понятие массива знакомо ? ну так вот переделайте эту непонятную кучу переменных в массив, и ходите циклом по нему
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 26.06.2007, 20:12   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Держи пример цикла с массивом.
Заполнение массива цифрами от 100 до 1
var
i: integer;
m: array of integer;
begin
setlength(m,100);
for i:=0 to length(m)-1 do m[i]:=length(m)-i;
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 26.06.2007, 21:05   #4
Inbox
Пользователь
 
Аватар для Inbox
 
Регистрация: 10.01.2007
Сообщений: 77
По умолчанию

[FONT='Arial,Bold','sans-serif']var[/FONT]
[FONT='Arial,Bold','sans-serif']r: array [[/FONT][FONT='Arial,Bold','sans-serif']длина массива[/FONT][FONT='Arial,Bold','sans-serif']] of [/FONT][FONT='Arial,Bold','sans-serif']тип данных[/FONT][FONT='Arial,Bold','sans-serif'];[/FONT]
Как определяется, длина массива? Очень просто, это даже похоже на геометрическое
определение. Например, тебе нужен массив из 12 значений. Длина такого массива может
быть [FONT='TimesNewRoman,Bold','serif'][0..11] [/FONT]или [FONT='TimesNewRoman,Bold','serif'][1..12][/FONT]. В квадратных скобках ты должен поставить начальное значение
массива и конечное, а между ними две точки.
Тип данных может быть любой из уже пройдённых нами. Например, тебе надо
объявить массив их 12 строк, это можно сделать следующим образом:
[FONT='Arial,Bold','sans-serif']var[/FONT]
[FONT='Arial,Bold','sans-serif']r: array [0..11] of String;[/FONT]
В этом примере я объявил переменную r типа массив из 12 строк.
Чтобы получить доступ к какому-то элементу, нужно написать имя переменной
массива и после этого, в квадратных скобках написать номер элемента, к которому нужно
получить доступ. Например, давай прочитаем 5-й элемент и запишем 7-й элемент нашего
массива:
[FONT='Arial,Bold','sans-serif']var[/FONT]
[FONT='Arial,Bold','sans-serif']r: array [0..11] of String;[/FONT]
[FONT='Arial,Bold','sans-serif']Str:String;[/FONT]
[FONT='Arial,Bold','sans-serif']begin[/FONT]
[FONT='Arial,Bold','sans-serif']Str:=r[5];[/FONT]
[FONT='Arial,Bold','sans-serif']r[7]:=’Привет’;[/FONT]
[FONT='Arial,Bold','sans-serif']end;[/FONT]

-=ОПС!=-
Sory
Это тебе не следует читать.

Последний раз редактировалось zetrix; 27.06.2007 в 09:36.
Inbox вне форума Ответить с цитированием
Старый 26.06.2007, 22:01   #5
krypton
Пользователь
 
Аватар для krypton
 
Регистрация: 26.06.2007
Сообщений: 22
Счастье real array

var
Form1: TForm1;
i,n:integer;
a:array[1..20] of real;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
n:=20;
for i:=1 to n do
begin
a[i]:=i/n;
memo1.Text:=concat(memo1.text,float tostr(a[i])+' ');
end;

end;
Дорогу одолеет идущий.
http://www.krypton.ucoz.net
"Кто владеет информацией - тот владеет миром!"
Уинстон Черчиль (Натан Ротшильд, Френсис Бекон)
krypton вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите как сделать! Sanek777 Общие вопросы Delphi 5 08.08.2008 19:12
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34
Подскажите как лучше сделать Gendolff БД в Delphi 1 10.02.2007 08:47