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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2013, 15:55   #1
Fitch573
Пользователь
 
Регистрация: 28.11.2011
Сообщений: 18
По умолчанию Впихнуть программу в оконный режим.

Здравствуйте. Вот задачка: "Дана матрица A(N,M). Вычислить вектор X(m), где значение xj равно сумме положительных элементов
j-ого столба матрицы A." Сделал её в консольном режиме, работает правильно.
Код консольного:
Код:
program lab10;

{$APPTYPE CONSOLE}

var
   a:array[1..100,1..100] of integer;
   i,j,n,m:integer;
   x:array[1..100] of integer;
begin
 randomize;
 repeat
  write('Pa3MepHocTb'' NxM: ');
  readln(n,m);
 until (n in [1..100]) and (m in [1..100]);
 writeln('MaTpuua');
 for i:=1 to n do
 begin
  for j:=1 to m do
  begin
   a[i,j]:=random(21)-10;
   write(a[i,j]:4);
  end;
  writeln;
 end;
 for i:=1 to n do
 begin
  x[i]:=0;
  for j:=1 to m do
   if a[j,i]>0 then x[i]:=x[i]+a[j,i];
 end;
 writeln;
 writeln('BeKTop:');
 for i:=1 to m do
  write(x[i]:5);
 readln;
end.
Но вот беда, нужно программу сделать в оконном режиме. Сделал формирование массива и возможность его редактирования (честно - по образцу). Попробовал втиснуть в процедуру программный код(не уверен, что правильно), если не правильно, помогите исправить. И самое главное совсем не соображаю, что нужно прописать, чтобы полученный вектор отображался в StringGrid4. Очень прошу помочь. Чесслово, бился над ней долго.
Программный код оконного режима:
Код:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    StringGrid4: TStringGrid;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

type Ta=array of array of Real;

procedure ZapolnenieStrGrid(m,n:integer;StrGrd:TstringGrid);
    var i,j:integer;
begin
   StrGrd.RowCount:=m;
   StrGrd.ColCount:=n;
   for i:=0 to StrGrd.rowCount - 1 do
     for j:=0 to StrGrd.colCount - 1 do
         StrGrd.Cells[j,i]:=FloatToStrF(i-j,ffFixed,4,3);
end;

procedure InputMasIzStrGrd(var a:Ta; StrGrd:TstringGrid);
   var m,n,i,j:integer;
begin
   m:=StrGrd.RowCount;
   n:=StrGrd.ColCount;
   SetLength(a,m,n);
   for i:=0 to m - 1 do
     for j:=0 to n - 1 do
       a[i,j]:=StrToFloat(StrGrd.Cells[j,i]);
end;

procedure  OutPutMasInStrGrd(var a:Ta; StrGrd:TstringGrid);
    var i,j:integer;
begin
   StrGrd.RowCount:=Length(a);
   StrGrd.ColCount:=Length(a[0]);
   for i:=0 to StrGrd.rowCount - 1 do
     for j:=0 to StrGrd.colCount - 1 do
         StrGrd.Cells[j,i]:=FloatToStrF(a[i,j],ffFixed,4,3);
end;

procedure vector(const a : Ta; var x : array of real; g:TStringGrid);
   var i,j,n,m:integer;
   begin
for i:=0 to n - 1 do
 begin
  x[i]:=0;
  for j:=0 to m - 1 do
   if a[j,i]>0 then x[i]:=x[i]+a[j,i];
 end;
   end;



procedure TForm2.Button1Click(Sender: TObject);
   var m,n:integer;
begin
   m:=StrToInt(Edit1.text);
   n:=StrToInt(Edit2.text);
   ZapolnenieStrGrid(m,n,StringGrid1);
end;

var aa:Ta;

procedure TForm2.Button2Click(Sender: TObject);
begin
   InputMasIzStrGrd(aa,StringGrid1);
   OutPutMasInStrGrd(aa,stringGrid2);
end;

procedure TForm2.Button4Click(Sender: TObject);
begin
(StringGrid4);

end;

end.
Fitch573 вне форума Ответить с цитированием
Старый 20.02.2013, 16:10   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

такое впечатление, что Вы во втором случае (с формами) вообще другую задачу решаете!

например,
у Вас в консольной программе есть код:
Код:
var
   a:array[1..100,1..100] of integer;
   x:array[1..100] of integer;
покажите, где описываются массив (вектор) x во втором варианте?

Почему матрица целых чисел "вдруг" превратилась в матрицу вещественного типа?

добавлено.

откуда должны браться переменные n и m ?

в первоначальной задаче у Вас n - строк и m - столбцов
Цитата:
Код:
   m:=StrGrd.RowCount;
   n:=StrGrd.ColCount;
а тут что?!

Последний раз редактировалось Serge_Bliznykov; 20.02.2013 в 16:13.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Antigate впихнуть alex0097 Общие вопросы Delphi 5 03.10.2012 09:53
оконный режим при графике Irenka Помощь студентам 9 06.06.2010 17:14
оконный режим при графике Irenka Помощь студентам 0 04.06.2010 17:36
впихнуть ярлык в прогу blackstersl Общие вопросы Delphi 4 30.09.2008 20:41
Впихнуть трек в прогу blackstersl Общие вопросы Delphi 1 21.09.2008 11:47