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

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

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

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

Удалить все отрицательные элементы массива
Люди добрые помогите решить задачки. Очень вас прошу... Буду очень благодарен!...

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

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

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

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

7
JuriiMW
1934 / 1038 / 1555
Регистрация: 10.12.2014
Сообщений: 3,825
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
3805 / 2488 / 2053
Регистрация: 22.11.2013
Сообщений: 6,919
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
1934 / 1038 / 1555
Регистрация: 10.12.2014
Сообщений: 3,825
18.12.2015, 09:41 #4
bormant, данный код не на ABC не будет работать…
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3805 / 2488 / 2053
Регистрация: 22.11.2013
Сообщений: 6,919
18.12.2015, 09:45 #5
JuriiMW,
интересно. У меня нет ABC, могу поинтересоваться, в чем там заключается несовместимость?
Возможно я неправильно прочитал/понял сказанное, но на TP и FPC (оба не ABC) -- работает.
0
JuriiMW
1934 / 1038 / 1555
Регистрация: 10.12.2014
Сообщений: 3,825
18.12.2015, 10:08 #6
Не понимает „p^^“ — для него это то же самое, что и „p^“.
Поэтому „@p^^.next“ — всегда будет возвращать nil

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


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

ЗЫ Запустил в PascalABC (без .NET). — Отработало нормально.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3805 / 2488 / 2053
Регистрация: 22.11.2013
Сообщений: 6,919
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
1934 / 1038 / 1555
Регистрация: 10.12.2014
Сообщений: 3,825
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 на первый элемент двозвязного списка, содержащего не менее...


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

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

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