Автор работы: Пользователь скрыл имя, 10 Апреля 2014 в 15:55, реферат
В свою очередь объем передаваемой информации определяется полосой пропускания. Установлено, что достижимая скорость передачи информации тем выше, чем выше частота колебаний электрического тока или радиоволны. Для того, чтобы передать в закодированном виде любую букву алфавита, необходимо использовать 7–8 битов. Таким образом, если для передачи текста применять проводную связь с частотой 20 кГц, то стандартную книгу в 400–500 страниц можно будет передать примерно за 1,5–2 часа. При передаче по линии с частотой 32 МГц та же процедура потребует лишь 2–3 секунды .
В современном Паскале[12] для работы со строками используется встроенный тип string, поддерживающий операции конкатенации (+) и сравнения (> < = <> >= <=). Строки сравниваются в лексикографическом порядке. Например, строки считаются равными, если они имеют одинаковую длину и коды всех символов с одинаковыми индексами совпадают.
Тип string [n] или просто string в диалектах языка 1970—1990-х годов определялся в виде массива символов array [0..n] of char (n по умолчанию принимало значение 80 в UCSD Pascal и 255 в Turbo/Borland Pascal), код нулевого символа при таком представлении служит для задания длины строки, соответственно строка могла иметь максимальный размер 255 символов. По умолчанию в Delphi и FreePascal в качестве String используется тип AnsiString, память под который выделяется и освобождается компилятором динамически, а максимальный размер строки в текущих реализациях составляет 2 гигабайта. Кроме того, в Delphi и Free Pascal в качестве string может использоваться тип WideString, где применяется 16-битное представление символов в кодировке UCS-2, при этом средства преобразования из однобайтовых строк в многобайтовые и обратно в стандартной библиотеке языка отсутствуют.
Новые типы могут быть определены из существующих:
type { секция объявления типов }
x = Integer;
y = x;
...
Более того, из примитивных типов могут быть сконструированы составные:
type { секция объявления типов }
a = Array [1..10] of Integer; { определение массива }
b = record { определение записи }
x: Integer;
y: Char;
end;
c = File of a; { определение файла }
Файловые типы в Паскале делятся на типизированные, текстовые и файлы без типов.
Как показано в вышеприведённом примере, типизированные файлы в Паскале — это последовательности однотипных элементов. Для каждого файла существует переменная-указатель на буфер, которая обозначается f^. Процедуры get (для чтения) и put (для записи) перемещают указатель к следующему элементу. Чтение реализовано так, что read(f, x) представляет собою то же, что и get(f); x:=f^. Соответственно, запись реализована так, что write(f, x) представляет собою то же, что и f^ := x; put(f). Текстовые файлы text определены как расширение типа file of char и помимо стандартных операций над типизированными файлами (чтение, запись символа), позволяют осуществлять символьный ввод-вывод в файл всех типов данных аналогично консольному вводу-выводу.
Файлы без типов объявляются как переменные типа file. С ними можно проводить операции побайтового нетипизированного ввода-вывода по несколько блоков байт указанной длины через буфер, для этого служат специальные процедуры blockread и blockwrite (расширение UCSD).
Стандартные математические функции и процедуры Паскаля[править | править исходный текст]
Математические функции[править | править исходный текст]
Наименование функции |
Тип аргумента |
Тип значения |
Результат вычисления |
Abs(x) |
целый вещественный |
целый вещественный |
Абсолютное значение "х" |
Sin(x) |
вещественный |
вещественный |
синус "х" рад. |
Cos(x) |
вещественный |
вещественный |
косинус "х" рад. |
Arctan(x) |
вещественный |
вещественный |
арктангенс "х" ( -Pi/2 <y< Pi/2 ) |
Sqrt(x) |
вещественный |
вещественный |
квадратный корень из "х" |
Sqr(x) |
целый вещественный |
целый вещественный |
значение "х" в квадрате ( x2 ) |
Power(a,x) |
вещественный |
вещественный |
значение "a" в степени "x" ( ax ) |
Exp(x) |
вещественный |
вещественный |
значение "е" в степени "х" ( ex, где e= 2. 718282. . . ) |
Ln(x) |
вещественный |
вещественный |
натуральный логарифм "х" ( х > 0 ) |
Frac(x) |
вещественный |
вещественный |
дробная часть "х" |
Int(x) |
вещественный |
вещественный |
целая часть "х" |
Random |
- |
вещественный |
случайное число ( 0 <=y< 1 ) |
Random(x) |
Word |
Word |
случайное число ( 0 <=y< x ) |
Succ(c) |
порядковый |
порядковый |
следующий за "с" символ |
Pred(c) |
порядковый |
порядковый |
предшествующий "с" символ |
Математические процедуры[править | править исходный текст]
Наименование функции |
Тип аргумента |
Тип значения |
Результат вычисления |
Inc(x) |
целый |
целый |
Увеличивает "х" на 1 ( x:=x+1; ) |
Dec(x) |
целый |
целый |
Уменьшает "х" на 1 ( x:=x-1; ) |
Inc(x , n) |
целый |
целый |
"х" на n ( x:=x+n; ) |
Dec(x , n) |
целый |
целый |
"х" на n ( x:=x-n; ) |
Процедуры преобразования типов переменных[править | править исходный текст]
Наименование функции |
Тип аргумента |
Тип значения |
Результат вычисления |
Str(x , s) |
x-целый или вещественный |
s-строковый |
Последовательность символов "s" из цифр числа "x" |
Val(s , v, cod) |
s-строковый |
v-целый или вещественный cod-целый |
Двоичная форма числа последовательности "s" cod=0 (код ошибки) |
Функции преобразования типов переменных[править | править исходный текст]
Наименование функции |
Тип аргумента |
Тип значения |
Результат вычисления |
Trunc(x) |
вещественный |
LongInt |
целая часть "х" |
Round(x) |
вещественный |
LongInt |
округление "х" до целого |
Odd(x) |
целый |
логический |
возвращает True если "х" - нечетное число |
Chr(x) |
Byte |
Char |
Символ ASCII кода "х" |
Ord(x) |
Char |
Byte |
ASCII код символа "x" |
Указатели[править | править исходный текст]
Паскаль поддерживает использование указателей (типизированные ^тип и нетипизированные pointer):
type
a = ^b;
b = record
x: Integer;
y: Char;
z: a;
end;
var
pointer_to_b:a;
Здесь переменная pointer_to_b — указатель на тип данных b, являющийся записью. Тип типизированного указателя может быть задан перед объявлением типа, на который он ссылается. Это исключение к правилу, которое гласит, что любая вещь должна быть объявлена перед тем, как используется. Введение этого исключения позволило организовывать рекуррентные определения структур данных, в том числе такие, как линейные списки, стеки и очереди, включая указатель на запись в описании этой записи (см. также: нулевой указатель — nil).
Для типизированного указателя определена операция разыменования (её синтаксис: указатель^).
Чтобы создать новую запись и присвоить значение 10 и символ A полям a и b в ней, необходимы следующие операторы:
new(pointer_to_b); { выделение памяти указателю }
pointer_to_b^.x := 10; { разыменовывание указателя и обращение к полю записи }
pointer_to_b^.y := 'A';
pointer_to_b^.z := nil;
...
dispose(pointer_to_b); { освобождение памяти из-под указателя }
Для целей обращения к полям записей и объектов можно также использовать оператор with, как показано в примере:
new(pointer_to_b);
with pointer_to_b^ do
begin
x := 10;
y := 'A';
z := nil
end;
...
dispose(pointer_to_b);
Процедурный тип[править | править исходный текст]
В оригинальном языке Паскаль Йенсен и Вирта процедурный тип использовался только при описании формального параметра. Уже в TP существовал полноправный процедурный тип. В объявлении типа ставится заголовок процедуры либо функции (без имени), обобщённо описывающий интерфейс подпрограммы. Значение этого типа содержит указатель на подпрограмму с заголовком, соответствующую описанному в объявлении типа. С помощью идентификатора переменной может происходить вызов соответствующей процедуры или функции.
type myfunc=function:string;
function func1:string;
begin
func1:='func N 1'
end;
function func2:string;
begin
func2:='func N 2'
end;
var fun:myfunc;
begin
fun:=@func1;
writeln(fun) {происходит вызов функции func1}
end.
Операторы управления[править | править исходный текст]
Паскаль — язык структурного программирования, что означает, что программа состоит из выполняющихся последовательно отдельных стандартных операторов, в идеале — без использования команды GOTO.
while a <> b do { цикл с предусловием }
writeln('Ожидание');
if a > b then { условный оператор }
writeln('Условие выполнилось')
else { else-секция - может отсутствовать}
writeln('Условие не выполнилось');
for i := 1 to 10 do { итерационный цикл }
writeln('Итерация №', i:1);
for i in [1..10] do { итерационный цикл по множеству }
writeln('Итерация №', i:1); { появился в версии 2.4.0 }
with a do {Оператор With - метод ускорения доступа к полям записи}
begin
l:=1;
k:=2;
p:=-3;
end;
repeat { цикл с постусловием }
a := a + 1
until a = 10;
case i of { условный оператор множественного выбора }
0: write('ноль');
1: write('один');
2: write('два')
else write('неизвестное число') { else-секция - может отсутствовать}
end;
В операторах while, for, if, case в качестве выполняемого оператора может использоваться блок. Такая конструкция, представляющая собой обычный оператор или блок, называется сложным оператором.
В Turbo Pascal для управления процессом компиляции существуют директивы, которые помещаются в комментарии и позволяют переключать режимы работы компилятора — например, включать и отключать проверку операций ввода-вывода, переполнения:
assign(inp,'text.txt');
{$I-} { отключение режима IO checking- генерации кода завершения программы в случае ошибки ввода-вывода }
{ (для случая, если файл не найден)}
reset(inp);
{$I+} { включение режима IO checking }
if IOresult=0 then begin { проверяем значение переменой ioresult(<>0 в случае ошибки ввода-вывода) }
...
close(inp);
end else writeln('file not found')
Существуют директивы, аналогичные директивам препроцессора C/C++ ($ifdef, $define, $include), они обрабатываются компилятором в процессе компиляции.
Процедуры и функции[править | править исходный текст]
В Паскале подпрограммы делятся на процедуры и функции:
Синтаксически процедуры и функции состоят из заголовка (содержащего ключевое слово procedure или function, имени, за которым может следовать описание передаваемых параметров в скобках, тип возвращаемого значения через символ двоеточия для функций и точки с запятой для процедур), после заголовка следует тело, после которого ставится символ ;.
program mine(output);
var i : integer;
procedure print(var j: integer);
function next(k: integer): integer;
begin
next := k + 1
end;
begin
writeln('Всего: ', j);
j := next(j)
end;
begin
i := 1;
while i <= 10 do
print(i)
end.
Тело процедуры, как и программы, в свою очередь может содержать описания процедур и функций. Таким образом, процедуры и функции могут быть вложены друг в друга как угодно глубоко, при этом тело программы — самое верхнее в цепочке.
Причём содержимое секций описания переменных, типов, констант, внешнего тела (процедуры, функции, программы), расположенных перед описанием процедуры/функции, доступны внутри неё. Также, в большинстве диалектов из процедуры можно обращаться к параметрам внешней процедуры.
Вслед за заголовком процедур/функций вместо тела может помещаться ключевое слово forward, это делается в том случае, если описание процедуры/функции располагается в программе после её вызова, и связано с поддерживаемой в Паскале возможностью компиляции программы за один проход.
Процедуры отличаются от функций тем, что функции возвращают какое-либо значение, а процедуры — нет.
Модули[править | править исходный текст]
До появления связных модулей в их современном виде некоторые реализации Паскаля поддерживали модульность за счёт механизма включения заголовочных файлов, похожего на механизм #include в языке Си: с помощью специальной директивы, оформляемой в виде псевдокомментария, например, {$INCLUDE "файл"}, содержимое указанного файла прямо включалось в текст программы в исходном, текстовом виде. Таким образом можно было разделить программный код на множество фрагментов, для удобства редактирования, но перед компиляцией они автоматически объединялись в один файл программы, который в итоге и обрабатывался компилятором. Такая реализация модульности примитивна и имеет множество очевидных недостатков, поэтому она была быстро заменена.
Современные реализации языка Паскаль (начиная с UCSD Pascal) поддерживают модули. Программные модули могут быть двух видов: модуль главной программы, который, как обычно, начинается с ключевого слова program и тело которого содержит код, запускаемый после загрузки программы в память, и вспомогательных модулей, содержащих типы, константы, переменные, процедуры и функции, предназначенные для использования в других модулях, в том числе в главном модуле.
Информация о работе История развития проводных каналов связи