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

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

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

 
 Ответить  Открыть новую тему 
> ОДНОСВЯЗНЫЕ СПИСКИ
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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

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

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


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

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

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


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


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





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

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


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

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

 





- Текстовая версия 23.12.2024 21:40
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name