Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
123441.doc
Скачиваний:
4
Добавлен:
24.09.2019
Размер:
427.52 Кб
Скачать

-1-

Под системой счисления понимается способ представления любого числа с помощью некоторого алфавита символов, называемых цифрами. Системы счисления подразделяют на: позиционные и непозиционные.

Непозиционными системами являются такие системы счисления, в которых каждый символ сохраняет свое значение независимо от места его положения в числе. Примером непозиционной системы счисления является римская система. К недостаткам таких систем относятся наличие большого количества знаков при записи чисел и сложность выполнения арифметических операций.

Система счисления называется позиционной, если одна и та же цифра имеет различное значение, определяющееся позицией цифры в последовательности цифр, изображающей число. Это значение меняется в однозначной зависимости от позиции, занимаемой цифрой, по некоторому закону. Наиболее известным примером позиционной системы счисления является десятичная система, используемая в повседневной жизни.

Количество p различных цифр, употребляемых в позиционной системе, определяет название системы счисления и называется основанием системы счисления p. Например, в десятичной системе используются десять цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9; и эта система имеет основанием число десять.

Любое число N в позиционной системе счисления с основанием p может быть представлено в виде полинома (многочлена) от основания p:

N = anpn+an-1pn-1+ ... +a1p+a0+a-1p-1+a-2p-2+ ...

здесь N - число, aj - коэффициенты (цифры числа), p - основание системы счисления (p>1). Принято записывать числа в виде последовательности цифр:

N = anan-1 ... a1a0 . a-1a-2 ...

В этой последовательности точка отделяет целую часть числа от дробной (коэффициенты при положительных степенях, включая нуль, от коэффициентов при отрицательных степенях). Точка опускается, если нет отрицательных степеней (число целое).

Сама же запись числа 757,7 означает сокращенную запись выражения

700 + 50 + 7 + 0,7 = 7 . 102 + 5 . 101 + 7 . 100 + 7 . 10—1 = 757,7.

-2-

Перевод целых десятичных чисел в недесятичную систему счисления осуществляется последовательным делением десятичного числа на основание той системы, в которую оно переводится, до тех пор, пока не получится частное меньшее этого основания. Число в новой системе записывается в виде остатков деления, начиная с последнего.

Примеры.

а) Перевести 18110 "8" с.с.

    Результат: 18110 = 2658

б) Перевести 62210 "16" с.с.

    Результат: 62210 = 26E16

Ответ: 7510 = 1 001 0112 = 1138 = 4B16.

Перевод правильных дробей из десятичной системы счисления в недесятичную. Для перевода правильной десятичной дроби в другую систему эту дробь надо последовательно умножать на основание той системы, в которую она переводится. При этом умножаются только дробные части. Дробь в новой системе записывается в виде целых частей произведений, начиная с первого.

Пример.

Перевести 0.312510 "8" с.с.

    

Результат: 0.312510 = 0.248

Замечание. Конечной десятичной дроби в другой системе счисления может соответствовать бесконечная (иногда периодическая) дробь. В этом случае количество знаков в представлении дроби в новой системе берется в зависимости от требуемой точности.

Пример.

Перевести 0.6510 "2" с.с. Точность 6 знаков.

     Результат: 0.6510   0.10(1001)2

Для перевода неправильной десятичной дроби в систему счисления с недесятичным основанием необходимо отдельно перевести целую часть и отдельно дробную.

-3-

Для того чтобы выполнить обратное преобразование, необходимо число в системе счисления с основанием q записать в развернутом виде и выполнить необходимые вычисления.

Рассмотрим перевод двоичного числа 101110,1012 в десятичное число. Для этого запишем это двоичное число в развернутом виде, используя формулу:

Аq=an-1 • qn-1 + an-2 • qn-2 + …+ a0 • q0 +a-1 • q-1 + a-2 • q-2 + …+ a-m • q-m

и выполним необходимые вычисления.

Основание системы: q=2, число разрядов целой части числа: n=6, число разрядов дробной части числа: m=3, цифры двоичной системы счисления а представлены нулем или единицей.

101110,1012=1×25+0×24+1×23+1×22+1×21+0×20+1×2-1+0×2-2+1×2-3 =32+0+8+4+2+0+1/2+0+1/8=46,62510

Рассмотрим перевод шестнадцатеричного числа 9D,116 в десятичное:

9D,116=9×161+13×160+1×16-1=144+13+1/16=157,062510

-4-

Целые числа могут представляться в компьютере со знаком или без знака.

Целые числа без знака

Обычно  занимают  в  памяти  компьютера  один  или  два  байта.     В  однобайтовом  формате  принимают  значения  от  000000002   до   111111112.     В двубайтовом формате - от  00000000 000000002   до   11111111 111111112.

Диапазоны значений целых чисел без знака

Целые числа со знаком

