Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi, ?

Ответить
Настройки темы
Delphi - Delphi, ?

Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


generator создает массив (array of real)
saveviborka - сохраняет созданный массив
RE производит статистическую операцию над данными массива
Код: Выделить весь код
var data:TPmas_real;
    i:integer;
    bufjj:real;
begin
    bufjj:=0;
    generator(1,3000,data); //saveviborka(form1,data);
    RE(data,bufjj);
    label1.caption:=floattostrf(bufjj,ffFixed,5,5);
проблема в том, что когда процедура сохранения массива активна в лейбел заносится абсолютно неправильный результат, который отличается от истинного в (10 в 22 степени примерно), а вот когда код в таком виде, как представлен здесь я получаю правильный результат. В чем проблема
Код: Выделить весь код
procedure saveviborka(it:tform; viborka:TPmas_real);
    var f:textfile;
        buf:real;
        save:tsavedialog;
        i:integer;
    begin
       save:=tsavedialog.create(it);
       save.Execute;
       assignfile(f,save.filename);
       rewrite(f);
       for i:=0 to high(viborka) do
        begin
         buf:=viborka[i];
         writeln(f,buf);
        end;
       save.destroy;
       closefile(f);
    end;


Добавлено:

Еще что интересно, когда я эти процедуры (RE, generator, saveviborka) выстраиваю в столбик и на каждую ставлю точку останова и потом компилирую, то конечный результат оказывается правильным, таким же когда saveviborka отключенна

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 18:24, 18-02-2003

 

Монголо-татар


Сообщения: 117
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


ээээ... давай по порядку...
значит с начала ты генериш массив, потом записываешь его в файл?
Цитата:
procedure saveviborka(it:tform; viborka:TPmas_real);    
а нафига передаешь форму?
офоримил бы процедуру как приватную и используй self (или как там у вас в делфях)
или ваще создавай окно диалога от Nil, ты ведь его все равно сам грохаешь...
в принципе то что я сказал не критично, но... попробуй...

и давай код второй процедуры "РЕ"...
а ты просто переменную в раннтайме смотрел? не вываливая значение в лейблу, а по брыкпоинту?

-------
* * * * * * * * Мы - это наши желания. Зигмунд Фрейд


Отправлено: 09:18, 19-02-2003 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Guest

Guest


Профиль | Цитировать


Код: Выделить весь код
procedure RE(viborka:TPmas_real; var Hs:real);
       var i:integer;
           n:integer;
           buf:real;
           dEi:real;
           zEi:real;
           dmax,dmin:real;
           sRe:real;
           sN:real;
           b1,b2,b3,b4:real;
       begin
         b1:=0; b2:=0; b3:=0; b4:=0; buf:=0;
         dmax:=viborka[0]; dmin:=viborka[0];
         for i:=0 to 8 do
          begin
           if dmax<viborka[i] then dmax:=viborka[i];
           if dmin>viborka[i] then dmin:=viborka[i];
           zei:=zei+sqr(viborka[i]);
           sN:=sN+ln(i+1);
           b3:=b3+sqr(ln(i+1));
          end;
         //dei:=sqrt(buf/8);

         for i:=9 to high(viborka) do
           begin
             if dmax<viborka[i] then dmax:=viborka[i];
             if dmin>viborka[i] then dmin:=viborka[i];
             zei:=zei+sqr(viborka[i]);
             dEi:=sqrt(zei/i+1);
             sRe:=sRe+ln((dmax-dmin)/dEi);
             sN:=sN+ln(i+1);
             b1:=b1+ln(i+1)*ln((dmax-dmin)/dEi);    //log10
             b3:=b3+sqr(ln(i+1));
           end;
         n:=length(viborka);
         b2:=sN*sRe;
         b4:=sqr(sN);
         Hs:=(n*b1-b2)/(n*b3-b4);
       end;
процедура saveviborka лежит в отдельном модуле и по-моемому там так не получится, ну self передавать.
Цитата:
а ты просто переменную в раннтайме смотрел?
если без процедуры сохранения в файл правильное значение с процедурой - неправильное...

Отправлено: 13:02, 19-02-2003 | #3


Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


блин
Цитата:
по брыкпоинту?
runtime не смотрел, а то что выше написанно это как раз про break point, но не думаю что там будет что-то подругому

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 13:07, 19-02-2003 | #4


Монголо-татар


Сообщения: 117
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Guest
Цитата:
процедура saveviborka лежит в отдельном модуле и по-моемому там так не получится, ну self передавать.
ну и х с ним... создавай от Нила... это приниципиально, чтоб от формы создавалось? сомневаюсь...
кто такие zei, sN и чего они не инициализированы в нуль?
я не понмю как в делфях, а в с++ если переменная не инициализирована, то там такое будет...
а в делфях кажись такое у меня было... когда ты трассируешь, то они обнуляют...

аналогично со всеми другими переменными... обнули в начале...

-------
* * * * * * * * Мы - это наши желания. Зигмунд Фрейд


Отправлено: 13:53, 19-02-2003 | #5


Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
создавай от Нила... это приниципиально
как от нила, кусочек кода приведи, если не сложно... я вообще врограммирование не так силен... все сам делаю шибко помочь некому... а все переменные пообнулять, так это что просто написать zei:=0, sn:=0 или что-то другое?


Добавлено:

Код: Выделить весь код
b1:=0; b2:=0; b3:=0; b4:=0; buf:=0;
zEi:=0; dEi:=0; sN:=0; sRe:=0; dmax:=0; dmin:=0;
я сделал вот так и все вроде заработало, так просто, а так неприятно. А вот с nil я таки не разобрался

Добавлено:

Код: Выделить весь код
  procedure saveviborka(viborka:TPmas_real);
    var f:textfile;
        buf:real;
        save:tsavedialog;
        i:integer;
    begin
       save:=tsavedialog.create(nil);
       save.Execute;
       assignfile(f,save.filename);
       rewrite(f);
       for i:=0 to high(viborka) do
        begin
         buf:=viborka[i];
         writeln(f,buf);
        end;
       save.destroy;
       closefile(f);
    end;
так должно быть?

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 15:30, 19-02-2003 | #6


Монголо-татар


Сообщения: 117
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Roman Go
Цитата:
как от нила, кусочек кода приведи, если не сложно
ну в тоем случае будет:
вместо
Цитата:
save:=tsavedialog.create(it);        
save:=tsavedialog.create(nil);
есть определнные отличия, но если тебе не важно кто папа и где будет находится компонет, то это канает...
Цитата:
а все переменные пообнулять, так это что просто написать zei:=0, sn:=0 или что-то другое
больше ничего не нужно...
Цитата:
все сам делаю шибко помочь некому
ничего, прорвешся... все так начинали

-------
* * * * * * * * Мы - это наши желания. Зигмунд Фрейд


Отправлено: 15:51, 19-02-2003 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi, ?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - Delphi | UpperCase на Delphi 7 Cognolio Программирование и базы данных 3 26-01-2006 15:42
Delphi - Delphi Surround Программирование и базы данных 11 10-01-2004 22:13
Delphi - Delphi Zx Программирование и базы данных 3 27-08-2003 10:19
Delphi - Delphi Roman Go Программирование и базы данных 9 25-12-2002 15:48
Delphi - Delphi Roman Go Программирование и базы данных 11 11-12-2002 14:43




 
Переход