Форум: "Начинающим";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];




Вниз

матрица 


Maxpch21 ©   (2011-09-08 11:19) [0]

Люди помогите пожалуйста, задача стоит такая: необходимо получить матрицу с вырезанным j-м столбцом и i-ой строчкой.

На форме я создаю таблицу StringGreed, два editа и кнопку button. Вот текст программы в кнопке:

procedure TForm1.btn1Click(Sender: TObject);
var
x,y,i:byte;
str,col:array[1..5] of integer;
begin
 x:=strtoint(edt1.text);
 y:=strtoint(edt2.text);
 for i:=1 to 5 do begin
   str[i]:=strtoint(stringgrid2.cells[x,i-1]);
   col[i]:=strtoint(stringgrid2.cells[i-1,y]);
 end;
end;

end.

Проблема в том, что насколько я понимаю эта программа записывает элементы строки и столбца в массив, а вот как  вывести результативную матицу на форму?



Inovet ©   (2011-09-08 11:27) [1]

В ещё один TStringGrid, в TMemo, нарисовать на TCanvas. Смотря что надо.



Maxpch21 ©   (2011-09-08 11:43) [2]

Надо чтобы выходила обрезанная матица.
Вот к примеру я ажимаю на кнопку, заполняю StrengGreed таблицу цифрами(ну то бишь элементами), ставлю в edit1 и2 номера строки и столбца, нажимаю на копку и ничего не происходит, а надо чтобы после нажатия появлялась матрица с вырезаной строчой и столбцом кои номера я ввел в edit1 и 2.  
(Спасибо за ответ и возможную последующую помощь, программировнием занялся недавно и никогда раньше не занимася этим, но мне не обходимо написание программы для дссертационной работы, так что если не затруднит объясняйте пожалуйста попроще. Ещё раз СПС.)



Maxpch21 ©   (2011-09-08 11:50) [3]

*Надо чтобы выходила обрезанная матица.
Вот к примеру я нажимаю на RUN...*



OW ©   (2011-09-08 12:04) [4]

>> для дссертационной работы
- фигасе..

ну, не пишите, тогда раз

> не обходимо


бодибилдингом легче поди заниматься то :)?

------

type
 TCSGrid = class(TStringGrid)
 private
 public
   procedure MoveRow(FromIndex, ToIndex: Longint);
   procedure MoveColumn(FromIndex, ToIndex: Longint);
 end;

procedure TCSGrid.MoveRow(FromIndex, ToIndex: Longint);
begin
 RowMoved(FromIndex, ToIndex);
end;

procedure TCSGrid.MoveColumn(FromIndex, ToIndex: Longint);
begin
 ColumnMoved(FromIndex, ToIndex);
end;

procedure DeleteRow(Sender: TStringGrid; FromIndex: Longint);
begin
 if FromIndex > 0
 then
   with TCSGrid(Sender) do
     if (RowCount > 2) and (FromIndex < RowCount) then
     begin
       if (FromIndex < RowCount - 1) then
         MoveRow(FromIndex, RowCount - 1);
       Rows[RowCount - 1].Clear;
       RowCount := RowCount - 1;
     end
     else
       MessageBeep(0)
   else
     MessageBeep(0);
end;

procedure DeleteColumn(Sender: TStringGrid; FromIndex: Longint);
begin
 if FromIndex >= 0 then
   with TCSGrid(Sender) do
     if (ColCount > 0) and (FromIndex < ColCount) then
     begin
       if (FromIndex < ColCount - 1) then
         MoveColumn(FromIndex, ColCount - 1);
       Cols[ColCount - 1].Clear;
       ColCount := ColCount - 1;
     end
     else
       MessageBeep(0)
   else
     MessageBeep(0);
end;
--
   if EmptyRow(sgView, i) then
      DeleteRow(sgView, i);

   if EmptyCol(sgView, i) then
      DeleteColumn(sgView, i);



Омлет ©   (2011-09-08 12:05) [5]

