Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 15.02.2016
Сообщений: 1

Не получается перебор в обратном направлении

15.02.2016, 23:26. Показов 2286. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разработать программу для реализации основных действий с двунаправленным динамическим списком:
• проход по списку в ПРЯМОМ и ОБРАТНОМ направлении с выводом на экран информационных частей элементов
• поиск элемента в ОБРАТНОМ направлении с заданной информационной частью
• добавление нового элемента ПЕРЕД заданным
• удаление заданного элемента.

Код программы:
Delphi
1
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
 //Тип основных данных списка.
  TData = Integer;
  //Тип указателя на элемент списка.
  TPElem = ^TElem;
  //Тип элемента списка.
  TElem = record
    Data : TData; //основные данные.
    PNext, PPrev : TPElem; //Указатели на следующий и предыдущие элементы.
  end;
  //тип описывающий список.
  TDList = record
    PFirst, PLast : TPElem; //указатели на первый и последний элементы списка.
  end;
 
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
//Инициализация списка. Внимание ! Эту процедуру можно выполнять только
//в отношении пустого списка. Иначе - будут утечки.
procedure Init(var aList : TDList);
begin
  aList.PFirst := nil;
  aList.PLast := nil;
end;
// Перебор элементов в прямом направлении
function priamo(const aList : TDList) : String;
var
  PElem : TPElem;
  i : Integer;
begin
  Result := '';
  if aList.PFirst = nil then begin
    Result := 'Список пуст.';
    Exit;
  end;
 
  PElem := aList.PFirst;
  i := 0;
  while PElem <> nil do begin
    Inc(i);
    if i > 1 then Result := Result + ', ';
    Result := Result + IntToStr(PElem^.Data);
    PElem := PElem^.PNext;
  end;
end;
// Перебор элементов в обратном направлении
function obr(const aList : TDList) : String;
var
  PElem : TPElem;
  i : Integer;
begin
  Result := '';
  if aList.PFirst = nil then begin
    Result := 'Список пуст.';
    Exit;
  end;
 
  PElem := aList.PLast;
while  PElem <> nil do begin
   Result := Result + ', ';
   Result := Result + IntToStr(PElem^.Data);
    PElem := PElem^.PPrev;
end;
end;
 
//Добавление элемента в конец двунаправленного списка.
procedure Add(var aList : TDList; const aData : TData);
var
  PElem : TPElem;
begin
  New(PElem);
  PElem^.Data := aData;
  PElem^.PNext := nil;
  PElem^.PPrev := nil;
  if aList.PFirst = nil then
    aList.PFirst := PElem
  else begin
    aList.PLast^.PNext := PElem;
    PElem^.PPrev := aList.PLast;
  end;
  aList.PLast := PElem;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  L : TDList;
  PElem, PTmp : TPElem;
  i, Sum1, Sum2 : Integer;
  S : String;
begin
  //Начальная инициализация.
  Init(L);
 
  //Читаем числа из Мемо и добавляем их в список.
  //Предполагается, что каждое число в Мемо расположено на отдельной строке.
  for i := 0 to Memo1.Lines.Count - 1 do begin
    S := Memo1.Lines[i];
    if S <> '' then Add(L, StrToIntDef(S, 0));
  end;
  Memo2.Lines.Add('Список в прямом направлении:');
  Memo2.Lines.Add(priamo(L));
 end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
var
  L : TDList;
  PElem, PTmp : TPElem;
  i, Sum1, Sum2 : Integer;
  S : String;
begin
  Memo2.Lines.Add('Список в обратном направлении:');
  Memo2.Lines.Add(obr(L));
end;
 
end.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.02.2016, 23:26
Ответы с готовыми решениями:

Сортировка в обратном направлении
Всем привет! Такой вопрос. Есть кусок кода, в нем нужно изменить сортировку. Но я всё никак не могу понять как это сделать. Нахожу...

Цикл for в обратном направлении
Здравствуйте. Нужно сделать так, что бы цикл шел в обратном порядке. У меня получается бесконечный цикл. Что не так? #include...

Цикл в обратном направлении
Можно ли в VBA сделать обратный цикл(что бы считал наоборот). На паскале он реализуется вот так. for k:=6 downto 1 do

1
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
15.02.2016, 23:31
Цитата Сообщение от Rubi Посмотреть сообщение
Memo2.Lines.Add('Список в обратном направлении:');
* Memo2.Lines.Add(obr(L));
а заполнять список L кто будет - Пушкин? У тебя же переменная L ничем не заполнена!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.02.2016, 23:31
Помогаю со студенческими работами здесь

Считывает двойками в обратном направлении до 1
Добрый День!!!Вот код программы которая считывает от 1 до 6 и также в обратном порядке от 6 до 1. Но вот столкнулся с такой проблемой не...

Прочитать число в обратном направлении
Работа со стеком. Число состоит из 5 цифр. Прочитать число в обратном направлении. Program Queue; uses Crt; type ...

График функции строится в обратном направлении
нужно построить график. координаты построения графика высчитывает правильно. но график DrawCurve строит неправильно, график получатся как...

Записать целочисленные массивы в обратном направлении
даны целые массивные числа нужно их написать в обратном направлений...

Вывести текст файла в обратном направлении
Пожалуйста помогите с решением. Создать файл с текстовой строкой. Прочитать файл и вывести текст в обратном направлении. С++


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru