![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Всем доброго времени суток! Работаю с делфи недавно и вот появился вопрос, на который я легко нашел ответ в интернете. Но теперь что то не работает и я никак не могу найти ошибку.  
		
	
		
		
		
		
		
	
		
		
	
	
	У меня есть три модуля. TV1 - основной и два вспомогательных: MO и Unite3. Задача: из MO загрузить массив в TV1, откуда она попадет в Unite3. При проверке оказалось, что значения в TV1передаются и даже записываются в Form3.*переменная* но вот в самой Form3 не выводятся почему. Ну не получает форма значения, ну никак. Помогите найти ошибку, пожалуйста. Код: 
	unit MO;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math, Grids;
type
  TForm2 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Memo: TMemo;
    Label3: TLabel;
    SG: TStringGrid;
    Label4: TLabel;
    Label5: TLabel;
    procedure FormActivate(Sender: TObject);
    procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
    M : double;
    Mass : Array[1..100] of double;
  end;
const
     Form2: TForm2 = nil;
Var
 PO : Array[1..10] of real;
implementation
Uses TV1, Unit3;
{$R *.dfm}
procedure TForm2.FormActivate(Sender: TObject);
Var
i,j,p,op:integer;
Chr:String;
Sum,s:double;
begin
  //Вывод общего Мо
  Label2.Caption:='Математическое ожидание= '+FloatToStr(M)+#13+#13+'Матeматическое ожидание рассчитывает'
    +' по формуле: M=x1*p1+x2*p2+... где x-это номинал, а p-вероятность.'+#13+'Мат. Ожидание=Сумме произведения'
    +' номинала на вероятность.';
      // Рассчет и вывод оценки
     Memo.Lines.Insert(0, 'Оценка Математического ожидания'+#13);
     Memo.Lines.Insert(1, '');
     Memo.Lines.Insert(2, 'Оценка Математического ожидания считается по формуле: 1\n(x1+...xn). Все результаты округлены до 4 цифр после запятой.');
     p:=10; op:=1;
     for i:=3 to 22 do
     Begin
      sum:=0;
      Chr:='';
      for j:=1 to p do
      Begin
        Sum:=sum+Mass[j];
        Chr:=Chr+FloatToStr(Mass[j])+' + ';
      End;
      Delete(Chr,Length(Chr)-2,3);
      if (i mod 2)=0 then Memo.Lines.Insert(i,'') else
      begin
        Memo.Lines.Insert(i,'M'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
        SG.Cells[op-1,0]:=IntToStr(p);
        SG.Cells[op-1,1]:=FloatToStr(RoundTo(Sum/p,-4));
        PO[op]:=RoundTo(Sum/p,-4);
        p:=p+10;
        op:=op+1;
      End;
     End;
     for i:=1 to 10 do Form1.PO[i]:=PO[i];
end;
//Прокрутка вверх и вниз
procedure TForm2.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  VertScrollBar.Position:=VertScrollBar.Position+10;
end;
procedure TForm2.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  VertScrollBar.Position:=VertScrollBar.Position-10;
end;
end.Код: 
	unit Unit3;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math, Grids;
type
  TForm3 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Mem: TMemo;
    Label3: TLabel;
    Memo12: TMemo;
    Memo13: TMemo;
    Memo14: TMemo;
    Memo15: TMemo;
    Memo16: TMemo;
    Memo17: TMemo;
    Memo18: TMemo;
    Memo19: TMemo;
    Memo110: TMemo;
    Memo11: TMemo;
    SG: TStringGrid;
    Label4: TLabel;
    Label5: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    D : double;
    Mass : Array[1..100] of double;
    PO : Array[1..10] of real;
  end;
Const
  Form3: TForm3 = nil;
implementation
uses TV1, MO;
{$R *.dfm}
procedure TForm3.FormCreate(Sender: TObject);
Var
i,j,p,op:integer;
Chr:String;
Sum,s:double;
begin
  Label2.Caption:='Дисперсия= '+FloatToStr(D)+#13+#13+'Дисперсия рассчитывается'
    +' по формуле: D=x1^2*p1+x2^2+p2...-M где M- мат. ожидание'+#13;
    Mem.Lines.Insert(0, 'Оценка дисперсии'+#13);
    Mem.Lines.Insert(1, '');
    Mem.Lines.Insert(2, 'Оценка дисперсии считается по формуле: 1\n((x1-M1)^2+...+(xn-Mn)^2). Все значение округлены до 4 знаков после запятой.');
    p:=10; op:=1;
     for i:=3 to 22 do
     Begin
      sum:=0;
      Chr:='';
      for j:=1 to p do
        Begin
          Sum:=sum+Power(Mass[j]-PO[op],2);
          Chr:=Chr+'('+FloatToStr(Mass[j])+' - '+FloatToStr(PO[op])+')'+'^'+'2'+' + ';
         End;
     Delete(Chr,Length(Chr)-2,3);
     if (i mod 2)=0 then Mem.Lines.Insert(i,'') else
     begin
        Mem.Lines.Insert(i,'D'+IntToStr(op)+'= '{+'1/'+IntToStr(p)+'*'+'('+Chr+')= '}+FloatToStr(RoundTo(Sum/p,-4))+#13);
       SG.Cells[op-1,0]:=IntToStr(p);
        SG.Cells[op-1,1]:=FloatToStr(RoundTo(Sum/p,-4));
      Case op of
      1 : Memo12.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
      2 : Memo13.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
      3 : Memo14.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
      4 : Memo15.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
      5 : Memo16.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
      6 : Memo17.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
      7 : Memo18.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
      8 : Memo19.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
      9 : Memo110.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
      10 : Memo11.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
      End;
      p:=p+10;
      op:=op+1;
    End;
     End;
end;
procedure TForm3.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
VertScrollBar.Position:=VertScrollBar.Position-10;
end;
procedure TForm3.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
VertScrollBar.Position:=VertScrollBar.Position+10;
end;
procedure TForm3.FormActivate(Sender: TObject);
begin
    if Form2=nil then
  begin
   ShowMessage('Вы не посчитали математическое ожидание!');
   Exit;
  End;
end;
endКод: 
	program Project1;
uses
  Forms,
  TV1 in 'TV1.pas' {Form1},
  MO in 'MO\MO.pas' {Form2},
  Unit3 in 'DISCR\Unit3.pas' {Form3};
{$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
 |