Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 23
1

Вывести на экран все числа которые больше некоторого заданного числа и удалить их из списка

03.04.2012, 23:20. Показов 3390. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создать список целых чисел. Вывести на экран все числа которые больше некоторого заданного числа и удалить их из списка. Помогите пожалуйста очень нада эта программа...

Добавлено через 1 час 0 минут
Вот написал программу только не могу понять как написать чтобы находило числа больше заданого и как их удалить из списка??.
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
Program lin_sp;
uses crt;
type
   spisok=^elem;
   elem=record
   data:integer;
   next:spisok;
   end;
var i:spisok;
{------------------------------------}
procedure AddElemK(var current:spisok;elem:integer);
var X:spisok;
begin
    New(x);
    X^.data:=elem;
    X^.next:=nil;
    current^.next:=x;
    current:=x;
end;
{--------------------------------------}
procedure St_spisok(var i:spisok);
var p:spisok; n:integer;
begin
i:=nil;
writeln('vvedit spisok cilyh chisel.kin999:');
readln(n);
AddElemK(i,n);
readln(n);
while n<>999 do
begin
p:=i;
while p^.next<>nil do
p:=p^.next;
AddElemK(p,n);
readln(n);
end;
end;
{----------------------------------------}
procedure Vivod(var i:spisok);
var p:spisok; a,n:integer;
begin
writeln('zadane chislo');
readln(a);
 
while i<>nil do
begin
p:=i;
if n<a then
write(p^.data:10);
inc(n);
i:=i^.next;
dispose(p);
end;
end;
{----------------------------------------}
 
begin
St_spisok(i);
Vivod(i);
readkey;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2012, 23:20
Ответы с готовыми решениями:

Вывести все целые числа меньше 0 и больше заданного числа N которые делятся на 3
напишите программу печатающую все целые числа меньше 0 и больше заданного числа N которые делятся...

Даны натуральные числа N, K, L (K<L). Вывести на экран все делители числа N, которые меньше K или больше L
Даны натуральные числа N, K, L (K&lt;L). Вывести на экран все делители числа N, которые меньше K или...

Вывести из текстового файла на экран те числа, которые больше заданного
Дан файл неопределенной длины,который содержит целые числа, каждые из которых находятся в отдельной...

Найти количество элементов массива, которые больше некоторого заданного числа
Здравствуйте, помогите, пожалуйста, написать программу, которая выводит из массива количество...

7
29 / 29 / 10
Регистрация: 28.10.2011
Сообщений: 183
04.04.2012, 00:16 2
тебе нужно переставлять указатель с текущего на следующий элемент следующего элемента за текущим.

Добавлено через 7 минут
Или можно находясь(просматривая список) на нужном(удаляемом) элементе присвоить ссылке предыдущего элемента, на следующий за текущим, но тогда надо еще предыдущий запоминать.
1
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 23
04.04.2012, 00:45  [ТС] 3
Можеш исправить программу у меня не получаеться?
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
04.04.2012, 13:18 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Предлагаю такое решение:
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
program Project1;
 
type
  //Тип указателя на элемент списка.
  TPElem = ^TElem;
  //Тип элемента списка.
  TElem = record
    Data : Integer;
    PNext : TPElem; //Указатель на следующий элемент списка.
  end;
  //Тип, описывающий однонаправленный список.
  TList = record
    PFirst : TPElem; //Указатель на первый элемент списка.
    PLast : TPElem; //Указатель на последний элемент списка.
  end;
 
//Начальная инициализация списка. Внимание! Эту процедуру можно выполнять
//только в отношении пустого списка! Иначе - будут утечки памяти.
procedure Init(var aList : TList);
begin
  aList.PFirst := nil;
  aList.PLast := nil;
end;
 
//Добавление элемента в конец однонаправленного списка.
procedure AddL(var aList : TList; const aPElem : TPElem);
begin
  if aPElem = nil then Exit;
 
  aPElem^.PNext := nil;
  if aList.PFirst = nil then
    aList.PFirst := aPElem
  else
    aList.PLast^.PNext := aPElem
  ;
  aList.PLast := aPElem;
end;
 
(*
Исключение элемента из однонаправленного списка по указателю
на предыдущий элемент.
Функция возвращает указатель на элемент, который исключён из списка.
Если указатель на предыдущий элемент равен NIL, то исключается первый
элемент списка.
Эта функция только исключает элемент из списка. Если, кроме этого
требуется удалить элемент из памяти, тогда надо выполнить вызов
Dispose() за пределами процедуры.*)
function Del(var aList : TList; var aPPrev : TPElem) : TPElem;
begin
  Result := nil;
  if aList.PFirst = nil then Exit;
 
  if aPPrev = nil then begin
    Result := aList.PFirst;
    aList.PFirst := Result^.PNext;
  end else begin
    Result := aPPrev^.PNext;
    if Result <> nil then aPPrev^.PNext := Result^.PNext;
  end;
  if aList.PLast = Result then aList.PLast := aPPrev;
end;
 
//Удаление однонаправленного списка из памяти и инициализация.
procedure ListFree(var aList : TList);
var
  PNext, PDel : TPElem;
begin
  if aList.PFirst = nil then Exit;
 
  PNext := aList.PFirst;
  while PNext <> nil do begin
    PDel := PNext;
    PNext := PNext^.PNext;
    Dispose(PDel);
  end;
  aList.PFirst := nil;
  aList.PLast := nil;
end;
 
//Распечатка однонаправленного списка.
procedure ListPrint(const aList : TList);
var
  PElem : TPElem;
  i : Integer;
begin
  if aList.PFirst = nil then begin
    Writeln('Список пуст.');
    Exit;
  end;
 
  PElem := aList.PFirst;
  i := 0;
  while PElem <> nil do begin
    Inc(i);
    if i > 1 then Write(', ');
    Write(PElem^.Data);
    PElem := PElem^.PNext;
  end;
  Writeln;
end;
 
var
  L : TList;
  PElem, PPrev, PDel : TPElem;
  i, Num, Code : Integer;
  S : String;
begin
  //Начальная инициализация списка.
  Init(L);
 
  repeat
    //Создание списока.
    Writeln('Создание списка.');
    Writeln('Прекратить ввод - пустая строка + Enter.');
    i := 0;
    repeat
      Write('Элемент ', i + 1, ': ');
      Readln(S);
      if S = '' then Continue;
      Val(S, Num, Code);
      if Code <> 0 then begin
        Writeln('Неверная запись целого числа. Повторите ввод.');
        Continue;
      end;
      Inc(i);
      New(PElem);
      PElem^.Data := Num;
      AddL(L, PElem);
    until S = '';
    Writeln('Составлен список:');
    ListPrint(L);
 
    Writeln('Задайте число:');
    Readln(Num);
    Writeln('Элементы списка, которые содержат числа, большие, чем заданное:');
    PPrev := nil; //Указатель на предыдущий элемент.
    PElem := L.PFirst; //Указатель на текущий элемент.
    i := 0;
    while PElem <> nil do begin
      if PElem^.Data > Num then begin //Удаление элемента и переход к следующему.
        //Распечатка.
        Inc(i);
        if i > 1 then Write(', ');
        Write(PElem^.Data);
        //Удаление.
        PDel := Del(L, PPrev);
        PElem := PDel^.PNext;
        Dispose(PDel);
      end else begin //Переход к следующему элементу.
        PPrev := PElem;
        PElem := PElem^.PNext;
      end;
    end;
 
    if i = 0 then
      Writeln('В списке нет ни одного элемента с числом, большим, чем заданное.')
    else begin
      Writeln;
      Writeln('Количество удалённых элементов: ', i);
      Writeln('Cписок после удаления:');
      ListPrint(L);
    end;
 
    //Удаление списка из памяти.
    ListFree(L);
    Writeln('Список удалён из памяти. Работа завершена.');
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
1
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 11
05.04.2012, 14:09 5
Цитата Сообщение от Mawrat Посмотреть сообщение
Предлагаю такое решение:
у вас еапмсако что код на делфи. а на паскале есть ? Кстати ругается на 51 строку... слово result не навится... как его объявить?
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
05.04.2012, 14:22 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Да, точно - там функция по правилам Delphi оформлена.
На Pascal будет так:
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
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
program Project1;
 
type
  //Тип указателя на элемент списка.
  TPElem = ^TElem;
  //Тип элемента списка.
  TElem = record
    Data : Integer;
    PNext : TPElem; //Указатель на следующий элемент списка.
  end;
  //Тип, описывающий однонаправленный список.
  TList = record
    PFirst : TPElem; //Указатель на первый элемент списка.
    PLast : TPElem; //Указатель на последний элемент списка.
  end;
 
//Начальная инициализация списка. Внимание! Эту процедуру можно выполнять
//только в отношении пустого списка! Иначе - будут утечки памяти.
procedure Init(var aList : TList);
begin
  aList.PFirst := nil;
  aList.PLast := nil;
end;
 
//Добавление элемента в конец однонаправленного списка.
procedure AddL(var aList : TList; const aPElem : TPElem);
begin
  if aPElem = nil then Exit;
 
  aPElem^.PNext := nil;
  if aList.PFirst = nil then
    aList.PFirst := aPElem
  else
    aList.PLast^.PNext := aPElem
  ;
  aList.PLast := aPElem;
end;
 
(*
Исключение элемента из однонаправленного списка по указателю
на предыдущий элемент.
Функция возвращает указатель на элемент, который исключён из списка.
Если указатель на предыдущий элемент равен NIL, то исключается первый
элемент списка.
Эта функция только исключает элемент из списка. Если, кроме этого
требуется удалить элемент из памяти, тогда надо выполнить вызов
Dispose() за пределами процедуры.*)
function Del(var aList : TList; var aPPrev : TPElem) : TPElem;
var
  PDel : TPElem;
begin
  Del := nil;
  if aList.PFirst = nil then Exit;
  
  if aPPrev = nil then begin
    PDel := aList.PFirst;
    aList.PFirst := PDel^.PNext;
  end else begin
    PDel := aPPrev^.PNext;
    if PDel <> nil then aPPrev^.PNext := PDel^.PNext;
  end;
  if aList.PLast = PDel then aList.PLast := aPPrev;
  Del := PDel;
end;
 
//Удаление однонаправленного списка из памяти и инициализация.
procedure ListFree(var aList : TList);
var
  PNext, PDel : TPElem;
begin
  if aList.PFirst = nil then Exit;
 
  PNext := aList.PFirst;
  while PNext <> nil do begin
    PDel := PNext;
    PNext := PNext^.PNext;
    Dispose(PDel);
  end;
  aList.PFirst := nil;
  aList.PLast := nil;
end;
 
//Распечатка однонаправленного списка.
procedure ListPrint(const aList : TList);
var
  PElem : TPElem;
  i : Integer;
begin
  if aList.PFirst = nil then begin
    Writeln('Список пуст.');
    Exit;
  end;
 
  PElem := aList.PFirst;
  i := 0;
  while PElem <> nil do begin
    Inc(i);
    if i > 1 then Write(', ');
    Write(PElem^.Data);
    PElem := PElem^.PNext;
  end;
  Writeln;
end;
 
var
  L : TList;
  PElem, PPrev, PDel : TPElem;
  i, Num, Code : Integer;
  S : String;
begin
  //Начальная инициализация списка.
  Init(L);
 
  repeat
    //Создание списока.
    Writeln('Создание списка.');
    Writeln('Прекратить ввод - пустая строка + Enter.');
    i := 0;
    repeat
      Write('Элемент ', i + 1, ': ');
      Readln(S);
      if S = '' then Continue;
      Val(S, Num, Code);
      if Code <> 0 then begin
        Writeln('Неверная запись целого числа. Повторите ввод.');
        Continue;
      end;
      Inc(i);
      New(PElem);
      PElem^.Data := Num;
      AddL(L, PElem);
    until S = '';
    Writeln('Составлен список:');
    ListPrint(L);
 
    Writeln('Задайте число:');
    Readln(Num);
    Writeln('Элементы списка, которые содержат числа, большие, чем заданное:');
    PPrev := nil; //Указатель на предыдущий элемент.
    PElem := L.PFirst; //Указатель на текущий элемент.
    i := 0;
    while PElem <> nil do begin
      if PElem^.Data > Num then begin //Удаление элемента и переход к следующему.
        //Распечатка.
        Inc(i);
        if i > 1 then Write(', ');
        Write(PElem^.Data);
        //Удаление.
        PDel := Del(L, PPrev);
        PElem := PDel^.PNext;
        Dispose(PDel);
      end else begin //Переход к следующему элементу.
        PPrev := PElem;
        PElem := PElem^.PNext;
      end;
    end;
 
    if i = 0 then
      Writeln('В списке нет ни одного элемента с числом, большим, чем заданное.')
    else begin
      Writeln;
      Writeln('Количество удалённых элементов: ', i);
      Writeln('Cписок после удаления:');
      ListPrint(L);
    end;
 
    //Удаление списка из памяти.
    ListFree(L);
    Writeln('Список удалён из памяти. Работа завершена.');
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
2
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 11
12.04.2012, 19:28 7
все работает спасибо огромное... один вопрос это список упорядоченный или ет?
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
12.04.2012, 20:01 8
В этом списке порядок элементов зависит только от ввода. Т. е., в каком порядке пользователь ввёл элементы, в таком порядке они и окажутся в списке. Никаких дополнительных действий по сортировке элементов в этом коде не производится.
Есть ещё понятие списков с приоритетом. В данном случае список обыкновенный - без приоритета.
1
12.04.2012, 20:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2012, 20:01
Помогаю со студенческими работами здесь

Удалить из данного списка списков все, длина которых больше заданного числа, с помощью REMOVE-IF[-NOT]
Удалить из данного списка списков все, длина которых больше заданного числа, с помощью REMOVE-IF.

Вывести на экран в столбик все числа из заданного диапазона, которые заканчиваются на ноль
Здравствуйте. Начал недавно изучать С++ и не могу решить такую задачку) Вроде легкая, но не...

Вывести на экран все пары дружественных чисел, которые не превышают заданного натурального числа
Два натуральных числа называются дружественными если каждое из них равно сумме всех делителей...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru