![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; procedure Delaem(var v: array of char;i:integer); var Form1: TForm1; v: array of char; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin i:=StrToInt(Edit1.Text); SetLength(v,i); Delaem(v,i); end; procedure Delaem(var v: array of char;i:integer); var j:integer; begin for j:=0 to i do v[j]:=char(j+10); end; end. выдает ошибку [Error] Unit1.pas(35): Incompatible types: 'Array' and 'dynamic array' что нужно исправить? |
#2
|
||||
|
||||
![]() Попробуй так.
Код:
unit Unit1; interface ... type ... DynCharArray: array of char; procedure Delaem(var v: DynCharArray; i:integer); var Form1: TForm1; v: DynCharArray; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin i:=StrToInt(Edit1.Text); SetLength(v,i); Delaem(v,i); end; procedure Delaem(var v: DynCharArray; i:integer); var j:integer; begin for j:=0 to i -1 do v[j]:=char(j+10); end; end. Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#3
|
|||
|
|||
![]() спасибо. А вот еще проблема
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type aoc = array of char; procedure Delaem(var v: aoc;i:integer); var Form1: TForm1; v: aoc; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin i:=StrToInt(Edit1.Text); SetLength(v,i); Delaem(v,i); end; procedure Delaem(var v: aoc;i:integer); var j,LocUkazatel:integer; metka: string; BufStr: string; begin metka:= chr(33)+chr(34)+chr(35); for j:=0 to i-1 do v[j]:=char(j+30); LocUkazatel:= pos(metka, v); BufStr:=Copy(v,LocUkazatel+3,2); end; end. выдает ошибки [Error] Unit1.pas(47): Incompatible types [Error] Unit1.pas(48): Incompatible types: 'String' and 'aoc' как их убрать? |
#4
|
||||
|
||||
![]() Код:
LocUkazatel:= pos(metka, string(v)); BufStr:=Copy(string(v),LocUkazatel+3,2); ![]() Помогаю за Спасибо ![]() |
#5
|
|||
|
|||
![]() в данной программе, которую я привел для примера, в принципе работает. Но в реальной проге если так записывать вылетает ошибка о неправильном доступе к памяти
|
#6
|
||||
|
||||
![]() Это, скорее всего, из-за того, что вы забыли про нолик на конце строки.
И зачем придумывать свой велосипед, когда есть PChar и String? Код:
procedure TForm1.Button1Click(Sender: TObject); var i:integer; v2: PChar; begin i:=StrToInt(Edit1.Text); GetMem(v2, i+1); ZeroMemory(v2, i+1); Delaem(v2, i); FreeMem(v2, i+1); //если уже не нужна, то не забываем освободить память end; procedure Delaem(v: PChar; i:integer); const metka = #33#34#35; var j, LocUkazatel: integer; BufStr: string; begin for j:=0 to i-1 do v[j]:= char(j+30); LocUkazatel:= pos(metka, String(v)); BufStr:=Copy(String(v), LocUkazatel+3, 2); end; Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. Последний раз редактировалось Karsh, 06.08.2011 в 13:11. |