2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Делфи
Сообщение31.01.2015, 00:21 
Аватара пользователя
Решил написать программу для вычисления погрешностей прямых измерений. На входе задается массив констант (коэффициенты Стьюдента), доверительная вероятность по умолчанию 95%, так же задается количество измерений и цена деления прибора. Проблема возникает в процедуре для подсчета случайной погрешности. Если пытаться вывести значение случайной погрешности через процедуру rand(ниже), то почему-то значение зануляется. Ежели тупо в лоб написать формулу в головной программе(test2), то значение вычисляется спокойно. Код программы:
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const p=0.95;
const t:array[1..10] of real=(0,12.7,4.30,3.18,2.78,2.57,2.45,2.36,2.31,2.26);

type TMatrix=array[1..100] of real;


Var
      n,j:integer;
      a:TMatrix;
      s,sr,del,h,Dokr, Dprib,Sum, Drand,tnp,F,test2:real;

procedure matr(n:integer; Var a:TMatrix);
  var
      i:integer;
begin
  for i:=1 to n do
    begin
      write('a','[',i,']= ');
      readln(a[i]);
    end;
end;


procedure summ(n:integer;a:TMatrix; Var s:real);
  var
      i:integer;
begin
  s:=0;
    for i:=1 to n do
      begin
        s:=s+a[i];
      end;
  writeln ('summa= ',s:4:4);
end;

procedure srednee(s:real; Var sr:real);
begin
  sr:=s/n;
  writeln('srednee= ', sr:6:5);
end;


procedure okr(p,h:real; Var Dokr:real);
begin
  Dokr:=(p*h)/2;
  writeln ('pogreshnost` okrugleniya= ',Dokr:6:5);
end;


procedure prib(del:real; Var Dprib: real);
begin
  Dprib:=(2*del)/3;
  writeln('pribornaya= ', Dprib:6:5);
end;


procedure kvrazn(a:TMatrix; sr:real; Var Sum:real);
  var
      i:integer;
begin
  Sum:=0;
    for i:=1 to n do
      begin
        Sum:=Sum+sqr((a[i]-sr));
      end;
  writeln ('test= ',Sum:6:5);
end;


procedure rand(Sum:real; n:integer; Var Drand:real);
begin
  Drand:=t[n]*sqrt(Sum/((n-1)*n));
  writeln ('slychainaya pogr.= ', Drand:6:5);
end;

procedure full(Dokr,Dprib,Drand:real; Var F:real);
begin
  F:=sqrt(sqr(Dokr)+sqr(Dprib)+sqr(Drand));
  writeln ('polnaya pogreshnost`= ',F:6:5);
end;


Begin
  writeln('enter n');
  readln(n);
  writeln ('cena deleniya= ');
  readln(h);
  matr(n,a);
  del:=h/2;
  okr(p,h,Dokr);
  prib(del,Dprib);
  rand(Sum,n,Drand);
  full(Dokr,Dprib,Drand,F);
  writeln(t[n]:4:3);
  test2:=t[n]*sqrt(Sum/((n-1)*n));
  writeln('test2= ', test2:4:3);
  readln;
End.

 
 
 
 Re: Делфи
Сообщение31.01.2015, 04:39 
Аватара пользователя
На всякий случай напишу: я уже разобрался, можете не помогать, спасибо)

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group