Обучение начальных курсов методам программирования на языке Turbo Pascal — страница 3

  • Просмотров 2713
  • Скачиваний 360
  • Размер файла 11
    Кб

компилятора {$P+}. В состоянии {$P+} переменная, описанная с клю- чевым словом string, является открытым строковым параметром. Для открытого строкового параметра фактический параметр мо- жет быть переменной любого строкового типа. В процедуре или функ- ции атрибут размера (максимальная длина) формального параметра будет тем же, что у фактического параметра. Открытые строковые параметры ведут себя также как парамет- ры-переменные

строкового типа, только их нельзя передавать как обычные переменные другим процедурам или функциям. Однако, их можно снова передать как открытые строковые параметры. В следующем примере параметр S процедуры AssignStr - это открытый строковый параметр: procedure AssignStr(var S: OpenString); begin S := '0123456789ABCDEF'; end; Так как S - это открытый строковый параметр, AssignStr можно передавать переменные любого строкового типа: var S1: string[10]; S1: string[20]; begin AssignStr(S1); { S1 :=

'0123456789' } AssignStr(S2); { S2 := '0123456789ABCDEF' } end; В AssingStr максимальная длина параметра S та же самая, что у фактического параметра. Таким образом, в первом вызове AssingStr при присваивании параметра S строка усекается, так как максимальная длина S1 равна 10. При применении к открытому строковому параметру стандартная функция Low возвращает 0, стандартная функция High возвращает описанную максимальную длину фактического параметра, а функция SizeOf

возвращает размер фактического параметра. В следующем примере процедура FillString заполняет строку заданным символом до ее максимальной длины. Обратите внимание на использование функции High для получения максимальной длины отк- рытого строкового параметра. procedure FillStr(var S: OpenString; Ch: Char); begin S[0] := Chr(High(S)); { задает длину строки } FillChar(S[1], High(S), Ch); { устанавливает число символов } end; Значения и параметры-константы, описанные с использованием

идентификатора OpenString или ключевого слова string в состоянии {$P+}, не являются открытыми строковыми параметрами. Они ведут себя также, как если бы были описаны с максимальной длиной стро- кового типа 255, а функция Hingh для таких параметров всегда возвращает 255. uses crt,dos; var i,j,i1,x:integer; DI: SearchRec; textf:array[1..800] of string[79]; procedure music; begin sound(800); delay(200); nosound; end; procedure myerror (s:string); var c:char; begin textbackground(4); window(10,10,70,16); clrscr; textcolor(15);

write('╔════════════════════════ Внимание ═════════════════════════╗'); write('║ ║'); write('║ ║'); write('║ ║'); write('║ ║');