- •6. Алгоритмы и программы
- •6.1. Алгоритм и алгоритмический процесс
- •6.1.1. Основные свойства алгоритмов:
- •6.1.2. Способы записи алгоритма
- •6.1.3. Схемы алгоритмов и программ
- •6.2. Переменная и постоянная величина Выражения
- •6.3. Присваивание
- •6.4. Основные этапы решения задач на эвм
- •6. 5. Алгоритмизация. Базовые алгоритмические структуры
- •6.5.1. Реализация базовых структур в языке Pascal
- •6.5.2. Реализация базовых структур в языке qBasic
- •Операторы тела цикла
- •6.6. Ввод - вывод
- •6.6.1.Ввод-вывод данных на языке Pascal
- •Var X, y: integer; {Описание переменных X, y целочисленного типа}
- •6.6.2. Ввод-вывод данных на языке qBasic
- •6.7. Алгоритмы линейной и разветвляющейся структуры
- •Решение задачи 6.3. На языке Turbo Pascal:
- •6.8. Циклические алгоритмы
- •Input "Введите натуральное м : " , m
- •Print : print "о т в е т : Сумма этих чисел равна "; s
- •6.9. Итерационные циклы
- •6.10. Массивы
- •6.11. Вложенные циклы
- •6.12. Подпрограммы
- •6.12.1. Параметры подпрограмм
- •6.12.2. Подпрограммы в языке Pascal
- •Операторы функции, один из которых
- •6.12.3. Подпрограммы в языке Basic
- •6.13. Рекурсия
- •6.14. Логические операции с числами
- •6.15. Работа с символьной информацией
- •6.15.1. Работа с символьной информацией в языке Basic
- •6.15.2. Работа с символьной информацией в языке Pascal
6.1.2. Способы записи алгоритма
Наиболее распространенные формы записи алгоритмы:
словесная (запись на естественном языке);
графическая (в виде разнообразных схем, рисунков и т.п.);
запись на псевдокоде (сочетает элементы языка программирования, фразы естественного языка, математические обозначения и др.);
программная (тексты на языке программирования).
6.1.3. Схемы алгоритмов и программ
Наиболее наглядным способом представления алгоритмов является графическая форма записи алгоритмов в виде схем алгоритмов и программ. Схема состоит из блоков, обозначающих действия, соединенных стрелками, определяющими порядок выполнения действий (операций).
Разные виды операций описываются в блоках разной формы, называемых блочными символами. Основными из них являются символ "процесс" в форме прямоугольника, предназначенный для описания операций ввода, преобразования и вывода данных, и символ "решение" (ромб) - для разветвления алгоритма, т. е. выбора одного из вариантов его выполнения. Символ "пуск-останов" (овал) обозначает начало, конец и прерывание выполнения алгоритма. Символ "модификация" определяет начало цикла. Символ "Предопределенный процесс" означает вычисления по подпрограмме, стандартной подпрограмме. Для операций ввода–вывода можно использовать и специальные символы. Правила оформления схем и программ регламентируются государственным стандартом ГОСТ 19.701-90.
Выполнение алгоритма начинается с блока "начало" (овал, из которого выходит стрелка). Он должен быть единственным в схеме. Блоки в схеме соединяются линиями переходов (стрелками), определяющими очередность выполнения действий. При встрече каждого блока выполняется описанное внутри него действие. Если на линиях перехода не указана стрелка, то переход осуществляется сверху вниз и слева направо.
Из всех блоков, кроме ромба, выходит одна стрелка, указывающая следующий выполняемый блок. Из ромба выходят минимум две стрелки, указывающие следующее действие в зависимости от значения условия, записанного внутри ромба.
Выполнение алгоритма прекращается при достижении одного из блоков "конец" (овал, к которому подходит стрелка).
Некоторые блочные символы представлены на рис 6.1.
Рис.6.1. Основные блочные символы (виды блоков) схем алгоритмов
Схемы наглядны, но неудобны для изображения и ввода в ЭВМ. Они обычно используются для укрупненного представления алгоритма.
6.2. Переменная и постоянная величина Выражения
Информация в алгоритмах представляется в виде величин. Величина в алгоритме или программе имеет обозначение и обладает значением.
Величины могут быть постоянные (константы) и переменные. Константа не изменяет своего значения в процессе выполнения алгоритма и обычно записывается в алгоритме в виде обозначения, показывающего ее значение.
Примеры констант:
- целочисленные константы: 48 -123 ,
- вещественные константы, т. е. целые и нецелые числа:
15.2 -25.0 (дробная часть отделяется точкой), 45.1E-4 (45.1, умноженное на 10 в степени -4),
- символьные константы (одиночные символы): 'A' '2' '-' '!' ,
- строковые константы (литерные константы, текст): "КГТУ", "Привет", "" (пустая строка).
- логические константы: TRUE (да, истина), FALSE (нет, ложь).
Переменная величина обозначается в алгоритме именем и в процессе выполнения алгоритма может принимать различные значения. Имя переменной представляет собой идентификатор переменной, может состоять из латинских букв и цифр, должно начинаться с буквы, например: Z, X1, Sum.
Каждая константа и переменная относится к определенному типу данных. Тип данных определяет множество допустимых значений и набор допустимых операций, а также способ представления значений в памяти ЭВМ и выполнения операций над ними. Поэтому в программе необходимо определить тип каждой использованной в ней величины. Обычно используются целые, вещественные, логические, символьные (одиночные символы) и литерные (строковые) величины.
В каждом языке программирования свой набор допустимых типов данных и способов описания типов данных.
Например, в языке Pascal целочисленный тип данных обозначается служебным словом integer, вещественный (действительный) – real, логический – boolean, символьный - char, строковый (литерный)- string.
Пример определения переменных на языке Pascal:
Var
x,y :Real;
t, kol : Integer;
Переменные x и y являются вещественными, t, kol – целочисленными.
В языке Basic типы данных можно определить несколькими способами: по умолчанию, использовать команду описания типов DEF или команду объявления переменных DIM. Если в программе явно не указан тип переменной, то по принципу умолчания, такие переменные рассматриваются как короткие вещественные числа. Но если к имени переменной добавлен символ $, то это литерная (текстовая) переменная, например А$.
В языке Basic целочисленный тип данных обозначается служебным словом INTEGER (короткое целое) или LONG (длинное целое), вещественный (действительный) – SINGLE (короткие числа) или DOUBLE (длинные числа), текстовый (литерный, строковый) - STRING.
Пример определения переменных на языке Basic:
DEFINT A – C, K
DEFSNG Z, W
DEFSTR S
или
DIM A, B, C AS INTEGER, Z, W AS SINGLE
DIM S AS STRING*10
Переменные A, B, C, K являются переменными целого типа, Z, W – действительного короткого типа, а S – текстовая переменная (длиной до 10 символов в описании DIM S AS STRING*10). Перечисление переменных A, B, C можно записать как A – C.
Выражения пpедназначены для выполнения необходимых вычислений и состоят из констант, пеpеменных, указателей функций (напpимеp, sin(x)), объединенных знаками опеpаций.
Некоторые типы операций:
аpифметические опеpации + , — , * , / ;
опеpации отношения < , > , <= , >= , = (равно) , <> (не равно) ;
логические опеpации and (и) , or (или) , not (не);
опеpация сцепки (иначе, "присоединения", "конкатенации") символьных значений дpуг с другом с образованием одной длинной строки; изображается знаком "+".
Над величинами целого типа в языке Pascal допустимы еще две операции деления: div – деление нацело и mod – остаток от деления.
Например, 15 div 4 = 3, 25 mod 4 = 1.
Результатом операции целочисленного деления является целая величина. Обычное деление (операция /) над целыми величинами дает частное вещественного типа.
В языке Basic операция деление нацело обозначается символом \ , а остаток от деления – mod. Над числами можно выполнить еще операцию возведения в степень: обозначается символом ^ или **.
Различают выражения арифметические, логические и строковые.
Арифметические выражения служат для определения одного числового значения.
Например, (1+x)/2. Значение этого выражения при x=0 равно 0.5, а при x=1 — единице.
Логические выражения описывают некоторые условия, которые могут удовлетворяться или не удовлетворяться. Логическое выражение может принимать два значения — TRUE или FALSE ("истина" или "ложь").
Например, логическое выражение x * y > 0 , может служить условием для определения одинаковые ли знаки у величин x и y. При x= -1, y= -2, значение этого выражения — "истина", а при x= -1, y=2, — "ложь".
В логических выражениях обычно используются операции отношений (операции сравнения), а для сложных условий еще и логические операции and, or, not.
Примеры сложных условий:
(A > 0) and (A <=10)
(X=0) or (X MOD 2 = 1)
Таблица значений логических операций над величинами типа boolean:
FALSE and FALSE = FALSE |
FALSE or FALSE = FALSE |
FALSE and TRUE = FALSE |
FALSE or TRUE = TRUE |
TRUE and FALSE = FALSE |
TRUE or FALSE = TRUE |
TRUE and TRUE = TRUE |
TRUE or TRUE = TRUE |
not FALSE = TRUE |
|
not TRUE = FALSE |
|
Значениями строковых (литерных) выражений являются текcты. В строковые выражения могут входить литерные и строковые константы, литерные и строковые переменные, литерные функции, объединенные знаками + (это операция сцепки или конкатенации).
Например, А + В означает присоединение строки В к концу строки А. Если А = "День ", а В = "теплый", то значение выражения А + В есть "День теплый".
В выражения, наряду с константами и переменными, можно включать функции. В каждом языке имеются стандартные функции не требующие определения в программе. Некоторые стандартные функции алгоритмического языка, языка Pascal и Basic представлены в табл. 6.1.
В качестве аргументов функций можно использовать константы, переменные и выражения.
Например, sin(1.5), cos(y), sin(x*x+ 2*y), abs(5+х ),
Выражения подобны обычным алгебраическим выражениям, но, в отличие от них, не допускают многоэтажной записи дробей, индексов и степеней. Поэтому дробная черта заменяется знаком деления '/', индексы пишутся в скобках после имени переменной. Знаком умножения служит звездочка '*'. Нельзя опускать знак умножения между сомножителями и ставить рядом два знака операций. Операции выполняются в порядке старшинства: сначала вычисление функций, затем возведение в степень, потом умножение и деление и в последнюю очередь — сложение и вычитание. При вычислении логического выражения самый высокий приоритет у операций сравнения, затем следует операция not, операция and имеет приоритет операции умножения, а or - сложения. Можно изменить порядок выполнения операций, используя скобки.
Табл.6.1. Некоторые стандартные функции
Название и математическое обозначение функции |
Указатель функции в алгоритм. языке |
Указатель функции в языке Pascal |
Указатель функции в языке Basic |
Абсолютная величина - | х | |
abs(x) |
abs(x) |
abs(x) |
Корень
квадратный -
|
sqrt(x) |
sqrt(x) |
sqr(x) |
Возведение в квадрат x2 |
|
sqr(x) |
|
Натуральный логарифм - ln x |
ln(x) |
ln(x) |
log(x) |
Экспонента ex (е ~ 2.72) |
exp(x) |
exp(x) |
exp(x) |
Целая часть числа х (т.е. максимальное целое число, не превосходящее х) |
int(x) |
trunc(x) |
int(x) |
Частное от деления целого х на целое y |
div(x,y) |
Операция x div y |
Операция x \ y |
Остаток от деления целого х на целое y |
mod(x,y) |
Операция x mod y |
Операция x mod y |
Синус (угол в радианах) – sin x |
sin(x) |
sin(x) |
sin(x) |
Косинус (угол в радианах) – cos x |
cos(x) |
cos(x) |
cos(x) |
Тангенс (угол в радианах) – tg x |
tg(x) |
tg(x) |
tan(x) |
Упражнения:
1. Запишите по правилам алгоритмического языка выражения:
а
x y z
x
y
z
-b + b
2 –
4 a c 2
a
г
x - y x + z x
+ 1 xz
sin2
x
5,2
x – e
2x
Решение:
Запись по правилам алгоритмического языка:
а) x * y / z б) x / ( y * z )
в) ( -b + sqrt(b*b - 4*a*c)) / ( 2*a )
2. Вычислите значения арифметического выражения при x=10:
а) div(12,x - 5)*mod(10,x-3) + min(100,x)
Решение:
div(12,x - 5)*mod(10,x-3) + min(100,x) = 2 * 3 + 10 = 16
б) abs(x - 17)*mod(100,x+1)/max(1,x)*mod(2,3)
3. Вычислите значения логического выражения:
а) x*x+y*y<=10, при x=2, y=-1
Решение: да (истина);
б) b*b-4*a*c <0, при a = 1, b = 2, c = -3;
в) (a >= 10) and (a <= 25), при a=10.5;
Решение: да (истина, т.к. истинны оба выражения)
(a >= 10) and (a <= 25), при a=30.5;
Решение: нет (ложь, т.к. первое подвыражение истинно, но второе ложно, значит все выражение в целом ложно)
г) (a<5) or (a>10), при a=10.5;
д) (mod(a,7)=2) and (div(a,7)=2), при a=16;
3. Запишите логические выражения, истинные при выполнении указанных условий:
а) величина x положительная;
Решение: x > 0
б) целая величина x положительная и четная;
Решение: (x >0) and ( mod (x, 2) = 0)
в) целая величина а трехзначная и кратна 3;
Решение: (a >99) and (a < 1000) and( mod( a,3) = 0)
г) точка x принадлежит отрезку [a, b];
Решение: (x >= a) and (x <= b)
д) среди целых чисел x, y, z есть хотя бы одно четное;
е) из двух чисел x и y, большим является первое число;
ж) каждое из трех целых чисел x, y, z кратно пяти;
