Задача на работу с двумя списками |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задача на работу с двумя списками |
Маруся |
4.06.2007 11:48
Сообщение
#1
|
Гость |
Помогите, пожалуйста, брату срочно надо сдать курсовик, а я Паскаль учила очень давно и ничего не помню. Вот задача:
Даны два списка, содержащие фамилии и звания военных 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. |
Артемий |
4.06.2007 11:59
Сообщение
#2
|
Помощник капитана Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: 2 |
-------------------- Dum spiro spero!
|
Маруся |
4.06.2007 15:22
Сообщение
#3
|
Гость |
Это я все читала, пробовала реализовать, спасибо.
как я пониманию элементы из списка удаляются по указателю, но тут у меня какя-то ерунда получается. И еще как организовать удаление нескольких элементов ( через циклы?) |
Текстовая версия | 26.04.2024 1:53 |