Блок-схема алгоритма
Данный способ оказался очень удобным средством изображения алгоритмов и получил широкое распространение в научной и учебной литературе.
Структурная (блок-, граф-) схема алгоритма - графическое изображение алгоритма в виде схемы связанных между собой с помощью стрелок (линий перехода) блоков - графических символов, каждый из которых соответствует одному шагу алгоритма. Внутри блока дается описание соответствующего действия.
Графическое изображение алгоритма широко используется перед программированием задачи вследствие его наглядности, т.к. зрительное восприятие обычно облегчает процесс написания программы, ее корректировки при возможных ошибках, осмысливание процесса обработки информации.
Можно встретить такое утверждение: «Внешне алгоритм представляет собой схему - набор символов, внутри которых записывается, что вычисляется, что вводится в машину и что выдается на печать и другие средства отображения информации». Здесь форма представления алгоритма смешивается с самим алгоритмом.
Принцип программирования «сверху вниз» требует, чтобы блок-схема поэтапно конкретизировалась и каждый блок «расписывался» до элементарных операций. Но такой подход можно осуществить при решении несложных задач. При решении сколько-нибудь серьезной задачи блок-схема «расползется» до такой степени, что ее невозможно будет охватить одним взглядом.
Блок-схемы алгоритмов удобно использовать для объяснения работы уже готового алгоритма, при этом в качестве блоков берутся действительно блоки алгоритма, работа которых не требует пояснений. Блок-схема алгоритма должна служить для упрощения изображения алгоритма, а не для усложнения. В табл. 2.1 приведены наиболее часто употребляемые символы.
Таблица 2.1
Типовые обозначения структурной схемы
Название символа | Обозначение и пример заполнения | Пояснение |
Процесс | Вычислительное действие или последовательность действия | |
Ветвление | Проверка условий | |
Модификация | Начало цикла | |
Предопределенный процесс | Вычисления по подпрограмме, стандартной подпрограмме | |
Ввод–вывод | Ввод-вывод в общем виде | |
Пуск–останов | Начало, конец алгоритма, вход и выход в подпрограмму | |
Документ | Вывод результатов на печать |
Блок «процесс» применяется для обозначения действия или последовательности действий, изменяющих значение, форму представления или размещения данных. Для улучшения наглядности схемы несколько отдельных блоков обработки можно объединять в один блок. Представление отдельных операций достаточно свободно.
Блок «ветвление» используется для обозначения переходов управления по условию. В каждом блоке «ветвление» должны быть указаны вопрос, условие или сравнение, которые он определяет.
Блок «модификация» используется для организации циклических конструкций. (Слово модификация означает видоизменение, преобразование.) Внутри блока записывается параметр цикла, для которого указываются его начальное значение, граничное условие и шаг изменения значения параметра для каждого повторения.
Блок «предопределенный процесс» используется для указания обращений к вспомогательным алгоритмам, существующим автономно в виде некоторых самостоятельных модулей, и для обращений к библиотечным подпрограммам.
Рис. 2.1. Блок-схема алгоритма нахождения максимального из двух значений
Псевдокод представляет собой систему обозначений и правил, предназначенную для единообразной записи алгоритмов. Он занимает промежуточное место между естественным и формальным языками. С одной стороны, он близок к обычному естественному языку, поэтому алгоритмы могут на нем записываться и читаться как обычный текст. С другой стороны, в псевдокоде используются некоторые формальные конструкции и математическая символика, что приближает запись алгоритма к общепринятой математической записи.
В псевдокоде не приняты строгие синтаксические правила для записи команд, присущие формальным языкам, что облегчает запись алгоритма на стадии его проектирования и дает возможность использовать более широкий набор команд, рассчитанный на абстрактного исполнителя. Однако в псевдокоде обычно имеются некоторые конструкции, присущие формальным языкам, что облегчает переход от записи на псевдокоде к записи алгоритма на формальном языке. В частности, в псевдокоде, так же, как и в формальных языках, есть служебные слова, смысл которых определен раз и навсегда. Они выделяются в печатном тексте жирным шрифтом, а в рукописном тексте подчеркиваются. Единого или формального определения псевдокода не существует, поэтому возможны различные псевдокоды, отличающиеся набором служебных слов и основных (базовых) конструкций.
Программное представление алгоритма. При записи алгоритма в словесной форме, в виде блок-схемы или на псевдокоде допускается определенный произвол при изображении команд. Вместе с тем такая запись точна настолько, что позволяет человеку понять суть дела и исполнить алгоритм. Однако на практике в качестве исполнителей алгоритмов используются компьютеры, поэтому алгоритм, предназначенный для исполнения на компьютере, должен быть записан на «понятном» ему языке. И здесь на первый план выдвигается необходимость точной записи команд, не оставляющей места для произвольного толкования их исполнителем. Язык для записи алгоритмов должен быть формализован. Такой язык принято называть языком программирования, а запись алгоритма на этом языке - программой для компьютера.
Системы счисления
Системой счисления называется совокупность приемов наименования и записи чисел.
В любой системе счисления для представления чисел выбираются некоторые символы (слова или знаки), называемые базисными числами, а все остальные числа получаются в результате каких-либо операций из базисных чисел данной системы исчисления. Символы, используемые для записи чисел, могут быть любыми, только они должны быть разными и значение каждого из них должно быть известно. В современном мире наиболее распространенным является представление чисел посредством арабских цифр 0, 1,2, 3, 4, 5, 6, 7, 8, 9 - специальных знаков, используемых для записи чисел. Системы счисления различаются выбором базисных чисел и правилами образования из них остальных чисел. Например, в римской системе счисления базисными являются числа 1, 5, 10, 50, 100, 500, 1000, которые обозначаются знаками I, V, X, L, С, D, М, а другие получаются путем сложения и вычитания базисных: если цифра справа меньше или равна цифре слева, то эти цифры складываются; если цифра слева меньше, чем цифра справа, то левая цифра вычитается из правой. Так, например, число 146 в римской системе счисления имеет вид CXLVI (С-100, XL-40, VI-6), здесь «сорок» получается посредством вычитания из «пятидесяти» числа «десять», «шесть» - посредством сложения «пяти» и «единицы». Системы счисления, в которых любое число получается путем сложения или вычитания базисных чисел, называются аддитивными. При таком представлении чисел правила сложения для небольших чисел очевидны и просты, однако если возникает необходимость выполнять операции сложения над большими числами или операции умножения и деления, то «римская» система счисления оказывается неудобной. В этой ситуации преимущественнее оказываются позиционные системы счисления. Хотя в них, как правило, представления чисел далеко не так просты и очевидны, как в «римской» системе счисления, систематичность представления, основанная на «позиционном весе» цифр, обеспечивает простоту выполнения операций умножения и деления.
В «римской» системе счисления каждый числовой знак в записи любого числа имеет одно и то же значение, т.е. значение числового знака не зависит от его расположения в записи числа. Таким образом, «римская» система счисления не является позиционной системой счисления.
Для изображения (или представления) чисел в настоящее время используются в основном позиционные системы счисления. Привычной для всех является десятичная система счисления. В этой системе для записи любых чисел используется только десять разных знаков (цифр): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Эти цифры введены для обозначения первых десяти последовательных чисел, а следующее число 10 и т.д. обозначается уже без использования новых цифр. Однако введением этого обозначения сделан важный шаг в построении системы счисления: значение каждой цифры поставлено в зависимость от того места, где она стоит в изображении числа.
Таким образом, система называется позиционной, если значение каждой цифры (ее вес) изменяется в зависимости от ее положения (позиции) в последовательности цифр, изображающих число.
Десятичная позиционная система счисления основана на том, что десять единиц каждого разряда объединяются в одну единицу соседнего старшего разряда. Таким образом, каждый разряд имеет вес, равный степени 10. Например, в записи числа 343.32 цифра 3 повторена три раза, при этом самая левая цифра 3 означает количество сотен (ее вес равен 102); цифра 3, стоящая перед точкой, означает количество единиц (ее вес равен 100), а самая правая цифра 3 - количество десятых долей единицы (ее вес равен 10-1), так что последовательность цифр 343.32 представляет собой сокращенную запись выражения :
3´102+4´101+3´100+3´10-1+2´10-2
Десятичная запись любого числа X в виде последовательности цифр:
anan-1…a1a0a-1…a-m… (3.6)
основана на представлении этого числа в виде полинома:
X = an´10n + an-1´10n-1+…+ a1´101+ a0´100 + a-1´10-1+…+ a-m´10-m… (3.7)
где каждый коэффициент аi, может быть одним из чисел, для обозначения которых введены специальные знаки. Запись числа X в виде (3.7) представляет собой просто перечисление всех коэффициентов этого полинома. Точка, отделяющая целую часть числа от дробной, служит для фиксации конкретных значений каждой позиции в этой последовательности цифр и является началом отсчета.
Число К единиц какого-либо разряда, объединяемых в единицу более старшего разряда, называют основанием позиционной системы счисления, а сама система счисления называется К-ичной. Например, основанием десятичной системы счисления является число 10; двоичной - число 2; троичной - число 3 и т.д. Для записи произвольного числа в K-ичной системе счисления достаточно иметь К разных цифр аi, i=1,...,К. Эти цифры служат для обозначения некоторых различных целых чисел, называемых базисными.
Числа можно записать как суммы степеней не только числа 10, но и любого другого натурального числа, большего 1. Например, в Древнем Вавилоне использовалась система счисления с основанием 60. Деление часа на 60 минут, а минуты на 60 секунд заимствовано именно из этой системы счисления. А то, что человечество выбрало в качестве основания системы счисления число 10, вероятно, связано с тем, что природа наделила людей десятью пальцами.
Запись произвольного числа X в K-ичной позиционной системе счисления основывается на представлении этого числа в виде полинома:
K=anKn + an-1Kn-1 +…+ a1K1 + a0K0 + a-1K-1 +…+ a-mK-m +… (3.8)
где каждый коэффициент а, может быть одним из базисных чисел и изображается одной цифрой. Как и в десятичной системе счисления, число X, представленное в К-ичной системе счисления, можно кратко записать в виде (3.6) путем перечисления всех коэффициентов полинома (3.8) с указанием позиционной точки. Последовательность цифр, стоящая в (3.6), является изображением числа X в К-ичной системе счисления. Базисные числа должны быть выбраны так, чтобы любое число X могло быть представлено в виде полинома (3.8). Обычно в качестве базисных чисел берутся последовательные целые числа от 0 до К-1 включительно.
Все известные позиционные системы счисления являются аддитивно-мультипликативными. Особенно отчетливо аддитивно-мультипликативный способ образования чисел из базисных выражен в числительных русского языка, например пятьсот шестьдесят восемь (т.е. пять сотен плюс шесть десятков плюс восемь).
Арифметические действия над числами в любой позиционной системе счисления производятся по тем же правилам, что и в десятичной системе, так как все они основываются на правилах выполнения действий над соответствующими полиномами. При этом нужно только пользоваться теми таблицами сложения и умножения, которые имеют место при данном основании К системы счисления.
Отметим, что во всех позиционных системах счисления с любым основанием К умножения на числа вида Кm , где m - целое число, сводится просто к перенесению запятой у множимого на m разрядов вправо или влево (в зависимости от знака m), так же как и в десятичной системе.
Для указания того, в какой системе счисления записано число, условимся при его изображении основание системы счисления указывать в виде нижнего индекса при нем, например, 35.648.
В современной вычислительной технике, в устройствах автоматики и связи широко используется двоичная система счисления. Это система счисления с наименьшим возможным основанием. В ней для изображения числа используются только две цифры: 0 и 1.
Произвольное число X в двоичной системе представляется в виде полинома:
X = an´2n + an-1´2n-1+…+ a1´21+ a0´20 + a-1´2-1+…+ a-m´2-m… (3.9)
где каждый коэффициент аi может быть либо 0, либо 1.
Так как в двоичной системе счисления для изображения любых чисел используются только две различные цифры, то при построении ЭВМ можно использовать элементы, которые могут находиться только в двух состояниях (например, высокое или низкое напряжение в цепи, наличие или отсутствие электрического импульса и т.п.). Это обстоятельство, а также простота выполнения арифметических операций являются причиной того, что большинство современных ЭВМ используют двоичную систему счисления.
Неудобство использования двоичной системы счисления заключается в громоздкости записи чисел. Это неудобство не имеет существенного значения для ЭВМ. Однако если возникает необходимость кодировать информацию «вручную», например, при составлении программы на машинном языке, то предпочтительнее оказывается пользоваться восьмеричной или шестнадцатеричной системой счисления (в силу их свойств, которые будут отмечены позднее).
В восьмеричной системе счисления базисными числами являются 0, 1, 2, 3, 4, 5, 6, 7. Запись любого числа в этой системе основывается на его разложении по степеням числа восемь с коэффициентами, являющимися указанными выше базисными числами.
Например, десятичное число 83.5 в восьмеричной системе будет
изображаться в виде 123.4. Действительно, эта запись по
определению означает представление числа в виде полинома:
1х82+2х81+3х80+4х8-1 = 64 + 16 + 3 + 4/8 = 83.5.
В шестнадцатеричной системе счисления базисными являются числа от нуля до пятнадцати. Эта система отличается от рассмотренных ранее тем, что в ней общепринятых (арабских) цифр не хватает для обозначения всех базисных чисел, поэтому приходится вводить в употребление новые символы. Обычно для обозначения первых десяти целых чисел от нуля до девяти используют арабские цифры, а для следующих целых чисел от десяти до пятнадцати используются буквенные обозначения A, B, C, D, E, F.
Например, десятичное число 175.5 в шестнадцатеричной системе будет записываться в виде AF.8. Действительно:
Смешанные системы счисления
В ряде случаев числа, заданные в системе счисления с основанием Р, приходится изображать с помощью цифр другой системы счисления с основанием Q, где Q<P. Такая ситуация возникает, например, когда в ЭВМ, способной непосредственно воспринимать только двоичные числа, необходимо изобразить десятичные числа, с которыми мы привыкли работать. В этих случаях используются смешанные системы счисления, в которых каждый коэффициент Р-ичного разложения числа записывается в Q-ичной системе. В такой системе Р называется старшим основанием, a Q - младшим основанием, а сама смешанная система называется (Q - Р)-ичной. Для того чтобы запись числа в смешанной системе счисления была однозначной, для представления любой Р-ичной цифры отводится одно и то же количество Q-ичных разрядов, достаточное для представления любого базисного числа Р-ичной системы. Так, в смешанной двоично-десятичной системе счисления для изображения каждой десятичной цифры отводится четыре двоичных разряда. Например, десятичное число х = 925 в двоично-десятичной системе запишется в виде 1001 0010 0101. Здесь последовательные четверки (тетрады) двоичных разрядов изображают цифры 9, 2, 5 записи числа в десятичной системе счисления. Следует обратить внимание, что хотя в двоично-десятичной записи числа и используются только цифры 0 и 1, эта запись отличается от двоичного изображения данного числа. Например, приведенный выше двоичный код в двоичной системе счисления изображает число 2341, а не число 925.
Условимся изображать принадлежность числа к (Q - Р)-ичной системе счисления с помощью нижнего индекса (Q - Р) при данном числе, например: 92510= 1001001001012-10
Аналогично рассмотренной выше двоично-десятичной системе можно использовать и другие смешанные системы при различных значениях Р и Q. Особого внимания заслуживает случай, когда Р = Qz, где z - целое положительное число. В этом случае запись какого-либо числа в смешанной системе тождественно совпадает с изображением этого числа в системе счисления с основанием Q (что не имеет места в двоично-десятичной системе в общем случае ).
Докажем это утверждение. Рассмотрим произвольное целое число N. В Р-ичной системе счисления это число будет записано в виде
pnpn-1…p1p0,
основанном на представлении
N=pnpn+pn-1pn-1+…+p1p1+p0 (3.10)
где pi, i = 0, 1, .... n являются базисными числами этой системы.
Каждый коэффициент pi будет записываться в Q-ичной системе счисления в виде,
pi = qi,z-1 qi,z-2 … qi,z qi,0
основанном на представлении
pi = qi,z-1Qz-1 + qi,z-2Qz-2 +… + qi,1Q1 + qi,0 (3.11)
где qi,j - базисные числа системы счисления с основанием Q.
Тогда в смешанной системе счисления число N будет записываться в виде
N = qn,z-1 qn,z-2 … qn,0 qn-1,z-1 … qn-1,0 …q0,z-1… q0,0
Подставляя (3.11) в (3.10) и учитывая соотношение Р = Qz , получим
N = qn,z-1Qnz+z-1 + qn,z-2Qnz+z-2 +…+ qn,0Qnz + qn-1,z-1Qnz-1 + qn-1,0Qnz-1 +…+
+q0,z-1Qnz-1 +…+ q0,z-1Qz-1 +…+ q0,0Q0 (3.12)
т.е. разложение числа N по степеням Q. Поэтому запись числа N в Q-ичной системе счисления, соответствующая разложению (3.12), будет
иметь вид
N = qn,z-1 qn,z-2 … qn,0 qn-1,z-1 … qn-1,0 …q0,z-1… q0,0 .
Как видно, эта запись тождественно совпадает с приведенной выше записью числа N в смешанной системе счисления, где каждая очередная группа из z цифр является просто изображением соответствующего коэффициента pi, в системе счисления с основанием Q.
Все сказанное выше относительно целых чисел автоматически переносится и на случай произвольных чисел. Таким образом, изображение числа x: в Р-ичной системе счисления в случае Р = Qz является просто сокращенной записью изображения этого же числа х в Q-ичной системе .
Рассмотренное выше свойство некоторых смешанных систем широко используется на практике для сокращенной записи чисел, заданных в системе счисления с небольшим основанием. Для этого в исходной записи числа разряды объединяются вправо и влево от точки в группы некоторой длины (добавляя в случае необходимости левее старшей или правее младшей значащих цифр соответствующее количество нулей), и каждая такая группа записывается одной цифрой другой системы, основание которой равно соответствующей степени исходного основания.
Перевод чисел из одной системы счисления в другую
При решении задач с помощью ЭВМ исходные данные обычно задаются в десятичной системе счисления; в этой же системе, как правило, нужно получить и окончательные результаты. Так как в современных ЭВМ данные кодируются в основном в двоичных кодах, то, в частности, возникает необходимость перевода чисел из десятичной в двоичную систему счисления и наоборот.
При рассмотрении правил перевода чисел из одной системы счисления в другую ограничимся только такими системами счисления, у которых базисными числами являются последовательные целые числа от 0 до Р-1 включительно, где Р - основание системы счисления.
Задача перевода заключается в следующем. Пусть известна запись числа х в системе счисления с каким-либо основанием Р:
pnpn-1…p1p0p-1p-2…,
где рi - цифры Р-ичной системы (0 £ рi £ Р-1). Требуется найти запись этого же числа х в системе счисления с другим основанием Q:
qsqs-1…q1q0q-1q-2…,
где qi - искомые цифры Q-ичной системы (0 £ qi £ Q-1). При этом можно ограничиться случаем положительных чисел, так как перевод любого числа сводится к переводу его модуля и приписыванию числу нужного знака.
При рассмотрении правил перевода нужно учитывать, средствами какой арифметики должен быть осуществлен перевод, т.е. в какой системе счисления должны быть выполнены все необходимые для перевода действия. Условимся считать, что перевод должен осуществляться средствами Р-ичной арифметики.
Перевод Q®P. Задача перевода произвольного числа х, заданного в системе счисления с основанием Q, в систему счисления с основанием Р сводится к вычислению полинома вида
X=qnQn + qn-1Qn-1 +…+ q1Q1 + q0Q0 + q-1Q-1 +…+ q-mQ-m (3.13)
Для получения Р-ичного изображения выражения (3.13) необходимо все цифры qi и число Q заменить Р-ичными изображениями и выполнить арифметические операции в Р-ичной системе счисления.
Заметим, что при переводе следует придерживаться правила сохранения точности изображения числа в разных системах, причем под точностью понимается значение единицы самого младшего (правого) разряда, используемого в записи числа в той или иной системе счисления.
Перевод Р®Q. Так как для перевода любого числа достаточно уметь переводить его целую и дробную части, рассмотрим отдельно эти два случая.
1. Перевод целых чисел. Пусть известна запись целого числа N в системе счисления с основанием Р и требуется перевести это число в систему счисления с основанием Q. Так как N - целое, то его запись в Q-ичной системе счисления имеет вид
N = qsqs-1…q1q0,
где qi - искомые цифры Q-ичной системы (0 £ qi < Q-1). Для определения q0 разделим обе части равенства:
N = qsQs+ qs-1Qs-1+…+ q1Q1+q0 (3.14)
на число Q, причем в левой части произведем деление, пользуясь
правилами Р-ичной арифметики (так как запись числа N в Р-ичной
системе счисления известна), а правую часть перепишем в виде
N/Q = qsQs+ qs-1Qs-1+…+ q1Q1+q0 / Q
Приравнивая между собой полученные целые и дробные части (учитывая, что qi < Q):
[N/Q] = qsQs-1+ qs-1Qs-2+…+ q1
[N/Q]=q0/Q
Таким образом, младший коэффициент q0 в разложении (3.14) определяется соотношением
Q0=Q[N/Q],
причем указанные здесь действия на самом деле не выполняются, так как q0 является просто остатком от деления N на Q.
Положим
N1=[N/Q]= qsQs-1+ qs-1Qs-2+…+ q1 .
Тогда N1 будет целым числом и к нему можно применить ту же самую процедуру для определения следующего коэффициента q1 и т.д.
Таким образом, при условии что N0 = N, перевод чисел с использованием Р-ичной арифметики осуществляется по следующим рекуррентным формулам:
qi = Q[Ni / Q], (3.15)
Ni+1 = [Ni / Q] (i=0, 1, 2).
Этот процесс продолжается до тех пор, пока не будет получено Ni+1=0.
Заметим, что поскольку все операции выполняются в системе счисления с основанием Р, то в этой же системе будут получены искомые коэффициенты qi, поэтому их необходимо записать одной Q-ичной цифрой.
2. Перевод дробных чисел. Пусть необходимо перевести в Q-ичную систему счисления правильную дробь х (0 < х < 1 ), заданную в Р-ичной системе счисления.
Так как х < 1, то число х в Q-ичной системе счисления можно представить в виде полинома
x = q-1Q-1 + q-2Q-2 + … + q-m Q-m +…, (3.16)
где q-i (i = 1, 2, ...) - искомые коэффициенты Q-ичного разложения
числа х. Для определения q-1 умножим обе части равенства (3.16) на
число Q, причем в левой части произведем умножение, пользуясь
правилами Р-ичной арифметики (так как запись числа x в Р-ичной
системе счисления известна), а правую часть перепишем в виде
xQ = q-1 + q-2Q-1 + q-mQ-m+… .
Приравняем между собой полученные в правой части этого выражения целые и дробные части (учитывая, что 0 < qi < Q):
[xQ]=q-1 ,
[xQ]=q-2Q-1 + … + q-mQ-m+1 +…
Таким образом, младший коэффициент q-1 в разложении (3.16) определяется соотношением
q-1 = [xiQ].
Положим
x1 = [xQ] = q-2Q-1 +…+ q-mQ-m+1 +… .
Дата добавления: 2015-12-22; просмотров: 5242;