Сначала уменьшаете количество столбцов и строк на 1.
 StringGrid1.ColCount := StringGrid1.ColCount - 1;
 StringGrid1.RowCount := StringGrid1.RowCount - 1;

Затем убираете столбец и строку в виртуальной матрице (в памяти которая) - зависит от того, какое представление выбрано (дин. массивы, списки или что-то еще).

И обновляете данные в таблице:

 for y := 0 to StringGrid1.RowCount - 1 do
   for x := 0 to StringGrid1.ColCount - 1 do
     StringGrid1.Cells[x, y] := ...



Омлет ©   (2011-09-08 12:07) [6]

На заметку: http://matrix.kladovka.net.ru/



Maxpch21 ©   (2011-09-08 12:34) [7]


> type
>  TCSGrid = class(TStringGrid)
>  private
>  public
>    procedure MoveRow(FromIndex, ToIndex: Longint);
>    procedure MoveColumn(FromIndex, ToIndex: Longint);
>  end;
>
> procedure TCSGrid.MoveRow(FromIndex, ToIndex: Longint);
> begin
>  RowMoved(FromIndex, ToIndex);
> end;
>
> procedure TCSGrid.MoveColumn(FromIndex, ToIndex: Longint);
>
> begin
>  ColumnMoved(FromIndex, ToIndex);
> end;
>
> procedure DeleteRow(Sender: TStringGrid; FromIndex: Longint);
>
> begin
>  if FromIndex > 0
>  then
>    with TCSGrid(Sender) do
>      if (RowCount > 2) and (FromIndex < RowCount) then
>      begin
>        if (FromIndex < RowCount - 1) then
>          MoveRow(FromIndex, RowCount - 1);
>        Rows[RowCount - 1].Clear;
>        RowCount := RowCount - 1;
>      end
>      else
>        MessageBeep(0)
>    else
>      MessageBeep(0);
> end;
>
> procedure DeleteColumn(Sender: TStringGrid; FromIndex: Longint);
>
> begin
>  if FromIndex >= 0 then
>    with TCSGrid(Sender) do
>      if (ColCount > 0) and (FromIndex < ColCount) then
>      begin
>        if (FromIndex < ColCount - 1) then
>          MoveColumn(FromIndex, ColCount - 1);
>        Cols[ColCount - 1].Clear;
>        ColCount := ColCount - 1;
>      end
>      else
>        MessageBeep(0)
>    else
>      MessageBeep(0);
> end;
> --
>    if EmptyRow(sgView, i) then
>       DeleteRow(sgView, i);
>
>    if EmptyCol(sgView, i) then
>       DeleteColumn(sgView, i);

К чему привязываются эти коды
(извиняюсь если неправильно что назвал)



Maxpch21 ©   (2011-09-08 12:38) [8]


> Сначала уменьшаете количество столбцов и строк на 1.
>  StringGrid1.ColCount := StringGrid1.ColCount - 1;
>  StringGrid1.RowCount := StringGrid1.RowCount - 1;

Конкретно где? Соответственно
for y := 0 to StringGrid1.RowCount - 1 do
  for x := 0 to StringGrid1.ColCount - 1 do
    StringGrid1.Cells[x, y] := ...
тоже мне не ясно где. Извиняюсь что приходится все разжевывать.



Inovet ©   (2011-09-08 12:48) [9]

> [8] Maxpch21 ©   (08.09.11 12:38)
> тоже мне не ясно где.

Может учебник почитать? Здесь не станут основы излагать и так уже почти всё объяснили.



OW ©   (2011-09-08 12:48) [10]

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Grids;
type
 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   procedure FormCreate(Sender: TObject);
 private    { Private declarations }
 public     { Public declarations }
 end;
type
TCSGrid = class(TStringGrid)
private
public
  procedure MoveRow(FromIndex, ToIndex: Longint);
  procedure MoveColumn(FromIndex, ToIndex: Longint);
