Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
CrazyDuce
0 / 0 / 0
Регистрация: 09.12.2015
Сообщений: 5
#1

Удалить из связанного списка все отрицательные значения - Pascal

17.12.2015, 23:49. Просмотров 285. Ответов 7
Метки нет (Все метки)

В общем, есть связанный список с любыми числами (real) и из этого списка нужно удалить все отрицательные значения. Помогите пожалуйста.
http://www.cyberforum.ru/pascal/thread62982.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2015, 23:49
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удалить из связанного списка все отрицательные значения (Pascal):

В двумерном массиве удалить все отрицательные элементы
В Двумерном Массиве удалить все отрицательные элементы, и после чего вывести...

Перенести в начало списка все отрицательные элементы, вернуть количество переносов
Дана, вот такая вот задачка: "«Перенести» в начало списка все отрицательные...

Заменить все отрицательные числа на их абсолютные значения
В таблице из 20 чисел,лежащих в промежутке от -50 до 50,заменить все...

Дан одномерный массив. Удалить все отрицательные элементы из него
Решите плз задачу. Дан одномерный массив. Удалить все отрицательные элементы...

Все отрицательные значения вещественного массива переместить в его начало
Написать рекурсивную подпрограмму,которая все отрицательные значения...

7
JuriiMW
1831 / 1011 / 1537
Регистрация: 10.12.2014
Сообщений: 3,758
18.12.2015, 07:28 #2
Pascal
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
type
  tList = ^rList;
  rList = record
    N : Real;
    Next : tList;
  end;
 
function NumGeneration : Real;
begin
  NumGeneration := (Random - 0.5) * 100;
end;
 
function CreateList : tList;
var
  List, Cur : tList;
  i : Integer;
begin
  Randomize;
  New(List);
  List^.N := NumGeneration;
  Cur := List;
  for i := 1 to 9 do
    begin
      New(Cur^.Next);
      Cur := Cur^.Next;
      Cur^.N := NumGeneration;
    end;
  Cur^.Next := nil;
  CreateList := List;
end;
 
procedure OutList(List : tList);
begin
  while List <> nil do
    begin
      Write(List^.N:0:5, #32);
      List := List^.Next;
    end;
  WriteLn;
end;
 
procedure DelNegative(var List : tList);
var
  Cur, Exc : tList;
begin
  Cur := List;
  repeat
    if Cur^.N < 0 then
      begin
        if Cur = List then
          begin
            List := List^.Next;
            Dispose(Cur); Cur := List;
          end
        else
          begin
            Exc := Cur;
            Cur := List; while Cur^.Next <> Exc do Cur := Cur^.Next;
            Cur^.Next := Exc^.Next; Dispose(Exc);
          end;
      end
    else
      Cur := Cur^.Next;
  until Cur = nil;
end;
  
var
  List : tList;
 
begin
  List := CreateList;
  OutList(List);
  DelNegative(List);
  OutList(List);
end.
1
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3755 / 2452 / 2034
Регистрация: 22.11.2013
Сообщений: 6,821
18.12.2015, 09:34 #3
JuriiMW,
удаление возможно делать много проще и экономнее по ресурсам:
Pascal
1
2
3
4
5
6
7
8
9
procedure DelNegative(var List: tList);
var p: ^tList; t: tList;
begin
  p:=@List;
  while p^<>nil do
    if p^^.n<0 then begin
      t:=p^; p^:=p^^.next; Dispose(t);
    end else p:=@p^^.next;
end;
1
JuriiMW
1831 / 1011 / 1537
Регистрация: 10.12.2014
Сообщений: 3,758
18.12.2015, 09:41 #4
bormant, данный код не на ABC не будет работать…
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3755 / 2452 / 2034
Регистрация: 22.11.2013
Сообщений: 6,821
18.12.2015, 09:45 #5
JuriiMW,
интересно. У меня нет ABC, могу поинтересоваться, в чем там заключается несовместимость?
Возможно я неправильно прочитал/понял сказанное, но на TP и FPC (оба не ABC) -- работает.
0
JuriiMW
1831 / 1011 / 1537
Регистрация: 10.12.2014
Сообщений: 3,758
18.12.2015, 10:08 #6
Не понимает „p^^“ — для него это то же самое, что и „p^“.
Поэтому „@p^^.next“ — всегда будет возвращать nil

Я так понимаю, это плата за концепцию „всё объекты“…


Туго в нём с указателями… Особенно с переходом на .net !
Ругается типа „Ссылка на объект не указывает на экземпляр объекта.“

ЗЫ Запустил в PascalABC (без .NET). — Отработало нормально.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3755 / 2452 / 2034
Регистрация: 22.11.2013
Сообщений: 6,821
18.12.2015, 10:37 #7
JuriiMW,
спасибо.
Вообще говоря странно писать работу с указателями на том, что работу с ними не поддерживает.
Pascal
1
2
3
4
5
6
7
8
9
type
  PNode = ^TNode;
  TNode = record
    next: PNode; n: Integer;
  end;
var list: PNode;
begin
  New(list); 
end.
на http://pascalabc.net/WDE/ получил
{Ошибка времени выполнения: Методу "Program1.Program.new(Void* ByRef, Int32)", прозрачному для безопасности, не удалось получить доступ к критически важному методу безопасности "System.Runtime.InteropServices.Marshal.AllocHGlobal(Int32)".}
Или это только онлайн-среда так чудит?
0
JuriiMW
1831 / 1011 / 1537
Регистрация: 10.12.2014
Сообщений: 3,758
18.12.2015, 10:49 #8
bormant, IDE этот код отрабатывает норм…
Но для неё лучше писать так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type
  tList = class
    N : Integer;
    Next : tList;
    
    constructor (valN : Integer; Nxt : tList);
    begin
      N := valN;
      Next := nil;
    end;
  end;
    
begin
  var List  := New tList(5, nil); // первый
  List.Next := New tList(6, List.Next); // за первым
  List.Next := nil; // потеря ссылки - не нужно освобождать
  List := nil; // забыли про список
end.
0
18.12.2015, 10:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2015, 10:49
Привет! Вот еще темы с решениями:

Все отрицательные элементы матрицы переместить в начало по возрастанию значения элементов
В однмерном массиве все отрицательные элементы переместить в начало по...

Удалить из списка все элементы с нечетными значениями
Дано указатель Р1 на первый элемент двозвязного списка, содержащего не менее...

Удалить все элементы двунаправленного списка равные 10
Создать двунаправленный список, ввести элементы. Из введенных элементов удалить...

Удалить из списка все элементы с нечетными номерами
Можете переделать эту програму так : дано указатель Р1 на первый элемент...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru