Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program AiSD_1_4;
- {$APPTYPE CONSOLE}
- Uses
- SysUtils,
- Windows;
- Type
- Number = ^Elem;
- Elem = Record
- AbonentNumber: String[30];
- NextNumber: Number;
- PrevNumber: Number;
- End;
- Number2 = ^Elem2;
- Elem2 = Record
- Data: String[30];
- Next: Number2;
- End;
- Function InputAmount(): Integer; //ввод количества
- Const
- MIN_NUMBER = 1;
- MAX_NUMBER = 9;
- Var
- Amount: Integer;
- IsCorrect: Boolean;
- Begin
- Writeln('Введите количество номеров телефонов:');
- Repeat
- Try
- IsCorrect := True;
- Readln(Amount);
- Except
- Writeln('Проверьте корректность ввода и повторите попытку!');
- IsCorrect := False;
- End;
- If (IsCorrect) And ((Amount < MIN_NUMBER) Or (Amount > MAX_NUMBER)) Then
- Begin
- IsCorrect := False;
- Writeln('Неправильное значение! Введите от', MIN_NUMBER, 'до', MAX_NUMBER, '!');
- End;
- Until (IsCorrect);
- InputAmount := Amount;
- End;
- Procedure InputElements(Var List: Number; Amount: Integer); //ввод номеров
- Const
- MIN_LENGTH = 3;
- MAX_LENGTH = 7;
- Var
- X, Head, Y: Number;
- I: Integer;
- IsCorrect: Boolean;
- Begin
- New(X);
- List := X;
- X^.PrevNumber := Nil;
- For I := 1 To Amount Do
- Begin
- Y := X;
- Writeln('Введите ', I, '-й телефонный номер:');
- Repeat
- Try
- IsCorrect := True;
- Readln(Y^.AbonentNumber);
- Except
- Writeln('Проверьте корректность ввода и повторите попытку!');
- IsCorrect := False;
- End;
- If (IsCorrect) And ((Length(Y^.AbonentNumber) <> MIN_LENGTH) And
- (Length(Y^.AbonentNumber) <> MAX_LENGTH)) Then
- Begin
- IsCorrect := False;
- Writeln('Введено некорректный номер! Длина номера телефона может состовлять либо',
- MIN_LENGTH, ', либо ', MAX_LENGTH, '!');
- End;
- Until (IsCorrect);
- New(X);
- Y^.NextNumber := X;
- X^.PrevNumber := Y;
- End;
- Y^.NextNumber := Nil;
- End;
- Procedure OutputInputData(Y: Number); //вывод введенных номеров
- Begin
- Writeln('Список введённых номеров телефонов:');
- While Y <> Nil Do
- Begin
- Write(Y^.AbonentNumber + ' ');
- Y := Y^.NextNumber;
- End;
- End;
- Procedure ReverseList(List: Number); //список в обратном порядке
- Begin
- While List^.NextNumber <> Nil Do
- List := List^.NextNumber;
- While List <> Nil Do
- Begin
- Write(' ', List^.AbonentNumber);
- List := List^.PrevNumber;
- End;
- End;
- Procedure GetNewList(Var NewList: Number2; List: Number); //создание списка 7-значных
- Var
- Head, Current: Number2;
- Begin
- New(Head);
- NewList := Head;
- While List <> Nil Do
- Begin
- If Length(List^.AbonentNumber) = 7 Then
- Begin
- Current := Head;
- Current^.Data := List^.AbonentNumber;
- New(Head);
- Current^.Next := Head;
- List := List^.NextNumber;
- End
- Else
- List := List^.NextNumber;
- End;
- Current^.Next := Nil;
- End;
- Procedure Sort(NewList: Number2); //сортировка
- Begin
- While NewList <> Nil Do
- Begin
- Var
- Temp := NewList^.Next;
- While Temp <> Nil Do
- Begin
- If Temp^.Data < NewList^.Data Then
- Begin
- Var
- TempSwap := Temp^.Data;
- Temp^.Data := NewList^.Data;
- NewList^.Data := TempSwap;
- End;
- Temp := Temp^.Next;
- End;
- NewList := NewList^.Next;
- End;
- End;
- Procedure WriteSortList(NewList: Number2); //Вывод отсортированных 7-значных номеров
- Begin
- Writeln;
- Writeln('Список семизначных номеров:');
- While NewList <> Nil Do
- Begin
- Write(NewList^.Data + ' ');
- NewList := NewList^.Next;
- End;
- End;
- //Main
- Var
- Amount: Integer;
- List: Number;
- NewList: Number2;
- Begin
- InputElements(List, InputAmount());
- Writeln('------------------------------------------');
- OutputInputData(List);
- Writeln;
- Writeln('Список номеров телефонов:');
- ReverseList(List);
- GetNewList(NewList, List);
- Sort(NewList);
- WriteSortList(NewList);
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement