IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Использование StringGrid, Использование StringGrid
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  0  +


Проблема в следующем: нужно вставить первую строку после первой строчки, содержащую минимальный элемент:
unit Unit1;

interface

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

type
TheMas = array [1..10] of array [1..10] of Integer;
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Edit1: TEdit;
UpDown1: TUpDown;
Label1: TLabel;
Edit2: TEdit;
UpDown2: TUpDown;
Label2: TLabel;
Button1: TButton;
procedure GridChange(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure zap(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.GridChange(Sender: TObject);
begin
StringGrid1.ColCount:=UpDown1.Position;
StringGrid1.RowCount:=UpDown2.Position;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
M:TheMas;
i, j, k, p:Integer;
begin
for i:=1 to UpDown1.Position do
for j:=1 to UpDown2.Position do
M[i, j]:=StrToInt(StringGrid1.Cells[i-1, j-1]);
k:=1;
p:=M[1, 1];
for i:=1 to UpDown1.Position do
for j:=2 to UpDown2.Position do
if p>M[i, j] then
begin
k:=j;
p:=M[i, j];
end;
for i:=1 to UpDown1.Position do

begin

p:=M[i, 1];
M[i, k+1]:=M[i, 1];

M[i, j+1]:=p;

end;

for i:=1 to UpDown1.Position do
for j:=1 to UpDown2.Position do
StringGrid1.Cells[i-1, j-1]:=IntToStr(M[i, j]);
end;



procedure TForm1.zap(Sender: TObject);
var
x,y:integer;
begin
randomize;
for y:=0 to form1.StringGrid1.rowcount do
for x:=0 to form1.StringGrid1.ColCount do
form1.StringGrid1.Cells[x,y]:=inttostr(random(100));
end;

end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  0  +


Помогите, что не так сделал?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Ну во-первых мне показалось очень странным вот это :

Цитата
for i:=1 to UpDown1.Position do
for j:=2 to UpDown2.Position do


Во вторых зачем вообще массив ? Разьве что только для того чтобы постоянно не юзать StrToInt...
В третьих как-то странно выглядит алгоритм вставки, особо правда не вникал, я бы сделал так:
  • Нашли jMin - номер строки в гриде в которой находится минимальный элемент.
  • Увеличили число строк в гриде на 1
  • Смещаем строки начиная с RowsCount - 1 (бывшей последней) до jMin + 1 включительно на одну строку в низ
  • Заполняем строку jMin + 1 элементами из строки 1

т.е.

было

1 2 3
4 5 0
7 8 9

стало

1 2 3
4 5 0
1 2 3
7 8 9

Вот так примерно.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.12.2020 2:34
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name