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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2013, 10:08   #1
keb1
 
Регистрация: 18.06.2013
Сообщений: 6
Вопрос Дана матрица n*m...

Дана матрица n*m; Все повторяющиеся элементы заменить "0", а не повторяющиеся "1"; Полученную матрицу вывести на экран.

Вот листинг, подскажите где косяки.

Код:
unit Unit1;

interface

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

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

var
   n,m:integer;  a,b:array[1..5,1..5] of integer;
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);
begin
form2.show;
form1.visible:=false;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
form1.close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.ColCount:=strtoint(edit1.Text);
StringGrid1.RowCount:=strtoint(edit2.Text);

StringGrid2.ColCount:=strtoint(edit1.Text);
StringGrid2.RowCount:=strtoint(edit2.Text);

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


end;

procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
begin
randomize ;
 for i:=1 to m do
 for j:=1 to n do
 begin
 a[i,j]:=random(10);

 stringgrid1.Cells[i-1,j-1]:=inttostr(a[i,j]);
 end;
 for i:=1 to m do
 for j:=1 to n do
 if (a[i,j]=a[i+1,j+1]) and (a[i,j]<>0) then begin a[i,j]:=0;b[i,j]:=a[i,j] end ELSE
 begin
 a[i,j]:=1;      b[i,j]:=a[i,j];end;
 for i:=1 to m do
 for j:=1 to n do
 stringgrid2.Cells[i-1,j-1]:=inttostr(b[i,j]);
 end;




end.
keb1 вне форума Ответить с цитированием
Старый 18.06.2013, 10:15   #2
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию

Ну ты задаешь массивы a и b [1..5], а потом проставляешь значения в массив а по размерам из каких то эдитов - если числа в эдитах будут больше пяти ничего не получится
т.е. если n будет равно шести, то на a[1,6] программа ругнется
тебе надо динамично размеры массива задавать

Последний раз редактировалось BoozZzilla; 18.06.2013 в 10:19.
BoozZzilla вне форума Ответить с цитированием
Старый 18.06.2013, 10:28   #3
keb1
 
Регистрация: 18.06.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от BoozZzilla Посмотреть сообщение
Ну ты задаешь массивы a и b [1..5], а потом проставляешь значения в массив а по размерам из каких то эдитов - если числа в эдитах будут больше пяти ничего не получится
т.е. если n будет равно шести, то на a[1,6] программа ругнется
тебе надо динамично размеры массива задавать
Я больше 5 не беру,это предел.
keb1 вне форума Ответить с цитированием
Старый 18.06.2013, 11:08   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

насчёт вышесказанного замечания об ограничении размера матрицы: если не хотите динамическими массивами пользоваться, так, по крайней мере, добавьте проверку, что в edit1 и edit2 нормальные подходящие числа.

а вот это:
Цитата:
Код:
stringgrid1.Cells[i-1,j-1]:=inttostr(a[i,j]);
вас не смущает, что в массиве обычно сначала идёт индекс строки, а потом индекс столбца, а в StringGrid всё с точностью до наоборот - сначала идёт индекс столбца, потом индекс строки, и Вы при присваивании этот факт игнорируете?

Этого "косяка" недостаточно?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.06.2013, 15:42   #5
keb1
 
Регистрация: 18.06.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
насчёт вышесказанного замечания об ограничении размера матрицы: если не хотите динамическими массивами пользоваться, так, по крайней мере, добавьте проверку, что в edit1 и edit2 нормальные подходящие числа.

а вот это:

вас не смущает, что в массиве обычно сначала идёт индекс строки, а потом индекс столбца, а в StringGrid всё с точностью до наоборот - сначала идёт индекс столбца, потом индекс строки, и Вы при присваивании этот факт игнорируете?

Этого "косяка" недостаточно?
Спасибо за помощь,и все таки вы не могли бы исправить в моей программе и написать кусок листинга, я просто не до конца понимаю)
keb1 вне форума Ответить с цитированием
Старый 29.06.2013, 10:23   #6
keb1
 
Регистрация: 18.06.2013
Сообщений: 6
По умолчанию

Я не создавал бы, если бы мне ответили.
keb1 вне форума Ответить с цитированием
Старый 29.06.2013, 11:02   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

т.е. Вы 11 дней ничего не делали с программой, просто ждали, пока Вам кто-нибудь ответит?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.06.2013, 11:06   #8
keb1
 
Регистрация: 18.06.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
т.е. Вы 11 дней ничего не делали с программой, просто ждали, пока Вам кто-нибудь ответит?!
Безысходнеость.
keb1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
дана матрица Adolfio C# (си шарп) 0 12.12.2012 11:33
Дана матрица А(3,5) Antihrist999 Общие вопросы C/C++ 4 09.12.2012 20:50
Дана матрица LORD90 Помощь студентам 8 07.01.2011 16:41
Дана матрица dmdol Паскаль, Turbo Pascal, PascalABC.NET 8 19.12.2010 19:57