Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.02.2011, 10:36
woc131 woc131 вне форума
Прохожий
 
Регистрация: 11.02.2011
Сообщения: 13
Репутация: 10
По умолчанию работа с stringgrid

Всем привет,при работе с stringgrid вылезает ошибка. Задача: есть заполненная таблица stringgrid1 (куча строк в один столбец), нужно вытаскивать значения из строк и вставить в массив,чтоб потом с массивом работать.
код :

PHP код:
procedure TForm1.Button4Click(SenderTObject);
var 
            
a:array [0..360of extended;     
            
foundboolean
            
iinteger
begin
  a
[i]:= StrTofloat(StringGrid1.Cells[0,y]);        //здесь ошибку выдает
  
obr := no3/l3;
  
found := FALSE
  
:= 1;
end
когда начинает считывать таблицу, то при нажатии выводит ошибку. Что может быть не так ? Если надо приведу код полностью. Просто все работает, кроме Button4Click. Заранее спасибо
Ответить с цитированием
  #2  
Старый 11.02.2011, 10:48
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

1. А чему равно i перед выполнением a[i]:= StrTofloat(StringGrid1.Cells[0,y]);? Уверены, что значение в пределах 0-360?
2. А у Вас точно числовое значение в ячейке StringGrid1.Cells[0,y]?
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
  #3  
Старый 11.02.2011, 11:19
woc131 woc131 вне форума
Прохожий
 
Регистрация: 11.02.2011
Сообщения: 13
Репутация: 10
По умолчанию

1. там ведь строка есть ? или ее надо в начале писать ?
Да , значения 0.001..6.28. Сам задавал в таблицу )
2. да там значения :
PHP код:
0,001
0
,002
0
,003
.....
6,28 

Где может быть ошибка ?
Кстати
PHP код:
z:= strtofloat(  stringgrid1.cells[02]  ) 
работает и потом с z можно спокойно работать. а вот в массив не записывается.

Последний раз редактировалось woc131, 11.02.2011 в 11:22.
Ответить с цитированием
  #4  
Старый 12.02.2011, 12:07
Аватар для Nikitiy_II
Nikitiy_II Nikitiy_II вне форума
Новичок
 
Регистрация: 01.05.2008
Сообщения: 52
Репутация: 11
По умолчанию

А какую ошибку то выдает?

И попробуй инициализировать i
Ответить с цитированием
  #5  
Старый 12.02.2011, 18:50
woc131 woc131 вне форума
Прохожий
 
Регистрация: 11.02.2011
Сообщения: 13
Репутация: 10
По умолчанию

А что значит инициализировать i ?
Ошибка на скриншоте.
Изображения
Тип файла: jpg Screenshot - 12.02.jpg (15.6 Кбайт, 11 просмотров)
Ответить с цитированием
  #6  
Старый 12.02.2011, 19:06
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну вот дельфи и ругается на пустое значение в ячейке. Не может он пустоту в число преобразовать. Вот так попробуйте:
Код:
a[i]:= StrToFloatDef(StringGrid1.Cells[0,y],0);  
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 12.02.2011, 19:35
woc131 woc131 вне форума
Прохожий
 
Регистрация: 11.02.2011
Сообщения: 13
Репутация: 10
По умолчанию

Огромное спасибо, все вышло! А можно еще вопрос. Код:
PHP код:
procedure TForm1.Button5Click(SenderTObject);
begin
  repeat
    
if 
(
no1/l1+
(
ne2*no2/sqrt(no2*no2*sin(a[i])*sin(a[i])+ne2*ne2*cos(a[i])*cos(a[i])))/l2) = obr  then  // вот здесь при вычислении ошибка
      
found := TRUE
    
else
      
:= 1;
  
until foundTRUE;   //or (i > SIZE) ;

begin


    
if found then
    ShowMessage
('результат найден ')//+ IntToStr(i) +  + 'Поиск успешен.')

  
else
    
ShowMessage('результат не найден');

end

Ошибка в расчете выражения для массива.
Это продолжение кода. На сколько я понял проблема в том что недопустимая операция с массивом a[i] что можно здесь сделать ?
Изображения
Тип файла: jpg Screenshot - 12.02111111.jpg (15.0 Кбайт, 15 просмотров)

Последний раз редактировалось woc131, 13.02.2011 в 19:07.
Ответить с цитированием
  #8  
Старый 15.02.2011, 09:31
woc131 woc131 вне форума
Прохожий
 
Регистрация: 11.02.2011
Сообщения: 13
Репутация: 10
По умолчанию

Кто нибудь , помогите
Ответить с цитированием
  #9  
