![]() |
|
|
#1
|
|||
|
|||
|
доброго времени суток всем! У меня такая задача никак нимогу осилить сам:
Задача для расчета и последующего построения графика по найденым значениям. Суть: В ходе лабораторной мы делаем от 1 до N опытов. Так вот нам нужно ввести кол-во режимов по которым сделаны замеры, вводим. Далее пользователь вводит 4 показателя LT,LD,ZT,ZD снятых в ходе лабы. Пошел расчет по формулам: Код:
ft:=lt*165; fd:=ld*195; u:=ft*2*fod; e:=(1-zt/zd)*100; h:=(ft*zt)/(fd*zd)*100; Требуется чтобы после введения LT,LD,ZT,ZD происходил расчет и в зависимости от введенного кол-ва опытов он повторялся с новыми вновь введенными LT,LD,ZT,ZD, т.е если опытов 5 то ввели посчитали, записали в StringGrid, обнулили поля снова заполнили новыми значениями посчитали, записали и так далее!!! В конце нужно начертить график зависимости . Построить графики зависимостей E и H от U. Никак не могу осилить.. Прошу помоч с решением данной задачи!!! Заранее спасибо!!! |
|
#2
|
||||
|
||||
|
Помочь-то мы можем, но что именно не получается? Как насчёт выложить код и показать "проблемный участок"?
|
|
#3
|
|||
|
|||
|
если нужен код то постараюсь завтра выложить! а вообще не могу догнать как организовать цикл для N опытов(как именно данные из формы забирать,потом опять вводить если опытов >1) и по результатам график построить!!
Как то вот не могу сообразить как это имеено в Delphi сделать грамотно!! |
|
#4
|
|||
|
|||
|
можно сделать доп. формой, которая будет показываться для ввода данных при каждой итерации цикла.
Код:
uses
EnterFrm; // форма для ввода данных
...
for i := 1 To N Do // N берется от пользователя - кол-во опытов
begin
EnterForm.ShowModal;
LT := StrToInt(EnterForm.Edit1.text);
...
// далее идет расчет и накопление значений в массиве
end;
// теперь у нас есть массив данных, строим по нему график. |
|
#5
|
|||
|
|||
|
т.е нужно изначально массив создавать?
И как туда записать все вычисления? например из 3х проделаных циклов? и потом как из массива построить график, с TChart немогу разобраться.. вот фрагмент кода это после того как вводим кол-во режимов и нажимаем кнопку расчет)Цитата:
как накапливать и записать массив?? подскажите что дальше нужно делать? Последний раз редактировалось glorx, 14.12.2010 в 16:26. |
|
#6
|
||||
|
||||
|
А запустить цикл из N лабораторных религия не позволяет?
Код:
procedure TForm1.btn6Click(Sender: TObject); var i,n,D:Integer; Lt,Ld,Zt,Zd,Ft,Fd,U,E,H,fod,fi1,e1,n1:real; begin EnterFrm.visible:=True; n:=StrToInt(Form1.lbledt23.text); //============запускаем цикл==================== for d:=1 to n do begin //=============================== fod:=strtofloat(Form1.lbledt20.Text); for i:=1 to n do begin EnterFrm.ShowModal; EnterFrm.Caption:='Введите данные'+IntToStr(n)+' лабораторной'; EnterFrm.lbl2.Caption:=IntToStr(i); Lt:=StrTofloat(EnterFrm.lbledt21.text); Ld:=StrTofloat(EnterFrm.lbledt22.text); Zt:=StrTofloat(EnterFrm.lbledt28.text); Zd:=StrTofloat(EnterFrm.lbledt29.text); Ft:=Lt*165; //усилие тормоза Fd:=Ld*195; // усилие двигателя U:=Ft/2*fod; // коэф.тяги E:=(1-(Zt/Zd))*100; // скольжение H:=((Ft*Zt)/(Fd/Zd))*100; // КПД StringList1.Cells[0,n]:=//что ты хочешь вывести end; end; end; ИЛИ Я тебя не правильно понял???? Ну а данные для TChart ты всегда можешь взять из StringList Последний раз редактировалось Admin, 14.12.2010 в 17:11. |
|
#7
|
|||
|
|||
|
У StringList разве Cells Есть???
пробовал с StringList.Text... запустилось но после нажатия на кнопку для которой обработчик написан ошибка появляется: http://i044.radikal.ru/1012/a0/48146871f67a.jpg в чем проблема?? Последний раз редактировалось glorx, 14.12.2010 в 20:33. |
|
#8
|
||||
|
||||
|
Цитата:
|
|
#9
|
|||
|
|||
|
Цитата:
Delphist подскажи, продолжи пажалста свою идею. |
|
#10
|
||||
|
||||
|
c каких пор у StringGrid нет Cells
![]() |
|
#11
|
|||
|
|||
|
Цитата:
вообще ошибка то при нажати на кнопку.. что то неверно в обработчике.. В чем пробема помогите.. |
|
#12
|
|||
|
|||
|
итак напишу что нужно получить:
1 форма: там идут сторонние расчеты и вводится N - кол-во режимов, и есть кнопка при нажатии на которую появляется форма с вводом данных для N-ого режима!! Данные вводятся нажимается кнопка, форма появляется вновь если опытов(режимов )>1... в конце в таблицу записываются все полученные значения для всех посчитаных режимов и стоятся графики!! Что получилось: Это обработчик для кнопки первой формы: Код:
procedure TForm1.btn6Click(Sender: TObject);
var i,n,D:Integer;
Lt,Ld,Zt,Zd,Ft,Fd,U,E,H,fod,fi1,e1,n1:real;
begin
n:=StrToInt(Form1.lbledt23.text);
//============запускаем цикл====================
for d:=1 to n do
begin
//===============================
fod:=strtofloat(Form1.lbledt20.Text);
for i:=1 to n do
begin
EnterFrm.ShowModal;
EnterFrm.Caption:='Введите данные '+IntToStr(n)+' режима';
// EnterFrm.lbl2.Caption:=IntToStr(i);
Lt:=StrTofloat(EnterFrm.lbledt21.text);
Ld:=StrTofloat(EnterFrm.lbledt22.text);
Zt:=StrTofloat(EnterFrm.lbledt28.text);
Zd:=StrTofloat(EnterFrm.lbledt29.text);
Ft:=Lt*165; //усилие тормоза
Fd:=Ld*195; // усилие двигателя
U:=Ft/2*fod; // коэф.тяги
E:=(1-(Zt/Zd))*100; // скольжение
H:=((Ft*Zt)/(Fd/Zd))*100; // КПД
Form1.strngrd1.Cells[1,n]:=floatToStr(Ft);
Form1.strngrd1.Cells[2,n]:=floatToStr(Fd);
Form1.strngrd1.Cells[3,n]:=floatToStr(U);
Form1.strngrd1.Cells[4,n]:=floatToStr(E);
Form1.strngrd1.Cells[5,n]:=floatToStr(H);
end;
end;
end;еще сделал StringGrid так вот записывает только последний опыт!! Что не так??кроме кривых рук конечно=) Последний раз редактировалось glorx, 14.12.2010 в 21:29. |
|
#13
|
||||
|
||||
|
У тебя ведь в мессаге белым по черному написано в чем дело! Удали это:
Код:
EnterFrm.visible:=True; |
|
#14
|
|||
|
|||
|
Цитата:
|
|
#15
|
||||
|
||||
|
В StringGrid'е второе не n, а i должно быть.
|