Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program labwork1_4;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- System.SysUtils;
- type
- TPt = ^TElem;
- TElem = record
- Data: Integer;
- Next: TPt;
- Prev: TPt;
- end;
- procedure GetPhoneNumbers(var Element: TPt; Count: Integer);
- var
- I: Integer;
- Temp: TPt;
- begin
- for I := 1 to Count do
- begin
- Temp := Element;
- Write('Введите ', I, ' номер: ');
- Readln(Temp^.Data);
- if I <> Count then
- begin
- New(Element); //создаю следующий элемент
- Temp^.Next := Element; //добавляю в предыдущий элемент указатель на следующий
- Element^.Prev := Temp; //добавляю следующему элементу указатель на предыдущий желемент списка
- end
- else
- begin
- Temp^.Next := nil; //тк последний элемент, то указателя на след. элемент нет
- end;
- end;
- Writeln;
- end;
- procedure OutputReversePhoneNumbers(var LastElement: TPt; Count: Integer);
- var
- I: Integer;
- Temp: TPt;
- begin
- Writeln('Введённые номера:');
- //show phone numbers in reverse order
- for I := Count downto 1 do
- begin
- Temp := LastElement;
- Writeln(Temp^.Data);
- if I <> 1 then
- LastElement := Temp^.Prev;
- end;
- Writeln;
- end;
- procedure DeleteServicePhones(var Element: TPt; var Count: Integer);
- var
- NewCount, I: Integer;
- Temp: TPt;
- begin
- NewCount := Count;
- for I := 1 to Count do
- begin
- Temp := Element;
- if (Temp^.Data div 100 > 0) and (Temp^.Data div 100 < 10) then
- begin
- if (Temp^.Prev <> nil) and (Temp^.Next <> nil) then
- begin
- Temp^.Prev^.Next := Temp^.Next;
- Temp^.Next^.Prev := Temp^.Prev;
- Element := Temp^.Next;
- end
- else
- begin
- if (Temp^.Prev = nil) and (Temp^.Next <> nil) then //если это первый элемент списка
- begin
- Temp^.Next^.Prev := nil;
- Element := Temp^.Next;
- end;
- if (Temp^.Next = nil) and (Temp^.Prev <> nil) then //если последний
- begin
- Temp^.Prev^.Next := nil;
- Element := Temp^.Prev;
- end;
- end;
- Dec(NewCount);
- end
- else
- if (Temp^.Next <> nil) then
- Element := Temp^.Next;
- end;
- Count := NewCount;
- end;
- procedure SortPhoneNumbers(LastElement: TPt; Count: Integer);
- var
- I, J, TempNumber: Integer;
- Temp: TPt;
- begin
- for I := 1 to (Count - 1) do
- begin
- Temp := LastElement;
- for J := 1 to (Count - I) do
- begin
- if Temp^.Data <= Temp^.Prev^.Data then
- begin
- TempNumber := Temp^.Prev^.Data;
- Temp^.Prev^.Data := Temp^.Data;
- Temp^.Data := TempNumber;
- end;
- end;
- LastElement := Temp^.Prev;
- end;
- end;
- function GoToTheListHead(LastElement: TPt; Count: Integer): TPt;
- var
- I: Integer;
- Temp, Start: TPt;
- begin
- Start := LastElement;
- for I := 1 to (Count - 1) do
- begin
- Temp := Start;
- Start := Temp^.Prev;
- end;
- GoToTheListHead := Start;
- end;
- procedure ShowSortedPhoneSet(Element: TPt; Count: Integer);
- var
- I: Integer;
- Temp: TPt;
- begin
- Writeln('Полученный список номеров: ');
- if (Count > 0) then
- begin
- for I := 1 to Count do
- begin
- Temp := Element;
- Writeln(Temp^.Data);
- if I <> Count then
- Element := Temp^.Next;
- end;
- end
- else
- Writeln('Нет пользовательских номеров.');
- end;
- procedure Main();
- var
- Count: Integer;
- Element: TPt;
- begin
- Write('Введите количество номеров: ');
- Readln(Count);
- Writeln;
- Writeln('Выбранное Вами количество номеров: ', Count);
- New(Element);
- Element^.Prev := nil;
- GetPhoneNumbers(Element, Count);
- OutputReversePhoneNumbers(Element, Count);
- DeleteServicePhones(Element, Count);
- SortPhoneNumbers(Element, Count);
- Element := GoToTheListHead(Element, Count);
- ShowSortedPhoneSet(Element, Count);
- end;
- begin
- Main();
- Readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement