IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> динамическая структура данных, Линейные списки
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: valera

Репутация: -  0  +


Дано условие:
Описать процедуру, которая вставляет в непустой список L, элементы которого упорядочены по неубы-ванию, новый элемент E так, чтобы сохранилась упо-рядоченность.

не могу вьехать, что надо сделать. Подскажите пожалуйста

Сообщение отредактировано: valeral -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Во-первых: поменять название темы...

А во-вторых: тебе дан упорядоченный список с такими, например, узлами:
L = <1, 4, 6, 6, 7, 8, 8, 10>
и элемент E равный, скажем, 5...

Вот и задача у тебя: добавить E к списку L так, чтобы не нарушить его упорядоченности. Кстати, каким будет список после добавления этого элемента?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: valera

Репутация: -  0  +


Певое условие выполнил
Второе.
Кстати, каким будет список после добавления этого элемента?
Это всё условие что дано, из сказанного Вами я понял что надо сделать список допустим от 1 до 10, в него надо вставить какое то число, которого нет в этом списке, и чтоб порядок не изменился. Так? Блин, всё равно не могу понять как это сделать.
Нужно создать сам список, потом ввести требование ввести число, и вывод на экран упорядоченного списка с новым чмслом. А если такое число уже есть в списке?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Ход решения неверен... Я привел ВСЕ данные, которые необходимы для решения задачи... Не надо ничего придумывать. Тебе ДАН список. Понимаешь? Не элементы списка, чтоб тебе надо было что-то "составлять", а СПИСОК. С ним (кроме добавления одного элемента) вообще ничего не надо делать.

Повторяю вопрос немного в другой плоскости: если у тебя есть список
<1, 4, 6, 6, 7, 8, 8, 10, 5>
является ли он упорядоченным по неубыванию?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: valera

Репутация: -  0  +


этот список <1, 4, 6, 6, 7, 8, 8, 10, 5> нет, а этот <1, 4, 6, 6, 7, 8, 8, 10> получается да

Сообщение отредактировано: valeral -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: valera

Репутация: -  0  +


Volvo примерно так это должно быть

Program Example;
Uses Crt;
Type
PEl=^TEl;
TEl=Record
Inf:Integer;
Next:PEl;
end;
Var Spisok1,Spisok2:PEl;

Procedure CreateSpisok(var A:PEl);
Var B:PEl;
I:Integer;
begin
New(A);
Readln(A^.Inf);
B:=A;
Readln(I);
While not(I=0) do
begin
New(B^.Next);
B:=B^.Next;
B^.Inf:=I;
Readln(I);
end;
B^.Next:=Nil
end;

Procedure DelSpisok(var A:PEl);
var B:PEl;
begin
While not(A=nil) do
Begin
B:=A;
A:=A^.Next;
Dispose(B);
end;
end;

Procedure PrintSpisok(A:PEl);
var B:PEl;
begin
B:=A;
while not(B=nil) do
begin
Write(B^.Inf:1,' ');
B:=B^.Next;
end;
Writeln
end;

Function MinEl(Ab:PEl):Integer;
var B:PEl;
Min:Integer;
begin
Min:=Ab^.Inf;
B:=Ab^.Next;
While not(B=nil) do
begin
If B^.Inf<Min then Min:=B^.Inf;
B:=B^.Next;
end;
MinEl:=Min;
end;

Procedure SortSpisok(var A:PEl);
var B,C,D:PEl;
I:Integer;
begin
{Переносится первый элемент списка}
I:=MinEl(A);
If I=A^.Inf Then
begin
D:=A;
A:=A^.Next;
end
else
begin
B:=A;
While not(B^.Next^.Inf=I) do
B:=B^.Next;
D:=B^.Next;
B^.Next:=D^.Next;
end;
{Переносятся все остальные элементы списка}
C:=D;
While not(A=nil) do
begin
I:=MinEl(A);
if I=A^.Inf then
begin
C^.Next:=A;
A:=A^.Next
end
else
begin
B:=A;
While not(B^.Next^.Inf=I) do
B:=B^.Next;
C^.Next:=B^.Next;
B^.Next:=C^.Next^.Next;
end;
C:=C^.Next;
end;
C^.Next:=Nil;
A:=D;
end;

Procedure AddSpisok(var A,D:PEl);
Var B,C:PEl;
Begin
While not(D=nil) do
begin
C:=D;
D:=D^.Next;
If C^.Inf<A^.Inf then
begin
C^.Next:=A;
A:=C;
end
else
begin
B:=A;
While not(B^.Next^.Inf>C^.Inf) and not(B^.Next=Nil) do
B:=B^.Next;
C^.Next:=B^.Next;
B^.Next:=C;
end;
end;
end;

Begin
ClrScr;
Writeln('Введите первый список:');
CreateSpisok(Spisok1);
ClrScr;
Writeln('Введите второй список:');
CreateSpisok(Spisok2);
ClrScr;
Writeln('Первый список:');
PrintSpisok(Spisok1);
Writeln('Второй список:');
PrintSpisok(Spisok2);
Writeln;

SortSpisok(Spisok1);
Writeln('Остсортированный первый список:');
PrintSpisok(Spisok1);
AddSpisok(Spisok1,Spisok2);
Writeln('Результат объединения списков:');
PrintSpisok(Spisok1);
DelSpisok(Spisok1);
Readkey;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата(valeral @ 1.06.2006 15:33)
примерно так это должно быть

Ты не хочешь понимать того, что тебе объясняют? КАК еще надо сказать, что приведенный тобой код НЕ ВЫПОЛНЯЕТ задачи, перед тобой поставленной??? Ты задание-то прочти!
Цитата
Описать процедуру, которая вставляет в непустой список L, элементы которого упорядочены по неубыванию, новый элемент E так, чтобы сохранилась упорядоченность.
А твой код что делает? Слияние списков? Зачем? Второго списка по условию нет, да и в первый надо добавить всего один элемент, НО не пересортировывать его (это просто), а добавить так, чтобы сохранить упорядоченность!!!

Вот все, что от тебя требовалось:
Program Example;
Uses Crt;
Type
PEl=^TEl;
TEl=Record
Inf:Integer;
Next:PEl;
end;
Var
spisok: PEl;
E: integer;

Procedure CreateSpisok(var A:PEl);
Var B:PEl;
I:Integer;
begin
New(A);
Readln(A^.Inf);
B:=A;
Readln(I);
While not(I=0) do
begin
New(B^.Next);
B:=B^.Next;
B^.Inf:=I;
Readln(I);
end;
B^.Next:=Nil
end;

Procedure DelSpisok(var A:PEl);
var B:PEl;
begin
While not(A=nil) do
Begin
B:=A;
A:=A^.Next;
Dispose(B);
end;
end;

Procedure PrintSpisok(A:PEl);
var B:PEl;
begin
B:=A;
while not(B=nil) do
begin
Write(B^.Inf:1,' ');
B:=B^.Next;
end;
Writeln
end;

procedure InsertElement(var a: PEl; E: integer);
var
p, T: PEl;
before_first: boolean;
begin
p := a;
before_first := (p^.inf > E);
while (p^.next <> nil) and (p^.next^.inf < E) do p := p^.next;

new(T); T^.inf := E;
if before_first then begin
T^.next := a; a := T;
end
else begin
t^.next := p^.next; p^.next := T;
end;
end;

Begin
ClrScr;
Writeln('List:');
spisok := nil;
CreateSpisok(Spisok);

PrintSpisok(spisok);
write('E = '); readln(E);
InsertElement(spisok, E);
PrintSpisok(spisok);

DelSpisok(spisok);
Readkey;
end.


И, пожалуйста, в следующий раз читай задание внимательно... Правильно прочтя задание ты делаешь бОльшую часть работы...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: valera

Репутация: -  0  +


Volvo я вчера задание на работе писал, и в рабочей суматохе действительно просто не разобрался в условии. После работы дома сел и всё оказалось намного проще чем я думал. У тебя код вышел немного проще, чем у меня, так что буду смотреть и упрощать свою версию. Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 23.10.2017 0:29
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"