![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Запутался с синтаксисом не могу осилить, может кто подсказать?
Код:
type link=^elem;
elem=record
val:integer;
val1:string;
next:link
end;
var
L:link;
Form1: TForm1;
implementation
{$R *.dfm}
-------------------------
procedure TForm1.Button10Click(Sender: TObject);
var p,q:link;
f:textfile;
begin
assignfile(f,'File2.txt');
reset(f);
new(L);
readln(f,L.val1);
p:=L;
While not EOF(f) do
begin
new(q);
readln(f,q.val1);
p.next:=q;
p:=q;
end;
p.next:=nil;
CloseFile(f);
ShowMessage('Очередь создана');
end;
procedure TForm1.Button11Click(Sender: TObject);
var p:link;
begin
Label8.Caption:='';
p:=L;
While p<>nil do
begin
Label8.Caption:=Label8.Caption+p.val1+' '+#13;
p:=p.next;
end;
end;
---Вся проблема здесь---
procedure TForm1.Button12Click(Sender: TObject);
var z,q:link;
n,i:integer;
begin
z:=L.next; L.next:=z.next; dispose(z)
end;
end.Удаление сделал, но только следующего элемента в очереди, а надо что бы удаляла запращиваемый, например в LabeledEdit ввёл 4 он удалил 4-й элемент из очереди... Пробовал по разному в итоге либо прога висла, либо не шагала до N-го элемента, либо в ошибку вылетала...запутался уже с ними... Может кто с этим знаком подскажите куда копать и как синтаксис представить. Пробовал с While - очень всё плохо, c For - что-то етсь, но ошибко-ошибко! Последний раз редактировалось Admin, 09.05.2010 в 17:28. |
|
#2
|
||||
|
||||
|
ну работать не будет, изначально ошибка ибо запись(record) при сохранение и чтении файл должны быть статической длины, а у тебя string, в следствии чего сохраняется и загружается указатель, а не текст. да и тип textfile не подходит для записей.
|
|
#3
|
|||
|
|||
|
Эм!О_о
если сделать эту кнопку: ---Вся проблема здесь--- Код:
procedure TForm1.Button12Click(Sender: TObject); var z,q:link; n,i:integer; begin z:=L.next; L.next:=z.next; dispose(z) end; Не получается организовать это с вводом номера элемента, пример: вот список: -------- wer sdf sdg asdf xcv --------- 5-ть элементов, вводим 3, удаляется "sdg" Не получается сделать цикл и заставить правильно прошагать...( |
|
#4
|
||||
|
||||
|
да и next:link - это в принципе не имеет постоянный адрес так как является указателем.
|
|
#5
|
|||
|
|||
|
Цитата:
Код:
z:=L.next; For i:=1 to n-1 do begin L.next:=z.next; end; ShowMessage(z.val1); И как мне сделать то с этим удалением...требуют по учёбе... |
|
#6
|
|||
|
|||
|
А что ты хочешь-то сделать? словами напиши...
|
|
#7
|
||||
|
||||
|
ну так я что то тормознул, забудь что выше писал
![]() сохрани указатель на первый элемент и от него считай |
|
#8
|
|||
|
|||
|
Хочу из создаваемой очереди удалить элемент, который я укажываю методм ввода, т.е. ввожу 6 удаляется из созданого списка 6-ой элемент, ввожу 4 удаляется 4-й элемент в списке:
Для этого у меня есть файл в нём забиты уже 10 элементов, он считывается и отображается, затем ввожу номер элемента, который желаю удалить он удаляется. Простейший способ это по указателю: z:=L.next; L.next:=z.next; dispose(z) - здемь кдалится следующий элемент в списке, т.е. 2-ой Таким образом: "z:=L.next.next.next; L.next.next.next:=z.next;" удалится 3-ий элемент в списке... |
|
#9
|
|||
|
|||
|
Цитата:
|
|
#10
|
||||
|
||||
|
вроде так, без проверка на nil:
Код:
procedure TForm1.Button3Click(Sender: TObject);
var z,q:link;
n,i:integer;
begin
n := 4; //уделяем 4 элимент
if n = 1 then
begin
q := l;
l := l.next;
dispose(q);
end
else
begin
z := l;
for i := 1 to n - 2 do
z := z.next;
q := z.next;
z.next := q.next;
dispose(q);
end;
end; |
|
#11
|
|||
|
|||
|
urahara. Благодарю! Адаптировал под свои условия робит! То что надо!
Ещё раз благодарю! Сейчас сяду вникать в код! Потом надо будет его переделать, а то преподы ведь любят с подковыряться к условию и спросить что-нить эдакое))! Не зря прошёл на ваш форум. ![]() Рад буду сотрудничать в дальнейшем...))))) |
|
#12
|
|||
|
|||
|
-------------------------------
z := L; n:=StrToInt(LabeledEdit4.Text); for i := 1 to n-2 do begin z := z.next; q := z.next; end; z.next := q.next; dispose(q); -------------------------------- Вот, упростил до этого действия и работает именно так ак задано у меня условие в задании...теперь вижу что не атк использовал переменную "q" Благодарю! Сейчас попробую с проверкой на nil пошаманить) |
|
#13
|
||||
|
||||
|
не правильно, ты так не сможешь удалить первый элемент.
|
|
#14
|
|||
|
|||
|
Уже увидел! Сейчас переделываю)))! Ошибко повесила даже Delphi!))
|