Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Двумерный массив в delphi


Автор: sketchh 11.3.2012, 08:20
Дан двумерный массив размером n*m, заполненный случайными числами из промежутка [-25,25]1) Заменить отрицательный элемент каждого столбца на положительный 2) Поменять местами второй и последний столбцы.
Начало есть
Код


procedure TForm1.Button1Click(Sender: TObject);
begin
n:=strtoint(edit1.text);
m:=strtoint(edit2.text);
SetLength(a, n,m);
  stringgrid1.RowCount:=n+1;
  stringgrid1.ColCount:=m+1;
for i:=0 to n-1 do
 for i1:=0 to m-1 do
 begin
  randomize;
  a[i,i1]:=RandomRange(-35, 35);
  StringGrid1.Cells[i1+1,i+1]:=IntToStr(a[i,i1]);
end;
end;

Автор: Pawl 11.3.2012, 09:54
Цитата(sketchh @  11.3.2012,  08:20 Найти цитируемый пост)
Заменить отрицательный элемент каждого столбца на положительный 

На какой положительный? Равный по модулю? Приведу решение для равного по модулю.
Предположим, у Вас есть еще 1 кнопка для выполнения вычислений.
Код

procedure TForm1.Button2Click(Sender: TObject);
var tmp: integer
begin
for i := 1 to n do
    for i1 := 1 to m do
        //замена отриц. на положит.
        if a[i,i1] < 0 then a[i,i1] := abs(a[i,i1];

//поменять местами столбцы
for i := 1 to n do
begin
    tmp := a[i, 2];
    a[i, 2] := a[i, m];
    a[i, m] := tmp;
end;

end;

А дальше - вывод в StringGrid, как у Вас написано в начале.


Автор: sketchh 13.3.2012, 14:06
что то не получилось решить задачу вот исходный код 
Код

var
  Form1: TForm1;
   a:array of array of integer;
   i,i1,n,m,tmp:integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
n:=strtoint(edit1.text);
m:=strtoint(edit2.text);
SetLength(a, n,m);
  stringgrid1.RowCount:=n+1;
  stringgrid1.ColCount:=m+1;
for i:=0 to n-1 do
 for i1:=0 to m-1 do
 begin
  randomize;
  a[i,i1]:=RandomRange(-25, 25);
  StringGrid1.Cells[i1+1,i+1]:=IntToStr(a[i,i1]);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
for i := 1 to n do
    for i1 := 1 to m do
        //замена отриц. на положит.
        if a[i,i1] < 0 then a[i,i1] := abs(a[i,i1]);
//поменять местами столбцы
for i := 1 to n do
begin
    tmp := a[i, 2];
    a[i, 2] := a[i, m];
    a[i, m] := tmp;
    StringGrid1.Cells[i1+1,i+1]:=IntToStr(a[i,i1]);
end;
end;
end.

Автор: ColdSpirit 14.3.2012, 17:42
Сделал работу и не смог сохранить smile заново делать не хочу, но могу экзешник скинуть если надо))

a: array of array of integer;

замени на

a: array [0..50, 0..50] of integer;



И если еще не работает, то

a[i,i1]:=RandomRange(-25, 25);


замени на

a[i,i1]:=Random(25)-Random(25);


Автор: sketchh 15.3.2012, 16:18
все заменил все ровно не робит ругается теперь на 13 строчку

Автор: ColdSpirit 15.3.2012, 16:53
13 строка не нужна, у тебя массив уже заданного размера - a: array [0..50, 0..50] of integer;

Автор: sketchh 16.3.2012, 13:27
Цитата(ColdSpirit @ 15.3.2012,  16:53)
13 строка не нужна, у тебя массив уже заданного размера - a: array [0..50, 0..50] of integer;

удалил все ровно не работает может скинешь exe файл?

Автор: ColdSpirit 16.3.2012, 14:38
Код

var a: array [0..50, 0..50] of integer;
   i,i1,n,m,tmp:integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

n:=strtoint(edit1.text);
m:=strtoint(edit2.text);

stringgrid1.RowCount:=n+1;
stringgrid1.ColCount:=m+1;

for i:=1 to n do    // напутал куда делать +1, а куда нет,
  for i1:=1 to m do // лучше не париться и идти сразу с единицы
  begin
    randomize;
    a[i,i1]:=Random(25)-Random(25);
    StringGrid1.Cells[i1,i]:=IntToStr(a[i,i1]);
  end;

end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//-----------замена отриц. на положит.--------
for i := 1 to n do
    for i1 := 1 to m do
    begin
        a[i,i1] := abs(a[i,i1]); // проверка "if a[i,i1] < 0 then" не нужна
        StringGrid1.Cells[i1,i]:=IntToStr(a[i,i1]); // забыл вывести массив на экран
    end;

//-------------поменять местами столбцы--------
for i := 1 to n do
begin
    tmp := a[i, 2];
    a[i, 2] := a[i, m];
    a[i, m] := tmp;

    for i1 := 1 to m do // забыл добавить i1, без нее вывод не будет работать
      StringGrid1.Cells[i1,i]:=IntToStr(a[i,i1]);
end;
end;

end.

Вот рабочий код, ошибки я там указал, приложил 2 файла - скомпилированный этим кодом и мой

Автор: sketchh 17.3.2012, 12:44
Спасибо огромное!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)