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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2010, 15:22   #1
Sianessa
Форумчанин
 
Регистрация: 18.01.2009
Сообщений: 144
По умолчанию Delphi: ошибка записи в StringGrid и Edit

В общем всё та же вчерашняя задача... (точнее, её продолжение)
Начала реализовывать второй способ...
Мне в общем надо подсчитать теперь количество итераций и вывести их в эдит, а так же полученные значения в 4-й Эдит. Воспользовалась циклом while и то ли цикл не там организовала, то ли что - программа по нажатию 4-й кнопки данные не выводи ни в Эдит нив Грид
Вот кусок кода с которым проблема:

Код:
procedure TForm1.Button4Click(Sender: TObject);
var
r,e,u,y:real;
i, sh:integer;
k:array of Real;
h:array of Real;
ee:array of Real;
q:array of Real;
yy:array of Real;
begin
r:=StrToFloat(Edit2.text);
SetLength(ee, n);
SetLength(k, n);
SetLength(q, n);
SetLength(h, n);
SetLength(yy, n);
for i := 0 to n-1 do
  begin
    k[i]:=StrToFloat(StringGrid1.Cells[0,i]);
    h[i]:=StrToFloat(StringGrid2.Cells[0,i]);
  end;
while ee[i]>r do
sh:=sh+1;
begin
u:=u+(k[i]*h[i]);
y:=1/(1+Exp(u));
e:=d-y;
for i:=0 to n-1 do
begin
q[i]:=e*0.5*(Power((yy[i]-d),2));
end;
for i:=0 to n-1 do
begin
ee[i]:=q[i]*k[i];

StringGrid4.Cells[0,i]:=FloatToStr(ee[i]);

end;

end;
Edit5.Text:=IntToStr(sh);

end;
end.
Если надо - исходник прикрепляю.
Вложения
Тип файла: rar СИИ-4 УДАЧА.rar (196.3 Кб, 8 просмотров)

Последний раз редактировалось Sianessa; 20.11.2010 в 15:59.
Sianessa вне форума Ответить с цитированием
Старый 20.11.2010, 16:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
for i := 0 to n-1 do
А где у тебя n инициализируется?
Может тебе нужно дописать в начало
Код:
n:=StrToInt(Edit5.text);
И потом, StringGrid1 у тебя пуст. Откуда будут значения браться?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.11.2010, 16:10   #3
Sianessa
Форумчанин
 
Регистрация: 18.01.2009
Сообщений: 144
По умолчанию

Stilet, Первый и Второй СтрингГриды, он заполняется рандомно по нажатию кнопки Button2, либо данные вводятся вручную с клаиватуры...
Потом только нажимается Button4

Я дописала переменную, теперь пишет, что тип данных не тот =__=

Хотя уже опять не работает =__= чё мне делать?

Последний раз редактировалось Stilet; 20.11.2010 в 18:13.
Sianessa вне форума Ответить с цитированием
Старый 20.11.2010, 18:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я дописала переменную, теперь пишет, что тип данных не тот =__=
А у меня работает. Правда последнюю таблицу нулями заполняет но не вылетает
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
r,e,u,y:real;
i, sh:integer;
k:array of Real;
h:array of Real;
ee:array of Real;
q:array of Real;
yy:array of Real;
begin
r:=StrToFloat(Edit2.text);
n:=StrToIntDef(Edit5.text,3);
SetLength(ee, n);
SetLength(k, n);
SetLength(q, n);
SetLength(h, n);
SetLength(yy, n);
for i := 0 to n-1 do
  begin
    k[i]:=StrToFloat(StringGrid1.Cells[0,i]);
    h[i]:=StrToFloat(StringGrid2.Cells[0,i]);
  end;
while ee[i]>r do
sh:=sh+1;
begin
u:=u+(k[i]*h[i]);
y:=1/(1+Exp(u));
e:=d-y;
for i:=0 to n-1 do
begin
q[i]:=e*0.5*(Power((yy[i]-d),2));
end;
for i:=0 to n-1 do
begin
 ee[i]:=q[i]*k[i];
 StringGrid4.Cells[0,i]:=FloatToStr(ee[i]);
end;

end;
Edit5.Text:=IntToStr(sh);

end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.11.2010, 18:32   #5
Sianessa
Форумчанин
 
Регистрация: 18.01.2009
Сообщений: 144
По умолчанию

Stilet, хм... Теперь да...
Благодарю...
Только что сделать, чтобы нулями... ну да ладно, мне теперь надо сделать рабочий цикл, чтоб итерации считал по нажатию 4-й кнопки и выводил их в 5-й эдит...
Не выходит что-то...
Оно зависает:

Код:
procedure TForm1.Button4Click(Sender: TObject);
var
u,y,e, d,m,r :Real;
i, n, sh:integer;
k:array of Real;
h:array of Real;
ee:array of Real;
yy:array of Real;
cc:array of Real;

begin
d:=StrToFloat(Edit4.text);
r:=StrToFloat(Edit2.text);
n:= StringGrid1.RowCount;
u:=0;
sh:=0;
SetLength(k, n);
SetLength(h, n);
SetLength(ee, n);
SetLength(yy, n);
SetLength(cc, n);
for i := 0 to n-1 do
  begin
    k[i]:=StrToFloat(StringGrid1.Cells[0,i]);
    h[i]:=StrToFloat(StringGrid2.Cells[0,i]);
  end;

for i:=0 to n-1 do
begin
u:=u+(k[i]*h[i]);
y:=1/(1+Exp(u));
e:=d-y;
m:=0.5*(Power((yy[i]-d),2));
end;
for i:=0 to n-1 do
begin
ee[i]:=e*k[i]*m;

if ee[i]<r then
StringGrid4.Cells[0,i]:=FloatToStr(ee[i])
else
while ee[i]>r do
cc[i]:=ee[i]*ee[i]*m;
sh:=sh+1;
StringGrid4.Cells[0,i]:=FloatToStr(cc[i]);
 end;
  Edit5.Text:=IntToStr(sh);
end;
end.

Последний раз редактировалось Sianessa; 20.11.2010 в 18:47.
Sianessa вне форума Ответить с цитированием
Старый 20.11.2010, 20:19   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
while ee[i]>r do
А где у тебя в теле цикла условие изменяется?
цикл закольцован у тебя.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.11.2010, 20:23   #7
Sianessa
Форумчанин
 
Регистрация: 18.01.2009
Сообщений: 144
По умолчанию

Эээ... а оно должно меняться? И как? =__=
У меня же ифом вроде описано, что если ee[i]<r то выводится результат, а иначе цикл до тех пор пока результат не будет меньше...
Я не могу понять что я не так сделала...

Помогите кто-нибудь, я не знаю что мне делать с этим циклом чтобы он работал как мне надо и не могу понять в чём ошибка...

Последний раз редактировалось Stilet; 20.11.2010 в 22:18.
Sianessa вне форума Ответить с цитированием
Старый 20.11.2010, 22:18   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а иначе цикл до тех пор пока результат не будет меньше...
Дык у тебя в цикле всего один оператор:
Код:
while ee[i]>r do
cc[i]:=ee[i]*ee[i]*m;
Может тебе там нужно не cc[i] а ee[i]?
Откуда кто знает что тебе нужно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.11.2010, 22:46   #9
Sianessa
Форумчанин
 
Регистрация: 18.01.2009
Сообщений: 144
По умолчанию

Stilet, точно! До меня дошло, наконец-то... Я исправила код, но теперь почему-то число итераций всё время 4 и числа иногда большие слишком получаются... Ни одно так другое...

Код:
if ee[i]<r then
StringGrid4.Cells[0,i]:=FloatToStr(ee[i])
else
while ee[i]>r do
ee[i]:=ee[i-1]/e*m;
sh:=sh+1;
StringGrid4.Cells[0,i]:=FloatToStr(ee[i]);

 end;
 Edit5.Text:=IntToStr(sh);
end;
end.
Sianessa вне форума Ответить с цитированием
Старый 20.11.2010, 23:51   #10
Sianessa
Форумчанин
 
Регистрация: 18.01.2009
Сообщений: 144
По умолчанию

А, всё, у меня просто счётчик не там стоял!
Всё, я исправила!
Спасибо за помощь и навод на нужные мысли)
Sianessa вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: ошибка записи в StringGrid Sianessa Помощь студентам 3 20.11.2010 01:57
(Delphi)stringgrid раскраска ячейки ошибка zoza1 Помощь студентам 1 17.02.2010 19:28
из Edit в StringGrid Xeon332 Общие вопросы Delphi 11 25.05.2009 08:28
Edit vs StringGrid artemavd Общие вопросы Delphi 3 13.07.2008 11:56
Edit мы StringGrid artemavd Общие вопросы Delphi 0 12.07.2008 13:50