Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Delphi Процесс на одно ядро добрый день. свой вопрос я задавал на другой ветке немного в другой интерпретации, прошу не считать это дублированием, уважаемые модераторы. суть в следующем. можно ли запустить чужую программу так, чтобы ее процесс работал только на одном ядре? у меня Виндовс 7 32 бит + двухъядерный проц. совет "зайди в диспетчер, задай соответствие" просьба не постить. я в курсе. https://www.cyberforum.ru/ delphi/ thread897324.html Delphi Подбор и запоминание ответов
В общем, смысл програмки таков: ты вводишь в эдит любые предложения по-очереди, они запоминаются программой. После этого ты начинаешь вводить обрывки предложениях и долнжы высвечиваться продолжения этих самых предложений. (Что-то вроде продолжения строки, как в поисковиках). Собственно, сами вопросы: Подойдет ли компонент ListBox для самовыпадающего меню? (Нет ли более удобной альтернативы?);...
Delphi ошибка при вызове метода объекта Здравствуйте, ребят, у меня тут вот какое дело - программа запускается, я в ней работаю, дохожу до определенного места и у меня вылетает эта заезженная ошибка "Project Project1.exe raised class EAccessViolation with message 'Access violation at address 004747AB in module 'Project1.exe'. Write of address 00000000'. Process stopped. Use Step or Run to contine.", но вот вылетает она на самом... https://www.cyberforum.ru/ delphi/ thread896922.html Delphi вертикальный текст в Label, как его сделать? https://www.cyberforum.ru/ delphi/ thread896397.html
Здравствуйте, потребовалось сделать вертикальный текст на форме, погуглила, нашла что-то про RzLabel, что это вообще? И не могли бы вы мне подсказать способы чтобы сделать текст в компоненте Label вертикальным?
Delphi Edit Обращение к символу
Всем привет, как мне обратится к отдельно символу в edit'e например что бы заменить его?
Delphi Программа-игра «Болото и лягушка» https://www.cyberforum.ru/ delphi/ thread895893.html
Описание: Дано поле NxM клеток (размеры задаются произвольно) - участки болота. Некоторые клетки - кочки (их местоположение определяется при помощи генератора случайных чисел). На одной из кочек сидит лягушка (ею будет управлять игрок, указывая мышью место, куда она будет прыгать). Над одной из клеток летает комар (он управляется программой). Первый ход за лягушкой - она может прыгать с кочки на...
Delphi Обращение к объекту процедуры в процедуре https://www.cyberforum.ru/ delphi/ thread895645.html
Здравствуйте, я динамически создаю массив с Timage компонентами. Для каждого создаю процедуру клика на объект мышью. Как мне в процедуре обратиться к тому изображению в массиве на которое кликнули мышью?
Значение синуса используя семь членов разложение функции в ряд delphi Delphi
Вычислить значение синуса используя семь членов разложение функции в ряд Помогите пожалуйста, нужно само вычисление на delphi
Delphi дейкстра https://www.cyberforum.ru/ delphi/ thread895475.html
помогите сделать программу по этому коду очень надо плохо знаю делфи unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Buttons, ExtCtrls, StdCtrls, XPMan, Menus;
Delphi Как преобразовать формулу введенную в Edit типа String в решаемую формулу https://www.cyberforum.ru/ delphi/ thread895141.html
название не совсем корректное, но САБЖ вот в чем: в Edit вводится целевая функция (f=-x1^2-x2^2), из которой нужно найти частные производные. нахождение производных я реализовал, но проблема в том что производная записана в типе String, а ее нужно в дальнейшем подставить в основную формулу. подскажите, пожалуйста, как это можно реализовать PS без прикрутки MathCad или MathLab
Работа с прокси-серверами Delphi
Здравствуйте, я не очень силён в программировании. Пожалуйста, напишите программу. Это будет накрутчик Deposit_Files. В главном окне программы должно быть поле для ввода(Ссылка на файл). И кнопочка "Начать". При нажатии на кнопку "Начать" программа делает своё окно скрытым, помещается в автозагрузку и сохраняет ссылку в файл. При каждом следующем запуске программа автоматом начинает скачивание....
Delphi написать программу на встороенном языке ассемблер позволяюшую задать значение n-го бита для 8 и 16 битных переменных https://www.cyberforum.ru/ delphi/ thread895103.html
написать программу на встороенном языке ассемблер позволяюшую задать значение n-го бита для 8 и 16 битных переменных
13097 / 5878 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
10.06.2013, 22:17 0

Нуждаюсь в написании программы. Линейные списки - Delphi - Ответ 4701600

10.06.2013, 22:17. Показов 1347. Ответов 1
Метки (Все метки)

Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Kertas Посмотреть сообщение
Запись содержит фамилию ученика и 2 оценки. Удалить из списка всех учеников с неудовлетворительными оценками.
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Windows;
 
const
  M = 2;
type
  {Массив с оценками.}
  TArrEst = array[1..M] of Integer;
  {Тип основных данных списка.}
  TData = record
    Fio : String;     {ФИО ученика.}
    ArrEst : TArrEst; {Массив с оценками}
  end;
  {Тип указателя на элемент списка.}
  TPElem = ^TElem;
  {Тип элемента списка.}
  TElem = record
    Data : TData;   {Основные данные элемента.}
    PNext : TPElem; {Указатель на следующий элемент списка.}
  end;
  {Тип, описывающий однонаправленный список.}
  TDList = record
    Cnt : Integer;          {Количество элементов в списке.}
    PFirst, PLast : TPElem; {Указатели на первый и последний элементы списка.}
  end;
 
{Инициализация списка. Внимание! Эту процедуру можно выполнять только
в отношении пустого списка. Иначе - будут утечки памяти.}
procedure Init(var aList : TDList);
begin
  aList.Cnt := 0;
  aList.PFirst := nil;
  aList.PLast := nil;
end;
 
{Добавление элемента в конец однонаправленного списка.}
procedure Add(var aList : TDList; const aData : TData);
var
  PElem : TPElem;
begin
  New(PElem);
  PElem^.Data := aData;
  PElem^.PNext := nil;
  if aList.PFirst = nil then
    aList.PFirst := PElem
  else
    aList.PLast^.PNext := PElem;
  aList.PLast := PElem;
  Inc(aList.Cnt);
end;
 
{Освобождение памяти, занятой под список и инициализация списка.}
procedure LFree(var aList : TDList);
var
  PNext, PDel : TPElem;
begin
  PNext := aList.PFirst;
  while PNext <> nil do begin
    PDel := PNext;
    PNext := PNext^.PNext;
    Dispose(PDel);
  end;
  Init(aList);
end;
 
{Распечатка однонаправленного списка.}
procedure LWriteln(const aList : TDList);
var
  PElem : TPElem;
  i : Integer;
begin
  if aList.PFirst = nil then begin
    Writeln('Список пуст.');
    Exit;
  end;
 
  PElem := aList.PFirst;
  while PElem <> nil do begin
    {ФИО ученика.}
    Write(PElem^.Data.Fio, '. Оценки: ');
    {Оценки ученика.}
    for i := 1 to High(PElem^.Data.ArrEst) do
      Write(PElem^.Data.ArrEst[i], ' ');
    Writeln;
    {Получаем указатель на следующий элемент списка.}
    PElem := PElem^.PNext;
  end;
end;
 
{Удаление из списка тех записей, которые содержат оценки меньше заданной.
Функция возвращает количество удалённых записей.}
function Del(var aList : TDList; const aEst : Integer) : Integer;
var
  PElem, PPrev, PDel : TPElem;
  i : Integer;
  MustDel : Boolean;
