Форум: "Начинающим";
Текущий архив: 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.005 c