end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
procedure TCSGrid.MoveRow(FromIndex, ToIndex: Longint);
begin
RowMoved(FromIndex, ToIndex);
end;
procedure TCSGrid.MoveColumn(FromIndex, ToIndex: Longint);
begin
ColumnMoved(FromIndex, ToIndex);
end;
procedure DeleteRow(Sender: TStringGrid; FromIndex: Longint);
begin
if FromIndex > 0
then
  with TCSGrid(Sender) do
    if (RowCount > 2) and (FromIndex < RowCount) then
    begin
      if (FromIndex < RowCount - 1) then
        MoveRow(FromIndex, RowCount - 1);
      Rows[RowCount - 1].Clear;
      RowCount := RowCount - 1;
    end
end;
procedure DeleteColumn(Sender: TStringGrid; FromIndex: Longint);
begin
if FromIndex >= 0 then
  with TCSGrid(Sender) do
    if (ColCount > 0) and (FromIndex < ColCount) then
    begin
      if (FromIndex < ColCount - 1) then
        MoveColumn(FromIndex, ColCount - 1);
      Cols[ColCount - 1].Clear;
      ColCount := ColCount - 1;
    end
end;
procedure TForm1.FormCreate(Sender: TObject);
var
 i,j: Integer;
begin
 StringGrid1.RowCount := 9;
 StringGrid1.ColCount := 9;
 for i:= 0 to  StringGrid1.RowCount - 1 do
  for j := 0 to StringGrid1.ColCount - 1 do
    StringGrid1.Cells[i,j] := IntToStr(i+j*10);
// удалим 4-ю строку
 DeleteRow(StringGrid1, 4);
// удалим 7-ю столбец
 DeleteColumn(StringGrid1, 7);
end;

end.



Ega23 ©   (2011-09-08 12:54) [11]

Н-да, диссертации уже не те...



Сергей М. ©   (2011-09-08 12:55) [12]


> Maxpch21 ©   (08.09.11 12:38) [8]


Ты сам себе создал проблемы и теперь героически их преодолеваешь)

На форму нужно было шлепать не "StringGreed", а ListView, у которого есть готовые методы для "обрезания".

Удаление строки - ListView.Items.Delete(индекс_строки)
Удаление столбца - ListView.Columns.Delete(индекс_столбца)

Весьма удобно для "дссертационной работы")



Maxpch21 ©   (2011-09-08 13:02) [13]


> Ega23 ©   (08.09.11 12:54) [11]
> Н-да, диссертации уже не те...

Диссертация у меня по матмоделированию оптимальных портфелей ценных бумаг, а программирование для меня необходимое неизбежное зло.



Jeer ©   (2011-09-08 13:05) [14]

не повезло портфелям тоже



Maxpch21 ©   (2011-09-08 13:09) [15]


> На форму нужно было шлепать не "StringGreed", а ListView,
>  у которого есть готовые методы для "обрезания".
>
> Удаление строки - ListView.Items.Delete(индекс_строки)
> Удаление столбца - ListView.Columns.Delete(индекс_столбца)

То есть здесь: procedure TForm1.btn1Click(Sender: TObject);
var
x,y,i:byte;
str,col:array[1..5] of integer;
begin
x:=strtoint(edt1.text);
y:=strtoint(edt2.text);
for i:=1 to 5 do begin
  str[i]:=strtoint(stringgrid2.cells[x,i-1]);
  col[i]:=strtoint(stringgrid2.cells[i-1,y]);
end;
end;

end.

Вместо str[i]:=strtoint(stringgrid2.cells[x,i-1]);
  (stringgrid2.cells[i-1,y]);
поставить str[i]:=strtoint(ListView.Items.Delete(индекс_строки))
col[i]:=strtoint(ListView.Columns.Delete(индекс_столбца))
Или как?



Maxpch21 ©   (2011-09-08 13:09) [16]


> На форму нужно было шлепать не "StringGreed", а ListView,
>  у которого есть готовые методы для "обрезания".
>
> Удаление строки - ListView.Items.Delete(индекс_строки)
> Удаление столбца - ListView.Columns.Delete(индекс_столбца)

То есть здесь: procedure TForm1.btn1Click(Sender: TObject);
var
x,y,i:byte;
str,col:array[1..5] of integer;
begin
x:=strtoint(edt1.text);
y:=strtoint(edt2.text);
for i:=1 to 5 do begin
  str[i]:=strtoint(stringgrid2.cells[x,i-1]);
  col[i]:=strtoint(stringgrid2.cells[i-1,y]);
end;
end;

end.

Вместо str[i]:=strtoint(stringgrid2.cells[x,i-1]);
  (stringgrid2.cells[i-1,y]);
поставить str[i]:=strtoint(ListView.Items.Delete(индекс_строки))
col[i]:=strtoint(ListView.Columns.Delete(индекс_столбца))
Или как?



Maxpch21 ©   (2011-09-08 13:14) [17]

А нельзя ли доработать то что уже сделано?
"Вот к примеру я нажимаю на RUN, заполняю StrengGreed таблицу цифрами(ну то бишь элементами), ставлю в edit1 и2 номера строки и столбца, нажимаю на копку и ничего не происходит, а надо чтобы после нажатия появлялась матрица с вырезаной строчой и столбцом кои номера я ввел в edit1 и 2.
То есть как изменить
procedure TForm1.btn1Click(Sender: TObject);
var
x,y,i:byte;
str,col:array[1..5] of integer;
begin
x:=strtoint(edt1.text);
y:=strtoint(edt2.text);
for i:=1 to 5 do begin
  str[i]:=strtoint(stringgrid2.cells[x,i-1]);
  col[i]:=strtoint(stringgrid2.cells[i-1,y]);
end;
end;

end.

Чтобы после нажатия на кнопку Buuton1 выходила матрица с вырезанной строкой edit1  и вырезанным столбцом edit2



Ega23 ©   (2011-09-08 13:58) [18]


> Диссертация у меня по матмоделированию оптимальных портфелей
> ценных бумаг, а программирование для меня необходимое неизбежное
> зло.


Вот и я о том же. Матмоделирование, то-сё. А простейшую программу написать - увы, "я не программист, я оптимальный модельер портфелей"



Maxpch21 ©   (2011-09-08 14:01) [19]


>
> Вот и я о том же. Матмоделирование, то-сё. А простейшую
> программу написать - увы, "я не программист, я оптимальный
> модельер портфелей"

Я эту тему создавал не для флуда. Если нечего сказать по делу, проходим мимо.



OW ©   (2011-09-08 14:16) [20]

по делу уже 150 раз было все сказано, что еще не понятно?



Сергей М. ©   (2011-09-08 14:19) [21]


> нельзя ли доработать то что уже сделано?


Можно. Но только не тому  кому программирование "неизбежное зло".

Доработка по сути сводится к переписыванию программы с нуля - с чувством, с толком, с расстановкой.

Т.е. сейчас ты по сути просишь "напишите за меня программу", наивно полагая что находишься в богадельне)



Ega23 ©   (2011-09-08 14:21) [22]


>  Если нечего сказать по делу, проходим мимо.


По делу нужно мух от котлет отделить.
Т.е. отвязать "матрицу" от её визуального представления.
Научись работать с двумерным массивом в памяти, книг, решений и прочих наставлений в сети - миллион.
А вот уже потом привязывай её к контролу, всего 2 операции нужно: ControlToMatrix и MatrixToControl.
Задачка даже не для диссера, задачка для лабораторной первого курса.

З.Ы. А говорят - Сколково...




Форум: "Начинающим";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.8 MB
Время: 0.029 c
2-1315253407      Captcha               2011-09-06 00:10  2011.12.18  
Программный выбор элемента в ComboBox


2-1315739001      я                     2011-09-11 15:03  2011.12.18  
ftGraphic, DBGrid,ClientDataSet,DataSource


2-1313176699      Leon-Z                2011-08-12 23:18  2011.12.18  
Размер BLOB поля.


11-1240042285     imp                   2009-04-18 12:11  2011.12.18  
Перемещение закладок в TKOLTabControl


8-1221403444      Nevalyashka           2008-09-14 18:44  2011.12.18  
формат MusicXML