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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2016, 18:33   #1
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
Вопрос ошибка incompatible types 'string' and 'real'

ошибка incompatible types 'string' and 'real', долго искал в интернете как исправить эту ошибку, выбивало много разных советов, но не помогло. Решил обратиться к вам. Ошибку выбивает после слова "then"

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
 S: String;
   L, Z: real;
  i,  j : Integer;
begin
  S := Edit1.Text;
  L := StrTofloat(Edit2.Text);
  Z := StrTofloat(Edit3.Text);
  j := SG2.FixedRows;
  SG2.RowCount := SG2.FixedRows + 1;
  SG2.Rows[j].Clear;
  for i := 0 to SG1.RowCount - 1 do begin
    if (SG1.Cells[1, i] <> S)then  Continue;
    if FloatToStr(SG1.Cells[2, i] > L and FloatToStr(SG1.Cells[2, i] < Z then  Continue;
    if j = SG2.RowCount then SG2.RowCount := j + 1;
    SG2.Rows[j].Assign(SG1.Rows[i]);
    Inc(j);
  end;
end;
Прочитайте о том, как правильно оформлять код программ вот здесь: http://www.programmersforum.ru/showp...23&postcount=3

Последний раз редактировалось Вадим Мошев; 09.10.2016 в 19:57.
Zhenya_master вне форума Ответить с цитированием
Старый 09.10.2016, 19:19   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
if FloatToStr(SG1.Cells[2, i] > L and FloatToStr(SG1.Cells[2, i] < Z then Continue;
В ячейке строка, чего FloatToStr к ней применил? И правильные скобочки в таких логических выражениях крайне необходимы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.10.2016, 19:24   #3
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
if FloatToStr(SG1.Cells[2, i] > L and FloatToStr(SG1.Cells[2, i] < Z then Continue;
В ячейке строка, чего FloatToStr к ней применил? И правильные скобочки в таких логических выражениях крайне необходимы
Если ставить скобки, вылазит эта же ошибка, но уже возле скобок. Надо применить StrToFloat?
Zhenya_master вне форума Ответить с цитированием
Старый 09.10.2016, 23:11   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Zhenya_master Посмотреть сообщение
Если ставить скобки, вылазит эта же ошибка, но уже возле скобок. Надо применить StrToFloat?
чисто формально (исходя из синтаксиса) - да, вам нужно из строки преобразовавать в числовое значение, а это как раз StrToFloat

поэтому, формально, эта строчка должна выглядеть так:

Код:
if (StrToFloat(SG1.Cells[2, i]) > L) and (StrToFloat(SG1.Cells[2, i]) < Z ) then  Continue;
почему "формально"? потому что мне алгоритм ваших действий непонятен, что Вы перебираете, что ищете и чего хотите добиться....

да, ещё. Если в строке будет не число - будет ошибка (exception).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2016, 15:58   #5
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
чисто формально (исходя из синтаксиса) - да, вам нужно из строки преобразовавать в числовое значение, а это как раз StrToFloat

поэтому, формально, эта строчка должна выглядеть так:

Код:
if (StrToFloat(SG1.Cells[2, i]) > L) and (StrToFloat(SG1.Cells[2, i]) < Z ) then  Continue;
почему "формально"? потому что мне алгоритм ваших действий непонятен, что Вы перебираете, что ищете и чего хотите добиться....

да, ещё. Если в строке будет не число - будет ошибка (exception).
Вот задание, чтобы вы смогли понять, что я тут вообще делаю: Человек вводит запрос, в котором указывает: требуемый ему пункт назначения и интервал возможного времени отправления (пример: Москва, с 10.00 до 11.30). Программа отображает данные из таблицы SG1, удовлетворяющие запрос клиента в SG2. Вид таблицы SG1 0 столбец позиция строки, 1 столбец Название города, 2 столбец время отправления, 3 время прибытия и 4 столбец стоимость.
Я запустил программу со строкой, которую вы дали и она выбивает ошибку при нажатии кнопки обработки : '' is not a valid floating point value. Я поискал причины появления этой ошибки, но что бы я не делал, всё равно выскакивает.

Исправил ошибку, но всё равно программа не хочет правильно считать.

Последний раз редактировалось Zhenya_master; 10.10.2016 в 16:03.
Zhenya_master вне форума Ответить с цитированием
Старый 10.10.2016, 16:19   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Вот задание, чтобы вы смогли понять, что я тут вообще делаю
теперь чуток понятней...

а кто заполняет таблицу?
надеюсь, Вы таблицу читаете откуда-нибудь?
если да, то выложите архив с исходниками проекта и исходными данными.
и приложите скриншот, где видно, как заполнена таблица SG1

L и Z - там указывается ВРЕМЯ?
А почему взяли тип вещественных чисел?
разве DataTimePicker не более подходящий вариант?
Если Вам в Edit2/Edit3 введут, например, 11,815 - то это какое время? больше 11:59, но меньше 12:00 ?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2016, 16:31   #7
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
теперь чуток понятней...

а кто заполняет таблицу?
надеюсь, Вы таблицу читаете откуда-нибудь?
если да, то выложите архив с исходниками проекта и исходными данными.
и приложите скриншот, где видно, как заполнена таблица SG1

L и Z - там указывается ВРЕМЯ?
А почему взяли тип вещественных чисел?
разве DataTimePicker не более подходящий вариант?
Если Вам в Edit2/Edit3 введут, например, 11,815 - то это какое время? больше 11:59, но меньше 12:00 ?!
Пока что ни откуда не читаю, сам быстро заполняю 3-4 строки и проверяю работоспособность программы. Я понимаю, что со временем DataTimePicker это задание выглядело бы гораздо лучше, но я сколько бы не пытался разобраться, как сравнивать время, пытался найти в интернете побольше информации об этом но так и не смог вникнуть. Вот архив с моей программой.
Вложения
Тип файла: rar Новая папка (3).rar (207.6 Кб, 8 просмотров)
Zhenya_master вне форума Ответить с цитированием
Старый 10.10.2016, 17:04   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

проблема в том, как Вы заполняете грид.

вот, например, я заполнил целыми числами:
ss1.png
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2016, 17:11   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а если в строчках таблицы мусор, то, разумеется, код работать не будет, нужно решать, что с такими строчками делать.

Кстати, а для чего Вы это делаете? Это, надеюсь, чисто учебный проект и в реальной жизни использоваться не будет?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2016, 17:13   #10
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
проблема в том, как Вы заполняете грид.

вот, например, я заполнил целыми числами:
Вложение 83802
Вот и я заполнил таблицу, но результат то не верный.
Изображения
Тип файла: jpg 2.jpg (79.8 Кб, 118 просмотров)
Zhenya_master вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Incompatible types: 'PWideChar' and 'string' mitiay Общие вопросы Delphi 3 05.03.2015 12:00
Ошибка Incompatible types: 'TIntegerField' and 'Real' Melisare Общие вопросы Delphi 5 06.02.2015 12:33
Incompatible types: 'String' and 'Char' FleXik Общие вопросы Delphi 3 22.11.2013 17:41
Incompatible types: 'PWideChar' and 'string' Aleksandr69 Общие вопросы Delphi 8 25.12.2011 12:14
Incompatible types: 'String' and 'Text' eshik Помощь студентам 3 21.04.2010 00:41