| >{ Поместить в стек 100 вещественных значений: }
| >for I := 1 to 100 do begin
| >R := I; { перевод в тип Real }
| >Push( St, R ); {и поместить его в стек }
| >end; { for I }
| >WriteLn( ' ':20, 'Первые 100 чисел' );
| >WriteLn( ' ': 17, '(вещественные значения)' );
| >WriteLn;
| >while not Empty(St) do begin { Пока стек не пуст: }
| >for B:=1 to 10 do begin { порциями по 10 элементов: }
| >Pop( St,R ); { вытолкнуть следующее зна- }
| >Write( R : 5 : 1 ) { чение и напечатать его }
| >end; { for В }
| >WriteLn { закрытие строки 10 чисел }
| >end; { while }
| >ReadLn { пауза до нажатия клавиши ввода }
| END.
Рис. 11.11
Обращаем внимание на рекурсивность в определении списка (вернее, его узла типа Node на рис. 11.10). В самом деле, тип ссылки на узел (NodePtr) определен, до того как задан сам тип узла Node.
- 219 -
Но в то же время поле Next узла имеет тот же тип NodePtr. Этот парадокс типов Паскаля разрешается самим компилятором. Можно определять ссылки на данные, содержащие элементы того же типа ссылки. Рекомендуется именно такой способ их задания, как в примере. Однако можно было бы перенести описание типа NodePtr за описание типа Node — ничего страшного не произошло бы.
- 220 -