Старый 16.02.2011, 11:42
Аватар для Nikitiy_II
Nikitiy_II Nikitiy_II вне форума
Новичок
 
Регистрация: 01.05.2008
Сообщения: 52
Репутация: 11
По умолчанию

Или разделитель точка стоит, или у тебя не все переменные одного типа
Ответить с цитированием
  #10  
Старый 16.02.2011, 19:26
woc131 woc131 вне форума
Прохожий
 
Регистрация: 11.02.2011
Сообщения: 13
Репутация: 10
По умолчанию

Переделал вот так
PHP код:
procedure TForm1.Button5Click(SenderTObject);
var 
a1,a2,a3,a4,a5:extended;
begin
    a1
:=no1/l1;
    
a2:=no2*no2*sin(a[i])*sin(a[i]);
    
a3:=ne2*ne2*cos(a[i])*cos(a[i]);
    
obr:=Round((a1+(ne2*no2/sqrt(a2+a3))/l2)*10000 10000);//округляем до 10000-ых.
  
repeat
 
if obr g then  // g- константа =1,0000
      
found := TRUE
    
else
      
:= 1;
begin
    
if found then
    ShowMessage
('совпадение есть')

  else
    
ShowMessage('совпадения нет');
end
.Все работает, считает, перебирает. Но в конце выдает что совпадений нет... странно... вроде формат числа такой же - 0,0000 . а в массиве сам в ручную нашел значение 1,0000. т.е. должно совпасть а выдает что нет совпадений... Почему так может быть?
Ответить с цитированием
  #11  
Старый 18.02.2011, 18:31
woc131 woc131 вне форума
Прохожий
 
Регистрация: 11.02.2011
Сообщения: 13
Репутация: 10
По умолчанию

Никто не знает в чем дело ?
Ответить с цитированием
  #12  
Старый 18.02.2011, 18:45
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

похоже, что
Код:
...
obr: integer;
...
т.е.
Код:
obr:=Round((a1+(ne2*no2/sqrt(a2+a3))/l2)*10000 / 10000);
(функция Round дает на выходе тип integer)
дает obr=1, а 1<>1,0000, чтобы все получилось, надо либо
Код:
const
g=1;
либо
Код:
if ((obr+step) >= g) and ((obr-step) <= g) then  // g- константа =1,0000
      found := TRUE;;
где
Код:
...const
step=0.001;// (0.001 для примера) шаг допуска 
...

Последний раз редактировалось cotseec, 19.02.2011 в 22:46.
Ответить с цитированием
  #13  
Старый 06.03.2011, 07:08
woc131 woc131 вне форума
Прохожий
 
Регистрация: 11.02.2011
Сообщения: 13
Репутация: 10
По умолчанию

Все равно не выходит
Сначала сделал так :

PHP код:
procedure TForm1.Button5Click(SenderTObject);
const 
step=0.0001;
var 
a1,a2,a3,a4,a5:extended;
begin
i
:=1;
    
a1:=c1/l1;
    
a2:=с2*с2*sin(a[i])*sin(a[i]);     //no
    
a3:=b2*b2*cos(a[i])*cos(a[i]);   //ne
    
obr:=Round((a1+(b2*с2/sqrt(a2+a3))/l2)*10000 10000) ;    

  
repeat

  
if ((obr+step) >= g) and ((obr-step) <= gthen   // g:=1.1107
     
found := TRUE

    
else
      
:= 1
пишет что не находит ничего, хотя ясно что он просто видит допустим два числа 1,1111 и 1,1111 и не опознает их как идентичные. Подумал что просто массив а пустой , хотя я его заполняю из stringgrid :
PHP код:
a[i]:= StrToFloatDef(StringGrid1.Cells[0,y],1); 
но если изменить код :
PHP код:
procedure TForm1.Button5Click(SenderTObject);
const 
step=0.0001;
var 
a1,a2,a3,a4,a5:extended;
begin
for i:=1 to 62799 do


  
repeat
     a1
:=no1/l1;
    
a2:=no2*no2*sin(a[i])*sin(a[i]);
    
a3:=ne2*ne2*cos(a[i])*cos(a[i]);
    
obr:=Round((a1+(ne2*no2/sqrt(a2+a3))/l2)*10000 10000) ;   
    
statictext5.Caption:='= 'floattostr(obr);
  if ((
obr+step) >= g) and ((obr-step) <= gthen  // g:=1,1107
      
found := TRUE 
то вообще виснет. В чем может быть проблема ?

Последний раз редактировалось woc131, 06.03.2011 в 07:11.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:33.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025