Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2012, 00:06   #1
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
По умолчанию Выскакивает ошибка delphi 2009

Всем доброго времени суток, столкнулся с проблемой при заполнении массива - выдает такую ошибку :
First chance exception at $75EED36F. Exception class EConvertError with message ''0,01 ' is not a valid floating point value'. Process Project1.exe (4468)
Что неправильно ?
В текстовых файлах содержится функция Бесселя от аргумента u, который там записан от 0,01 до 6,01
Код:
procedure TForm1.btn1Click(Sender: TObject);
 var words: TStringList; a, b, c, p: Double; i,j: Integer; f: TextFile; buf:  string;
 mb: array[1..2,1..121] of Double;
begin
    words:= TStringList.Create;
  SplitTextIntoWords(edt1.Text,words);
  a:= StrToFloat(words.Strings [0]);
  b:= StrToFloat(words.Strings [1]);
  c:= StrToFloat(words.Strings [2]);
  words.Free;
  tolshina(a);
  mmo1.Clear;
  AssignFile(f, 'd:/u.txt');
Reset(f);
i:=1;
j:=1;
  while not EOF(f) do
  begin
    readln(f, buf); // прочитать строку из файла
    p:= StrToFloat(buf);
    mb [i,j]:= p;
    inc (j);
  end;
    CloseFile(f); // закрыть файл
  AssignFile(f, 'd:/Ko.txt');
Reset(f);
i:=2;
j:=1;
  while not EOF(f) do
  begin
    readln(f, buf); // прочитать строку из файла
    p:= StrToFloat(buf);
    mb [i,j]:= p;
    inc (j);
  end;
    CloseFile(f); // закрыть файл

Последний раз редактировалось Corpuscul; 23.10.2012 в 00:27.
Corpuscul вне форума Ответить с цитированием
Старый 23.10.2012, 05:35   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
от 0,01 до 6,01
а должен быть от 0.01 до 6.01
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 23.10.2012, 06:33   #3
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
По умолчанию

Цитата:
а должен быть от 0.01 до 6.01
Пробовал менять на точку разделитель все равно ругается
First chance exception at $751DD36F. Exception class EConvertError with message ''0.01 ' is not a valid floating point value'. Process Project1.exe (3312)
Corpuscul вне форума Ответить с цитированием
Старый 23.10.2012, 08:23   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-первых: Поставь принудительно переменную DecimalSeparator в точку
Во-вторых: Почему не пройдешся отладчиком пошагово и не выяснишь на какой строке и при каких условиях (что содержат переменные в этой строке) возникает ошибка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2012, 08:52   #5
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
По умолчанию

Цитата:
Почему не пройдешся отладчиком пошагово и не выяснишь на какой строке и при каких условиях (что содержат переменные в этой строке) возникает ошибка?
Недавно начал программировать, в универе только паскаль был, но отладчика там не было, в общем не знаю как его вызвать даже.
Цитата:
Поставь принудительно переменную DecimalSeparator в точку
А можно пример, как это сделать?
Corpuscul вне форума Ответить с цитированием
Старый 23.10.2012, 09:41   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TForm1.btn1Click(Sender: TObject);
 var words: TStringList; a, b, c, p: Double; i,j: Integer; f: TextFile; buf:  string;
 mb: array[1..2,1..121] of Double;
begin

  FormatSettings.DecimalSeparator:='.';

  words:= TStringList.Create;
  SplitTextIntoWords(edt1.Text,words);
  a:= StrToFloat(StringReplace(words[0],',','.',[]));
  b:= StrToFloat(StringReplace(words[1],',','.',[]));
  c:= StrToFloat(StringReplace(words[2],',','.',[]));
Вот что я имел ввиду.
Теперь хоть точка хоть запятая программа должна правильно понять число
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2012, 10:02   #7
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
По умолчанию

Ой, моя ошибка лишнее выложил переменные a,b,c считываются из поля edit1 и с этим проблем нет, все читается и считается.
А вот в файле u.txt и Ko.txt у меня функция Бесселя скопированная из Exel и не читает именно оттуда, хоть в самом файле я и точки на запятые менял и обратно. Могу файлы приложить, если надо.


Вроде разобрался, там в файле пробел затесался после числа

Последний раз редактировалось Corpuscul; 23.10.2012 в 12:30.
Corpuscul вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при переносе из 2006 в delphi 2009/2010 Яр|/||< (^_^) Общие вопросы Delphi 2 18.02.2010 12:01
C# Почему выскакивает ошибка. slim>>> Помощь студентам 6 10.02.2010 17:57
Выскакивает ошибка xakkkkker Общие вопросы Delphi 1 20.01.2010 15:42
ошибка после обновления Delphi 2009 rad studio Tlegen Софт 1 07.09.2009 03:44
Ошибка при работе с MySQL 3.51 в Delphi 2009 rainbow БД в Delphi 0 27.03.2009 06:47