Форум: "Начинающим";
Текущий архив: 2012.03.11;
Скачать: [xml.tar.bz2];
ВнизПомогите с несложной программой пожалуйста))) Найти похожие ветки
← →
vit196sh © (2011-11-30 03:13) [0]program Project1;
{$APPTYPE CONSOLE}
type tst=array[1..100]of string[15];
procedure word(st:string;var k:Byte; b:tst);
var i:Byte;a:array[1..100]of string[15];
begin
st:=st+" ";k:=1;
a[1]:="0";
a[2]:="1";
a[3]:="2";
a[4]:="3";
a[5]:="4";
a[6]:="5";
a[7]:="6";
a[8]:="7";
a[9]:="8";
a[10]:="9";
while Length(st)>0 do
begin
if Pos(" ",st)=1 then Delete(st,1,1);
for i:=1 to 10 do
if st[1]=a[i] then begin
b[k]:=Copy(st,1,Pos(" ",st)-1);k:=k+1;
end;
Delete(st,1,Pos(" ",st)-1);
end;
end;
var a:tst;
st:string;k,i:Byte;
BEGIN
k:=1;
Writeln("insert yous text");readln(st);Writeln(st);
word(st,k,a);
for i:=1 to k do
Writeln(a[i]);
Readln;
END.
прога должна переписать числа из текста в отдельный массив ,когда компилирую выдает ошибку runtime error 216 at 00404230 .Я никак не могу понять что не так .Помогите пожалуйста))))
← →
KilkennyCat © (2011-11-30 04:23) [1]
> a[1]:="0";
> a[2]:="1";
> a[3]:="2";
> a[4]:="3";
> a[5]:="4";
> a[6]:="5";
> a[7]:="6";
> a[8]:="7";
> a[9]:="8";
> a[10]:="9";
жуть
procedure word(st:string;var k:Byte; b:tst);
var
i : Byte;
tempStr : String;
begin
i := 1;
tempStr := "";
while Length(st) > 0 do begin
if st[i] in ["0".."9"] then tempStr := tempStr + st[i] else begin
b[k] := tempStr;
tempStr := "";
inc(k);
end;
end;
и вообще логичнее использовать динамический массив, ибо тут неизвестно количество элементов.
← →
KilkennyCat © (2011-11-30 04:25) [2]ошибся.
procedure word(st:string;var k:Byte; b:tst);
var
i : Byte;
tempStr : String;
begin
i := 1;
tempStr := "";
while k >= Length(st) do begin
if st[i] in ["0".."9"] then tempStr := tempStr + st[i] else begin
b[k] := tempStr;
tempStr := "";
end;
inc(k);
end;
← →
KilkennyCat © (2011-11-30 04:33) [3]:) че-то я туплю.
procedure word(st:string;var k:Byte; b:tst);
var
i : Byte;
tempStr : String;
begin
i := 1;
tempStr := "";
while i <= Length(st) do begin
if st[i] in ["0".."9"] then tempStr := tempStr + st[i] else begin
b[k] := tempStr;
tempStr := "";
inc(k);
end;
inc(i);
end;
наверное, все равнго накосячил, пофиг, спать пора.
← →
Германн © (2011-11-30 06:25) [4]
> когда компилирую выдает ошибку runtime error 216 at 00404230
Не ври. При компиляции такой ошибки не бывает.
Ну а код просто "ужас, летящий на крыльях ночи"! :)
← →
Ega23 © (2011-11-30 08:00) [5]
unit Unit12;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Generics.Collections, StdCtrls;
type
TNumericalData = class (TObject)
private
FData: TList<Integer>;
procedure AddToken(var Token: string); inline;
public
constructor Create;
destructor Destroy; override;
procedure Execute(const Value: string);
property Data: TList<Integer> read FData;
end;
TForm12 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form12: TForm12;
implementation
{$R *.dfm}
{ TNumericalData }
//*****************************************************************************
procedure TNumericalData.AddToken(var Token: string);
var
i: Integer;
begin
if TryStrToInt(Token, i) then
if FData.IndexOf(i) = -1 then
FData.Add(i);
Token := "";
end;
//*****************************************************************************
constructor TNumericalData.Create;
begin
inherited;
FData := TList<Integer>.Create;
end;
//*****************************************************************************
destructor TNumericalData.Destroy;
begin
FData.Free;
inherited;
end;
//*****************************************************************************
procedure TNumericalData.Execute(const Value: string);
var
i: Integer;
aToken: string;
begin
FData.Clear;
aToken := "";
for i := 1 to Length(Value) do
if Value[i] in ["0".."9"] then
aToken := aToken + Value[i]
else
AddToken(aToken);
AddToken(aToken);
end;
//*****************************************************************************
{TForm12}
//*****************************************************************************
procedure TForm12.Button1Click(Sender: TObject);
var
i: Integer;
begin
Memo1.Clear;
with TNumericalData.Create do
try
Execute(Edit1.Text);
for i := 0 to Data.Count - 1 do
Memo1.Lines.Add(IntToStr(Data[i]));
finally
Free;
end;
end;
//*****************************************************************************
end.
← →
Jeer © (2011-11-30 09:30) [6]
> Ega23 © (30.11.11 08:00) [5]
Теперь аффтар сюда долго не зайдет :)
← →
Dennis I. Komarov © (2011-11-30 09:32) [7]
> FData: TList<Integer>;
Я понимаю, что я из каменного, но это что за конструкция? В чем отличия от обычного TList?
← →
Jeer © (2011-11-30 09:51) [8]Дженерики ( обобщения ).
Обычный TList - список указателей.
Обобщения позволяют создавать список оговоренного типа данных.
В данном случае - список integer ( аля дин. массив ).
← →
Ega23 © (2011-11-30 10:37) [9]
> В чем отличия от обычного TList?
http://www.tdelphiblog.com/2009/07/generics-delphi-2009-win32-1.html
> В данном случае - список integer ( аля дин. массив ).
Собственно, это и есть дин.массив, просто он в привате сидит и реаллок несколько иначе реализован.
← →
Jeer © (2011-11-30 11:58) [10]
> Собственно, это и есть дин.массив, просто он в привате сидит
> и реаллок несколько иначе реализован.
>
Да.
+ медленнее за счет более "жадного" алгоритма реаллока.
← →
Ega23 © (2011-11-30 12:05) [11]
> + медленнее за счет более "жадного" алгоритма реаллока.
Наоборот, быстрее. Прирост размера 25% сразу. Но - по одному разу, а не на каждой итерации SetLength делать.
← →
Dennis I. Komarov © (2011-11-30 12:06) [12]Спасиб, сейчас накачу update в мозг... :)
← →
Jeer © (2011-11-30 12:59) [13]
> Ega23 © (30.11.11 12:05) [11]
Я о дженерике, а не стандартном TList.
TList быстрее, чем TList<T>
← →
Jeer © (2011-11-30 13:01) [14]Кроме того, дженерик, поскольку использует дин. массив, вынужден устраивать "зачистку" после изменения длины, что - время.
← →
Ega23 © (2011-11-30 13:15) [15]
> Кроме того, дженерик, поскольку использует дин. массив,
> вынужден устраивать "зачистку" после изменения длины, что
> - время.
А TList, блин, не использует дин.массив, да?
> TList быстрее, чем TList<T>
Смотря в чём. Смотря где. Смотря как.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.03.11;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c