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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2007, 20:09   #1
forumu
Пользователь
 
Регистрация: 19.11.2007
Сообщений: 36
Вопрос Проверьте пожалуйста код

Здравствуйте.

Как здесь из одномерного массива получается двумерный?
И почему выводится симпетричная относительно побочной диаггонали матрица?

Спасибо


Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    StringGrid3: TStringGrid;
    Label4: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    ListBox1: TListBox;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label3: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  m:array[0..500]of integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
i,k:integer;
begin
k:=0;
for i:=-100 to 400 do begin
 m[k]:=i;
 k:=k+1;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
StringGrid1.ColCount:=StrToInt(Edit1.text);
StringGrid1.RowCount:=StringGrid1.ColCount;
for i:=0 to StringGrid1.rowCount-1 do begin
  for j:=0 to StringGrid1.colCount-1 do begin
    if i<strtoint(edit1.Text)-j-1 then begin
     StringGrid1.Cells[j,i]:=inttostr(m[random(500)]);
     StringGrid1.Cells[StringGrid1.colCount-1-j,StringGrid1.rowCount-1-i]:= StringGrid1.Cells[j,i];
    end;
    if i=strtoint(edit1.Text)-j-1 then
      StringGrid1.Cells[j,i]:=inttostr(m[random(500)]);
  end;
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
label
1;
var
h:array of string;
l:string;
k,i,j,n:integer;
begin
ListBox1.Items.Clear;
edit3.Text:='';
k:=0;
for i:=0 to StringGrid1.rowCount-1 do begin
  for j:=0 to StringGrid1.colCount-1 do begin
    if (StringGrid1.Cells[StringGrid1.colCount-1-j,StringGrid1.rowCount-1-i]<>
       StringGrid1.Cells[j,i])and(i<>strtoint(edit1.Text)-j-1)then
    begin
       k:=1;
       ListBox1.Items.Add('['+inttostr(j)+','+inttostr(i)+']');
    end;
  end;
end;
if k<>0 then
edit2.text:='Матрица не симметрична'
else
edit2.text:='Матрица симметрична';

setlength(h,strtoint(edit4.text));
for i:=0 to strtoint(edit4.text)-1 do begin
h[i]:=inttostr(random(100));
edit3.Text:=edit3.Text+h[i]+' '
end;

StringGrid2.rowCount:=strtoint(edit4.text);
StringGrid2.colCount:=strtoint(edit4.text);
for i:=0 to StringGrid2.colCount-1 do begin
  for j:=0 to StringGrid2.rowCount-1 do begin
    StringGrid2.Cells[i,j]:=floattostr( exp((j+1)*ln(strtoint(h[i]))) );//inttostr(strtoint(StringGrid2.Cells[j,i-1])*strtoint(h[j]));
  end;
end;          //Сформировать массив

StringGrid3.rowCount:=strtoint(edit4.text);
StringGrid3.colCount:=strtoint(edit4.text);
for i:=0 to (StringGrid2.rowCount-1)div 2 do begin
  for j:=0 to StringGrid2.colCount-1 do begin
     StringGrid3.Cells[j,i]:=StringGrid2.Cells[j,StringGrid2.rowCount-i-1];
     StringGrid3.Cells[j,StringGrid2.rowCount-i-1]:=StringGrid2.Cells[j,i];
  end;
end;   //Отразить относительно горизонтальной оси


end;

end.
forumu вне форума Ответить с цитированием
Старый 27.12.2007, 21:49   #2
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Код немного сложноват для чтения.
В процедуре FormCreate цикл можно сделать и попроще
for i:=0 to 500 do m[i]:=i-100;

А еще там где используется генератор нужно писать не m[random(500)], а m[random(501)], а то 500-й элемент никогда там не будет использован.
Jeni вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверьте на правильность плиз Agent[PNZ] Помощь студентам 3 11.06.2014 19:50
Проверьте задачку {StaN} Паскаль, Turbo Pascal, PascalABC.NET 3 04.07.2008 13:20
Проверьте код ! Михаил Юрьевич Общие вопросы Delphi 7 08.02.2008 09:32
Проверьте пожалуйста текст программы Dim@ Помощь студентам 1 26.12.2007 19:53
Проверьте ошибки пожалуйста в задачах. velgelmina Помощь студентам 3 09.06.2007 22:10