Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на работу с двумя списками
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Маруся
Помогите, пожалуйста, брату срочно надо сдать курсовик, а я Паскаль учила очень давно и ничего не помню. Вот задача:
Даны два списка, содержащие фамилии и звания военных 1-го и 2-го взводов. Во время атаки М человек из 1-го взвода погибли. Произвести пополнение воеными 2-го взвода с такими же или максимально близкими званиями. В начало обоих списков вставить командира взвода - старшего по званию, а остальных отсортировать по фамилии в алфавитном порядке.
я так поняла нужно сделать следующее:
1. Создать 2 списка
2. вывести их на экран.
3. Произвести удаление некоторого количества элементов первого списка.
4. Найти во втором списке аналогичные элементы (военых с аналогичными званиями)в количестве равном удаленому.
5. Добавить эти элементы во первый список и удалить их из второго.
6. Отсортировать списки.
Первый и второй пункт я сделала. а вот как делать остальное не знаю
Program Listlinked;
uses crt;
Type
El=^ZAP;
ZAP=Record
d:string;
p:El;
End;
Var
ph1,pk1,px1,pc1,ph2,pk2,px2,pc2:EL;
c1,kk1,c2,kk2:string;
n: integer;
pr1,pr2:Boolean;

Procedure Formll_1 (Var ph1,pk1:el; Var c1: string);
Begin
New (ph1);
ph1^.p:=Nil;
ph1^.d:=c1;
pk1:=ph1
End;
Procedure Formll_2 (Var ph2,pk2:EL; Var c2:string);
Begin
New (ph2);
ph2^.p:=Nil;
ph2^.d:=c2;
pk2:=ph2
End;

Procedure Dobll_1 (Var pk1:El; Var c1:string);
Var
px1:el;
Begin
New (px1);
px1^.p:=Nil;
pk1^.p:=px1;
pk1:=px1;
pk1^.d:=c1
End;
Procedure Dobll_2 (Var pk2:el; Var c2: string);
Var
px2:el;
Begin
New (px2);
px2^.p:=Nil;
pk2^.p:=px2;
pk2:=px2;
pk2^.d:=c2
End;
{Procedure Poisk(Var kk1:string; Var ph1,pc1,px1:el; Var pr1:Boolean);
Begin
pc1:=ph1;
While (pc1<>Nil) and (kk1<>pc1^.d) Do
Begin
px1:=pc1;
pc1:=pc1^.p
End;
If (pc1=Nil) and (kk1<>pc1^.d) then
pr1:=False
Else
pr1:=True
End;

procedure Del(var kk1:string; var ph1:el);
var
pc1,px1:el;
pr1:boolean;
begin
while(pc1<>nil)and (kk1<>pc1^.d)do
begin
px1:=pc1;
pc1:=pc1^.p
end;
px1^.p:=pc1^.p
end;

Begin
clrscr;
n:=1;
WriteLn ('‚ўҐ¤ЁвҐ_1', n:3);

ReadLn (c1);
Formll_1 (ph1,pk1,c1);
Repeat
n:=n+1;
WriteLn ('‚ўҐ¤ЁвҐ_1', n:3);
ReadLn (c1);
Dobll_1 (pk1,c1);
Until n=3;
n:=1;
WriteLn ('‚ўҐ¤ЁвҐ_2', n:3);
ReadLn (c2);
Formll_2 (ph2,pk2,c2);
Repeat
n:=n+1;
WriteLn ('‚ўҐ¤ЁвҐ_2', n:3);
ReadLn (c2);
Dobll_2 (pk2,c2);
Until n=3;
n:=1;
px1:=ph1;
Writeln('?????? ?1');
Repeat
WriteLn (n:3, ' ':7, px1^.d);
px1:=px1^.p;
n:=n+1
Until px1=Nil;

n:=1;
px2:=ph2;
Writeln ('?????? ?2');
Repeat
WriteLn (n:3, ' ':7, px2^.d);
px2:=px2^.p;
n:=n+1
Until px2=Nil;
WriteLn ('??????? ????????? ???????');
ReadLn (kk1);
Del (kk1,ph1);
n:=1;
{px1:=ph1;}
Writeln('?????? ?1 ??? ?????????? ????????');
Repeat
WriteLn (n:3, ' ':7, px1^.d);
px1:=px1^.p;
n:=n+1
Until px1=Nil;
End.

Артемий
Списки
Маруся
Это я все читала, пробовала реализовать, спасибо.
как я пониманию элементы из списка удаляются по указателю, но тут у меня какя-то ерунда получается. И еще как организовать удаление нескольких элементов ( через циклы?)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.