Обычно занимают в памяти компьютера один, два или четыре байта, при этом самый левый (старший) разряд содержит информацию о знаке числа.

В компьютерной технике применяются три формы записи (кодирования) целых чисел со знаком:  прямой код,   обратный код,   дополнительный код.

Последние две формы применяются особенно широко, так как позволяют упростить конструкцию арифметико-логического устройства компьютера путем замены разнообразных арифметических операций операцией cложения.

Положительные числа в прямом, обратном и дополнительном кодах изображаются одинаково  -  двоичными кодами с цифрой 0 в знаковом разряде Отрицательные числа в прямом, обратном и дополнительном кодах имеют разное изображение.

Для представления отрицательных целых чисел используется дополнительный код.

Получить дополнительный код можно по следующему алгоритму:

1) записать внутреннее представление положительного числа X;

2) записать обратный код этого числа заменой во всех разрядах 0 на 1 и 1 на 0;

3) к полученному числу прибавить 1.

Определим по этим правилам внутреннее представление числа -2510 в 8-разрядной ячейке:

1) 00011001

2) 11100110

3) +1

11100111 — это и есть представление числа -25.

В результате выполнения такого алгоритма единица в старшем разряде получается автоматически. Она и является признаком отрицательного значения.

-5-

Целые и дробные числа в совокупности называются вещественными числами. В математике также используется термин «действительные числа». Решение большинства математических задач сводится к вычислениям с вещественными числами.

Всякое вещественное число (X) можно записать в виде произведения мантиссы m и основания системы счисления р в некоторой целой степени n, которую называют порядком:

X = m · рn.

Например, число 25,324 можно записать в таком виде: 0,25324 · 102. Здесь m = 0,25324 — мантисса, n = 2 — порядок. Порядок указывает, на какое количество позиций и в каком направлении должна сместиться десятичная запятая в мантиссе.

Чаще всего для хранения вещественных чисел в памяти компьютера используется либо 32-разрядная, либо 64-разрядная ячейка. Первый вариант называется представлением с обычной точностью, второй — представлением с удвоенной точностью. В ячейке хранятся два числа в двоичной системе счисления: мантисса и порядок. Здесь мы не будем подробно рассматривать правила представления вещественных чисел. Отметим лишь основные следствия, вытекающие из этих правил, которые важно знать пользователю компьютера, занимающемуся математическими вычислениями.

Особенности работы компьютера с вещественными числами

1. Диапазон вещественных чисел ограничен. Но он значительно шире, чем для рассмотренного ранее способа представления целых чисел. Например, при использовании 32-разрядной ячейки этот диапазон следующий:

-3,4 · 1038 < X < 3,4 · 1038.

2. Выход за диапазон (переполнение) - аварийная ситуация для процессора, который прерывает свою работу.

3. Результаты машинных вычислений с вещественными числами содержат погрешность. При использовании удвоенной точности эта погрешность уменьшается.

Коротко о главном

В памяти компьютера целые числа представляются в двоичной системе счисления и могут занимать ячейку размером 8, 16, 32 и т. д. битов.

Диапазон значений целых чисел ограничен. Чем больше размер ячейки, тем шире диапазон.

При выходе результатов вычислений с целыми числами за допустимый диапазон работа процессора не прерывается. При этом результаты могут оказаться неверными.

Вещественные числа представляются в виде совокупности мантиссы и порядка в двоичной системе счисления. Обычный размер ячейки — 32 или 64 бита.

Результаты вычислений с вещественными числами приближенные. Переполнение приводит к прерыванию работы процессора.

-6-

Алгебра логики — это раздел математики, изучающий высказывания, рассматриваемые со стороны их логических значений (истинности или ложности) и логических операций над ними.

Логическое высказывание — это любoе повествовательное пpедлoжение, в oтнoшении кoтopoгo мoжно oднoзначнo сказать, истиннo oнo или лoжнo.

Высказывательная форма — это повествовательное предложение, которое прямо или косвенно содержит хотя бы одну переменную и становится высказыванием, когда все переменные замещаются своими значениями.

Чтобы обращаться к логическим высказываниям, им назначают имена.

НЕ    Операция,, называется отрицанием

И    Операция, называется конъюнкцией

ИЛИ    Операция называется дизъюнкцией

ЕСЛИ-ТО   Операция называется импликацией

РАВНОСИЛЬНО   Операция

эквиваленцией или двойной импликацией и обозначается знаком     или  ~.  

Таким образом, операций отрицания, дизъюнкции и конъюнкции достаточно, чтобы описывать и обрабатывать логические высказывания.

С помощью логических переменных и символов логических операций любое высказывание можно формализовать, то есть заменить логической формулой. Определение логической формулы: Всякая логическая переменная и символы "истина" ("1") и "ложь" ("0") — формулы.

Если  А и В — формулы,   то   ,   А . В ,   А v В ,   А B ,   А В   —  формулы. Никаких других формул в алгебре логики нет.

Если две формулы А и В одновременно, то есть при одинаковых наборах значений входящих в них переменных, принимают одинаковые значения, то они называются равносильными.

Какая связь между алгеброй логики и двоичным кодированием? Математический аппарат алгебры логики очень удобен для описания того, как функционируют аппаратные средства компьютера, поскольку основной системой счисления в компьютере является двоичная, в которой используются цифры 1 и 0, а значений логических переменных тоже два: “1” и “0”. Из этого следует два вывода: одни и те же устройства компьютера могут применяться для обработки и хранения как числовой информации, представленной в двоичной системе счисления, так и логических переменных;

на этапе конструирования аппаратных средств алгебра логики позволяет значительно упростить логические функции, описывающие функционирование схем компьютера, и, следовательно, уменьшить число элементарных логических элементов, из десятков тысяч которых состоят основные узлы компьютера.

-7-

Название "алгоритм" произошло от латинской формы имени величайшего среднеазиатского математика Мухаммеда ибн Муса ал-Хорезми (Alhorithmi), жившего в 783—850 гг.

Алгоpитм — заранее заданное понятное и точное пpедписание возможному исполнителю совеpшить определенную последовательность действий для получения решения задачи за конечное число шагов.

Понятие алгоритма является не только одним из главных понятий математики, но одним из главных понятий современной науки. Более того, с наступлением эры информатики алгоритмы становятся одним из важнейших факторов цивилизации.

Основные свойства алгоритмов следующие:

1. Понятность

2. Дискpетность (прерывность, раздельность) — алгоpитм должен пpедставлять пpоцесс pешения задачи как последовательное выполнение пpостых (или pанее опpеделенных) шагов (этапов).

Опpеделенность — каждое пpавило алгоpитма должно быть четким, однозначным и не оставлять места для пpоизвола.

4. Pезультативность

5. Массовость означает, что алгоpитм pешения задачи pазpабатывается в общем виде, т.е. он должен быть пpименим для некотоpого класса задач, pазличающихся лишь исходными данными.

На практике наиболее распространены следующие формы представления алгоритмов:

словесная (запись на естественном языке);

графическая (изображения из графических символов);

псевдокоды (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др.);

программная (тексты на языках программирования).

Что такое базовые алгоритмические структуры?

Алгоритмы можно представлять как некоторые структуры, состоящие из отдельных базовых (т.е. основных) элементов.

Логическая структура любого алгоритма может быть представлена комбинацией трех базовых структур: следование, ветвление, цикл.

Алгоритмические структуры образуют линейную последовательность операций, которые выполняются по очереди в порядке записи – следование. Возможность альтернативного выбора при выполнении программы представляют ветвления, при выполнении которых алгоритм может пойти по одной из двух возможных ветвей в зависимости от справедливости проверяемого условия. Цикл представляет собой многократно повторяющуюся последовательность шагов алгоритма. Характерной особенностью базовых структур является наличие в них одного входа и одного выхода.

-8-

Интегрированная среда программирования

Текст программы, написанной на любом языке программирования, кроме машинного должен быть обработан специальной программой – транслятором.

Трансляторы делятся на две основные группы: компиляторы и интерпретаторы. Компилятор – это обслуживающая программа, выполняющая трансляцию программы с одного языка программирования на другой. Чаше всего компилятор переводит программу, написанную на исходном языке, в машинные коды. Сам процесс трансляции называется компиляцией. Интерпретатор – программа, осуществляющая пооператорную трансляцию и выполнение исходной программы. На выходе компилятора порождается не готовый к исполнению машинный код, который нуждается в дальнейшей обработке. Дело в том, что программа на языке высокого уровня пользуется готовыми отлаженными фрагментами кода для выполнения различных типовых действий Такие фрагменты кода называются подпрограммами и находятся в библиотеках, представленных в виде отдельных файлов, расположенных на магнитном диске. Компилятор во время работы распознает название библиотечных подпрограмм, но не может, да и не должен извлекать нужные подпрограммы из библиотек и вставлять их в сформированный машинный код программы. Этим занимается другая программа – компоновщик (редактор связей), которая собирает все объектные коды в полноценный исполняемый код.Для получения исполняемого кода программа на языке высокого уровня должна пройти два этапа обработки: - компиляция, - компоновка. Результаты компиляции и компоновки могут быть сохранены на диске, а могут оставаться в оперативной памяти.

Для того, чтобы иметь удобные универсальные средства, которые могут обеспечить быстрое прохождение всей цепочки действий от набора исходного текста до полученного результата, и существуют специальные программные комплексы, называемые системами программирования. В них можно выделить (Текстовый редактор, Компилятор и компоновщик, Отладчик, который позволяет выполнять программу по шагам; Набор библиотек с готовыми подпрограммами, Набор примеров законченных программ, Программы-утилиты,

Файлы с документацией.)

-9-

Основные опред алг языка. Конст и типы данных

Символы – это основные неделимые знаки, из которых составляются все тексты программ на данном языке. Совокупность всех символов образует алфавит языка. Лексемы – это неделимые последовательности символов алфавита (элементарные конструкции), имеющие самостоятельный смысл. Они образуются из основных символов языка, так же как слова обычного языка строятся из букв. Возможны лексемы, состоящие из одного символа, например, знаки операций. Выражения строятся из лексем в стpогом соответствии с правилами языка. Они задают порядок вычисления некоторого значения. Выражения играют в языке программирования ту же роль, что и словосочетания в обычном языке. Операторы (инструкции или команды языка) задают полное описание некоторого действия, которое необходимо выполнить. Предложения языка, в которых даются сведения о данных, называются описаниями или неисполняемыми операторами. Совокупность описаний и операторов языка программирования, реализующая алгоритм решения конкретной задачи, образует программу на данном языке. Синтаксис — это правила построения фраз, позволяющие определить, правильно или неправильно написана та или иная фраза. Точнее говоря, синтаксис языка представляет собой набор правил, устанавливающих, какие комбинации символов являются осмысленными предложениями на этом языке.Семантика определяет смысловое значение предложений языка. Являясь системой правил истолкования отдельных языковых конструкций, семантика устанавливает, какие последовательности действий описываются теми или иными фразами языка и, в конечном итоге, какой алгоритм определен данным текстом на алгоритмическом языке.

Каждый элемент данных в программе является константой или переменной. Константами называются элементы данных, значения которых в процессе выполнения программы не меняются. Переменные, в отличие от констант, могут менять свои значения при выполнении программы. В языке Pascal к стандартным типам относятся: Целочисленные; Вещественные; Символьный (литерный); Логический (булевский). Структурированные типы имеют в своей основе скалярные типы данных. К ним относятся: Массивы; Множества; Записи; Файлы; Классы (для объектно-ориентированных расширений языка).