begin
  Result := 0;
  PPrev := nil;          {Указатель на предыдущий элемент.}
  PElem := aList.PFirst; {Указатель на текущий элемент.}
  while PElem <> nil do begin
    {Проверяем, есть ли хотябы одна оценка меньше заданной.}
    MustDel := False;
    for i := 1 to High(PElem^.Data.ArrEst) do
      if PElem^.Data.ArrEst[i] < aEst then begin
        MustDel := True;
        Break;
      end;
    {Если была обнаружена оценка меньше заданной, то выполняем удаление элемента.}
    if MustDel then begin
      PDel := PElem;         {Указатель на удаляемый элемент.}
      PElem := PElem^.PNext; {Указатель на следующий элемент списка.}
      {Если удаляемый элемент является первым элементом в списке.}
      if PDel = aList.PFirst then
        aList.PFirst := PElem
      {Если удаляемый элемент не является первым элементом в списке.}
      else
        PPrev^.PNext := PElem;
      {Если удаляемый элемент является последним элементом в списке.}
      if PDel = aList.PLast then
        aList.PLast := PPrev;
      {Освобождаем память, выделенную для элемента.}
      Dispose(PDel);
      Dec(aList.Cnt); {Количество элементов в списке теперь стало на 1 меньше.}
      Inc(Result);    {Количество удалённых элементов стало на 1 больше.}
    end else begin
      {Переходим к следующему элементу.}
      PPrev := PElem;
      PElem := PElem^.PNext;
    end;
  end;
end;
 
var
  L : TDList;
  Data : TData;
  i, Code : Integer;
  S : String;
