Линейные_разветвления
.pdfФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Электротехнический факультет Кафедра электрических станций
Линейные и разветвляющиеся вычислительные процессы
Методические указания и задания к лабораторным и практическим занятиям
по дисциплине «Информатика» для студентов дневного отделения
специальностей 100100, 100400, 100700, 180100, 181300
Киров 2009
2
УДК 519.95 С 23
Составители: |
кандидат технических наук, |
|
доцент Р.В. Медов |
Подписано в печать |
|
Усл. печ. л. 3,6 |
Бумага типографская |
|
Печать матричная |
Заказ № |
Тираж |
Бесплатно |
Текст напечатан с оригинал-макета, представленного автором 610000, г. Киров. ул. Московская 36.
© Вятский государственный университет, 2009
3
Введение
Данные методические указания содержат краткие теоретические сведения о языке программирования Pascal, а также примеры решения задач с использованием линейных и разветвляющихся алгоритмов.
1. Язык программирования Pascal 1.1.Алфавит языка Pascal
Как и каждый язык, Паскаль имеет свой алфавит. В него входят латинские буквы, цифры от 0 до 9, специальные символы (+, –, *, /, =, ', . , : , ; ,<, >, ^, @, $, #), парные символы (<>, <=, >=, :=, [], (), {}, (* *), (..)), пробелы и зарезервированные слова. Зарезервированные слова не могут использоваться в качестве идентификаторов. Идентификаторы на языке Pascal — это имена констант, переменных, типов, программ и т. д. Длина идентификатора может быть любой, но значение имеют первые 63 символа. Идентификатор начинается буквой, за которой могут следовать буквы, цифры и знаки подчеркивания.
Текст программы на языке Pascal может содержать комментарии. Символом начала комментария является (* или {, символом окончания комментария
— *) или }. Текст, заключенный в скобки комментариев, игнорируется компилятором, поэтому в нем можно употреблять буквы русского алфавита.
Строка, начинающаяся символами {$, является директивой компилятору. За этими символами следует команда компилятору.
1.2.Структура программы
Программа, написанная на языке Паскаль, состоит из заголовка программы, раздела подключения модулей, раздела описания и раздела исполнения, за которым следует точка — признак конца программы.
Структура программы на языке Паскаль в общем виде выглядит следующим образом:
Program имя программы ;
Uses имя модуля1, … , имя модуляN ; Const описание констант ;
Type описание типов ;
Var описание переменных ; Label описание меток ;
Procedure или Function описание подпрограмм ; begin
раздел исполнения ; end.
4
Заголовок программы не обязателен и предназначен лишь для удобства программиста.
На практике при написании программ разделы const, type, var, label могут следовать друг за другом в любом порядке и встречаться в разделе описаний сколько угодно раз, а также могут отсутствовать вообще.
Раздел исполнения должен присутствовать в любой программе и является основным.
При записи операторов необходимо соблюдать правила расстановки символов точки с запятой:
точка с запятой ставится после завершения каждого описания;
точка с запятой не ставится после слова begin и перед словом end, так как эти слова являются операторными скобками;
точка с запятой ставится между операторами;
в операторах цикла точка с запятой не ставится после слов while, repeat, do;
в условном операторе точка с запятой не ставится после слова then и перед словом else;
в операторе варианта точка с запятой не ставится после слова of.
1.3.Присваивание
Под выражением понимают структуру, которая состоит из операндов и знаков операций. Операнды — это константы и переменные, операции — действия, выполняемые над операндами. Для того чтобы результаты выражений могли храниться в переменных, их необходимо присвоить этим переменным. Для этого используется оператор присваивания:
Имя переменной := арифметическое выражение .
Для типов переменной слева и арифметического выражения справа от оператора присваивания существуют ограничения:
если переменная слева вещественного типа, то арифметическое выражение может быть как целого, так и вещественного типа, то есть содержать либо целые переменные и допустимые для них операторы, либо вещественные, либо те и другие (тогда выражение преобразуется к вещественному типу);
если переменная слева целого типа, то арифметическое выражение должно быть целочисленным.
1.4.Ввод и вывод данных
Для сообщения данных компьютеру служат процедуры ввода и вывода. Процедура ввода помещает вводимое значение переменной в отведенную для нее ячейку.
Формат процедуры ввода: Read(список ввода):
5
Эта процедура приостанавливает работу программы и ждет, когда пользователь введет с клавиатуры данные и нажмет клавишу Enter. Если список ввода содержит несколько имен, то надо ввести данные для каждого имени.
Процедура readln (read line — читать строку) отличается от read тем, что после выделения очередного значения из введенной с клавиатуры строки и присваивания его последней переменной из списка ввода инструкция readln переводит курсор в начало следующей строки.
Если тип данных, вводимых с клавиатуры, не соответствует или не может быть приведен к типу переменных, имена которых указаны в read (readln), то программа аварийно завершает работу и на экран выводится сообщение об ошибке.
Процедура write предназначена для вывода на экран сообщений и значений переменных. После слова write в скобках задается список имен переменных. Кроме имен переменных в список можно включить сообщение — текст, заключенный в апострофы.
Формат процедуры вывода: write(список вывода);
После имени переменной через двоеточие можно поместить описание поля вывода значения переменной (то есть формат переменной). Для переменной целого типа формат задается в виде целого числа, определяющего ширину поля вывода (количество позиций на экране).
Для переменных вещественного типа формат задается двумя целыми числами, разделенными двоеточием. Первое число определяет ширину поля вывода, а второе — количество цифр после десятичной точки.
Например:
writeln ('Ha улице хорошая погода'); writeln ('Целое а = ', а:3);
write ('Вещественное b = ', b:10:3);
Процедура writeln (write line — писать в строку) отличается от инструкции write только тем, что после вывода сообщений или значений переменных курсор переводится в начало следующей строки.
1.5.Типы данных
Тип объекта определяет множество допустимых значений, которые может иметь этот объект, а также множество допустимых операций, которые применимы к нему. Кроме того, тип определяет формат внутреннего представления данных в памяти компьютера.
Формат описания типов:
type имя типа = значения типа. Формат описания переменных: var идентификатор : имя типа.
6
К простым (скалярным) типам данных относятся типы данных, значения которых не содержат составных частей: целые типы, вещественные типы, логический (булев) тип, символьный тип, перечисляемый тип, ограниченный тип (тип диапазон).
Таблица 1 – Целые типы:
Тип |
Диапазон значений |
Число байт в памяти |
|
Byte |
|
0...255 |
1 |
Shortint |
-128...127 |
1 |
|
Word |
0...65 535 |
2 |
|
Integer |
-32 768...32 767 |
2 |
|
Longint |
-2 147 483 648...2 147 483 647 |
4 |
|
Таблица 2 – Вещественные типы: |
|
||
Тип |
Диапазон |
Количество зна- |
Число байт в памяти |
Real |
|
чащих цифр |
|
10-39..10+38 |
11-12 |
6 |
|
Single |
10-45..10+3S |
7-8 |
4 |
Double |
10-324..10+308 |
15-16 |
8 |
Extended |
10-4932..10+4932 |
19-20 |
10 |
Comp |
(-263+l)...(263-l) |
19-20 |
8 |
Логический (булев) тип данных boolean представлен всего двумя значениями — true и false.
Символьный тип char занимает 1 байт и определяется множеством значений кодовой таблицы ЭВМ. Каждому символу соответствует целое число в диапазоне 0...255.
Перечисляемый тип задается перечислением (в круглых скобках) всех доступных значений. Формат записи:
type имя типа = (знач.1, знач.2 , … , знач.N);
Ограниченный тип (тип диапазон) есть подмножество, состоящее из элементов базового типа, который задается двумя константами, определяющими границы диапазона значений для данной переменной.
Формат записи:
type имя типа = мин знач .. макс знач;
Ограниченный и перечисляемый типы занимают в памяти 1 байт (8 бит), поэтому не могут содержать более 256 значений.
1.6.Стандартные функции и процедуры
Арифметические функции языка Паскаль: Abs(x) — абсолютное значение аргумента х;
Arctan(x)— арктангенс х, выраженный в радианах; Cos(x) — косинус х (х задается в радианах); Sin(x)— синус х (х задается в радианах);
7
Sqr(x) — квадрат х;
Sqrt(x) — квадратный корень из х; Exp(x) — ex (экспонента);
Ln(x) — натуральный логарифм х;
Pi - число π (3,1415926535897932385...); Frac(x) — дробная часть х;
Int(x) — выделяет целую часть х без преобразования типа; Randomize — включает генератор случайных чисел.
Random(x) —генерирует случайное целое число в пределах от 0 до х-1; Random — генерирует случайное действительноечисло в пределах от 0,00
до 1,00.
Функции преобразования типов:
Round(x) — округляет значение х до ближайшего целого числа;
Trunc(x) — выделяет целую часть вещественного числа и преобразует ее к типу longint.
Скалярные функции и процедуры:
Odd(x) — возвращает true, если х нечетно, и false, если х четно;
Pred(x) — возвращает элемент, предшествующий х в списке значений данного типа, тип результата совпадает с типом х;
Succ(х) — возвращает значение, следующее за х в списке значений данного типа, тип результата совпадает с типом параметра;
Inc(х, n) — увеличивает значение х на n, при отсутствии необязательного параметра n значение х увеличивается на единицу (x, n – целые);
Dec(х, n) — уменьшает значение х на n, при отсутствии необязательного параметра n значение х уменьшается на единицу (x, n – целые).
Процедуры и функции для работы с экраном (требуют подключения модуля crt):
Clrscr — очищает текущее окно, заполняет его цветом фона и помещает курсор в его верхний левый угол с координатами (1, 1);
Gotoxy(x,y) — перемещает курсор к элементу экрана с заданными координатами х, у, которые отсчитываются от левого верхнего угла текущего окна.
Wherex — возвращает текущую координату х курсора; Wherey — возвращает текущую координату у курсора.
1.7.Операции
Различают унарные и бинарные операции. Унарные операции требуют одного операнда, и знак операции ставится слева от операнда. Бинарные операции требуют двух операндов, знак операции ставится между операндами.
Порядок выполнения операций определяется их приоритетом. В языке Pascal все операции делятся на четыре приоритета. В первую очередь выполняются операции 1 приоритета, в последнюю – 4 приоритета.
|
|
|
8 |
|
Таблица 3 – Деление операций по приоритетам |
||||
|
|
|
|
|
Прио- |
Категория |
Операция |
Название операции |
|
ритет |
|
|
|
|
1 |
Унарные |
not |
логическое отрицание |
|
операции |
@ |
взятие адреса |
||
|
||||
|
|
* |
умножение |
|
|
|
/ |
деление |
|
|
Бинарные опе- |
div |
целочисленное деление |
|
2 |
рации типа |
mod |
взятие остатка от деления |
|
|
умножения |
and |
логическое И |
|
|
|
shl |
разрядный сдвиг влево |
|
|
|
shr |
разрядный сдвиг вправо |
|
|
Бинарные опе- |
+ |
сложение |
|
|
- |
вычитание |
||
3 |
рации типа сло- |
|||
or |
логическое ИЛИ |
|||
|
жения |
|||
|
xor |
логическое отрицающее ИЛИ |
||
|
|
|||
|
|
= |
проверка на равенство |
|
|
|
<> |
проверка на неравенство |
|
|
Бинарные опе- |
< |
проверка на меньше |
|
4 |
рации отноше- |
> |
проверка на больше |
|
|
ния |
<= |
проверка на меньше либо равно |
|
|
|
>= |
проверка на больше либо равно |
|
|
|
in |
проверка на вхождение в множество |
Для изменения порядка выполнения операций применяются круглые скобки. Операции, заключенные в круглые скобки выполняются в первую очередь. Если в пару скобок в выражении вложена другая пара круглых скобок, то вычисляется сначала выражение во вложенной паре круглых скобок.
Операции одного приоритета, располагающиеся на одном уровне вложенности в скобки, выполняются в порядке слева направо.
Для пояснения работы логических операций ниже приводятся результаты их работы при всевозможных значениях операндов:
Таблица 4 – Результаты логических операций
|
Операнд |
|
Результат операции NOT |
||
|
1 (true) |
|
0 (false) |
|
|
|
0 (false) |
|
1 (true) |
|
|
1 операнд |
2 операнд |
|
Результат операции |
|
|
AND |
OR |
XOR |
|||
|
|
||||
1 |
1 |
1 |
1 |
0 |
|
1 |
0 |
0 |
1 |
1 |
|
0 |
1 |
0 |
1 |
1 |
|
0 |
0 |
0 |
0 |
0 |
9
2. Линейные вычислительные процессы
Самым простейшим алгоритмом является линейный вычислительный процесс (следование), где все действия выполняются последовательно в определенном порядке. Как правило, такой алгоритм может включать в себя операторы присваивания и процедуры ввода-вывода.
Для отображения линейного алгоритма в виде блок схемы применяются следующие блоки:
Терминатор |
Обозначает начало и конец программы |
|
Процесс |
Обозначает действие, изменяющее значения |
|
данных |
||
|
||
Данные |
Общий блок для обозначения операций ввода- |
|
вывода данных |
||
|
||
Ручной ввод |
Обозначает данные, введенные с клавиатуры |
|
Дисплей |
Обозначает данные, выводимые на экран |
Составление алгоритма и его реализацию на языке Pascal рассмотрим на нескольких примерах.
Задание 1. Составить алгоритм (в виде блок-схемы) и написать программу на языке Pascal для решения задачи: найти сумму и произведение трех введенных с клавиатуры целых чисел.
Алгоритм решения данной задачи должен включать в себя следующие действия:
1.Ввод с клавиатуры трех чисел.
2.Вычисление суммы введенных чисел.
3.Вычисление произведения введенных чисел.
4.Вывод на экран результатов расчета.
Для реализации алгоритма потребуются пять целочисленных переменных: три переменные для хранения исходных чисел, вводимых с клавиатуры, две переменных для хранения результатов (суммы и произведения чисел).
Для составления блок-схем алгоритмов лучше всего воспользоваться программой MS Visio. После запуска MS Visio необходимо выбрать категорию Flowchart, а в ней подкатегорию Basic Flowchart. В результате откроется новый документ, а в левой части окна появится окно со стандартными блоками (shape). Размещение блоков осуществляется простым перетаскиванием с помо-
щью мыши. Для соединения блоков между собой применяется кнопка
Connector tool на панели инструментов. Чтобы набрать текст в блоке необходимо произвести на нем двойной щелчок мышью.
10
Запустите MS Visio и составьте блок-схему программы, приведенную на рисунке 1.
Начало
Ввод a,b,c
Sum=a+b+c
Pr=a*b*c
Вывод Sum и Pr
Конец
Рисунок 1.
Набор текста программы может быть осуществлен в любом текстовом редакторе, но удобнее воспользоваться редактором, встроенным в систему программирования (Turbo Pascal, Borland Pascal, Pascal ABC и т.п.).
Запустите Pascal и наберите текст программы:
Program Example_1;
Uses crt; {или wincrt}
var a,b,c,sum,pr:integer; begin
clrscr;
writeln('Программа вычисления суммы и произведения'); write('Введите 3 целых числа через пробел ->,'); readln(a,b,c);
sum:=0;
pr:=0;
sum:=a+b+c;
pr:=a*b*c;
writeln('Сумма = ',sum,', произведение = ',pr);