|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.04.2013, 16:09 | #1 |
Пользователь
Регистрация: 26.08.2010
Сообщений: 51
|
Циклы Delfi
Прошу помощи. Нужно найти значение точки пересечения двух линий в диапазоне частот 5-10000 Гц. Для точности вычисления нужно задать маленький шаг. Объявляю массив - Frequency:array[5..10000] of double;
Если пишу такой цикл, for i:=5 to 10000 do begin Frequency[i]:=i+0.0001; ff1:=2*pi*Frequency[i]*Mei; ff2:=(power(fp,3)*Me)/Frequency[i]; if ff1=ff2 then begin break; FF:=Frequency[i]; end; end; Form9.Edit3.Text:=FloatToStr(FF); то программа выводит последнее значение массива с приплюсованным шагом. Если такой, i:=5; while i<=10000 do begin Application.ProcessMessages; Frequency[i]:=i+0.0001; ff1:=2*pi*Frequency[i]*Mei; ff2:=(power(fp,3)*Me)/Frequency[i]; if ff1=ff2 then begin break; FF:=Frequency[i]; end; end; Form9.Edit3.Text:=FloatToStr(FF); то программа выводит значения других переменных в другие эдиты на этой форме, а тот который надо пуст. Но такое впечатление как-будто вычисление идет. Главная форма при этом не закрывается. |
11.04.2013, 16:52 | #2 | ||||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
Код:
Цитата:
Цитата:
В цикле нет изменения i. =>бесконечный цикл. Цитата:
программа — запись алгоритма на языке понятном транслятору
|
||||
11.04.2013, 17:17 | #3 |
Пользователь
Регистрация: 26.08.2010
Сообщений: 51
|
for i:=5 to 10000 do
begin Frequency[i]:=i+0.0001; ff1:=2*pi*Frequency[i]*Mei; ff2:=(power(fp,3)*Me)/Frequency[i]; if abs(ff1-ff2)<0.001 then begin FF:=Frequency[i]; break; end; end; Form9.Edit3.Text:=FloatToStr(FF); В таком случае в эдит выдается ноль. Не врубаюсь. |
11.04.2013, 21:06 | #4 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Вы хотите найти точку пересечения кривых ff1 и ff2?
Это делается не так. Нужно не находить совпадение точек (пусть даже с некоторой погрешностью), а пересечение отрезков, каждый из которых есть сегмент ломаной из предыдущей точки (ее значение нужно запоминать) в текущую (т.е. только что вычисленную). Т.е. 1. i := 5; 2. Вычисляем CurrFF1. 3. Вычисляем CurrFF2. 4. Начало цикла. 5. PrevFF1 := CurrFF1; 6. PrevFF2 := CurrFF2; 7. Инкрементируем i. 8. Вычисляем CurrFF1. 9. Вычисляем CurrFF2. 10. Определяем пересекаются ли отрезки (PrevFF1-CurrFF1) и (PrevFF2-CurrFF2). 11. Если нет пересечения - на 3. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
delfi to c# | evander2711 | Помощь студентам | 0 | 22.12.2012 17:51 |
ПОДПРОГРАММЫ DELFI!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | EllRay | Помощь студентам | 1 | 25.12.2010 21:07 |
Задание в Delfi | WedGE | Помощь студентам | 3 | 26.05.2010 15:26 |
Delfi | RS219 | Свободное общение | 1 | 18.05.2010 12:32 |