Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 34
1

Проблема с заполнением массива из StringGrid

21.03.2019, 18:19. Показов 1993. Ответов 8

Author24 — интернет-сервис помощи студентам
Здравствуйте! Вот сам код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var
  Form1: TForm1;
  x,y:array[0..3] of real;
implementation
{$R *.lfm}
 
{ TForm1 }
            
procedure TForm1.Button1Click(Sender: TObject);
     var w,ln,li,R,xx,RR:real;
     var i,k:integer;
    begin
       xx:=StrToFloat(Edit1.Text);
     ln:=0;
     for i:=0 to StringGrid1.RowCount-1 do begin
      x[i]:=StrToFloat(StringGrid1.Cells[0, i]);
      y[i]:=StrToFloat(StringGrid1.Cells[1, i]);
     end;
     for i:=0 to 3 do begin
       w:=1;
       w:=w*(xx-x[i]);           //вычисление w по (4.3)
       li:=1;
       for k:=0 to 3 do begin
         if k<>i then li:=li*(xx-x[k])/(x[i]-x[k]);   //вычисления li по (4.2)
       end;
       Label10.Caption:=(FloatToStr(li));
       Label11.Caption:=(FloatToStr(li));
       Label12.Caption:=(FloatToStr(li));
     end;
     ln:=ln+y[i]*li; //вычисления по (4.1)
     Label13.Caption:=(FloatToStr(ln));
     k:=1;
     for i:=1 to 4 do k:=k*i;  //вычисление значения 4!
     R:=abs(w/k);                //вычисления по (4.3)
     Label14.Caption:=(FloatToStr(R));
     RR:=R/abs(ln);
     Label15.Caption:=(FloatToStr(RR));
end;
В самой форме по умолчанию в StringGrid уже находится 4 значения для x и 4 значения для y в двух столбцах соответственно. Суть в том, что программа выдает ошибку "" is an invalid float при нажатии вычисления. К посту прикреплю саму программу. Прошу помощи, до этого никогда не работал в Lazarus да и с Delphi, пишу программы только на C#. Но преподаватель требует выполнения данной программы именно в нем
Вложения
Тип файла: zip Program.zip (10.96 Мб, 3 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2019, 18:19
Ответы с готовыми решениями:

Создание одномерного массива с заполнением рандомными числами
Напишите пожалуйста процесс создания одномерного массива с его заполнением рандомными числами.

Проблема с заполнением массива
import java.util.Scanner; import java.util.Arrays; public class mergeSortedArrysSololearn { ...

Проблема с заполнением массива
Помогите разобраться!! Дано: Столбец А - даты, столбец В- данные (длина 1500 строк) Требуется...

Проблема со случайным заполнением массива
собственно, на этой простой задаче возникла проблема. код: for i := 0 to Form1.n - 1 do ...

8
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
21.03.2019, 19:04 2
Смените разделитель с запятой на точку.
0
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 34
21.03.2019, 19:13  [ТС] 3
Puporev, не помогает( Ошибка та же.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
21.03.2019, 19:18 4
Еще такое предположение, попробуйте заменить переменную ln на другую, может компилятор думает что это функция Ln
0
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 34
21.03.2019, 19:24  [ТС] 5
Puporev, та же ошибка всеравно. Решил на время задать каждый элемент массива вручную, и данная ошибка пропала, зато теперь вылетает исключение в строке 36, где функция RR вычисляется Ошибка External:SIGFPE
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
21.03.2019, 19:39 6
Лучший ответ Сообщение было отмечено Crotus как решение

Решение

Pascal
1
for i:=0 to StringGrid1.RowCount-1 do begin
У Вас в строке 0 X,Y
нужно
Pascal
1
for i:=1 to StringGrid1.RowCount-1 do begin
Добавлено через 2 минуты
У меня после этого ошибка исчезла и все считает.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
21.03.2019, 19:47 7
Зачем же привязываться к магическим константам? А потом захочется сделать заголовок из двух строк и опять придется менять значение. Лучше сразу написать:

Pascal
1
     for i:=StringGrid1.FixedRows to StringGrid1.RowCount-1 do begin
1
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 34
21.03.2019, 20:08  [ТС] 8
Puporev, хмм.. у меня ошибка осталась та же, только теперь ковычки не пустые, пишет: "0.25" is an invalid float

Добавлено через 20 минут
Проблема решена. Все заработало, после того, как вернул в качестве разделителя запятые. Всем спасибо.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
21.03.2019, 20:13 9
Цитата Сообщение от Crotus Посмотреть сообщение
после того, как вернул в качестве разделителя запятые
Ну это само собой, я просто предположил.
0
21.03.2019, 20:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2019, 20:13
Помогаю со студенческими работами здесь

Проблема с заполнением массива string через Console.ReadLine
проблема со скриптом, не получается заполнить массив через Console.ReadLine, искал ответы в...

Проблема с заполнением базы
Помогите, пожалуйста! Я новичёк в 1С. До этого момента с 1С дела вообще не имел. У меня вопрос по...

Проблема с заполнением ТаблицыПодбора
Такая проблема: данные из обработки.ВводКоличестваИЦены не переносятся в ТаблицуПодбора на...

Проблема с заполнением <SELECT>
Надо при получении фокуса &lt;select&gt;'ом заполнить его записями и открыть ниспадающий список....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru