История развития проводных каналов связи

Автор работы: Пользователь скрыл имя, 10 Апреля 2014 в 15:55, реферат

Краткое описание

В свою очередь объем передаваемой информации определяется полосой пропускания. Установлено, что достижимая скорость передачи информации тем выше, чем выше частота колебаний электрического тока или радиоволны. Для того, чтобы передать в закодированном виде любую букву алфавита, необходимо использовать 7–8 битов. Таким образом, если для передачи текста применять проводную связь с частотой 20 кГц, то стандартную книгу в 400–500 страниц можно будет передать примерно за 1,5–2 часа. При передаче по линии с частотой 32 МГц та же процедура потребует лишь 2–3 секунды .

Вложенные файлы: 1 файл

история развития проводных каналов связи.docx

— 61.61 Кб (Скачать файл)

В современном Паскале[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 и тело которого содержит код, запускаемый после загрузки программы в память, и вспомогательных модулей, содержащих типы, константы, переменные, процедуры и функции, предназначенные для использования в других модулях, в том числе в главном модуле.

Информация о работе История развития проводных каналов связи