Целые типы Целочисленных типов данных в языке Pascal довольно много. Они различаются размером выделенной ячейки памяти и способом представления (целое без знака или целое со знаком). (Byte (байтовый), Shortint (короткий целый), Integer (целый), Word (слово), Longint (длинный целый).

Логический тип Логический тип имеет всего два значения true (да – истина, 1) и false (нет – ложь, 0). Символьный тип Символьный (литерный) char и строковый типы представляют данные, являющиеся символами и их последовательностями – строками. Последовательность символов, заключенная в апострофы, является строкой и относится к типу string. Вещественные типы(Single (с одинарной точностью), Real (вещественный), Double (с двойной точностью), Extended (с повышенной точностью), Comp (сложный)

-12-

Структура программы

Программа на языке Pascal состоит из следующих разделов: заголовок, описательная часть(раздел подключаемых библиотечных модулей, раздел объявления меток, раздел объявления констант, раздел объявления типов, раздел объявления переменных, раздел объявления процедур и функций), исполнительная часть (раздел инструкций (операторов) программы, заключенных между словами begin и end, признак конца программы - . (точка).). В начале программы может находиться заголовок, состоящий из зарезервированного слова program,

с помощью которых программа взаимодействует со своим внешним окружением.

Описательная часть предназначена для объявления всех встречающихся в программе данных и других объектов.

В исполнительной части (разделе операторов) записывается последовательность исполняемых операторов. Каждый оператор выражает действие, которое необходимо выполнить. Раздел uses позволяет подключать стандартные и пользовательские библиотечные модули.

-10-

Операторы ввода-вывода. Оператор присваивания

Ввод данных – это передача исходных данных программы в оперативную память компьютера для обработки. Ввод данных – один из способов задания значений переменной. После окончания ввода значения переменных известны и их можно использовать в дальнейших вычислениях. Для ввода данных используются операторы READ и READLN. Вывод данных – это передача данных после обработки из оперативной памяти на устройства вывода. Для вывода данных используются операторы WRITE, WRITELN. Оператор присваивания задает значения переменных в ходе выполнения программы и имеет вид:

Имя переменной := выражение;

Знак := - читается как «присвоить значение». Оператор присваивания можно считать основным оператором языка Pascal, так как именно в нем выполняются практически все действия по обработке данных.

-11-

Стандартные функции языка Паскаль

Сложение - +, вычитание - -, умножение - *, деление - /, целочисленное деление – div, остаток от деления – mod, арифметическое и – and, арифметическое или – or, арифметическое отрицание – not. Стандартные арифметические функции

Abs(x)-модуль

Pi-число пи

Sin(x), cos(x), arctan(x), ln(x), exp(x)-экспонента, sqr(x)-x*x, sqrt(x)-корень х, round(x)-округление до ближ. целого

Trunc(x)-отсечение дробной части, int(x)-целая часть от числа, frac(x)-дробная часть от числа.

Основные логические операции: Not, And, Or, Xor(Исключающее ИЛИ)

-13-

Оператор условий if

Общий вид оператора If следующий: If <условие> then <действие 1> else <действие 2>; Служебные слова if, then, else в переводе с английского означают соответственно если, то, иначе. Оператор действует следующим образом, сначала проверяется, выполняется ли условие, находящееся после слова if. Если это условие выполняется (иначе говоря, является истинным), то выполняется действие 1, в противном случае, если условие не выполняется (является ложным) – выполняется действие 2, записанное после служебного слова else. В самом простом случае действие, осуществляемое в каждом из вариантов, состоит из одного оператора.

-14-

Оператор case

Общий вид оператора Case:

Case <селектор> of

<Значение 1> : <Действие 1>;

<Значение 2> : <Действие 2>;

……………………………….

<Значение n> : <Действие n>;

else <Вариант n+1>;

end; где case, of, else – служебные слова языка Паскаль. Селектором называется переменная целого или символьного типа (использование вещественного и строкового типа недопустимо). Переменная-селектор может принимать различные значения. После заголовка в операторе идет перечень возможных значений переменной-селектора. Каждому из этих значений соответствует определенный вариант действий, который реализуется в том случае, если в программе селектор принимает его значение. Этот вариант указывается после двоеточия, отделяющего его от значения, и представляет собой простой или составной оператор. Если переменная-селектор не принимает ни одно из перечисленных в операторе Case значений, то выполняется альтернативный вариант, который указан после служебного слова else. В отличие от условного оператора If в операторе Case перед else ставится точка с запятой. Эта часть оператора (else с соответствующим ему оператором) не является обязательной. Возможен сокращенный вариант без этой части. Заканчивается оператор Case служебным словом end, после которого ставится точка с запятой.

Возможна форма оператора Case, когда каждому варианту действий соответствует какая-либо группа значений селектора. Эта группа значений, находящихся в операторе перед двоеточием, может представлять собой как несколько отдельных значений, перечисленных через запятую, так и целый диапазон значений. В последнем случае указывается только начальное и конечное значение диапазона, а между ними ставится две точки.

-15-

Цикл счётчик. Вложенные циклы.

В программах, связанных с обработкой данных или другими сложными вычислениями, часто выполняются циклически повторяющиеся действия. Циклы позволяют записать такие действия в компактной форме. Цикл представляет собой последовательность операторов, которая выполняется неоднократно. В языке Паскаль имеется стандартный набор из трех разновидностей цикла – цикл с постусловием, цикл с предусловием и цикл со счетчиком.

В общем случае цикл состоит из двух основных блоков:

Заголовок цикла. В заголовке цикла содержится некоторое условие, которое определяет число повторений цикла.

Тело цикла. Телом цикла является простой или составной оператор, который может многократно повторяться в ходе работы цикла.

При работе цикла постоянно производится проверка содержащегося в заголовке условия. Цикл с параметром (оператор For)

Общий вид данного оператора следующий: For <счетчик цикла>:= <начальное значение> to <конечное значение> do <тело цикла>;

<счетчик цикла> - управляющая переменная цикла, значение которой изменяется от начального до конечного. При этом начальное значение должно быть меньше конечного. Переменная-счетчик должна быть порядкового типа, обычно это переменная типа integer, но допускается также типы char, boolean, а также пользовательские типы. Недопустимо использование переменной вещественного типа. <начальное значение> , <конечное значение> - начальное и конечное значение счетчика цикла. тело цикла> - обычно в качестве тела цикла выступает составной оператор, в который входит несколько других. Довольно часто возникает ситуация, когда требуется, чтобы счетчик цикла не увеличивался, а уменьшался. Для этих случаев предусмотрен другой вариант цикла For, который имеет следующий вид: For <счетчик цикла>:= <начальное значение> downto <конечное значение> do <тело цикла>; В этом случае счетчик цикла уменьшается от начального значения к конечному, при этом начальное значение должно быть больше конечного. Так, если в качестве счетчика цикла используется целочисленная переменная, то при каждом повторении тела цикла ее значение будет уменьшаться на единицу.

Вложенные циклы

В теле любого оператора цикла могут находиться другие операторы цикла. При этом цикл, содержащий в себе другой цикл, называется внешним, а цикл, находящийся в теле первого, - внутренним (вложенным). Правила организации внешнего и внутреннего циклов такие же, как и для простого цикла.

при вложении циклов внутренний цикл выполняется полностью от начального до конечного значения параметра при неизменном значении параметра внешнего цикла. Затем значение параметра внешнего цикла изменяется на единицу, и опять от начального до конечного выполняется вложенный цикл. И так до тех пор, пока значение параметра внешнего цикла не станет больше конечного значения, определенного в операторе For внешнего цикла.

-16-

Цикл с постусловием (оператор Repeat … until) Общий вид оператора следующий:

Repeat <тело цикла> until <условие>; <тело цикла> - один или несколько операторов. <уcловие> - условие, которое определяет дальнейшую работу цикла, будет ли он выполняться еще раз или будет завершен Для успешного завершения цикла в теле цикла должны производиться действия, оказывающие влияние на условие. Иначе цикл может стать бесконечным, что приведет к зависанию программы. Цикл работает следующим образом: вначале выполняется оператор или группа операторов, находящаяся в теле цикла. Затем проверяется условие, находящееся после until. Если условие истинно, то работа цикла на этом завершается, если условие ложно, то тело цикла выполняется снова, после чего выполняется очередная проверка и т.д. Таким образом, данный цикл будет работать до тех пор, пока условие, находящееся после слова until ложно. Такой цикл называется с постусловием.

-17-

Цикл с предусловием (Оператор While)

Общий вид оператора While следующий: While <условие> do <тело цикла>; <тело цикла> - обычно в качестве тела цикла выступает составной оператор, в который входит несколько других.

<уcловие> - условие, которое определяет дальнейшую работу цикла, будет ли он выполняться еще раз или будет завершен. Цикл работает следующим образом: первоначально проверяется условие, находящееся после слова While. Если данное условие является ложным, то работа цикла на этом и завершается. Если условие является истинным, то выполняется оператор или группа операторов, находящихся в цикле. Затем снова производится проверка условия, содержащегося в строке заголовка, и так далее.

Цикл называется с предусловием. Это объясняется тем, что перед первым же выполнением цикла производится проверка истинности находящегося в заголовке условия.

-18-

Одномерные массивы.

Если работа программы связаны с хранением и обработкой большого количества однотипных переменных, для их представления в программе можно использовать массивы. Массив представляет собой совокупность данных (элементов) одного типа с общим для всех элементов именем. Элементы массивы пронумерованы, и обратиться к каждому из них можно по номеру (или по нескольким номерам – например, для элемента таблицы задается номер строки и столбца). Номера элементов массива иначе называется индексами, а сами элементы массива – переменные с индексами (индексированными переменными). Характеристики массива: Тип – общий тип всех элементов массива; Размерность (ранг) – количество индексов массива; Диапазон изменения индекса – определяет количество элементов в массиве. Вектор (одномерный массив) - это массив, в котором элементы нумеруется одним индексом.

Наиболее часто индекс – это целая константа или переменная типа integer, реже – типа char или boolean. В случае использования массива в программе он предварительно должен быть описан в разделе переменных. Это необходимо, чтобы компилятор мог выделить память под элементы массива. Описание массива включает в себя указание, из переменных какого типа должен состоять массив, сколько в нем должно быть элементов и какие индексы должны быть использованы для доступа к его элементам.

Var

a: array [1…20] of integer;

a: array [‘a’…’m’] of integer;

Предварительное описание типа считается более строгим способом описания массива. Такое описание необходимо, например, при использовании имени массива в качестве параметра процедуры и функции.

Type

Имя типа= array [<нижняя граница>..<верхняя граница>] of <тип элементов>;

Var

Имя массива : Имя типа;

Инициализация массива начальными значениями.

Массив можно описать как типизированную константу в разделе описания констант.

Const x: array [1..5] of integer=(1,3,5,7,9);

Заполнение массива данными.

Инициализированные массивы уже содержат данные. В остальных случаях необходимо заполнить массив данными, прежде чем выполнять с ними какие-либо действия.

Заполнение массива можно выполнить следующими способами: Вводом значений с клавиатуры; Присвоением заданных или случайных значений; Считываем значения элементов из файла.

Довольно часто массивы заполняются при помощи случайных чисел. Для генерации случайных чисел используется стандартная функция random

Вывод массива.

Вывод значений элементов массива также выводится в цикле for с использованием операторов write и writeln.

Вывод в столбец массива а, состоящего из n элементов.

for i:=1 to n do writeln (a[i] ); Вывод элементов массива а, состоящего из n элементов, в строке через пробел.

for i:=1 to n do

writeln (a[ i] , ‘ ‘);

writeln;

-19-

Двумерный массив

Простейшим примером двумерного массива является всем известная таблица умножения. в любом двумерном массиве элемент определяется по двум индексам.

В языке Паскаль в общем виде двумерные массивы описываются следующим образом:

Var

<имя массива>: array [<нижняя граница индекса 1> . .<верхняя граница индекса 1>,

<нижняя граница индекса 2> . . <верхняя граница индекса 2>]

of <тип элементов>;

Заполнение массива можно выполнить следующими способами: вводом значений элементов с клавиатуры, присваиванием заданных или случайных значений, считывая значения элементов из файла.. В любом случае для заполнения массива используется цикл.

Вывод элементов также выполняется в цикле for с использованием операторов write и writeln. Вывод матрицы в стандартной форме записи – по строкам и столбцам – выполняется так:

for i:=1 to n do begin

for j:=1 to m do write(a[i,j]:4);

writeln;

end;

-20-

Тип данных char. Операции над символами.

Если в программе задействована символьная переменная, она должна быть предварительно указана в разделе описаний подобно числовым переменным. Если в программе переменной символьного типа присваивается какое-либо значение, то оно также должно быть заключено в апострофы. Например: bykv:=’ш’ Подобно обычным числам символьные величины можно сравнить. При этом фактически сравниваются не сами эти величины, а соответствующие им числовые коды. Для данных символьного типа определены следующие стандартные функции: Chr(x) –возвращает значение символа по его коду;

Ord(ch) – возвращает код заданного символа ch;

Pred(ch) – возвращает предыдущий символ;

Succ(ch) - возвращает следующий символ;

Upcase(ch) – преобразует строчную букву в заглавную. Обрабатывает буквы только латинского алфавита.

-21-

Тип данных string

Строка – это последовательность символов. Максимальное количество символов в строке (длина строки) может изменяться от 1 до 255. Переменную строкового типа можно определить через описание типа в разделе определения типов или непосредственно в разделе объявления переменных:

Type

ИмяТипа = string [максимальная длина строки];

Var

Идентификатор, …: ИмяТипа;

Строковую переменную можно задать и без предварительного объявления типа:

Var

Идентификатор, …: string [максимальная длина строки];

Var

Идентификатор, …: string; Строка в языке Паскаль трактуется одновременно и как простое значение, так и массив символов. Поэтому некоторые операции могут выполняться над строкой целиком (например, ввод и вывод), но одновременно можно обрабатывать и каждый символ по отдельности.

К любому символу в строке можно обратиться как к элементу массива Array [0..n] of char

Операции над строками

Над строковыми данными допустимы операция сцепления и операция отношения. Используя строковые переменные, константы, функции и операцию сцепления, можно строить строковые выражения.

Операция сцепления (+).

Это операция применяется для соединения нескольких строк. Для занесения в строковую переменную результата используется строкового выражения используется оператор присваивания:

Операции отношения

Операции =, <>, >, <, >=, <= выполняют сравнение двух строковых операндов и используются в основном при проверке условий. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается большей, в которой код первого несовпадающего символа больше. Строки считаются равными, если они совпадают по длине и содержат одни и те же символы.

-22-

Понятие подпрограммы. Локальные и глобальные переменные.

Само название подпрограмма говорит о том, что это часть программы, которая оформляется как самостоятельная программная единица. Подпрограмма обязательно должна иметь уникальное имя (идентификатор), это имя и употребляется для вызова подпрограммы. Понятно, что такой вызов можно выполнять многократно, более того, одни и те же подпрограммы можно использовать в разных программах, отладив их код только один раз.

В программах на Pascal используются подпрограммы двух видов: процедуры и функции. Имея один и тот же смысл и аналогичную структуру, они несколько различаются назначением и способом их использования.

  • Все процедуры и функции, в свою очередь, подразделяются на две группы: (стандартные (встроенные); определенные пользователем.). Встроенные (стандартные) процедуры и функции входят в стандартные библиотеки и могут вызываться по имени без предварительного описания К наиболее широко употребляемым стандартным функциям (sin, ln, cos, arctan, round). Процедуры и функции пользователя пишутся самим программистом и помещаются в раздел описаний процедур и функций. Их вызов для выполнения записывается в разделе операторов основной программы или другой подпрограммы.

-23,24-

Процедуры

Процедура — это независимая именованная часть программы, которую после однократного описания можно многократно вызывать по имени из последующих частей программы. Вызов процедуры оформляется как отдельный оператор.

Структура процедуры повторяет структуру программы, это "программа в миниатюре", состоящая из заголовка и тела. В отличие от программы, для процедур и функций наличие заголовка обязательно. Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры и необязательного списка формальных параметров. Тело процедуры по своей структуре аналогично обычной программе:

Procedure

<заголовок процедуры >:(формальные параметры);

<раздел описаний процедуры >;

begin

<раздел операторов процедуры >

End;

Для обращения к процедуре используется оператор вызова процедуры. Он состоит из имени процедуры и необязательного списка фактических параметров, отделенных друг от друга запятыми:

Имя Процедуры (Фактические Параметры); Для принудительного выхода из процедуры в ее теле записывается оператор завершения exit, который обеспечивает выход во внешний блокМеханизм передачи параметров

Параметры, которые указываются при описании процедур и функций, называются формальными. Название "формальные" параметры получили в связи с тем, что они нужны только для записи алгоритма, а при вызове подпрограмм мы на их место будут подставлены конкретные фактические параметры.

Соответствие между формальными и фактическими параметрами обеспечивается выполнением следующих требований: формальных и фактических параметров должно быть одинаковое количество; порядок следования фактических и формальных параметров должен был один и тот же; тип фактического параметра должен быть совместим с типом соответствующего ему формального параметра. Имеются два основных вида параметров, которые отличаются способом их передачи в подпрограмму: параметры-значения

параметры-переменные.

Параметры-значения

Параметры-значения используются только для передачи исходных данных из основной программы в процедуру или функцию. По умолчанию параметры подпрограммы считаются именно параметрами-значениями.

В данном случае подпрограмме передается лишь значение параметра, которое помещается в переменную, специально созданную для той цели. Таким образом, в подпрограмме используется копия фактического параметра. В теле подпрограммы формальные параметры могут изменяться, но это никак не отразится на фактических параметрах, т. к. меняется их копия.

Поэтому параметры-значения нельзя использовать для передачи результатов из подпрограммы в основную программу.

Зато фактическим параметром-значением может быть не только константа ли переменная с заданным значением, но и произвольное выражение. Перед вызовом подпрограммы фактические параметры вычисляются, и полученное значение передается в подпрограмму — выполняется подстановка значений.

Параметры-переменные

Параметры-переменные необходимо использовать, прежде всего, для возврата результатов работы подпрограммы в основную программу. В списке формальных параметров перед ними ставится ключевое слово var. Каждому формальному параметру-переменной должен соответствовать фак­тический параметр обязательно в виде переменной. Выражение здесь недо­пустимо, т. к. результаты подпрограммы могут быть сохранены только в пе­ременных

В этом случае при вызове подпрограммы ей передается адрес фактического параметра в памяти и в дальнейшем подпрограмма работает именно с этой ячейкой памяти, а не с копией, как при использовании параметра-значения.

Исходные данные в подпрограмму могут передаваться как через параметры-значения, так и через параметры-переменные, а результаты работы подпрограммы возвращаются в программу только через параметры-переменные

-25-

Функции

Если результатом подпрограммы является только одно значение, то имеет смысл оформить такую подпрограмму не в виде процедуры, а в виде функции. Функция пользователя во всем аналогична процедуре, за исключением того, что функция передает в программу результат своей работы — единственное значение, носителем которого является имя самой функции;

Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово function, имя функции, необязательный список формальных параметров и, — в отличие от процедуры, тип возвращаемого функцией значения. Тело функции по своей структуре аналогично обычной программе:

Function

Имя Функции( Формальные Параметры) : Тип Результата;

{ Описательная часть функции }

Begin

Инструкции исполнительной части функции }

Имя Функции := Результат;

end;

В разделе операторов функции должен находиться по крайней мере один оператор, который присваивает ее имени значение результата работы функции. Если таких присваиваний несколько, то результатом функции будет значение последнего выполненного оператора присваивания. Если же такой оператор отсутствует, то значение, возвращаемое функцией, не определеноВ отличие от процедуры, вызов функции не оформляется в виде отдельного оператора. Обращение к функции пользователя осуществляется аналогично обращению к стандартной функции, т. е. посредством ее использования в выражении. Можно считать, что разработка собственных функций позволяет расширить список стандартных функций, доступных программе.

-26-

Рекурсия

Возможен такой вариант, когда какая-либо функция или процедура содержит обращение к самой себе. Такая функция или процедура называется рекуррентной, процесс вызова функции или процедуры из нее самой — рекурсией. Рекурсия — это такой способ организации вычислительного процесса, при котором процедура или функция в ходе выполнения обращается сама к себе.

Процесс рекурсии происходит следующим образом: в начале происходит вызов некоторой функции (процедуры). Затем, еще до завершения своей работы, эта же функция (процедура) вызывает саму себя, и в результате в памяти компьютера появляется второй экземпляр той же функции (процедуры), второй экземпляр в ходе работы создает третий, и так далее. Естественно, что такой процесс может продолжаться до бесконечности, поэтому для решения какой-либо конкретной задачи в рекурсивной функции (процедуре) обязательно должен содержаться условный оператор, одна из ветвей которого обеспечивает прерывание этой бесконечной цепочки и завершение работы всех экземпляров функции (процедуры). Внутри этого оператора и должен находиться вызов функции.

-27-

Сортировка обменом («Пузырьковая» сортировка)

Метод пузырьковой сортировки заключается в следующем:

  • начиная снизу, сравниваем два соседних элемента; если они стоят «неправильно», меняем их местами

  • за 1 проход по массиву один элемент (самый маленький) становится на свое место

Для сортировки массива из N элементов нужен N-1 проход (достаточно поставить на свои места N-1 элементов).

Программа:

program qq;

const N = 10;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]