p align="left">WriteLn(rus('типа Integer (-32768..32767) ')); WriteLn(''); WriteLn(rus('Введите другое число')); Proverka(w); {выполняем рекурсивный вход в процедуру} end; end; End; Procedure Gou(w: WE); forward; //Опережающее описание процедуры Procedure Create2(var sag: PE); {Процедура ввода элементов в ЛОС с сортировкой по возрастанию} Var q, qq, s: PE; //адресные переменные a: TE; //переменная для ввода данных Begin writeln(' '); WriteLn(rus('Введите элементы в ЛОС: ')); WriteLn(rus('Ввод завершите 0')); if st2<>1 then //если ЛОС еще не был создан begin New(sag); //создаем указатель начала списка q:=sag^.next; //запоминаем адрес первого элемента ЛОС end; If st = 1 then {если пользователь выбрал вариант работы, с типом Integer} //st = 1 - работа с типом данных, Integer begin Proverka(w); {вход в процедуру проверки корректности ввода данных} a:= StrToInt(w); {перевод числа из строкового типа данных в целочисленный} end else {если пользователь выбрал вариант работы, работа с типом String} //st = 2 - работа с типом данных, String ReadLn(stroka); //ввод данных типа String if (q= nil) or (st2=1) then {если ЛОС был пустым или ЛОС уже создавался} Begin New(q); {создаем адресную переменную для первого элемента} If st = 1 then {если пользователь выбрал вариант работы, работа с типом Integer} //st = 1 - работа с типом данных, Integer q^.inf:= a {заносим в информационную часть, значение данных} else q^.inf2:= stroka; {заносим в информационную часть, значение данных} q^.next:= sag^.next; {в адресную часть второго элемента заносим адресную часть первого элемента} sag^.next:= q; {в адресную часть первого элемента заносим адрес созданного указателя} If st = 1 then {если пользователь выбрал вариант работы, работа с типом Integer} //st = 1 - работа с типом данных, Integer begin Proverka(w); {вход в процедуру проверки корректности ввода данных} a:= StrToInt(w); {перевод числа из строкового типа данных в целочисленный} end else ReadLn(stroka); //ввод данных типа String End; If st = 1 then {если пользователь выбрал вариант работы, работа с типом Integer} //st = 1 - работа с типом данных, Integer begin While a<>0 do {запускаем цикл выполняющийся пока не будет введен ноль} Begin New(q); {создаем адресную переменную для первого элемента} q^.inf:= a; {заносим в информационную часть, значение данных} q^.next:= sag^.next; {в адресную часть второго элемента заносим адресную часть первого элемента} sag^.next:= q; {в адресную часть первого элемента заносим адрес созданного указателя} //---------сортировка qq:= sag^.next; //запоминаем адрес первого элемента ЛОС While qq<>Nil do {запускаем цикл выполняющийся пока не будет достигнут конец списка} begin s:= qq; //запоминаем адрес первого элемента ЛОС qq:= qq^.next; {запоминаем адрес следующего элемента ЛОС} if (qq<>nil) then {если адресная переменная не равна указателю конца списка} begin begin if (qq^.inf<s^.inf) then {если информационная часть следующего элемента меньше чем предыдущего, тогда:} begin a:= qq^.inf; {запоминаем значение информационной части следующего элемента} qq^.inf:=s^.inf; {в информационную часть следующего элемента запоминаем значение информационной части предыдущего элемента} s^.inf:= a; {в информационную часть предыдущего элемента запоминаем значение следующего элемента} end; end; end; end; //---------конец сортировки Proverka(w); {вход в процедуру проверки корректности ввода данных} a:= StrToInt(w); {перевод числа из строкового типа данных в целочисленный} end; end else begin While stroka<>'0' do {запускаем цикл выполняющийся пока не будет введен ноль} Begin New(q); {создаем адресную переменную для первого элемента} q^.inf2:= stroka; {заносим в информационную часть, значение данных} q^.next:= sag^.next; {в адресную часть второго элемента заносим адресную часть первого элемента} sag^.next:= q; {в адресную часть первого элемента заносим адрес созданного указателя} //---------сортировка qq:= sag^.next; //запоминаем адрес первого элемента ЛОС While qq<>Nil do {запускаем цикл выполняющийся пока не будет достигнут конец списка} begin s:= qq; //запоминаем адрес первого элемента ЛОС qq:= qq^.next; {запоминаем адрес следующего элемента ЛОС} if (qq<>nil) then {если адрес переменной не равен указателю конца списка} begin begin if (qq^.inf2<s^.inf2) then {если информационная часть следующего элемента меньше чем предыдущего, тогда:} begin a:= qq^.inf2; {запоминаем значение информационной части следующего элемента} qq^.inf2:=s^.inf2; {в информационную часть следующего элемента запоминаем значение информационной части предыдущего элемента} s^.inf2:= a; {в информационную часть предыдущего элемента запоминаем значение следующего элемента} end; end; end; end; //---------конец сортировки ReadLn(stroka); //ввод данных типа String end; end; WriteLn(''); WriteLn(rus('Ваш итоговый ЛОС:')); print(sag); //вывод ЛОС на экран WriteLn(' '); if st2=1 then //если ЛОС наполняется первый раз Gou(w); {процедура перемещения между процедурами} End; Procedure Vopros ( w: WE); {процедура вывода списка вариантов дальнейших вариантов работы в ЛОС} Begin WriteLn(rus('___________________________________________')); WriteLn(rus('Что Вы хотите выполнить дальше?')); WriteLn(''); WriteLn(rus('2 - Добавить элемент в начало списка')); Write(rus('3 - Добавить элемент в середину списка, перед указанным `)); WriteLn(rus('значением')); Write(rus('4 - Добавить элемент в середину списка, после указанного `)); WriteLn(rus('значения')); WriteLn(rus('5 - Добавить элемент в конец списка')); WriteLn(rus('')); WriteLn(rus('6 - Удалить элемент в начале списка')); Write(rus('7 - Удалить элемент ЛОС стоящий перед указанным `)); WriteLn(rus('значением списка')); Write(rus('8 - Удалить элемент ЛОС стоящий после указанного “)); WriteLn(rus('значения списка')); WriteLn(rus('9 - Удалить определенный элемент в списке')); WriteLn(rus('10 - Удалить элемент в конце списка')); WriteLn(rus('11 - Удалить первый и последний элементы ЛОС')); WriteLn(''); WriteLn(rus('12 - Очистить ЛОС')); WriteLn(''); WriteLn(rus('13 - Поиск элемента по его значению')); WriteLn(''); WriteLn(rus('14 - Сортировка элементов')); WriteLn(''); Write(rus('15 - Подсчитать количество идентичных по содержанию ')); WriteLn(rus('элементов с указанным')); WriteLn(''); WriteLn(rus('0 - Выход')); WriteLn(''); WriteLn(rus('___________________________________________')); End; Procedure Gou( w: WE); {процедура перемещения между процедурами} Begin WriteLn(rus('Нажмите Ввод для продолжения')); ReadLn(W); //ждем нажатия Enter While w<>'' do {проверяем был ли просто нажат Enter или пользователь что-то ввел. цикл будет работать пока пользователь не нажмет просто Enter, без ввода данных} begin WriteLn(''); if w='' then {если был нажат Enter без ввода данных продолжаем работу процедуры} else {иначе выдаем сообщение} WriteLn(rus('Будьте внимательны, нужно просто нажать на ввод!')); ReadLn(W); //ждем нажатия Enter end; WriteLn(''); WriteLn(''); Vopros(w); {процедура вывода списка вариантов дальнейших вариантов работы в ЛОС} WriteLn; WriteLn(''); proverka(w); {вход в процедуру проверки корректности ввода данных} oper:=strtoint(w); {перевод числа из строкового типа данных в целочисленный} While oper=1 do {если ЛОС не пустой то выводим сообщение} Begin Write(rus('Ваш ЛОС не пустой, для создания нового ')); Writeln(rus('удалите все элементы текущего.')); Writeln(rus('Выберите вариант дальнейших действий.')); proverka(w); {вход в процедуру проверки корректности ввода данных} oper:= StrToInt(w); {перевод числа из строкового типа данных в целочисленный} end; end; . . . Procedure Delet11 (var sag: PE); {процедура удаления первого и последнего, элементов в ЛОС} var k, kk, q, qq: PE; //адресные переменные Begin WriteLn(rus('Ваш ЛОС выглядел так:')); WriteLn(''); print(sag); //процедура вывода ЛОС WriteLn(''); q:= sag^.next; //запоминаем адрес первого элемента k:= sag^.next; //запоминаем адрес первого элемента If q^.next=Nil then {если адрес второго элемента содержит указывает на конец списка} Begin sag^.next:=q^.next; {в адресную часть первого элемента заносим указатель на конец списка} dispose(k); //удаляем адрес первого элемента WriteLn(rus('В ЛОС был только один элемент!')); //выводим сообщение WriteLn(' '); End Else //иначе Begin qq:=sag^.next; //запоминаем адрес первого элемента q:=qq^.next; //запоминаем адрес второго элемента if (q^.next= Nil) then {если адресная часть второго элемента указывает на конец списка (это означает что в ЛОС только два элемента)} Begin sag^.next:=Nil; {в адресную часть начала ЛОС заносим указатель на конец списка} dispose(q); //удаляем адрес первого элемента dispose(q); //удаляем адрес второго элемента End Else //иначе Begin q:= sag^.next; //запоминаем адрес второго элемента sag^.next:=q^.next; {в адресную часть первого элемента заносим адрес второго элемента} dispose(k); //удаляем адрес первого элемента q:= sag^.next; //запоминаем адрес первого элемента qq:=q^.next; //запоминаем адрес второго элемента While (q<>Nil)do {цикл удаления последнего элемента проходим по списку, до тех пор, пока указатель не будет равен значению, указателя на конец списка} Begin kk:=q; //запоминаем адрес текущего элемента q:=q^.next; //запоминание следующего адреса k:= qq; //запоминаем адрес следующего элемента qq:=qq^.next; //запоминание следующего адреса if qq=Nil then {если адресная часть следующего элемента указывает на значение конца списка значит мы нашли адрес последнего элемента ЛОС}
Страницы: 1, 2, 3
|