Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2012, 20:39   #1
Toxi
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 31
По умолчанию задача на двумерный массив (delphi)

дан двумерный массив размером n*m, заполненный случайными числами из промежутка -20,20
заменить положительный элемент каждой строки на отрицательный.
Код:
    { Public declarations }
  end;

var
  Form1: TForm1;
  a:array of array of integer;
  z,k,n,m:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
randomize;
n:=strtoint(edit1.text);
m:=strtoint(edit2.text);
setlength(a,n,m);
for i:=0 to n-1 do
  for j:=0 to m-1 do
    a[i,j]:=random(51)-25;
stringgrid1.rowcount:=n+1;
stringgrid1.ColCount:=m+1;
with stringgrid1 do
  begin
   i:=0;
   for j:=1 to rowcount do
    cells[i,j]:=inttostr(j);
   j:=0;
   for i:=1 to colcount do
    cells[i,j]:=inttostr(i);
  end;
with stringgrid1 do
  for i:=1 to n do
    for j:=1 to m do
      cells[j,i]:=inttostr(a[i-1,j-1]);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i,j:integer;
begin
for j:=0 to m do
for i:=0 to n do
  if a[i,j]>0 then
    begin
    a[i,j]:=-1*(a[i,j]);
  StringGrid2.Cells[j,i]:=IntToStr(a[i,j]);
end;
 end;


end.
помогите пожалуйста разобраться почему не работает.
Изображения
Тип файла: jpg ошибка.JPG (62.3 Кб, 148 просмотров)
Toxi вне форума Ответить с цитированием
Старый 18.03.2012, 20:59   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

В Button2Click за пределы массива выходишь:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
i,j:integer;
begin
for j:=0 to m-1 do
for i:=0 to n-1 do
  if a[i,j]>0 then
    begin
    a[i,j]:=-1*(a[i,j]);
  StringGrid2.Cells[j,i]:=IntToStr(a[i,j]);
    end;
 end;
А вообще, правильно будет так:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
i,j:integer;
begin
for j:=0 to m-1 do
  for i:=0 to n-1 do
    begin
      if a[i,j]>0 then
        a[i,j]:=-1*(a[i,j]);
      StringGrid2.Cells[j+1,i+1]:=IntToStr(a[i,j]);
    end;
with stringgrid2 do
  begin
   for i:=1 to rowcount do
    cells[0,i]:=inttostr(i);
   for i:=1 to colcount do
    cells[i,0]:=inttostr(i);
  end;
end;
Все тривиальное просто

Последний раз редактировалось whatever; 18.03.2012 в 21:11.
whatever вне форума Ответить с цитированием
Старый 18.03.2012, 21:14   #3
Toxi
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 31
По умолчанию

Цитата:
Сообщение от whatever Посмотреть сообщение
В Button2Click за пределы массива выходишь:
А вообще, правильно будет так:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
i,j:integer;
begin
for j:=0 to m-1 do
  for i:=0 to n-1 do
    begin
      if a[i,j]>0 then
        a[i,j]:=-1*(a[i,j]);
      StringGrid2.Cells[j+1,i+1]:=IntToStr(a[i,j]);
    end;
with stringgrid2 do
  begin
   for i:=1 to rowcount do
    cells[0,i]:=inttostr(i);
   for i:=1 to colcount do
    cells[i,0]:=inttostr(i);
  end;
end;
в очередной раз огромное тебе спасибо, все заработало)
Toxi вне форума Ответить с цитированием
Старый 18.03.2012, 21:32   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Toxi Посмотреть сообщение
в очередной раз огромное тебе спасибо, все заработало)
Надеюсь, что так. Проверь получше, чета у меня в этом коде косяки вылазят. Походу надо спать идти...
Update: Да, все работает, это я где-то косячнул со вторым stringgrid'ом, код нормальный
Все тривиальное просто

Последний раз редактировалось whatever; 18.03.2012 в 21:35.
whatever вне форума Ответить с цитированием
Старый 18.03.2012, 22:59   #5
Toxi
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 31
По умолчанию

Цитата:
Сообщение от whatever Посмотреть сообщение
Надеюсь, что так. Проверь получше, чета у меня в этом коде косяки вылазят. Походу надо спать идти...
Update: Да, все работает, это я где-то косячнул со вторым stringgrid'ом, код нормальный
все работает на ура)) спасибо огромное, Вы даже не представляете как выручаете меня

чтобы не создавать новую тему, решил написать в эту)
задача: поменять местами первый и предпоследний столбцы массива.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    StringGrid1: TStringGrid;
    Button2: TButton;
    Label2: TLabel;
    Edit2: TEdit;
    StringGrid2: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a:array of array of integer;
  n,m:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
randomize;
n:=strtoint(edit1.text);
m:=strtoint(edit2.text);
setlength(a,n,m);
for i:=0 to n-1 do
  for j:=0 to m-1 do
    a[i,j]:=random(51)-25;
stringgrid1.rowcount:=n+1;
stringgrid1.ColCount:=m+1;
with stringgrid1 do
  begin
   i:=0;
   for j:=1 to rowcount do
    cells[i,j]:=inttostr(j);
   j:=0;
   for i:=1 to colcount do
    cells[i,j]:=inttostr(i);
  end;
with stringgrid1 do
  for i:=1 to n do
    for j:=1 to m do
      cells[j,i]:=inttostr(a[i-1,j-1]);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i,j,k:integer;
begin
for i:=1 to n do
begin
  a[i,0]:=a[i,m-1];
  a[i,m-1]:=k;
  StringGrid2.Cells[j-1,i-1]:=IntToStr(a[i,j-1]);
end;
for i:=1 to n do
    for j:=1 to m do
      cells[j,i]:=inttostr(a[i-1,j-1]);
 end;


end.
думаю, что проблема с выводом массива, но разобраться что-то не могу((
Изображения
Тип файла: jpg ошибка.JPG (44.4 Кб, 74 просмотров)

Последний раз редактировалось Stilet; 19.03.2012 в 21:23.
Toxi вне форума Ответить с цитированием
Старый 19.03.2012, 18:59   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

StringGrid1 забыли
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 19.03.2012, 19:24   #7
Toxi
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
StringGrid1 забыли
т.е строку
Код:
cells[j,i]:=inttostr(a[i-1,j-1]);
заменить на
Код:
StringGrid1.cells[j,i]:=inttostr(a[i-1,j-1]);
??
Toxi вне форума Ответить с цитированием
Старый 19.03.2012, 19:28   #8
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

да! Вы меня правильно поняли!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 19.03.2012, 19:33   #9
Toxi
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
да! Вы меня правильно поняли!
что-то опять не так((
Изображения
Тип файла: jpg ошибка.JPG (49.2 Кб, 39 просмотров)
Toxi вне форума Ответить с цитированием
Старый 19.03.2012, 19:34   #10
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Выход за границы массива!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на двумерный массив Delphi! Kate23 Помощь студентам 4 23.01.2012 10:46
Задача на двумерный динамический массив Delphi molodoy95 Помощь студентам 3 26.12.2011 22:05
Задача в Delphi на двумерный массив Ann_Sh Общие вопросы Delphi 1 05.11.2010 18:38
Задача на двумерный массив в Delphi Alena-kursk Помощь студентам 4 30.11.2009 15:43
Задача на двумерный массив DELPHI 7 Max0306 Помощь студентам 1 22.09.2009 11:09