![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 22.04.2008
Сообщений: 11
|
![]()
Здравствуйте, уважаемые знатоки. Очень нужна Ваша помощь. Привожу код - линейная интерпол. массивов вещественных чисел. Никак не могу одолеть. Помогите пожалуйста.
Код:
Последний раз редактировалось AlDelta; 23.04.2008 в 12:56. |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
Объявите в процедуре Button6Click переменную i : integer, уберите вот это: "i:=i-1" и оформите, пожалуйста, листинг тэгом <CODE> (# в окне редактирования), сил нет глаза ковырять. Потом можно будет разбираться с математикой. Массивы объявляются с указанием крайних значений, в массиве [0..3] четыре элемента.
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 22.04.2008
Сообщений: 11
|
![]()
Спасибо за ответ. В таком виде код нормально? Добавил переменную i, убрал i=i-1, скомпилировалась, выдает ошибку при вводе 0,1 и т.п.
"0.1- is not a valid floating point value". Я так понимаю еще рано компилировать. Вопрос: как правильно записать кол-во элементов массива если из 5 - [0..4] или [1..5]? # type TForm1 = class(TForm) DATA: TEdit; Inter: TEdit; Button6: TButton; procedure Button6Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; var X:array[1..3] of Real=(0.1, 0.2, 0,3); //вообще элементов около 30, регулярного шага нет, кол-во постоян., и известно заранее Y:array[1..3] of Real=(0.5, 0.7, 0,9); //выдает ошибку [Error] Unit1.pas(26): Number of elements differs from declaration - допустим 3 элемента, в другом случае норм.? хотя получается 4-ре элемента??? X:array[0..3] of Real=(0.1, 0.2, 0,3); Y:array[0..3] of Real=(0.5, 0.7, 0,9); //Я так понимаю, в этом случае 0..3=4элемента? Или нет? Ошибки не возникает -ПОЧЕМУ? implementation uses Unit2; {$R *.dfm} procedure TForm1.Button6Click(Sender: TObject); var i:integer; begin for i:=1 to 3 do //[Error] Unit1.pas(46): For loop control variable must be simple local variable Что не так? if StrToFloat(Data.Text)<=X[i] then if StrToFloat(Data.Text)>=X[i+1] then begin Inter.Text:=FloatToStr(y[i]+((y[i+1]-y[i])/(x[i+1]-x[i]))*(StrToFloat(Data.Text)-x[i])) end else //Как замкнуть цикл и проверять следующие элементы? end; end.[/CODE] Предидущие посты мы читаем невнимательно? Последний раз редактировалось Auster; 23.04.2008 в 13:51. |
![]() |
![]() |
![]() |
#4 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]() Код:
Последний раз редактировалось B_N; 23.04.2008 в 13:32. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 22.04.2008
Сообщений: 11
|
![]()
Поясите тупому эта запись X:array[0..3] of Real=(0.1, 0.2, 0,3);
означает, что 0-му элементу соответствует значение 0.1, 1-му - 0.2, а какому номеру значение 0.3? 2-му или 3-му? "Data.Text" - это просто имя TEdita, куда пользователь вводит значения X-ов. "Inter.Text" - это имя TEdita, для вывода полученной величины. Inter -это очепятка от Enter). |
![]() |
![]() |
![]() |
#6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
А в остальном ты в целом прав.
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 22.04.2008
Сообщений: 11
|
![]()
Спасибо, однако вопросы остались открытыми(.
1. Как правильно объявить кол-во элементов массива и присвоить им значения и обращаться к ним в теле цикла? 2. Замкнуть цикл, пока одни ошибки( |
![]() |
![]() |
![]() |
#8 | |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]() Цитата:
Код:
Код:
|
|
![]() |
![]() |
![]() |
#9 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Цитата:
I'm learning to live...
|
||
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 22.04.2008
Сообщений: 11
|
![]()
Прога компелируется не выдавая замечаний, но при попытке внести исходные данные - любую дробную величину выдается:
message "0.1 is not a valid floating point value." Process stopped. Где собака зарыта? Еше раз код привожу. Р.S. при вводе значений массива попутал . и , спасибо. # interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExcelXP, OleServer, Menus, StdCtrls, ExtCtrls; type TForm1 = class(TForm) DATA: TEdit; Button6: TButton; Enter: TEdit; procedure Button6Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; var X:array[1..3] of Real=(0.1, 0.2, 0.3); Y:array[1..3] of Real=(0.5, 0.7, 0.9); implementation uses Unit2, Unit3; {$R *.dfm} procedure TForm1.Button6Click(Sender: TObject); var i:integer; begin if StrToFloat(Data.Text)<=X[i] then if StrToFloat(Data.Text)>=X[i+1] then begin Enter.Text:=FloatToStr(y[i]+((y[i+1]-y[i])/(x[i+1]-x[i]))*(StrToFloat(Data.Text)-x[i])) end end; end. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибки | delphin100 | Операционные системы общие вопросы | 12 | 17.04.2008 14:15 |
Задачка в delphi, вылазят ошибки... | Absent | Помощь студентам | 3 | 17.02.2008 15:54 |
Ошибки | Terran | Общие вопросы Delphi | 3 | 05.02.2008 20:47 |
[Основы ТАУ]Решение задачи идентификации линейной динамической системы... | Tanzilit | Помощь студентам | 1 | 17.01.2008 03:09 |
соединение точек с помощью линейной интерпаляции и интерпаляции кубическими сплайнами. | yulia | Помощь студентам | 6 | 09.10.2007 07:38 |