![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 18.11.2011
Сообщений: 6
|
![]()
Здравствуйте. Не могу выделить динамическую память под свою программу (два двумерных массива)
Вот код программы unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, math, Buttons; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Button1: TButton; StringGrid1: TStringGrid; Button2: TButton; StringGrid2: TStringGrid; btn1: TBitBtn; Button3: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure Edit2KeyPress(Sender: TObject; var Key: Char); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type TMatr = array[1..1] Of Extended; mas1=^TMatr; SMas= array[1..1] of mas1; mas2=^SMas; var Form1: TForm1; A:mas2; B:mas2; n,m,i,j:Byte; x,r:integer; max,min: extended; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin N:=3; M:=3; edit1.text:= floattostr(n); edit2.text:= floattostr(m); stringGrid1.rowcount:=n+1; stringGrid1.colcount:=m+1; stringGrid2.rowcount:=n+1; stringGrid2.colcount:=2; stringgrid1.cells[0,0]:='Ìàññèâ À:'; stringgrid2.cells[0,0]:='Ìàññèâ Á'; for i:=1 to n do begin stringgrid1.Cells[0,i]:='i='+inttostr(i); stringgrid1.Cells[i,0]:='j='+inttostr(i); stringgrid2.Cells[0,i]:='i='+inttostr(i); end; for i:=1 to m do begin stringgrid2.Cells[i,0]:='j='+inttostr(i); end; end; procedure TForm1.Button1Click(Sender: TObject); begin n:=strtoint(edit1.text); m:=strtoint(edit2.text); If (n=0) or (n>10) Then begin ShowMessage('Íåïðàâèëüíûé ðàçìåð ìàññèâà'); Exit; end; If (m=0) or (n>10) Then begin ShowMessage('Íåïðàâèëüíûé ðàçìåð ìàññèâà'); Exit; end; stringGrid1.rowcount:=n+1; stringGrid1.colcount:=m+1; stringGrid2.rowcount:=n+1; stringGrid2.colcount:=2; for i:=1 to n do stringgrid1.cells[0,i]:='i='+inttostr(i); for i:=1 to m do stringgrid1.cells[i,0]:='j='+inttostr(i); for i:=1 to n do stringgrid2.cells[0,i]:='j='+inttostr(i); end; procedure TForm1.Button2Click(Sender: TObject); begin try GetMem(A,m*SizeOf(Pointer)); for i:=1 to m do GetMem(A^[i],n*SizeOf(Extended)); GetMem(b,m*SizeOf(Pointer)); for i:=1 to m do GetMem(b^[i],n*SizeOf(Extended)); for i:=1 to n do begin for j:=1 to m do begin a^[i]^[j]:=strtofloat(stringgrid1.cells[j,i]); end; end; for i:=1 to n do begin b^[i]^[j]:=0; end; for i:=1 to n do begin x:=0; for j:=1 to (m div 2) do begin if (a^[i]^[j]<>a[i,m-j+1]) then begin x:=1; end; end; if (x=0) then b^[i]^[j]:=1; end; for i:=1 to m do begin StringGrid2.Cells[1,i]:=FloatToStr(b^[i]^[j]); end; except on ERangeError do begin showmessage('Âûõîä çà ïðåäåëû ìàññèâà. Óìåíèøüòå ðàçìåð ìàññèâà'); Exit; end; on EConvertError do begin showmessage(' ÿ÷åéêå îòñóòñâóåò çíà÷åíèå ëèáî ÷èñëî ââåäåíî íåâåðíî'); Exit; end; end; for i:=1 to m do FreeMem(A^[i],n*sizeof(Extended)); FreeMem(A,m*Sizeof(Pointer)); for i:=1 to m do FreeMem(B^[i],n*sizeof(Extended)); FreeMem(B,m*Sizeof(Pointer)); end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin begin If not (Key in ['0'..'9',Chr(VK_BACK)]) then key:=#0; end; end; procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin begin If not (Key in ['0'..'9',Chr(VK_BACK)]) then key:=#0; end; end; procedure TForm1.Button3Click(Sender: TObject); begin for j:=1 to n do Stringgrid1.cells[j,m+1]:=''; Randomize; for i:=1 to n do for j:=1 to m do begin r:=Random(10); StringGrid1.Cells[i,j]:=IntToStr(r); end; for j:=1 to m+1 Do for i:=1 to n Do Stringgrid2.cells[i,j]:=''; end; end. |
![]() |
![]() |
![]() |
#2 |
Регистрация: 18.11.2011
Сообщений: 6
|
![]()
насколько я понимаю ошибка где-то в задании указателя (После "type").
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 09.06.2011
Сообщений: 388
|
![]()
используйте динамические массивы ...
Код:
на неконкретные вопросы даю неконкретные ответы ...
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 18.11.2011
Сообщений: 6
|
![]()
я уже пробовал оформлять через setlenght , но преподаватель говорит , что такому нас не учил и что все должны оформлять через GetMem и указатели. Мне бы найти ошибку в ЭТОМ коде. Но все-равно спасибо... Буду дальше разбираться..
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 09.06.2011
Сообщений: 388
|
![]()
просмотрел только Button2Click - вы просто запутались в размерностях ...
Код:
Код:
![]()
на неконкретные вопросы даю неконкретные ответы ...
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 18.11.2011
Сообщений: 6
|
![]()
хммм( не совсем понятно. Осмелюсь спросить : А можно готовый вариант уже? я просто совсем уж никак не врубаюсь, что тут делать.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Динамическая память | vladxxl | Общие вопросы C/C++ | 0 | 25.04.2011 20:04 |
Клаасы, массив, динамическая память | vladxxl | Общие вопросы C/C++ | 1 | 23.03.2011 23:19 |
Динамическая память | I.C.E | Общие вопросы C/C++ | 15 | 16.01.2011 19:27 |
Динамическая память | zhenya.ya | Помощь студентам | 1 | 22.09.2010 08:43 |
динамическая память | aka_faith | Общие вопросы C/C++ | 47 | 12.06.2009 12:35 |