begin
  {Переключение окна консоли на кодовую страницу CP1251 (Win-1251).
  Если после переключения русские буквы показываются неверно,
  следует открыть системное меню консольного окна - щелчком мыши в левом
  верхнем углу окна консоли и выбрать:
  Свойства - закладка "Шрифт" - выбрать шрифт: "Lucida Console".}
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  {Начальная инициализация списка.}
  Init(L);
 
  repeat
    {Добавление элементов в список.}
    Writeln('Добавление элементов в список.');
    Writeln('Прекратить ввод - оставить в поле ФИО пустую строку и нажать Enter.');
    repeat
      Writeln('Элемент ', L.Cnt + 1, '.');
      Write('ФИО: ');
      Readln(S);
      if S <> '' then begin
        Data.Fio := S;
        for i := 1 to High(Data.ArrEst) do
        repeat
          Write('Оценка ', i, ': ');
          Readln(S);
          Val(S, Data.ArrEst[i], Code);
          if Code > 0 then
            Writeln('Неверный ввод. Повторите.');
        until Code = 0;
        Add(L, Data);
      end;
    until S = '';
    Writeln('Составлен список:');
    LWriteln(L);
 
    {Удаляем из списка элементы, которые содержат хотябы одну
    неудовлетворительную оценку.}
    i := Del(L, 3);
    {Ответ.}
    Writeln('Удалено элементов: ', i);
    Writeln('Список после обработки:');
    LWriteln(L);
    {Освобождение памяти, занятой под список.}
    LFree(L);
    Writeln('Память, выделенная для списка, освобождена.');
 
    Writeln('Повторить - Enter, выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
Цитата Сообщение от Kertas Посмотреть сообщение
Сформировать односвязный список из 7 записей, вывести список, удалить записи, удовлетворяющие некоторому условию, добавить новую запись в конец списка и вновь вывести список на экран.
Выделенное красным в коде не реализовано. Чтобы добавить реализацию этого условия, достаточно после кода удаления записей добавить код добавления элементов в список:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    {Добавление элементов в список.}
    Writeln('Добавление элементов в список.');
    Writeln('Прекратить ввод - оставить в поле ФИО пустую строку и нажать Enter.');
    repeat
      Writeln('Элемент ', L.Cnt + 1, '.');
      Write('ФИО: ');
      Readln(S);
      if S <> '' then begin
        Data.Fio := S;
        for i := 1 to High(Data.ArrEst) do
        repeat
          Write('Оценка ', i, ': ');
          Readln(S);
          Val(S, Data.ArrEst[i], Code);
          if Code > 0 then
            Writeln('Неверный ввод. Повторите.');
        until Code = 0;
        Add(L, Data);
      end;
    until S = '';
    Writeln('Составлен список:');
    LWriteln(L);
Добавлено через 2 секунды
Цитата Сообщение от Kertas Посмотреть сообщение
Запись содержит фамилию ученика и 2 оценки. Удалить из списка всех учеников с неудовлетворительными оценками.
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Windows;
 
const
  M = 2;
type
  {Массив с оценками.}
  TArrEst = array[1..M] of Integer;
  {Тип основных данных списка.}
  TData = record
    Fio : String;     {ФИО ученика.}
    ArrEst : TArrEst; {Массив с оценками}
  end;
  {Тип указателя на элемент списка.}
  TPElem = ^TElem;
  {Тип элемента списка.}
  TElem = record
    Data : TData;   {Основные данные элемента.}
    PNext : TPElem; {Указатель на следующий элемент списка.}
  end;
  {Тип, описывающий однонаправленный список.}
  TDList = record
    Cnt : Integer;          {Количество элементов в списке.}
    PFirst, PLast : TPElem; {Указатели на первый и последний элементы списка.}
  end;
 
{Инициализация списка. Внимание! Эту процедуру можно выполнять только
в отношении пустого списка. Иначе - будут утечки памяти.}
procedure Init(var aList : TDList);
begin
  aList.Cnt := 0;
  aList.PFirst := nil;
  aList.PLast := nil;
end;
 
{Добавление элемента в конец однонаправленного списка.}
procedure Add(var aList : TDList; const aData : TData);
var
  PElem : TPElem;
begin
  New(PElem);
  PElem^.Data := aData;
  PElem^.PNext := nil;
  if aList.PFirst = nil then
    aList.PFirst := PElem
  else
    aList.PLast^.PNext := PElem;
  aList.PLast := PElem;
  Inc(aList.Cnt);
end;
 
{Освобождение памяти, занятой под список и инициализация списка.}
procedure LFree(var aList : TDList);
var
  PNext, PDel : TPElem;
begin
  PNext := aList.PFirst;
  while PNext <> nil do begin
    PDel := PNext;
    PNext := PNext^.PNext;
    Dispose(PDel);
  end;
  Init(aList);
end;
 
{Распечатка однонаправленного списка.}
procedure LWriteln(const aList : TDList);
var
  PElem : TPElem;
  i : Integer;
begin
  if aList.PFirst = nil then begin
    Writeln('Список пуст.');
    Exit;
  end;
 
  PElem := aList.PFirst;
  while PElem <> nil do begin
    {ФИО ученика.}
    Write(PElem^.Data.Fio, '. Оценки: ');
    {Оценки ученика.}
    for i := 1 to High(PElem^.Data.ArrEst) do
      Write(PElem^.Data.ArrEst[i], ' ');
    Writeln;
    {Получаем указатель на следующий элемент списка.}
    PElem := PElem^.PNext;
  end;
end;
 
{Удаление из списка тех записей, которые содержат оценки меньше заданной.
Функция возвращает количество удалённых записей.}
function Del(var aList : TDList; const aEst : Integer) : Integer;
var
  PElem, PPrev, PDel : TPElem;
  i : Integer;
  MustDel : Boolean;
begin
  Result := 0;
  PPrev := nil;          {Указатель на предыдущий элемент.}
  PElem := aList.PFirst; {Указатель на текущий элемент.}
  while PElem <> nil do begin
    {Проверяем, есть ли хотябы одна оценка меньше заданной.}
    MustDel := False;
    for i := 1 to High(PElem^.Data.ArrEst) do
      if PElem^.Data.ArrEst[i] < aEst then begin
        MustDel := True;
        Break;
      end;
    {Если была обнаружена оценка меньше заданной, то выполняем удаление элемента.}
    if MustDel then begin
      PDel := PElem;         {Указатель на удаляемый элемент.}
      PElem := PElem^.PNext; {Указатель на следующий элемент списка.}
      {Если удаляемый элемент является первым элементом в списке.}
      if PDel = aList.PFirst then
        aList.PFirst := PElem
      {Если удаляемый элемент не является первым элементом в списке.}
      else
        PPrev^.PNext := PElem;
      {Если удаляемый элемент является последним элементом в списке.}
      if PDel = aList.PLast then
        aList.PLast := PPrev;
      {Освобождаем память, выделенную для элемента.}
      Dispose(PDel);
      Dec(aList.Cnt); {Количество элементов в списке теперь стало на 1 меньше.}
      Inc(Result);    {Количество удалённых элементов стало на 1 больше.}
    end else begin
      {Переходим к следующему элементу.}
      PPrev := PElem;
      PElem := PElem^.PNext;
    end;
  end;
end;
 
var
  L : TDList;
  Data : TData;
  i, Code : Integer;
  S : String;
begin
  {Переключение окна консоли на кодовую страницу CP1251 (Win-1251).
  Если после переключения русские буквы показываются неверно,
  следует открыть системное меню консольного окна - щелчком мыши в левом
  верхнем углу окна консоли и выбрать:
  Свойства - закладка "Шрифт" - выбрать шрифт: "Lucida Console".}
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  {Начальная инициализация списка.}
  Init(L);
 
  repeat
    {Добавление элементов в список.}
    Writeln('Добавление элементов в список.');
    Writeln('Прекратить ввод - оставить в поле ФИО пустую строку и нажать Enter.');
    repeat
      Writeln('Элемент ', L.Cnt + 1, '.');
      Write('ФИО: ');
      Readln(S);
      if S <> '' then begin
        Data.Fio := S;
        for i := 1 to High(Data.ArrEst) do
        repeat
          Write('Оценка ', i, ': ');
          Readln(S);
          Val(S, Data.ArrEst[i], Code);
          if Code > 0 then
            Writeln('Неверный ввод. Повторите.');
        until Code = 0;
        Add(L, Data);
      end;
    until S = '';
    Writeln('Составлен список:');
    LWriteln(L);
 
    {Удаляем из списка элементы, которые содержат хотябы одну
    неудовлетворительную оценку.}
    i := Del(L, 3);
    {Ответ.}
    Writeln('Удалено элементов: ', i);
    Writeln('Список после обработки:');
    LWriteln(L);
    {Освобождение памяти, занятой под список.}
    LFree(L);
    Writeln('Память, выделенная для списка, освобождена.');
 
    Writeln('Повторить - Enter, выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
Цитата Сообщение от Kertas Посмотреть сообщение
Сформировать односвязный список из 7 записей, вывести список, удалить записи, удовлетворяющие некоторому условию, добавить новую запись в конец списка и вновь вывести список на экран.
Выделенное красным в коде не реализовано. Чтобы добавить реализацию этого условия, достаточно после кода удаления записей добавить код добавления элементов в список:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    {Добавление элементов в список.}
    Writeln('Добавление элементов в список.');
    Writeln('Прекратить ввод - оставить в поле ФИО пустую строку и нажать Enter.');
    repeat
      Writeln('Элемент ', L.Cnt + 1, '.');
      Write('ФИО: ');
      Readln(S);
      if S <> '' then begin
        Data.Fio := S;
        for i := 1 to High(Data.ArrEst) do
        repeat
          Write('Оценка ', i, ': ');
          Readln(S);
          Val(S, Data.ArrEst[i], Code);
          if Code > 0 then
            Writeln('Неверный ввод. Повторите.');
        until Code = 0;
        Add(L, Data);
      end;
    until S = '';
    Writeln('Составлен список:');
    LWriteln(L);


Вернуться к обсуждению:
Нуждаюсь в написании программы. Линейные списки Delphi
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2013, 22:17
Готовые ответы и решения:

Нуждаюсь в подсказки в написании запроса
Всем доброго вечера. Подскажите, есть ли возможность сделать summ = (zprev+ zper+rezyltat)/3. В...

Линейные списки и циклические списки
Подскажите,кто как может,у меня тут 2 лабы,с чего мне начать,где можно материал взять?? 1-ая...

Линейные списки
Вечер добрый! Видимо не далась мне тема про списки. Прошу помощи: Список вводится через...

линейные списки
помогите пожалуйста срочно с написанием программы по линейным спискам: Создать список Р, что...

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2013, 22:17
Помогаю со студенческими работами здесь

Линейные списки
Ребят, подскажите в чем ошибка:( Компилятор не находит, а при запуске вылетает. Я подозреваю, что...

Линейные списки
Помогите пожалуйста!!! Дан линейный список, содержащий имена,фамилии и отчества. Отсортировать...

Линейные списки
Пожалуйста помогите, не могу никак сделать. Завтра защита, просто не успеваю разобраться( ...

Линейные списки
Помогите пожалуйста в решении задачи! 1.Используйте линейные списки для хранения...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru