Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите подправить программу!!!

80K
17 февраля 2012 года
rch
1 / / 17.02.2012
Вот условия задачи
Подсчитать количество элементов двусвязного списка L, у которого равные «соседи».
я написал программу
Код Delphi1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
unit Spis1;

interface

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

type
Telem = integer;
uk=^rec;
rec = record
info : Telem;{ Елемент строки L}
niz, pred : uk { указатель на следующую запись}
end;

TForm1 = class(TForm)
GridL: TStringGrid;
txtNL: TStaticText;
EdNL: TEdit;
txtL: TStaticText;
btnNL: TButton;
txtE: TStaticText;
edtE: TEdit;
btnOK: TButton;
txtNE: TStaticText;
edtNE: TEdit;
MainMenu1: TMainMenu;
UpDown1: TUpDown;
N1: TMenuItem;
N2: TMenuItem;
procedure btnNLClick(Sender: TObject);
procedure dobavka(var GridL:TStringGrid);
procedure btnOKClick(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure EdNLChange(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;



var
Form1: TForm1;
NL,i,kol:Integer;
tek1,tek2,tek,nach,prez : uk; {указатели на текущую, предыдущую, первую, рабочую записи}

implementation

uses Unit1;

{$R *.dfm}

procedure TForm1.btnNLClick(Sender: TObject);
begin
NL:=strtoint(EdNL.text);
GridL.ColCount:=NL;

GridL.Visible:=True;
btnOK.Enabled:=True;
end;

procedure TForm1.dobavka(var GridL: TStringGrid);
var i:Integer;
{begin
new (tek); {выделение памяти}
{tek^.info:=GridL.Cells[0,1];
tek^.niz := nil; {следующей записи пока нет}
//prez:=tek;
{nach:=tek;
prez:=nach;
for i:=1 to GridL.ColCount do
begin
New(tek^.niz);
tek:=tek^.niz;
tek^.niz:=nil;
tek^.info:=GridL.Cells[i,1];
end;
end;}
begin
for i:=0 to GridL.ColCount-1 do
begin
new(tek);
tek^.info:=strtoint(GridL.Cells[i,1]);
tek^.niz := nil;
if nach = nil then begin
nach:=tek;
prez:=nach;
end
else begin
prez^.niz:=tek;
prez:=prez^.niz;
end;
end;
end;
procedure TForm1.btnOKClick(Sender: TObject);

begin
dobavka(gridL);
i:=0;
nach:=nach^.niz;
while nach<>nil do
begin
tek1:=nach;
tek2:=nach;
tek1:=tek1^.pred;
tek2:=tek2^.niz;
if (tek1^.info) = (tek2^.info) then
i:=i+1;
nach:=nach^.niz;

end;

edtNE.Text:=IntToStr(i) ;


end;

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

procedure TForm1.N1Click(Sender: TObject);
begin
AboutBox.ShowModal;
end;

procedure TForm1.EdNLChange(Sender: TObject);
var n:integer;
begin
n:=strtoint(edNL.Text);
GridL.ColCount:=n;
for i:= 0 to strtoint(edNL.text) do begin
GridL.Cells[i,0]:='№коэф-та'+inttostr(i+1);
end;
end;
end.
у меня возникает ошибка вот в этой части кода
procedure TForm1.btnOKClick(Sender: TObject);

begin
dobavka(gridL);
i:=0;
nach:=nach^.niz;
while nach<>nil do
begin
tek1:=nach;
tek2:=nach;
tek1:=tek1^.pred;
tek2:=tek2^.niz;
if (tek1^.info) = (tek2^.info) then
i:=i+1;
nach:=nach^.niz;

end;


edtNE.Text:=IntToStr(i) ;
а именно в этой строке
if (tek1^.info) = (tek2^.info) then
помогите разобраться в чем ошибка и как ее исправить???
402
12 мая 2012 года
ToRNaDo
70 / / 27.01.2004
tek1:=tek1^.pred;
tek2:=tek2^.niz;

Думаю, надо бы проверять, что там вообще не nil, а что то есть.

Какая ошибка то? Access Violation?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог