Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.
Задачка даже не для диссера, задачка для лабораторной первого курса.

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



Страницы: 1 вся ветка

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

Наверх





Память: 0.52 MB
Время: 0.007 c
2-1315318888
Gu
2011-09-06 18:21
2011.12.18
Dll метод


15-1314943782
Дмитрий С
2011-09-02 10:09
2011.12.18
"Любую точку выпуклой функции можно назвать экстремумом."


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


15-1314348069
androidios
2011-08-26 12:41
2011.12.18
Нужно перевести 2 функции с php на delphi за $


2-1315838395
Pcrepair
2011-09-12 18:39
2011.12.18
как подключить модуль в RAD2010





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский