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

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

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

> ОДНОСВЯЗНЫЕ СПИСКИ
Toni_
сообщение 4.01.2011 0:47
Сообщение #1





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

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


Задача. Разработайте программу слияния двух односвязных упорядоченных по не убыванию линейных списков в один упорядоченный список.

Вобщем вот до чего я дошел. Народ вопрос как сделать так чтобы я вводил по 1 элементу? а не водил скока я хочу вести елементов..... Помогите кто чем можетsmile.gif


Program spisok_PR_15;
uses crt;
type link=^item;
item=record
data:integer;
ref:link;
end;

var px,py:link; n,i:integer; a:^integer; ch:char;

Procedure vivod;
begin
While py<>nil do {Vivod spiska}
begin
write(py^.data,' ');
py:=py^.ref
end;
end;
begin

repeat
clrscr;
writeln('1.Sosdadim 1 spisok');
writeln;
writeln('2.Sosdadim 2 spisik');
writeln;
writeln('3.Soedinim spiski');
writeln;
writeln('4.Vivod 1 spiska');
writeln;
Writeln('0.Exit');
Readln(ch);
Case ch of

#49: {1}
begin
px:=nil;
{sozdanie spiska, Также я тут задаю количество вводимых элементо,
как сделать так чтобы я вводил по 1 элементу}
Writeln('Kolichestvo vvodimix elementov');
Read(n);
For i:=1 to n do
begin
New(py);
Read(a^);
py^.data:=a^;
py^.ref:=px;
px:=py;
{end;}
end;

#52: {4 }
begin
While py<>nil do {Vivod spiska}
begin
write(py^.data,' ');
py:=py^.ref
end;
readkey;
end;
end
until ch=#48; {0}
end.


Сообщение отредактировано: Lapp - 4.01.2011 7:07
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
Lapp
сообщение 4.01.2011 7:52
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Toni_ @ 4.01.2011 0:47) *
Вобщем вот до чего я дошел.
Неплохо )).
Но все же выкладывай компилирующийся код, если он есть. Мне пришлось каскомментировать один end. Кроме того, я причесал код (отформатировал) и убрал совершенно непонятное "a", которое не было аллоцированно и крэшило прогу (к счастью, оно оказалось совершенно ненужным)). Вот, "до чего я дошел" smile.gif :
Program spisok_PR_15;
uses crt;
type
link= ^item;
item= record
data: integer;
ref: link;
end;

var
px,py: link;
n,i: integer;
ch: char;

Procedure vivod;
begin
While py<>nil do {Vivod spiska} begin
write(py^.data,' ');
py:=py^.ref
end;
end;

begin
repeat
clrscr;
writeln('1.Sosdadim 1 spisok');
writeln;
writeln('2.Sosdadim 2 spisik');
writeln;
writeln('3.Soedinim spiski');
writeln;
writeln('4.Vivod 1 spiska');
writeln;
Writeln('0.Exit');

Readln(ch);
Case ch of
'1': begin
px:=nil;
{sozdanie spiska, Также я тут задаю количество вводимых элементо,
как сделать так чтобы я вводил по 1 элементу}
Writeln('Kolichestvo vvodimix elementov');
Read(n);
For i:=1 to n do begin
New(py);
Read(py^.data);
py^.ref:=px;
px:=py;
end;
end;
'4': begin
While py<>nil do begin {Vivod spiska}
write(py^.data,' ');
py:=py^.ref
end;
readkey;
end;
end
until ch='0'
end.



Цитата
Народ вопрос как сделать так чтобы я вводил по 1 элементу? а не водил скока я хочу вести елементов..... Помогите кто чем можетsmile.gif
Тебе и не снилось, что мы можем. Ты только говори яснее.
Что значит "по 1 элементу"? То есть прекращать ввод по какому-то признаку?
Самое простое - выбрать какое-то число, как признак окончания ввода (например, 0). Но тогда в твой список невозможно будет ввести это число.
Второй способ: вводить не число, а строку, и переводить эту строку в число в программе. Тогда можно будет прекращать ввод по вводу слова "end" (или любого другого).
Третий способ: вводить посимвольно, составлять строку и переводить ее в число. Тогда можно будет сделать окончание ввода по нажатии, например, Esc.
Четвертый и последний способ довольно простой (проще 2 и 3). Он содержит некоторый трюк. Можно отключать проверку ошибок ввода - а точнее - брать ее на себя. И выходить из цикла ввода по ошибке. Тогда для выхода нужно просто ввести любой нецифровой символ (например, A или q, или ф..). Делается примерно так:
Stop:=false;
repeat
Write('Введите очередной элемент: ');
{$I-} ReadLn(x); {$I+}
if IOResult=0 then begin
{тут добавление элемента в список}
end
else Stop:=true
until Stop;

Попробуй и спрашивай, что непонятно.

PS
Еще, просьба к тебе: используй теги code=pas


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.01.2011 10:10
Сообщение #3


Гость






Цитата
Неплохо )).
Ничего хорошего, кстати.

Во-первых, на кой делали процедуру вывода если по нажатию "4" опять ту же процедуру "растворяем" в программе?

Во-вторых: простейшая логика. Если я ввел 3 элемента списка: <1, 2, 3>, запрашиваю вывод только что введенных данных, и мне печатается <3, 2, 1> - у меня тут же сработает рефлекс: я нажму на 0 для выхода, и поставлю автору неуд. Ибо список должен обрабатываться и показываться мне не "задом наперед" (потому что так удобнее программисту), а так, как я его вводил (потому что так удобнее пользователю). Тем более, что я ввел действительно упорядоченные по неубыванию данные, а что мне будет выдано в итоге?
 К началу страницы 
+ Ответить 
Lapp
сообщение 4.01.2011 12:09
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(volvo @ 4.01.2011 10:10) *
Ничего хорошего, кстати.
Все же гораздо лучше, чем ничего (или чем ворованное). Человек, сделавший что-то сам, определенно заслуживает похвалы и поощрения. yes2.gif
А недочеты - это исправимо )).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Toni_
сообщение 4.01.2011 22:01
Сообщение #5





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

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


Lapp большое спс за испровления ошибокsmile.gif буду дальше разбираться cool.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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