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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2010, 11:56   #1
Fonochka
 
Регистрация: 24.11.2010
Сообщений: 5
Вопрос Нужно кое-что исправить в коде

Сама задача состоит в следующем: Разработать программу расчета линейной зависимости по измерительным данным, полученным с температурных датчиков, метод наименьших квадратов.
Есть вот такой код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var i, n: LongWord;
    k,b,summa_x,summa_x_2,summa_x_y: real;
    TF: TextFile;
    X: array of real;
    openfile: boolean;
begin
  openfile:=True;
  try
    SetLength(X,50000);
    i:=0;
    AssignFile(TF,'dano.txt');
    Reset(TF);
    try
      repeat
        ReadLn(TF,X[i]);
        Inc(i);
      until Eof(TF);
      SetLength(X,i);
    finally
      CloseFile(TF);
    end;
  except
    openfile:=False;
  end;
  if openfile then
  begin
    summa_x := 0;
    summa_x_2 := 0;
    summa_x_y := 0;
    n := Length(X);
    for i := 1 to n do
    begin
      summa_x := summa_x + X[i];
      summa_x_2 := summa_x_2 + X[i]*X[i];
      summa_x_y := summa_x_y + X[i]*i;
    end;
    k := (summa_x_y - 1)/(summa_x_2 - summa_x*summa_x/n);
    b := 1 - summa_x/n*k;
    Label2.Caption := 'k = '+floattostr(k);
    label3.Caption := 'b = '+floattostr(b);
  end;
end;

end.
И вот что нужно исправить:
1) Каждое действие нужно выделить в отдельную процедуру или функцию (т.е. работа с файлом и собственно само решение задачи);
2) Нужно "отвязать" процедуры и функции от пользовательского интерфейса.
3) А еще даже не знаю как объяснить.... Моя задача базируется на уравнении U=AT+B, где U-напряжение, Т-температура, а А и В- некоторые коэффициенты, которые мне нужно найти. А мне нужно взять приблизительные значения А и В самой, допустим это будет 10 и 5, взять диапазон температуры от -20 до +20 с шагом 0,5 допустим и рассчитать значение напряжения; написать генератор отклонений от точных данных напряжения и уже значения напряжения с отклонениями и значения температуры внести в файл, который потом надо использовать как входные данные. В итоге после решения уравнения должны получиться коэффициенты приближенные к 10 и 5...То есть мы делаем так называемую проверку...
Надеюсь понятно объяснила))
Буду благодарна за любую помощь...

Последний раз редактировалось Stilet; 03.12.2010 в 12:48.
Fonochka вне форума Ответить с цитированием
Старый 02.12.2010, 12:22   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Цитата:
Надеюсь понятно объяснила))
не очень.
Но как я понял. Нужно сначала сымитировать показания приборов, основываясь на заданных пользователем коэффициентах A,B и пользуясь генератором случайный чисел для получения отклонений. Все эти псевдореальные данные записать в файл.
А потом уже по этим псевдореальным данным, полученным из файла сделать аппроксимацию прямой методом наименьших квадратов.

По-сути нужно две программы: генератор значений и анализатор, делающий аппроксимацию.

Надеюсь понятно объяснил?
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 03.12.2010, 12:11   #3
Fonochka
 
Регистрация: 24.11.2010
Сообщений: 5
По умолчанию

Понятно)) Прямо как преподаватель)) А в одну программу нельзя всё совместить?? Сможете помочь??
Fonochka вне форума Ответить с цитированием
Старый 03.12.2010, 12:23   #4
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Цитата:
А в одну программу нельзя всё совместить??
Можно.

Цитата:
Сможете помочь??
Проект скинь сюда
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 04.12.2010, 20:46   #5
Fonochka
 
Регистрация: 24.11.2010
Сообщений: 5
По умолчанию

Вот то что есть...
Вложения
Тип файла: rar program.rar (10.1 Кб, 10 просмотров)
Fonochka вне форума Ответить с цитированием
Старый 07.12.2010, 09:03   #6
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Вот то, что получилось...
Вложения
Тип файла: rar Линейная регрессия.rar (251.8 Кб, 8 просмотров)
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 07.12.2010, 14:26   #7
Fonochka
 
Регистрация: 24.11.2010
Сообщений: 5
По умолчанию

Спасибо)) Получилось даже лучше, чем я думала!!!

А вот нужно еще мелочь подправить.....
В нижеследующем кусочке нужно добавить функцию try, чтобы не возникло ошибки при закрытии файла, если вдруг поток данных будет слишком большим.
Код:
begin
AssignFile(TF,aFileName);
Rewrite(TF);
x:=aminX;
while ( x <= amaxX ) do
 begin
 f := (ak*x+ab) * (1 + (Random-0.5)*(aDisp/100));
 Write(TF,x,f);
 Form1.Chart1.Series[0].AddXY(x,f);
 x := x + Xstep;
 end;
CloseFile(TF);
end;
Спасибо...

Последний раз редактировалось Stilet; 16.12.2010 в 10:51.
Fonochka вне форума Ответить с цитированием
Старый 27.12.2010, 20:20   #8
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Платить за выполненную работу сия персона не намерена.
Посему иметь с ней деловые отношения НЕ рекомендую.
mss вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что исправить в коде? lider24816 Помощь студентам 6 26.05.2009 19:31
Подскажите что исправить в коде Grisha248 Помощь студентам 5 25.05.2009 03:00
База Access на тему муз.картотека, надо кое что исправить NEED HELP!!! Tanzilit Microsoft Office Access 5 08.01.2008 01:08
кое-что о MainMenu itisiam Компоненты Delphi 2 25.05.2007 21:47