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

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

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

> простая задача на очереди, я решал но она не работает
AlexSt
сообщение 17.05.2007 5:55
Сообщение #1


Новичок
*

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

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


Даны две непустые очереди; адреса начала и конца первой равны Р1 и Р2, а второй Р3 и Р4. Очереди содержат одинаковое количество элементов. Объединить очереди в одну, в которой элементы исходных очередей чередуются(начиная с первого элемента первой очереди). Вывести указатели Р5 и Р6 на начало и конец полученной очереди. Операции выделения и освобождения памяти не использовать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Lapp
сообщение 17.05.2007 10:53
Сообщение #2


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

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

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


Ну что ж, давай разбираться..
Что должна делать процедура V? Вставлять новый элемент в очередь?
Я попробую показать, что она делает
procedure v(b,e:och;i:char);
var
x:och;
begin
x^.data:=i;
x^.next:=nil;
if b=nil then b:=x else e^.next:=x;
e:=x
end;

Ты заводишь локальную переменную х - ссылку, и начинаешь работать с ней, даже не взяв под нее память. Это делать недопустимо - это раз. Два - то, что сама переменная х тебе не нужна. Если тебе передается в процедуру конец списка (списки ты называешь очередями), то с ним и работай.
Еще одна ошибка: для того, чтоб вывести параметры из процедуры, их надо описывать как var...
С процедурой Iz я вообще ничего не понял.
Короче, вот рабочий код - попробуй в нем разобраться. Я пытался писать как можно ближе к твоей программе. Если что неясно - спрашивай..
program ochered_n15;
type
och=^elem;
elem=record
data:char;
next:och
end;
var
p1,p2,p3,p4,p5,p6,q1,q2,t1,t2:och;
im,i:char;
j,k:integer;

procedure v(var p:och; i:char);
begin
New(p);
p^.data:=i;
p^.next:=nil;
end;

procedure Show(p:och);
begin
while p<>nil do begin
Write(p^.data,' ');
p:=p^.next
end;
WriteLn
end;

begin
j:=1;
WriteLn('Введите первый список, "?" в конце:');
ReadLn(i);
V(p1,i);
p2:=p1;
repeat
readln(i);
v(p2^.next,i);
p2:=p2^.next;
j:=j+1;
until i='?';
k:=1;
WriteLn('Введите второй список, ',j,' элементов:');
ReadLn(i);
V(p3,i);
p4:=p3;
for k:=2 to j do begin
readln(i);
v(p4^.next,i);
p4:=p4^.next;
end;
WriteLn('Первый список:');
Show(p1);
WriteLn('Второй список:');
Show(p3);
p5:=p1;
p6:=p4;
q1:=p1;
q2:=p3;
while q1<>nil do begin
t1:=q1^.next;
t2:=q2^.next;
q1^.next:=q2;
q2^.next:=t1;
q1:=t1;
q2:=t2
end;
WriteLn('Результирующий список:');
Show(p5);
WriteLn('Начало: ',Seg(p5),':',Ofs(p5));
WriteLn('Конец: ',Seg(p6),':',Ofs(p6));
ReadLn;
end.



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

Сообщений в этой теме


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

 



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