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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2015, 01:06   #1
Pasha_Sh
Форумчанин
 
Аватар для Pasha_Sh
 
Регистрация: 16.05.2010
Сообщений: 137
По умолчанию Ошибка при выводе

Здравствуйте! Выполняю следующий цикл:
Код:
for j := 1 to 6 do begin f:=0;
for i := 1 to o do begin z:=strtofloat(stringgrid3.Cells[j,0]); f:=f+xm[u]*power(z,o-i); end;
stringgrid4.Cells[j,o]:=floattostr(f);
Появляется ошибка: Access violation at address 0040936C.
Если же убрать вывод в стринггрид
Код:
stringgrid4.Cells[j,o]:=floattostr(f);
то ошибка пропадает.
В чём может быть проблема?
osu
Pasha_Sh вне форума Ответить с цитированием
Старый 27.03.2015, 01:30   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Сколько строк в гриде? И чему равна переменная o?

P.S. Чем тебе так нравится буква O?
northener вне форума Ответить с цитированием
Старый 27.03.2015, 01:31   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

у вас в цикле и в power не 0, а буква о:D

Приведи весь код обработчика события
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 27.03.2015, 01:37   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
у вас в цикле и в power не 0, а буква о:D
Было бы ещё страньше видеть в цикле и в power ноль, а не букву о.
northener вне форума Ответить с цитированием
Старый 27.03.2015, 07:37   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

А компайлер тебе варнинг не выдаёт, что переменные-параметры циклов после этих циклов могут быть неопределены?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 27.03.2015, 09:40   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Если представленный код весь, т.е. кроме него более в этом блоке ничего нет, то ошибка может исчезнуть по велению оптимизатора. Он видит что ты f никуда более не выводишь и убирает из программы и циклы расчета.

Верни на базу ту строку, что убрал и топай пошаговку делать. Только так ты можешь узнать что происходит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.03.2015, 17:24   #7
Pasha_Sh
Форумчанин
 
Аватар для Pasha_Sh
 
Регистрация: 16.05.2010
Сообщений: 137
По умолчанию

Компилятор никаких предупреждений не выводит
Вот весь код:
Код:
procedure TForm2.N3Click(Sender: TObject);
var
x: real;
i: integer;
begin
x:=0;
for i := 0 to 5 do begin
stringgrid3.Cells[i+1,0]:=floattostr(x);
stringgrid3.Cells[i+1,1]:=floattostr(ln(x+sqrt(x*x+1)));
x:=x+2/5;
end;
end;

procedure TForm2.N4Click(Sender: TObject);
var
sum,m,x,f,z: real;
xi: array[0..5] of real;
yi: array[1..5] of real;
a: array[1..15,1..15] of real;
xm: array[1..15] of real;
k,u,o,c,i,j: integer;
begin

for o := 2 to 5 do begin
c:=o;

for i := 1 to (o-1)*2 do begin sum:=0;
for j := 1 to 6 do sum:=sum+power(strtofloat(stringgrid3.Cells[j,0]),i);
xi[i]:=sum; end;

for i := 1 to o do
for j := 1 to 6 do yi[i]:=yi[i]+strtofloat(stringgrid3.Cells[j,1])*power(strtofloat(stringgrid3.Cells[j,0]),i-1);



xi[0]:=6;
k:=0;
for i := 1 to o do begin
k:=k+1;
for j := 1 to o do a[i,j]:=xi[k+j-1];
end;

for i := 1 to o do a[i,o+1]:=yi[i];



for i := 2 to c do begin
for k := 1 to i-1 do begin
m:=a[i,k]/a[k,k];
for j := 1 to c+1 do
a[i,j]:=a[i,j]-a[k,j]*m;
end;
end;

x:=a[c,c+1]/a[c,c];
xm[1]:=x;

u:=1;
for j := 1 to c-1 do begin
for i := 1 to c-j do a[i,c+1-j]:=a[i,c+1-j]*x;
x:=a[c-j,c+1];
for i := c+1-j to n do x:=x-a[c-j,i];
xm[u]:=x/a[c-j,c-j];
u:=u+1;

end;

for j := 1 to 6 do begin f:=0;
for i := 1 to o do begin z:=strtofloat(stringgrid3.Cells[j,0]); f:=f+xm[u]*power(z,o-i); end;
stringgrid4.Cells[j,o]:=floattostr(f);

end;

end;

end;
Необходимо по заданным точкам функции, определить саму функцию методом наименьших квадратов и найти её значение в точках.
o - многочлен o-той степени, до которого округляется сама функция. Интересно то, что при o равном 2, 3, 4 всё работает. А как o доходит до 5, ошибка.
osu
Pasha_Sh вне форума Ответить с цитированием
Старый 27.03.2015, 19:52   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Слышь, ТС, ты реально так программы пишешь или это прикол такой первоапрельский? Глаза кровоточат от таких исходников. Ты их сам-то как понимать умудряешься?

Ну неужели хотя бы вот так код читается хуже?
Код:
procedure TForm2.N4Click(Sender: TObject);
var
  sum, m, x, f, z: real;
  xi: array[0..5] of real;
  yi: array[1..5] of real;
  a: array[1..15, 1..15] of real;
  xm: array[1..15] of real;
  k, u, o, c, i, j: integer;
begin
  for o := 2 to 5 do
    begin
      c:= o;

      for i := 1 to (o - 1) * 2 do
        begin
          sum:= 0;

          for j := 1 to 6 do
            sum:= sum + power(strtofloat(stringgrid3.Cells[j, 0]), i);

          xi[i]:= sum;
        end;
    
      for i := 1 to o do
        for j := 1 to 6 do
          yi[i]:= yi[i] + strtofloat(stringgrid3.Cells[j, 1]) *
                  power(strtofloat(stringgrid3.Cells[j, 0]), i - 1);

      xi[0]:= 6;
      k:= 0;

      for i := 1 to o do
        begin
          k:= k + 1;

          for j := 1 to o do
            a[i, j]:= xi[k + j - 1];
        end;

      for i := 1 to o do
        a[i, o + 1]:= yi[i];

      for i := 2 to c do
        begin
          for k := 1 to i - 1 do
            begin
              m:= a[i, k] / a[k, k];

              for j := 1 to c + 1 do
                a[i, j]:= a[i, j] - a[k, j] * m;
            end;
        end;

      x:= a[c, c + 1] / a[c, c];
      xm[1]:= x;
      u:= 1;

      for j := 1 to c - 1 do
        begin
          for i := 1 to c - j do
            a[i, c + 1 - j]:= a[i, c + 1 - j] * x;

          x:= a[c - j, c + 1];

          for i := c + 1 - j to n do
            x:= x - a[c - j, i];

          xm[u]:= x / a[c - j, c - j];
          u:= u + 1;
        end;

      for j := 1 to 6 do
        begin
          f:= 0;

          for i := 1 to o do
            begin
              z:= strtofloat(stringgrid3.Cells[j, 0]);
              f:= f + xm[u] * power(z, o - i);
            end;

          stringgrid4.Cells[j, o]:= floattostr(f);
        end;
  end;
end;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 27.03.2015 в 20:16.
min@y™ вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при выводе значения в лейбл anghela Общие вопросы Delphi 5 26.09.2013 12:27
Ошибка при выводе строкового массива Bugrimov Общие вопросы C/C++ 25 02.04.2012 22:40
Ошибка при выводе xml DKENT Работа с сетью в Delphi 0 08.02.2011 21:49
Ошибка при выводе trad Общие вопросы C/C++ 7 15.01.2011 11:32
Ошибка при выводе инфо из БД Xeon332 PHP 4 30.12.2009 05:41