|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.06.2007, 09:31 | #1 |
Пользователь Подтвердите свой е-майл
Регистрация: 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... |
26.06.2007, 09:41 | #2 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
понятие массива знакомо ? ну так вот переделайте эту непонятную кучу переменных в массив, и ходите циклом по нему
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
26.06.2007, 20:12 | #3 |
Телепат с дипломом
Старожил
Регистрация: 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)
Проверь себя! Онлайн тестирование | Мой блог |
26.06.2007, 21:05 | #4 |
Пользователь
Регистрация: 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. |
26.06.2007, 22:01 | #5 |
Пользователь
Регистрация: 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 "Кто владеет информацией - тот владеет миром!" Уинстон Черчиль (Натан Ротшильд, Френсис Бекон) |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Подскажите как сделать! | 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 |