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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2010, 15:26   #1
Hippie
 
Регистрация: 31.05.2009
Сообщений: 3
Злость Обнуляется переменная

Требуется расчитать и оптимизировать электрическую цепь, состоящую из 6 ветвей. Для проверки хода расчета вывожу Хс. считаю процедурой:
Код:
Код:
for i:=1 to 6 do
    if C[i]=0 then
     XC[i]:=0
    else
    XC[i]:=(1/(pi*100*C[i]));
где С-емкость катушки, i-порядковый номер ветви, содержащей катушку. Хс упорно равно 0 при любом значении С. наверняка обнуляет при вводе данных, а вот где, как и почему найти не могу.Толи класс создаю не правильно...

исходный код :

Код:
unit ClTypes;

interface
 uses SysUtils;
 type
  TGenRes=array[1..6]of real;//общее сопротивление участкка
  TXL=array[1..6] of real;
  TXC=array[1..6] of real;
  TZRes=array [1..6] of real;
  TAngle=array [1..6] of real;

  TBranch=class
    Cur:array [1..6] of real;//ток
    Voltage: array [1..6] of real;
    PB:real;//баланс мощности
    procedure XLCalc(i,n:byte);//считаем xc
    procedure XCCalc(i,n:byte);
    procedure ZResCalc(i,n:byte);
    procedure AngleCalc(i,n:byte);
    procedure CalcCur(i,n:byte);
    procedure Datainp;
    procedure PowBal(i,n:byte);
   public
   Zres:TZRes;
   Angle:Tangle;
   Xl:TXl;
   Xc:TXc;
    L: array[1..6] of real;
    C: array [1..6] of real;
    R: array [1..6]of real;
  end;
 TOptArea=class(TBranch)
  procedure CalcOptArea(i,n:byte;ResAr,Volt:real);
  end;
var
 a:byte;
 k:byte;
 Branch:TBranch;
 t:real;

implementation
 uses main,calc;
{ TBranch }


procedure TBranch.AngleCalc(i,n:byte);
begin
Branch:=TBranch.Create;
n:=6;
  for i:=1 to n do
    if R[i]=0 then
        if((XL[i]-XC[i])>0) then Angle[i]:=pi/2
       else
        if((XL[i]-XC[i])>0) then Angle[i]:=-pi/2

    else
         Angle[i]:=arctan((xl[i]-xc[i])/r[i]);
end;

{procedure TBranch.CalcCur(i,n:byte);
begin
Gauss:=TGauss.Create;
Gauss.CalcEqvSyst(i,j,k,n);
 Cur[6]:=EqvSyst.Ik[1];
 Cur[2]:=EqvSyst.Ik[2];
 Cur[3]:=EqvSyst.Ik[1]-EqvSyst.Ik[3];
 Cur[4]:=EqvSyst.Ik[3]-EqvSyst.Ik[2];
 Cur[5]:=EqvSyst.Ik[1]-EqvSyst.Ik[2];
 Cur[1]:=EqvSyst.Ik[3];
 end;}

procedure TBranch.Datainp;//Присваиваем значения С
begin
  Branch.C[1]:=0;
  Branch.C[2]:=StrToFloat(Form1.StringGrid1.Cells[3,1])*0.000001;
  Branch.C[3]:=0;
  Branch.C[4]:=0;
  Branch.C[5]:=StrToFloat(Form1.StringGrid1.Cells[2,1])*0.000001;
  Branch.C[6]:=StrToFloat(Form1.StringGrid1.Cells[1,1])*0.000001;
  Branch.L[1]:=StrToFloat(Form1.StringGrid1.Cells[4,1])*0.001;
  Branch.L[2]:=StrToFloat(Form1.StringGrid1.Cells[5,1])*0.001;
  Branch.L[3]:=0;
  Branch.L[4]:=0;
  Branch.L[5]:=0;
  Branch.L[6]:=0;
  Branch.R[1]:=StrToFloat(Form1.StringGrid1.Cells[6,1]);
  Branch.R[2]:=StrToFloat(Form1.StringGrid1.Cells[7,1]);
  Branch.R[3]:=StrToFloat(Form1.StringGrid1.Cells[8,1]);
  Branch.R[4]:=StrToFloat(Form1.StringGrid1.Cells[9,1]);
  Branch.R[5]:=0;
  Branch.R[6]:=0;
end;

procedure TBranch.PowBal(i,n:byte);
begin
Gauss:=TGauss.Create;
 Gauss.Assignment(i,n);
 Branch.Create;
 Branch.CalcCur(i,n);
 Gauss.CalcEqvSyst(i,j,k,n);
n:=6;
 For i:=1 to n do
 PB:=ZRes[i]*sqr(Cur[i]);
 PB:=PB+ZRes[i+1]*sqr(Cur[i+1]);


end;

procedure TBranch.XCCalc(i,n:byte);//считаем С
begin
Branch.Datainp;
  for i:=1 to 6 do
    if C[i]=0 then
     XC[i]:=0
    else
    XC[i]:=(1/(pi*100*C[i]));
end;

procedure TBranch.XLCalc(i,n:byte);
begin
n:=6;
  for i:=1 to n do
   XL[i]:=(pi*100*L[i]);
end;

procedure TBranch.ZResCalc(i,n:byte);
begin
Branch.Datainp;
Branch.XLCalc(i,n);
Branch.XCCalc(i,n);

 for i:=1 to 6 do
    ZRes[i]:=sqrt(sqr(R[i])+sqr(Xl[i]-Xc[i]));
end;

{ TOptArea }

procedure TOptArea.CalcOptArea(i,n:byte;ResAr,Volt: real);
var AngArc:real;
begin
  ResAr:=sqrt(sqr(R[2])+sqr(Xl[2]));
  AngArc:=arctan((xl[2]/r[k]));
  Volt:=ResAr*Cur[2]*sin((100*pi*t)+AngArc);
end;

end.
Код:
на форме выводим код по кнопке:

procedure TForm1.Button1Click(Sender: TObject);//выводим Xc по кнопке
begin

Branch:=TBranch.Create;
Branch.Datainp;
Branch.XLCalc(i,n);
{Form1.Label10.Caption:=FloatToStr(Branch.PB); }
Form1.StringGrid2.Cells[1,1]:=FloatToStr(Branch.Xc[1]);


end;

end.
Снится уже ошибка(
Hippie вне форума Ответить с цитированием
Старый 09.01.2010, 20:22   #2
Hippie
 
Регистрация: 31.05.2009
Сообщений: 3
По умолчанию

уже разобралась.
Извините) Протупила.
Hippie вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Socket обнуляется переменнaя KoBRaAndrey Работа с сетью в Delphi 4 06.01.2010 21:30
c# ссылочная переменная hizahazahub Общие вопросы .NET 1 16.04.2009 20:53
Странная переменная. GreenDan Помощь студентам 6 25.08.2008 19:35
Динамическая переменная kezman Общие вопросы C/C++ 1 29.07.2008 13:49