Содержание

Слайд 2

09.11.2021 Литература: Глушков В.Л. Основы безбумажной информатики. М.: Наука, 1987. Бауэр

09.11.2021

Литература:

Глушков В.Л. Основы безбумажной информатики. М.: Наука, 1987.
Бауэр Ф. Л., Гооз

Г. Информатика (в 2 книгах). М.: Мир, 1990.
Брой М. (Манфред) Информатика (в 4 книгах). М.: Диалог - МИФИ, 1996.
Симонович С.В. Информатика. Базовый курс. Питер, 2000
Острейковский В.А. Информатика. М, Высшая школа, 2000.
Королев Л.Н., Миков А.И. Информатика. Введение в компьютерные науки. М.: Высшая школа, 2003.
Стариченко Б.Е. Теоретические основы информатики. М.: Горячая линия - Телеком, 2003.
Степанов А.Н. Информатика. 6 издание, СПб.: Питер, 2010
Степанов А.Н. Курс информатики для студентов информационно-математических специальностей, СПб.: Питер, 2018
Слайд 3

09.11.2021 Обмен информацией — процесс передачи информации одним объектом (субъектом) и

09.11.2021

Обмен информацией — процесс передачи информации одним объектом (субъектом) и ее

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

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

Носитель информации — любая материальная среда, служащая для ее хранения или передачи

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

Тема 1. Роль информации в живой природе, жизни человека и общественном развитии.

Слайд 4

09.11.2021 Тема 2. Основные этапы развития информационных технологий Начальное состояние —

09.11.2021

Тема 2. Основные этапы развития информационных технологий

Начальное состояние — информация хранится

и обрабатывается в мозгу человека, обмен с помощью органов чувств, нечленораздельные звуки, телодвижения.
Появление речи — самого совершенного в живой природе способа обмена информацией (1 000 000 лет назад).
Появление письменности — способа долговременного хранения информации (30 000 лет назад).

Технологией называется совокупность знаний о способах и средствах проведения производственных процессов, при которых происходит необходимое качественное изменение обрабатываемых объектов (techno ─ мастерство, log ─ учение, то есть учение о мастерстве, мастерство ─ искусство делать вещи) .

Слайд 5

09.11.2021 Изобретение книгопечатания — способа тиражирования информации (середина XV века). Печатный станок Гуттенберга

09.11.2021

Изобретение книгопечатания — способа тиражирования информации (середина XV века).

Печатный станок Гуттенберга

Слайд 6

09.11.2021 Развитие средств механизации и автоматизации обработки информации (с начала XVI

09.11.2021

Развитие средств механизации и автоматизации обработки информации (с начала XVI века).


Арифмометр Лейбница

1500 г., Леонардо да Винчи, эскиз суммирующего устройства
1623 г., Вильгельм Шиккард, действующее суммирующее устройство
1641–1645 г.г., Блез Паскаль, суммирующая машина
1671–1674 г.г., Готфрид Лейбниц, арифмометр

Слайд 7

09.11.2021 Развитие средств механизации и автоматизации обработки информации (с начала XVI

09.11.2021

Развитие средств механизации и автоматизации обработки информации (с начала XVI века).


Арифмометр В.Т. Однера XIX века и его потомок середины XX века арифмометр «Феликс М»

Слайд 8

09.11.2021 Развитие средств механизации и автоматизации обработки информации (с начала XVI

09.11.2021

Развитие средств механизации и автоматизации обработки информации (с начала XVI века).


1801–1808г.г., Жозеф Жаккард, автоматический ткацкий станок
1822 г. Чарльз Бэббидж, описание «разностной» машины
1834 г., Чарльз Бэббидж, эскиз «аналитической» машины
1843 г., Ада Лавлейс, основы программирования, первая в мире программа для аналитической машины Беббиджа (расчет чисел Фиббоначи)
1887 г., Герман Холлерит, первый табулятор
1897 г., Герман Холлерит, основание фирмы Tabulating Machine Company, впоследствии IBM (International Business Machines)

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

Слайд 9

09.11.2021 Перфокарта и перфолента середины XX века, прототипы использовались с начала

09.11.2021

Перфокарта и перфолента середины XX века, прототипы использовались с начала XIX

века

Развитие средств механизации и автоматизации обработки информации (с начала XVI века).

Слайд 10

09.11.2021 Электромеханические машины (конец XIX века). 1939–1941 г.г., Конрад Цузе, Германия,

09.11.2021

Электромеханические машины (конец XIX века).

1939–1941 г.г., Конрад Цузе, Германия, машина «Z-3», память

— 64 числа, сложение 0,3 секунды, умножение 5 секунд.
1937–1944 г.г., Говард Айкен, фирма IBM, механическая машина «Марк-1»,
1947 г., Говард Айкен, фирма IBM, электромеханическая машина «Марк-2», умножение 0,7 секунд
1957 г., Н. И. Бессонов, СССР, электромеханическая машина «РВМ-1», умножение за 0,05 с., лучшая в мире релейная машина

Фрагмент машины «Марк-1»

Электромагнитное реле
(принципиальная схема)

Слайд 11

09.11.2021 Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века 1937–1942

09.11.2021

Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века

1937–1942 г.г., Дж. Атанасов

и К. Берри, США, первая полностью электронная машина «ABC» (Atanasoff-Berry Computer), 600 электронных ламп накаливания. Только операции сложения и вычитания.

Электронная лампа накаливания

Слайд 12

09.11.2021 Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века 1943–1945

09.11.2021

Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века

1943–1945 г.г. Пенсильванский

университет, США, Д. Мочли и П. Эккерт, ENIAC — Electronic Numerical Integrator And Computer, вес 30 тонн, высота 6 метров, площадь120 м2 , 18 тысяч электронных ламп накаливания, 5 тысяч операций в секунду

Машина ЭНИАК

Слайд 13

09.11.2021 Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века 1944–1945

09.11.2021

Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века

1944–1945 г.г. Джон

фон Нейман, принципы разработки и функционирования ЭВМ
1949 г. М. Уилкс, Великобритания, первая электронная машина с хранимой программой «EDSAC» (Electronic Delay Storage Automatic Calculator). С этой машины принято вести отсчет первого поколения компьютеров.
1947–1951 г.г., С.А. Лебедев, СССР, машина МЭСМ
Середина .60 годов — появление науки информатика.

Лампа накаливания Транзисторы Интегральные схемы

Слайд 14

09.11.2021 1969 г. , первые элементы будущей глобальной сети Internet. 1974

09.11.2021

1969 г. , первые элементы будущей глобальной сети Internet.
1974 г., первый

персональный компьютер Altair 8800.
1981 г. , первый персональный компьютер модели IBM PC
2006 г., суперЭВМ Blue Gen/L – 280 триллионов операций в секунду
2018 г. суперЭВМ Summit – 200 000 триллионов операций в секунду
2021 г. суперЭВМ Fugaki – 442 000 триллионов операций в секунду (442 петафлопса), 7 630 848 ядер. Пиковая скорость простых расчётов 2 000 000 триллионов (2 экзафлопса).

Переход человеческой цивилизации в информационный этап развития (конец XX — начало XXI века)

Слайд 15

09.11.2021 Важнейшей характеристикой компьютера является его быстродействие (скорость вычислений, производительность, мощность),

09.11.2021

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

в простейшем случае определяется как количество арифметических операций, выполняемых компьютером за одну секунду. Такая единица измерения быстродействия называется флопсом и обозначается FLOPS (от Floating-point Operations Per Second – операций с плавающей точкой в секунду). Операциями с плавающей точкой считаются операции, аналогичные умножению многозначных чисел.
Слайд 16

09.11.2021 Информатика представляет собой фундаментальную естественную науку о структуре и общих

09.11.2021

Информатика представляет собой фундаментальную естественную науку о структуре и общих свойствах

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

Базовые понятия информатики:

Информация.
Информационная (математическая) модель.
Алгоритм.
Электронная вычислительная машина (компьютер).

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

Слайд 17

09.11.2021 Основными научными дисциплинами, относящимися к теоретической информатике, являются: дискретная математика,

09.11.2021

Основными научными дисциплинами, относящимися к теоретической информатике, являются:

дискретная математика, дающая математическую

основу различным дисциплинам теоретической и прикладной информатики;
теория информации, изучающая общие свойства информации, а также закономерности, управляющие её рождением, развитием и уничтожением. К теории информации также относятся вопросы передачи информации по различным каналам связи;
теория кодирования, в задачу которой входит изучение способов представления (кодирования) в компьютерах различных типов информации (текстовой, графической, звуковой и т.д.) с целью обеспечения её надёжного хранения и передачи;
теория алгоритмов, в задачи которой входит исследование общих свойств алгоритмов, а также способов их представления. Кроме того, к задачам теории алгоритмов относятся доказательство отсутствия алгоритмов решения для конкретных задач (доказательство их алгоритмической неразрешимости);
теория сложности алгоритмов, которая включает в себя асимптотический ана­лиз сложности алгоритмов, классификацию алгоритмов в соответствии с классами сложности, разработка критериев сравнительной оценки качества алгоритмов и т. п.;
Слайд 18

09.11.2021 теория систем, занимающаяся изучением общих свойств, видов и типов систем;

09.11.2021

теория систем, занимающаяся изучением общих свойств, видов и типов систем; а

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

К области прикладной информатики относятся следующие разделы и дисциплины:

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

Слайд 19

09.11.2021 системное программное обеспечение; прикладное программное обеспечение; базы данных и системы

09.11.2021

системное программное обеспечение;
прикладное программное обеспечение;
базы данных и системы управления базами

данных;
базы знаний;
искусственный интеллект;
компьютерная графика;
распределенные системы;
параллельные системы;
компьютерные сети и интернет;
безопасность информационных систем;
вирусология.
Слайд 20

09.11.2021 Тема 3. Информация и сообщения Информация (от лат. informatio разъяснение,

09.11.2021

Тема 3. Информация и сообщения

Информация (от лат. informatio разъяснение, изложение, осведомленность)

— первоначальное значение: сведения передаваемые между людьми устным, письменным или иным способом. С середины XX века —понятие, включающее обмен сведениями между любыми двум объектами или субъектами, обмен сигналами в животном и растительном мире и т.д.
(Большой энциклопедический словарь, 1990 г.).

Информация есть объективное отражение реального мира, атрибут материи, отображающий ее структуру. Эволюционный ряд познания материи, природы, форм проявления материи: вещество — энергия — информация

Общепринятое понятие информации:

Философское понятие информации:

Основоположник кибернетики Норберт Винер говорил об информации так: «Информация есть информация, а не материя и не энергия». То есть, по его мнению, информация относится к фундаментальным понятиям, которые не сводятся к каким-либо другим.

Слайд 21

09.11.2021 Существует большое количество других трактовок информации. Однако большинство учёных и

09.11.2021

Существует большое количество других трактовок информации. Однако большинство учёных и специалистов

в настоящее время придерживаются следующего представления об определении этого понятия:

Математически строго определить понятие «информация» невозможно, поскольку по своей сути оно относится к так называемым первичным, неопределяемым понятиям.

В математике и в других науках существуют такие понятия, дать строгое определение которым принципиально невозможно. К ним относятся, например, понятия «множество», «точка» и некоторые другие. Любая попытка каким-либо образом определить их сведется к использованию синонимов, которые в свою очередь окажутся неопределёнными.

В рамках предмета информатика предлагается опираться на следующее объяснение, трактовку понятия информация:

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

Слайд 22

09.11.2021 Самым характерным свойством информации, существенно отличающим это понятие от таких

09.11.2021

Самым характерным свойством информации, существенно отличающим это понятие от таких базовых

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

В соответствии с приведённой выше трактовкой информации как «отображения в сознании человека» для её появления необходим субъект, получающий информацию — получатель информации.

Очевидно, должен существовать также объект или субъект, передающий её — источник информации. Следует заметить, что источник и получатель информации могут совпадать.

Получателем информации может быть только субъект — одушевлённая сущность — человек. А вот источником информации может быть как субъект, так и любой объект — неодушевленная сущность — техническое устройство, природный или искусственный объект, явление.

Слайд 23

09.11.2021 Источник и получатель информации могут быть разделены как в пространстве,

09.11.2021

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

и во времени.

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

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

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

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

Кроме того, при передаче информации её носитель должен переместиться в пространстве из точки передачи в точку приёма через некоторую материальную среду, которую принято называть каналом связи.

Слайд 24

09.11.2021 Информация попадает к её получателю в результате контакта материального носителя

09.11.2021

Информация попадает к её получателю в результате контакта материального носителя информации

с материальными органами чувств человека.

Результатом такого контакта является осознание, выявление человеком смысла принятой информации. Например, один человек слышит произнесённые другим человеком слова и понимает, где и когда должна произойти встреча.

Это понимание, которое формируется, фиксируется в сознании человека и есть принятая им информация. Это понимание, собственно говоря, имеется в виду в приведенной выше трактовке понятия «информация», которая представляет собой некоторое «отображение в сознании человека».

Из сказанного выше вытекает, что информация существует только в сознании её получателя и только в процессе её получения, её осознания, выявления её смысла.

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

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

Слайд 25

09.11.2021 Понимание подразумевает умение выявить смысл сообщения, которым представлена информация, и

09.11.2021

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

степень её соответствия реальному миру

Итак, выявлены следующие основные аспекты информации:

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

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

Слайд 26

09.11.2021 Таким образом, можно заметить, что вся сложность в использовании понятия

09.11.2021

Таким образом, можно заметить, что вся сложность в использовании понятия «информация»

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

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

В теории информации такое отделение основано на использовании дополнительного неопределяемого понятия «сообщение». Это создаёт возможность все материальные аспекты связывать с понятием «сообщение», а все субъективные — с понятием «информация».

Сообщение — это конкретная материальная форма представления информации

Информация — это абстрактный, нематериальный смысл, извлекаемый человеком из сообщения.

Слайд 27

09.11.2021 Знания, а также отдельные систематизированные и не систематизированные факты, сведения,

09.11.2021

Знания, а также отдельные систематизированные и не систематизированные факты, сведения, данные,

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

Сообщение — материальный носитель информации, информация — нематериальное содержание, смысл сообщения. Сообщение всегда конкретно и материально, информация абстрактна и нематериальна.

Слово «абстрактный» здесь означает, что при выявлении смысла сообщения человек полностью отвлекается от его конкретных особенностей — от способа получения (устно, письменно, в виде условного знака), от таких деталей как громкий или слабый звук, какими чернилами, на каком листе бумаги написано и т.д.

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

Слайд 28

09.11.2021 В связи с введением понятия сообщения следует ещё раз отметить

09.11.2021

В связи с введением понятия сообщения следует ещё раз отметить принципиальный

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

Неодушевленные объекты могут работать только с сообщениями. Объекты — автоматические устройства, радио и телеприёмники, компьютеры и т.д. могут принимать, передавать и обрабатывать только сообщения, получить, передать, обработать и тем более осознать информацию они в принципе не могут.

Использование понятий «сообщение» и «информация» позволяет строгими научными методами изучать объективные свойства сообщений, совершенно не затрагивая при этом принципиально субъективные аспекты информации

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

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

Слайд 29

09.11.2021 В связи с уточнением терминологии в рамках предмета информатики и

09.11.2021

В связи с уточнением терминологии в рамках предмета информатики и разграничением

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

Термин «данные» в естественных и технических науках имеет используемый точный смысл:

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

Формализованным называется представление, подчиняющееся точно сформулированной, исчерпывающе полной системе правил

Слайд 30

09.11.2021 Содержание сообщения, его смысл и значение существенно зависит от получателя,

09.11.2021

Содержание сообщения, его смысл и значение существенно зависит от получателя, от

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

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

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

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

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

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

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

Слайд 31

09.11.2021 Особенно важна эта возможность для организации обработки произвольных сообщений с

09.11.2021

Особенно важна эта возможность для организации обработки произвольных сообщений с помощью

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

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

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

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

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

Слайд 32

09.11.2021 Решающим фактором для обеспечения возможности извлечения информации из сообщения является

09.11.2021

Решающим фактором для обеспечения возможности извлечения информации из сообщения является знание

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

П р и х о д и н е м е д л е н н о

Пример сообщения:

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

Слайд 33

09.11.2021 Математическая запись правил интерпретации сообщения: где: s — конкретное сообщение,

09.11.2021

Математическая запись правил интерпретации сообщения:

где: s — конкретное сообщение, i —

полученная информация,

использованное правило интерпретации сообщения

Язык интерпретации сообщений

Множество правил

Множество сообщений

Тройка множеств

называется информационной системой

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

Слайд 34

09.11.2021 Объективность — свойство информации, определяющее степень её зависимости от человека,

09.11.2021

Объективность — свойство информации, определяющее степень её зависимости от человека, объективность

информации тем больше, чем меньше в ней субъективности.

Свойства информации:

Объективность
Полнота
Достоверность
Адекватность
Доступность
Актуальность

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

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

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

Слайд 35

09.11.2021 Актуальность — это способность информации соответствовать нуждам её получателя в

09.11.2021

Актуальность — это способность информации соответствовать нуждам её получателя в некоторый

момент времени. В частности, это степень соответствия текущему моменту времени.

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

Действия над сообщениями

Основные операции:
передача
прием
обработка
xранение

Дополнительные операции :
сбор
формализация
фильтрация
сортировка
архивация
защита

Слайд 36

09.11.2021 , Сбором сообщений (более привычная, но не совсем точная форма

09.11.2021

,

Сбором сообщений (более привычная, но не совсем точная форма речи

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

Формализация сообщений представляет собой их приведение к некоторой единой форме для обеспечения возможности сопоставления различных сообщений.

Фильтрация сообщений — это отсеивание помех, шумов, ненужных или пустых сообщений, что повышает их адекватность и достоверность,

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

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

Защита сообщений это комплекс мероприятий, направленных на предотвращение их утраты, воспроизведения или изменения.

Слайд 37

09.11.2021 Хранение сообщений связано с фиксацией некоторого состояния носителя, а передача

09.11.2021

Хранение сообщений связано с фиксацией некоторого состояния носителя, а передача связана

с изменением состояния носителя.

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

Передача сообщения всегда связана с необходимостью изменить носитель во времени или в пространстве, Изменение носителя можно понимать как любое изменение его состояния, то есть любое изменение его свойств, характеристик.

Отсюда следует, что передача сообщений с помощью носителя с неизменяющимися свойствами невозможна.

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

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

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

Слайд 38

09.11.2021 Важно понимать, что передача сообщения всегда занимает некоторое время, происходит

09.11.2021

Важно понимать, что передача сообщения всегда занимает некоторое время, происходит во

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

Под состоянием объекта, явления понимается некоторый набор его свойств, характеристик, значений параметров, которые, собственно говоря, и определяют состояние, жёстко связаны с ним.

Например, можно рассматривать следующие состояния человека: «стоит», «идёт», «бежит». Они отличаются друг от друга разными значениями одного параметра скорость тела.

Постоянное, неизменное значение параметра скорость тела или же его изменение в определённых границах означает, что текущее состояние человека не меняется. А изменение скорости с выходом за установленные границы приводит к переходу из одного состояния в другое.

Слайд 39

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

09.11.2021

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

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

Процессом (лат. processus — продвижение) называется последовательная смена состояний наблюдаемого объекта или явления во времени.

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

Информационным процессом называется изменение со временем содержания информации или представляющего информацию сообщения. К информационным процессам относятся, например, приём, передача и обработка сообщений.

Слайд 40

09.11.2021 Все процессы делятся на две группы — стационарные и нестационарные

09.11.2021

Все процессы делятся на две группы — стационарные и нестационарные

Стационарными

называются объекты, явления, процессы с неизменяющимися во времени характеристиками. Объект, явление, процесс считается нестационарным при наличии какого-либо изменения любой его характеристики.

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

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

Можно также выделить группы дискретных и непрерывных процессов.

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

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

Слайд 41

09.11.2021 Все возможные состояния дискретного процесса всегда могут быть перенумерованы целыми

09.11.2021

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

то есть их общее количество конечно или счётно.

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

Дискретное время представляет собой конечную или счётную последовательность временных отсчётов t∈{0, 1, 2,…}, в которые происходит переход дискретного процесса из одного состояния в другое, с ненулевыми промежутками времени между ними.

Моменты времени , в которые заданы или измерены значения параметра сигнала, принято называть отсчётами.

Слайд 42

09.11.2021

09.11.2021

Слайд 43

09.11.2021 Между любыми двумя соседними состояниями дискретного процесса всегда имеется ненулевой

09.11.2021

Между любыми двумя соседними состояниями дискретного процесса всегда имеется ненулевой отрезок

времени. Если все такие отрезки времени равны друг другу, то во многих случаях их называют тактами.

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

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

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

Множество различных состояний непрерывного процесса несчётно (имеет мощность континуума).

Непрерывные процессы происходят в непрерывном времени, которое совпадает с физическим временем.

Слайд 44

09.11.2021 Параметр сигнала, служащий для передачи сообщения, по определению представляет собой

09.11.2021

Параметр сигнала, служащий для передачи сообщения, по определению представляет собой зависящую

от времени величину, является функцией времени

Изменение во времени значений параметра сигнала A естественно рассматривать как процесс, при этом значения функции f(t) в выбранные моменты времени являются его временными состояниями. Этот процесс может быть непрерывным или дискретным.

Это значит, что значения сигнала A=f(t) могут быть заданы в непрерывном времени, то есть в любой момент времени t из области его определения T0≤ t ≤TN (непрерывный процесс) либо в дискретном времени, то есть только в некоторые выбранные моменты времени t0,t1,…,tN (дискретный процесс).

В первом случае сигнал называется непрерывным, а в втором ̶ дискретным.

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

Так, если параметр сигнала A принимает любые значения из некоторого интервала Amin≤A≤Amax, то есть множество E его значений несчётно, то этот сигнал можно рассматривать как непрерывный по значению.

Если все значения параметра A принадлежат конечному множеству E={A0,A1,…AM} — такой сигнал естественно считать дискретным по значению.

Слайд 45

09.11.2021 Итак, понятия непрерывности и дискретности относятся как к области определения

09.11.2021

Итак, понятия непрерывности и дискретности относятся как к области определения —

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

непрерывный и по времени и по значению;
дискретный по времени и непрерывный по значениям;
непрерывный по времени, но дискретный по значениям;
дискретный и по времени и по значениям.

Сообщения, основанные на непрерывных сигналах называются непрерывными, сообщения, основанные на дискретных сигналах, называются дискретными.

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

Слайд 46

09.11.2021 Непрерывные и дискретные сигналы

09.11.2021

Непрерывные и дискретные сигналы

Слайд 47

09.11.2021 Следует отметить, что в связи с особенностями органов чувств человека

09.11.2021

Следует отметить, что в связи с особенностями органов чувств человека некоторые

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

Но слуховая система человека способна различать только 512 различных уровней громкости и 2048 различных уровней высоты звука.

Это означает, что любой звуковой сигнал после его приёма и обработки органами слуха человека фактически становится дискретным по значению параметра сообщением. Аналогичными свойствами «естественной дискретности» обладают и другие органы чувств человека.

Однако у органов чувств человека имеются и противоположные свойства, которые приводят к тому, что фактически дискретные сообщения воспринимаются им как непрерывные.

Например, на неспособности зрительной системы человека различать более 24-x последовательно сменяемых в течение одной секунды изображений одного и того же объекта основано кино. Если изображения предъявлять со скоростью, например, 20 кадров в секунду, то они будут восприниматься сознанием человека как отдельные быстросменяемые кадры, а если со скоростью 24 или более — как одно непрерывное, которое создает в сознании впечатление естественного движения объектов съемки.

Слайд 48

09.11.2021 Преобразование сообщений Преобразования вида N1→N2 используются в самых разных технических

09.11.2021

Преобразование сообщений

Преобразования вида N1→N2 используются в самых разных технических устройствах, таких

как, например, микрофон, телефон, магнитофон, радио и телевизионные приёмники и т.д.

Остальные преобразования могут быть выполнены без потери информации

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

Преобразование N1→N2 всегда сопровождается потерей информации. Это принципиальное и неустранимое обстоятельство, вытекающее из самой природы непрерывных сообщений.

Преобразования вида N→D и D→N имеют большое значение для организации обработки непрерывных сообщений с помощью компьютера.

Слайд 49

09.11.2021 Получение по непрерывному сообщению соответствующего ему дискретного называется дискретизацией, а

09.11.2021

Получение по непрерывному сообщению соответствующего ему дискретного называется дискретизацией, а получение

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

Развертка сигнала по времени

Квантование сигнала по уровню

Слайд 50

09.11.2021 Квантованный по уровню и развернутый по времени ─ дискретный сигнал

09.11.2021

Квантованный по уровню и развернутый по времени
─ дискретный сигнал

Вообще говоря,

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

Увеличивая значения N и K можно уменьшить потерю информации. Но возможно ли осуществить дискретизацию вообще без её потери?

Слайд 51

09.11.2021 В математическом анализе в теории рядов Фурье доказывается, что удовлетворяющая

09.11.2021

В математическом анализе в теории рядов Фурье доказывается, что удовлетворяющая

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

где ak, ωk и φk — амплитуда, круговая частота и фаза k-ой синусоиды.

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

Теория рядов Фурье является важным инструментом для решения задач, связанных с преобразованиями сообщений вида D→N. Дело в том, что параметры гармоник (синусоид) — коэффициенты ak и φk находятся по вычисленным или измеренным дискретным отсчётам сигнала с помощью довольно простых соотношений, а частоты ωk однозначно связаны с периодом или длительностью сигнала T – ωk=k× ω1 , ω1=2π/T.,,

Рассчитанные параметры любой гармоники можно использовать для воспроизведения соответствующего непрерывного синусоидального сигнала на звуковых колонках компьютера. Одновременное воспроизведение колонками всех гармоник представляет собой их суммирование, то есть это непрерывный сигнал (речь, музыка и т.д.). Так происходит восстановление сигнала по его отсчётам, то есть преобразование дискретного сигнала в непрерывный.

Слайд 52

09.11.2021 Теорема отсчетов В.А. Котельникова (1933 год). Непрерывный сигнал можно полностью

09.11.2021

Теорема отсчетов В.А. Котельникова (1933 год).
Непрерывный сигнал можно полностью отобразить и

точно воссоздать (восстановить) по последовательности измерений его значений или отсчётов величины этого сигнала через одинаковые интервалы времени Δt, меньшие или равные половине периода максимальной частоты ωmax, имеющейся в сигнале.

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

В общем случае суммы в разложении Фурье содержат счётное количество слагаемых, но во многих практически важных частных случаях их количество оказывается конечным и, следовательно, ограниченным. Например, речь человека не содержит частот больших, чем fmax =4000 герц.

Сигналы, создаваемые любыми реальными техническими устройствами, также имеют ограниченный набор гармоник, то есть существует конечная частота fmax такая, что все ωk≤ωmax.

Слайд 53

09.11.2021 При дискретизации аналогового сигнала выбранное количество отсчётов на одну секунду

09.11.2021

При дискретизации аналогового сигнала выбранное количество отсчётов на одну секунду длительности

сигнала называется частотой дискретизации.

Теорема В.А. Котельникова дает рекомендации по выбору необходимого количества отсчётов для выполнения развёртки сигнала во времени. Но для полной дискретизации необходимо выполнить ещё и квантование сигнала по уровню.

Например, для точной передачи речевого сигнала с максимальной частотой 4 000 Гц при его развертке следует выбрать частоту дискретизации не менее 8 000 отсчётов в секунду (8 килогерц).

Для качественного воспроизведения звукозаписей с помощью компьютера в настоящее время используются частоты дискретизации 44 килогерца и более. Это связано с тем, что слуховая система человека не воспринимает частоты выше, чем 20 000–22 000 герц. Следовательно, частота дискретизации в 44 000 герц сохраняет для человека все слышимые им звуки в неискажённом виде.

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

А при квантовании изображений для естественного восприятия цвета следует выделять не менее чем 224 = 16 777 216 цветовых градации, которые способны распознать органы зрения человека.

Слайд 54

09.11.2021 С точки зрения информатики принципиальная разница между непрерывными и дискретными

09.11.2021

С точки зрения информатики принципиальная разница между непрерывными и дискретными сигналами

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

НАБОРЫ ЗНАКОВ И АЛФАВИТЫ

Так при квантовании сигнала, за его уровнями закреплены знаки {A0, A1,…,AK}

С учётом того, что параметр изображённого на этих рисунках сигнала может принимать всего десять различных значений можно было бы выбрать какие-либо другие наборы знаков, например, {0, 1, 2, …,9} или {а, б, в, …, и}

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

Слайд 55

09.11.2021 Если сообщение имеет форму письма, то знаками являются графемы, в

09.11.2021

Если сообщение имеет форму письма, то знаками являются графемы, в

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

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

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

Тогда по любому заданному знаку можно однозначно определить соответствующий ему уровень сигнала, и, наоборот, по заданному уровню однозначно определить соответствующий ему знак. В чём недостаток такого подхода?

Слайд 56

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

09.11.2021

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

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

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

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

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

Слайд 57

09.11.2021 Множество знаков, в котором определен линейный порядок называется алфавитом. .

09.11.2021

Множество знаков, в котором определен линейный порядок называется алфавитом.

.

Примеры

двоичных алфавитов: {0,1} ({O, L}, {.,-}, {пробивка, нет пробивки}, {true, false}, {истина, ложь},{да, нет}, пара напряжений {2в, 12в} и т.д. Знак двоичного алфавита принято называть двоичной цифрой или битом (bit — binary digit)

Алфавит, как правило, задается прямым перечислением всех входящих в него знаков. При этом знаки перечисляются в порядке их следования. Примеры алфавитов:

{а, б, в, г, д, е, ё, ж, з, и, й, к, л, м, н, о, п, р, с, т, у, ф, х, ц, ч, ш, щ, ъ, ы, ь, э, ю, я} — 33 буквы русского языка;
{a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z} — 26 букв английского языка;
{0, 1, 2, …, 9} — 10 цифр арабской десятичной системы счисления;
{·, ─} — два знака азбуки Морзе, которая ранее широко использовалась для радиосвязи и т.д.

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

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

Слайд 58

09.11.2021 Пусть A={α1, α2,…αN}— используемый алфавит, αi∈A, i=1,2,…,N — его знаки,N

09.11.2021

Пусть A={α1, α2,…αN}— используемый алфавит, αi∈A, i=1,2,…,N — его знаки,N —

количество знаков в алфавите.

По определению любое дискретное сообщение S представляет собой некоторую последовательность квантованных отсчётов, а каждый отсчёт можно обозначить некоторым знаком αj∈A.

Следовательно, дискретное сообщение можно представить, записать в виде последовательности знаков, принадлежащих алфавиту: S=a1,a2,…,am, где aj— очередной знак сообщения, являющийся одним из знаков алфавита aj∈A, j=1,2,…,m; m — количество знаков в сообщении.

В такой записи запятые, которые отделяют знаки последовательности друг от друга, чаще всего пропускаются и тогда сообщение принимает вид S=a1a2…am

Например, последовательность знаков русского алфавита S= и, н, ф, о, р, м, а, ц, и, я или в более кратком виде S= информация — является сообщением, состоящим из m=10 знаков.

А последовательность из m= 8 знаков: 0, 0, 1, 0, 1, 0, 0, 1, 1, или в более наглядном виде «00101001» записана в двоичном алфавите A={0,1}

Слайд 59

09.11.2021 Любое дискретное сообщение можно представить в виде последовательности знаков из

09.11.2021

Любое дискретное сообщение можно представить в виде последовательности знаков из некоторого

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

Количество знаков m, из которых состоит цепочка α называется длиной цепочки. Длину цепочки обозначают |α|. Например, |информация|=10, а |00101001 |=8.

Допускаются цепочки нулевой длины, такие цепочки называются принято называть пустыми. Пустые цепочки обычно обозначаются буквой λ, |λ|=0.

Слайд 60

09.11.2021 Правило, описывающее соответствие между знаками первичного алфавита и знаками или

09.11.2021

Правило, описывающее соответствие между знаками первичного алфавита и знаками или сочетаниями

вторичного называется кодом.

Кодирование сообщений

Исходный алфавит A1, в котором записано сообщение, называется первичным алфавитом. Целевой алфавит A2, в который преобразуется сообщение называется вторичным алфавитом.

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

Дискретное сообщение исходя из технических соображений или из особенностей органов чувств человека, участвующих в приеме или передаче сообщений, разбивают на конечные подпоследовательности знаков, которые принято называть словами. Количество знаков в слове называется длиной слова. Если все слова языка имеют одно и то же количество знаков, то такие слова называются n-разрядными (n ─ длина слова)

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

Слайд 61

09.11.2021 Пример таблицы кодирования: Последовательность знаков вторичного алфавита A2, которыми представлен

09.11.2021

Пример таблицы кодирования:

Последовательность знаков вторичного алфавита A2, которыми представлен один знак

первичного алфавита A1 называется кодовым словом, кодовой цепочкой или просто кодом знака.
Слайд 62

09.11.2021 Кодированием называется последовательность действий по переводу сообщения из первичного во

09.11.2021

Кодированием называется последовательность действий по переводу сообщения из первичного во вторичный

алфавита.

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

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

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

Кодером называется устройство, обеспечивающее выполнение операции кодирования. Декодером называется устройство, обеспечивающее выполнение операции декодирования.

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

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

Слайд 63

09.11.2021 Задачи эффективного и оптимального кодирования часто решаются с помощью сжатия

09.11.2021

Задачи эффективного и оптимального кодирования часто решаются с помощью сжатия сообщений.


Различают два вида сжатия — без потери информации и с потерей информации.

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

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

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

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

Слайд 64

09.11.2021 При хранении в компьютере любой текст (компьютерная программа, документ, статья)

09.11.2021

При хранении в компьютере любой текст (компьютерная программа, документ, статья) рассматривается

как обычная последовательность знаков.

Кодирование текстовых данных

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

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

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

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

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

Слайд 65

09.11.2021 Передача кодов сообщения в канал всегда происходит во времени. При

09.11.2021

Передача кодов сообщения в канал всегда происходит во времени. При этом

на передачу каждого знака кода требуется некоторый отрезок времени

На рисунке изображена ситуация, в которой элементарные сигналы — импульсы, соответствующие цифре «ноль», имеют одинаковую длительность с импульсами, передающими цифру «единица».

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

Слайд 66

09.11.2021 длительность (одинаковая или разная) элементарных сигналов, которые соответствуют знакам 0

09.11.2021

длительность (одинаковая или разная) элементарных сигналов, которые соответствуют знакам 0 и

1;
длина кода (одинаковая или разная) для разных знаков первичного алфавита (равномерный и неравномерный коды).
выделение отдельного кода для каждого знака первичного алфавита (алфавитное кодирование) или возможны коды для сочетаний знаков (блочное кодирование).

Определяющие характеристики способов кодирования:

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

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

Слайд 67

09.11.2021 Пример: Азбука Морзе – статистический, алфавитный, неравномерный код с неравными

09.11.2021

Пример: Азбука Морзе – статистический, алфавитный, неравномерный код с неравными длительностями

знаков.

В 1838 году С. Морзе предложил систему кодирования для первой телеграфной линии, которая строилась между городами Балтимор и Вашингтон (США).

Эта система в нашей стране во время Первой мировой войны 1914–1918 г.г. получила название «морзянки» или «азбуки Морзе». Фактически азбука Морзе была первым цифровым способом передачи сообщений.

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

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

Слайд 68

09.11.2021 Азбука Морзе для русского алфавита

09.11.2021

Азбука Морзе для русского алфавита

Слайд 69

09.11.2021 За единицу длительности импульса в системе С. Морзе принимается длительность

09.11.2021

За единицу длительности импульса в системе С. Морзе принимается длительность передачи

точки t. Длительность передачи тире равняется 3t ̶ длительностям передачи трех точек.

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

А для разграничения кодов двух соседних букв сообщения делается пауза длительностью 3t. Промежуток между соседними словами задается паузой длительность 6t.

Базовая длительность времени передачи точки t зависит от индивидуального «подчерка» радистов, от их возможностей и опыта. Радист средней квалификации может вести передачу/приём со скоростью 60–100 знаков текста в минуту.

В среднем на код одного знака требуется около 6t. Отсюда базовая единица длительности t равна примерно 0,1–0,15 секунды.

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

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

Слайд 70

09.11.2021 Записать алфавит азбуки Морзе. Алфавит азбуки Морзе фактически состоит не

09.11.2021

Записать алфавит азбуки Морзе.

Алфавит азбуки Морзе фактически состоит не из двух,

а из трёх знаков {точка, тире, пауза} с длительностями (t, 3t, t) соответственно.

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

Слайд 71

09.11.2021 Равномерное алфавитное кодирование Развитие средств связи и компьютерной обработки данных

09.11.2021

Равномерное алфавитное кодирование

Развитие средств связи и компьютерной обработки данных привело

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

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

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

Слайд 72

09.11.2021 Этот код стал основой для международного телеграфного кода Бодо. Исторически

09.11.2021

Этот код стал основой для международного телеграфного кода Бодо.

Исторически первым

кодом этой группы считается код, предложенный Э. Бодо в 1870 году. Это равномерный код, в котором для каждого знака первичного алфавита выделяется пять двоичных цифр. Следовательно, первичный алфавит может содержать не более чем n= 25 = 32 знака.
Слайд 73

09.11.2021 Международный компьютерный код ASCII Кроме кода Бодо и других кодов,

09.11.2021

Международный компьютерный код ASCII

Кроме кода Бодо и других кодов, построенных на

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

К середине XX века в информационных системах разных стран мира использовалось более 60 различных способов кодирования алфавитов естественных языков, так что обмен сообщениями между различными компьютерами был затруднён или вообще невозможен.

В связи с этим остро встала проблема стандартизации способов кодирования текстовых данных. В 1963 году был опубликован первый вариант равномерного алфавитного кода ASCII (от англ. American Standard Code for Information Interchange — американский стандартный код для обмена информацией), который стал логическим развитием кода Бодо.

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

Слайд 74

09.11.2021 В основе выбора системы равномерного кодирования для представления текстов в

09.11.2021

В основе выбора системы равномерного кодирования для представления текстов в компьютерах

лежали следующие соображения.

Группа из 8 бит, используемая как единое целое, например, для кодирования одного символа текста, называется байтом (byte ─ BinarY TErm).

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

Исходя из теоретических соображений, это требует для представления любого знака исходного алфавита при равномерном алфавитном двоичном кодировании log2150 ≈ 7,2 знаков, то есть семи или восьми двоичных цифр.

Первоначально кодировка ASCII была семиразрядной, что позволяло выделить коды максимум 27 = 128 знакам. Но впоследствии было предложено использовать для кодирования одного знака группу из 8 двоичных цифр, что позволяет определить коды для 28 = 256 различных знаков первичного алфавита.

Слайд 75

09.11.2021 В современном международном стандарте кодовой таблицы ASCII зафиксированы коды только

09.11.2021

В современном международном стандарте кодовой таблицы ASCII зафиксированы коды только для

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

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

Для краткости речи расширения кодовой таблицы обычно называют просто кодовой таблицей (а иногда и кодовой страницей), с указанием некоторого дополнительного обозначения, например, говорят: «кодовая таблица Windows 1251», подразумевая под этим соответствующее расширение таблицы ASCII.

Слайд 76

09.11.2021 Фрагмент ГОСТ альтернативной кодовой таблицы ASCII. 1 знак → 8

09.11.2021

Фрагмент ГОСТ альтернативной кодовой таблицы ASCII.

1 знак → 8 бит,

28=256 знаков

1000 10102

К ─ ГОСТ алтерн.
Љ ─ Windows1251

Универсальная кодировка
UNICODE (UNIversal CODE)
1 символ → 16 бит
216=65 536

Слайд 77

09.11.2021 При кодировании текста каждому его знаку ставится в соответствие выбранный

09.11.2021

При кодировании текста каждому его знаку ставится в соответствие выбранный из

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

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

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

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

Слайд 78

09.11.2021 При хранении данных в памяти компьютера код одного знака занимает

09.11.2021

При хранении данных в памяти компьютера код одного знака занимает один

байт памяти, и для обозначения необходимой для хранения текстовых данных памяти используются термины «объём данных» и эквивалентный термин «объём памяти»

Кроме того, когда речь идет о характеристике некоторого поля или участка памяти, используется ещё один термин длина поля памяти, которая также измеряется в байтах. Следует понимать, что понятия объем памяти и длина поля памяти представляют собой одну и ту же характеристику — количество байтов, из которых состоит (которые занимает в памяти) обсуждаемый объект.

Слайд 79

09.11.2021 Объемные единицы измерения количества информации (система СИ)

09.11.2021

Объемные единицы измерения количества информации (система СИ)

Слайд 80

09.11.2021 Текстовый формат определяет одну или несколько кодовых таблиц, которые используются

09.11.2021

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

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

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

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

TXT (TeXT — текст) основывается на одной из кодовых таблиц для представления символов и практически не содержит никаких элементов его оформления;
RTF (Rich Text Format — богатый текстовый формат), содержит совокупность стандартных возможностей по оформлению текстов;
DOC (DOCument — документ) содержит подавляющее большинство используемых в современной практике возможностей по оформлению текстов;
PDF (Portable Data Format ─ переместимый формат данных) универсальный формат, воспринимаемый на компьютерах любого типа

Некоторые текстовые форматы:

Понятие формата

Слайд 81

09.11.2021 Тема 5. Кодирование числовых данных Несмотря на то, что, запись

09.11.2021

Тема 5. Кодирование числовых данных

Несмотря на то, что, запись любого числа

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

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

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

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

Основными разновидностями данных в информатике являются: текстовые, числовые, графические. Представление звуковых данных базируется на числовых, а видеоданных ─ на числовых и графических.

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

Слайд 82

09.11.2021 Системы счисления Система счисления представляет собой совокупность правил записи и

09.11.2021

Системы счисления

Система счисления представляет собой совокупность правил записи и наименования чисел,

а также получения значения чисел из изображающих их символов.

Каждая система счисления использует для изображения чисел свой собственный набор знаков — алфавит.

Десятичный алфавит: {0,1,2,3,4,5,6,7,8, 9}

Двоичный алфавит: {0,1}

Шестнадцатеричный алфавит: {0,1,2,3,4,5,6,7,8, 9, A, B, C, D, E, F}

Алфавит римской системы счисления: {I,V,X,L,C,D,M}

Примеры алфавитов:

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

Пример: различные изображения числа «девять»: IX, 1001, 11, 10, 9, и т.д.

Слайд 83

09.11.2021 Количество знаков в алфавите системы счисления обычно отражается в ее

09.11.2021

Количество знаков в алфавите системы счисления обычно отражается в ее названии:

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

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

Знаки, входящие в алфавиты систем счисления традиционно называются цифрами. Таким образом, знаки A, B, C, D, E и F, входящие в алфавит шестнадцатеричной системы счисления, считаются цифрами.

В общем случае различают непозиционные, позиционные и смешанные системы счисления.

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

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

Слайд 84

09.11.2021 Пусть — алфавит некоторой позиционной системы счисления Закон разложения по

09.11.2021

Пусть

— алфавит некоторой позиционной системы счисления

Закон разложения по степеням

основания системы счисления.

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

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

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

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

Слайд 85

09.11.2021 , Целое число p, входящее в выражение, служащее для определения

09.11.2021

,

Целое число p, входящее в выражение, служащее для определения значения

числа, называется основанием системы счисления. Это число совпадает с количеством цифр в алфавите позиционной системы счисления.

Пример: x=52,128


=5×10+2+

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

Слайд 86

09.11.2021 Общий принцип изображения целых чисел в позиционных системах счисления Процесс

09.11.2021

Общий принцип изображения целых чисел в позиционных системах счисления

Процесс нумерации,

то есть обозначения чисел в любой позиционной сис-теме счисления начинается с того, что за числом «нуль» закрепляется младшая цифра алфавита (цифра 0).
При переходе к очередному целому числу в текущий разряд записывается следующая цифра алфавита: после 0→1, после 1→2, и т.д..
После исчерпания всех возможностей по перебору цифр алфавита во всех уже используемых разрядах в них записывается младшая цифра 0, а в изображение числа слева добавляется еще один разряд, в который записывается вторая цифра алфавита — цифра «1». Например, в десятичной системе после 9 следует 10, после 99 — 100, после 999 следует 1000 и т.д. После чего возобновляется перебор цифр алфавита с самого младшего разряда числа: 100, 101, 102,… .
После завершения перебора всех цифр алфавита в последнем или в одном из внутренних разрядов числа и во всех предшествующих ему, в нём и во всех предыдущих разрядах (если они есть) записывается младшая цифра алфавита 0 и происходит переход к следующей цифре в следующем старшем разряде. Например, в той же десятичной системе после 19 следует 20, после 119— 120, после 1199 — 1200 и т.д. Затем перебор цифр алфавита возобновляется с самого младшего разряда.

Максимальное значение n - разрядных целых чисел в системе счисления с основанием p равно p n –1. Например, максимально возможное 4-х разрядное десятичное число 9999 равно 104–1.

В частности, максимально возможное n – разрядное целое двоичное число равно 2n –1.

Слайд 87

09.11.2021 Двоичная система счисления Запись целого неотрицательного десятичного числа в двоичной

09.11.2021

Двоичная система счисления

Запись целого неотрицательного десятичного числа в двоичной системе счисления

называется прямым двоичным кодом этого числа.
Слайд 88

09.11.2021 Шестнадцатеричная система счисления

09.11.2021

Шестнадцатеричная система счисления

Слайд 89

09.11.2021 Шестнадцатеричная система счисления

09.11.2021

Шестнадцатеричная система счисления

Слайд 90

09.11.2021 Переходы между системами счисления Перевод целых чисел из десятичной системы

09.11.2021

Переходы между системами счисления

Перевод целых чисел из десятичной системы в

систему с основанием P

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

200510 → 111110101012

2005



1

1002


0


501


1


250


0


125


1


62


0


31



1

15


1


7


1


3


1


1

Пример перевода в двоичную систему счисления

Пример перевода в шестнадцатеричную систему счисления

2005




16

1


16


40

2


32


5

85


80


5




16

112



13

7

710 → 7 16

13 10 → D 16

2005 10 → 7D5 16

Слайд 91

09.11.2021 Перевод правильных дробей из десятичной системы в систему с основанием

09.11.2021

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


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

0,625

×

2


1,250

×

2


0,500

×

2


1,000

0,625 10 → 0,101 2

0,625

×

16


10,000

10 10→ A 16

0,625 10 → 0, A 16

Слайд 92

09.11.2021 В теории погрешностей вычислений устанавливается, что погрешность вещественных чисел, полученных

09.11.2021

В теории погрешностей вычислений устанавливается, что погрешность вещественных чисел, полученных в

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

Например, число 23,176 может быть получено как результат округления следующих чисел:

23,17648 ̶ погрешность равна: Δ=|23,176-23,17648|=0,00048
23,17589 ̶ погрешность равна: Δ=|23,176-23,17589|=0,00011
23,1757 ̶ погрешность равна: Δ=|23,176-23,1757|=0,0003
23,17629 ̶ погрешность равна: Δ=|23,176-23,17629|=0,00029

Отсюда Δ≤0,0005 или Δ≤1/2×10-3.

Пусть правильная дробь в системе счисления с основанием q содержит n цифр. Сколько цифр m в дробной части этого числа следует получить при переходе в систему счисления с основанием p?

При переходе из десятичной в двоичную (10→2):

q=10; p=2; m=n×log210, m=3,329 × n

Слайд 93

09.11.2021 Перевод смешанных чисел из десятичной системы в систему с основанием

09.11.2021

Перевод смешанных чисел из десятичной системы в систему с основанием P.


Пример: 2005,62510

→ 111 1101 0101,1012

2005,62510 → 7D5,A16.

Перевод чисел из системы с основанием P в десятичную систему счисления

Записать число в виде разложения по степеням основания исходной системы счисления.
Заменить p-е цифры числа их десятичными эквивалентами.
Выполнить вошедшие в полученное выражение действия.

Пример: 111 1101 0101,1012; p=2

1×20+0×21+1×22+0×23+1×24+0×25+1×26+1×27+1×28+1×29+1×210+1×2–1+0×2–2 +1×2–3

1+22+24+26+27+28+29+210+2–1+2–3 =1+4+16+64+128+256+512+1024+1/2+1/8=2005,62510

Пример: 7D5,A16 ; p=16

5×160+D×161+7×162+A×16–1=5+13×16+7×256+10/16=2005,62510

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

Слайд 94

09.11.2021 Переходы между двоичной и шестнадцатеричной системами счисления p1=2, p2=16, p2=p14

09.11.2021

Переходы между двоичной и шестнадцатеричной системами счисления

p1=2, p2=16, p2=p14

Каждую цифру

алфавита шестнадцатеричной системы счисления представляют четверкой (обычно говорят тетрадой) двоичных цифр
Слайд 95

09.11.2021 Переход из двоичной системы счисления в шестнадцатеричную Разбить число на

09.11.2021

Переход из двоичной системы счисления в шестнадцатеричную

Разбить число на тетрады. Разбиение

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

Пример:11111010101,1012

11111010101,101

111 1101 0101, 101

0

0


5


D


7


A

11111010101,1012 → 7D5,A16

Слайд 96

09.11.2021 Переход из шестнадцатеричной системы счисления в двоичную Чтобы перевести шестнадцатеричное

09.11.2021

Переход из шестнадцатеричной системы счисления в двоичную

Чтобы перевести шестнадцатеричное число в

двоичную систему счисления нужно каждую шестнадцатеричную цифру числа заменить двоичной четверкой.

Пример: 7D5,A 16

7 D 5, A


0111


1101


0101


1010

011111010101,1010

7D5,A16→11111010101,1012

→11111010101,101

Слайд 97

09.11.2021 Действия в двоичной и шестнадцатеричной системах счисления Таблица сложения двоичной

09.11.2021

Действия в двоичной и шестнадцатеричной системах счисления

Таблица сложения двоичной системы счисления

0+0=0

1+0=1

0+1=1

1+1=(1)0

Сложение

многоразрядных чисел производится также как и в десятичной систе-ме: осуществляется поразрядное сложение с учетом возможных переносов из предыдущих разрядов. Разряды при этом перебираются справа налево.

101001011011,00112

111101010111,11112

+

Пример:

02

Перенос (в «уме»):

1

Одноразрядное действие:

1+1= 0 и 1 переноса (в «уме»)

1+1+1= 1 и снова 1 переноса

1

1100110110011,00

Слайд 98

09.11.2021 Таблица вычитания двоичной системы счисления 0 – 0 = 0

09.11.2021

Таблица вычитания двоичной системы счисления

0 – 0 = 0

1 – 0

= 1

1 – 1 = 0

10 – 1 = 1

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

Пример:

1100110110011,00102

101001011011,00112

-

Одноразрядное действие:

0 – 1=

заем

10 – 1 = 1

12

0

0

1

111101010111,11

Слайд 99

09.11.2021 Таблица умножения двоичной системы счисления 0×0=0 1×0=0 0×1=0 1×1=1 Умножение

09.11.2021

Таблица умножения двоичной системы счисления

0×0=0

1×0=0

0×1=0

1×1=1

Умножение многоразрядных двоичных чисел производится по той

же схеме, что и умножение десятичных:

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

11011,112

Пример:

101,012

×

1101111

1101111

1101111

10010001,10112

Слайд 100

09.11.2021 Фрагмент таблицы сложения шестнадцатеричной системы счисления

09.11.2021

Фрагмент таблицы сложения шестнадцатеричной системы счисления

Слайд 101

09.11.2021 Сложение двух многозначных шестнадцатеричных чисел Складываемые шестнадцатеричные цифры заменяются десятичными

09.11.2021

Сложение двух многозначных шестнадцатеричных чисел

Складываемые шестнадцатеричные цифры заменяются десятичными эквивалентами.
Выполняется

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

Пример:

DA9CD316

15B4F516

+

3+5=8

<16

810→816

816

D+F=

13+15=

28>16

→28-16=12;

1210→C16

C

1

ПЕРЕНОС

С+4=

12+4=

16+4

+1

=17>16

;17-16=

1

1

F05

Слайд 102

09.11.2021 Сумма цифр оценивается по отношению к шестнадцатеричному десятку. Если она

09.11.2021

Сумма цифр оценивается по отношению к шестнадцатеричному десятку.
Если она меньше, чем

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

Второй способ сложения многозначных шестнадцатеричных чисел

DA9CD316

15B4F516

+

Пример:

3+5=8

<16

810→816

816

D+F>16;

F ближе к 1016, не хватает 1;

D-1=C;

1

ПЕРЕНОС

C

F051

Слайд 103

09.11.2021 Вычитание двух многозначных шестнадцатеричных чисел Участвующие в вычитании цифры текущего

09.11.2021

Вычитание двух многозначных шестнадцатеричных чисел

Участвующие в вычитании цифры текущего разряда

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

Пример:

F051C816

DA9CD316

-

8-3=5

516

С-D=

12-13=

12+16-13=

заем

1510→F16

0

F

15B4

Слайд 104

09.11.2021 Форматы кодирования числовых данных Вспомним, что исчерпывающе полный набор правил

09.11.2021

Форматы кодирования числовых данных

Вспомним, что исчерпывающе полный набор правил кодирования той

или иной разновидности данных принято называть форматом этих данных.

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

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

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

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

Слайд 105

09.11.2021 Формат с фиксированной точкой предназначен для представления целых чисел. Целые

09.11.2021

Формат с фиксированной точкой предназначен для представления целых чисел. Целые числа

в этом формате представлены абсолютно точно. Используются поля длиной 1,2 и 4 байта. Существуют беззнаковое и знаковое представления формата.

Формат с фиксированной точкой

Беззнаковое представление формата с фиксированной точкой

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

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

Диапазон представимых чисел: от 0 до 2N -1, N ─ длина поля в битах.

Следовательно, под дробную часть числа отводится нулевое количество разрядов, поэтому в данном варианте кодирования возможна работа только с целыми числами. Постоянное расположение точки, фиксация её позиции дала название формату — «с фиксированной точкой».

Слайд 106

09.11.2021 Примеры: 7710 перевести заданное целое положительное число в двоичную систему

09.11.2021

Примеры: 7710

перевести заданное целое положительное число в двоичную систему счисления;
выбрать поле,

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

004D;

0000004D;

26710 →

010B; 0000010B

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

→ 4D;

Порядок перехода к беззнаковому формату с фиксированной точкой:

Определение числа по его коду (беззнаковый, фиксированная точка):

Слайд 107

09.11.2021 Знаковое представление формата с фиксированной точкой. Один бит поля выделяется

09.11.2021

Знаковое представление формата с фиксированной точкой.

Один бит поля выделяется под

код знака: 0 ─ код знака +, 1 ─ код знака -; остальные биты поля ─ значащие цифры модуля, диапазон модулей представимых чисел: от 0 до 2n-1 -1, n ─ длина поля в битах.

Система кодирования со знаком

Код знака числа принято размещать в самом левом разряде поля, который в связи с этим принято называть знаковым битом.

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

Слайд 108

09.11.2021 1. Неоднозначное представление нуля: +0 → 0|000 00002; - 0

09.11.2021

1. Неоднозначное представление нуля: +0 → 0|000 00002; - 0 →

1|000 0002;
2. Специальная арифметика:
0000 0001 (+1)
1000 0001 (- 1)
1000 0010 (-2)

Попытка
использования системы кодирования со знаком (прямого двоичного кода со знаковым битом) для представления знаковых целых чисел:

|4|10 → 000 01002;

|127|10 → 111 11112;

+4 → 0|000 01002;

- 4 → 1|000 01002;

+127 → 0|111 11112;

- 127 → 1|111 11112;

Недостатки:

+

Слайд 109

09.11.2021 Дополнительный код целых чисел Код должен подчиняться правилам выполнения сложения

09.11.2021

Дополнительный код целых чисел

Код должен подчиняться правилам выполнения сложения и вычитания

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

+7 → 01112
+6 → 01102
+5 → 01012
+4 → 01002
+3 → 00112
+2 → 00102
+1 → 00012
+0 → 00002
1 → 11112
2 → 11102
3 → 11012
4 → 11002
5 → 10112
6 → 10102
7 → 10012
8 → 10002

При четырех битах всего 16 кодов, диапазон при использовании прямого кода: от – 7 до +7, два кода заняты под нуль 00002 и 10002

При четырех битах всего 16 кодов, диапазон при использовании дополнительного кода: от – 8 до +7, под нуль занят один код 00002, а код 10002 обозначает -8

Для однобайтового поля всего 256 кодов, диапазон целых чисел для беззнакового представления

Для однобайтового кода всего 256 кодов, диапазон целых чисел для однобайтового поля
знакового представления

Слайд 110

09.11.2021 Пусть M =2n, где n — разрядность поля, используемого для

09.11.2021

Пусть M =2n, где n — разрядность поля, используемого для записи

кода. С формальных позиций дополнительный код D отрицательного целого числа представляет собой дополнение прямого кода модуля P этого числа до числа n: P+D=M, откуда D=M-P. Отметим, что название «дополнительный» код возникло именно по этой причине.

Рассмотрим пример. Вновь возьмём n=4 и найдем код числа минус семь. В данном случае M=24=100002, прямой код модуля обсуждаемого числа P=1112, и, следовательно, его дополнение до M равно D = 100002 – 1112 = 10012, что совпадает с полученным прямыми рассуждениями дополнительным кодом этого числа.

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

Слайд 111

09.11.2021 Диапазон представления чисел при использовании дополнительного кода: от - 2N-1

09.11.2021

Диапазон представления чисел при использовании дополнительного кода: от - 2N-1 до 2N-1-1

Примеры:

+7710 → 0100 11012 или 4D16;

Перевести модуль целого числа в двоичную систему счисления;
Если число отрицательное, то получить дополнительный код, инвертировав прямой код (получится обратный код) и добавив к результату 1;
Записать число в выделенное для него поле.

10000 00002 10016
0100 11012 4D16
1011 00112 B316

Способы получения дополнительного кода

-

-

77; 1) прямой код модуля: 77 → 4D16= 0100 11012;
2) обратный код: 1011 00102;
дополнительный код: 1011 00112;
3) – 77 → 1011 00112 или B316;

Порядок перехода к знаковому формату с фиксированной точкой:

Слайд 112

09.11.2021 Правило размножения знака при переходе к более длинным полям Число:

09.11.2021

Правило размножения знака при переходе к более длинным полям

Число: +7710
Поле 1

байт: 0|100 11012 или 4D16;
Поле 2 байта: 0|000 0000 0100 11012 или 00 4D16;
Поле 4 байта: 0|000 0000 0000 0000 0000 0000 0100 11012 или 00 00 00 4D16

Число: - 7710
Поле 1 байт: 1|011 00112 или B3 16;
Поле 2 байта: 1|111 1111 1011 00112 или FF B316;
Поле 4 байта: 1|111 1111 1111 1111 1111 1111 1011 00112 или FF FF FF B316

1 0000 0000 0000 00002
0100 11012
1111 1111 1011 00112

Дополнительные коды для -77

1 0000 0000 0000 0000 0000 0000 0000 00002
0100 11012
1111 1111 1111 1111 1111 1111 1011 00112



1 00 0016
4D16
FF B316


1 00 00 00 0016
4D16
FF FF FF B316


При переходе к более длинному полю свободные слева биты поля заполняются кодом знакового бита 02 (016) для положительных и 12 (F16) ─ для отрицательных

Слайд 113

09.11.2021 005A16 FFE816 По знаковому биту определить знак числа. Для отрицательных

09.11.2021

005A16

FFE816

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

2-ой системе счисления крайняя слева цифра равна 12, в 16-й ─ эта цифра не меньше (≥) 816;
Если код дополнительный, то перейти к прямому коду модуля (по тем же правилам, что и переход от прямого к дополнительному);
Перевести число из 2-ой (или 16-ой) системы счисления в десятичную
Сформировать соответствующий знак числа.

Порядок определения числа по его коду (знаковый, фиксированная точка):

→ +90

→ 0000 0000 0101 10102;

>0;

→ 1111 1111 1110 10002;

<0;

10000-FFE8=0018

→ - 24

Примеры:

Слайд 114

09.11.2021 Нормализованные числа. Числа, записанные в форме ± m × q

09.11.2021

Нормализованные числа.

Числа, записанные в форме ± m × q ±p, где

1 ≤ m < q+1 ─ мантисса числа, q ─ основание системы счисления, p ─ порядок, называются нормализованными: Для десятичной системы счисления это ограничение имеет вид 1 ≤ m < 10. Примеры нормализованных чисел: - 2,9×1018; 1,8456 ×10+1; 9,1 ×10-32

В естественных науках часто используются числа вида:- 2,9×10 18 ;0,091 ×10-30. Обычно этот способ используется для задания очень больших или очень маленьких по модулю чисел.

- 2 900 000 000 000 000 000 → - 2,9×1018
0,000 000 000 000 000 000 000 000 000 000 091 → 0,091 ×10-30

Например:

18,456 → 1,8456×10+1

Запись чисел таким способом обладает неоднозначностью:

→ 1845,6 ×10-2

→ 184,56 ×10-1

→ 0,18456 ×10+2

Чтобы избавится от неоднозначности на значение мантиссы m накладывается какое-либо ограничение, например: 0,1 ≤ m< 1 или 1≤ m <10.

Слайд 115

09.11.2021 Формат с плавающей точкой используется для кодирования нецелых чисел, обычно

09.11.2021

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

в результате выполнения всевозможных измерений. В информатике такие числа принято называть вещественными. Числа в этом формате представлены принципиально неточно, то есть приближенно. 5.0 ─ вещественное, нецелое, приближенное ≠ 5 ─ целое, точное.

ФОРМАТ С ПЛАВАЮЩЕЙ ТОЧКОЙ

Принцип кодирования в формате с плавающей точкой

Код числа вида ± m × q ±p должен содержать:
Код знака числа ± (0 или 1);
Код нормализованной мантиссы 1 ≤ m < 10 ;
Код знака порядка ± (0 или 1);
Код порядка p.

Возможный способ кодирования с помощью восьми десятичных цифр

Слайд 116

09.11.2021 Диапазон представления чисел с плавающей точкой 1,0×10-9 ≤ |X| ≤

09.11.2021

Диапазон представления чисел с плавающей точкой

1,0×10-9 ≤ |X| ≤ 9,9999×10+9 и

0

0

0

Машинный нуль (underflow ─ исчезновение порядка) |x|<10-9

0

Переполнение (overflow ─ переполнение порядка) |x| >9,9999×10+9

Слайд 117

09.11.2021 Влияние распределения ролей в разрядной сетке на диапазон Минимальное по

09.11.2021

Влияние распределения ролей в разрядной сетке на диапазон

Минимальное по модулю число:

Максимальное

по модулю число:

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

Слайд 118

09.11.2021 Денормализация и нормализация при выполнении арифметических операций над данными в

09.11.2021

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

с плавающей точкой.

1,6×10-4
1,2 ×10-4
2,8 ×10-4

+

8,6×10-4
3,7 ×10-4
12,3 ×10-4

+

→ 1,23×10-3

1,6 ×10-4
1,52 ×10-4
0,08 ×10-4

-

→ 8,0×10-6

1,6×10-4
1,5×10-5

1,6 ×10-4
0,15×10-4
1,75×10-4

+

+

Нормализация результата

Предварительная денормализация операнда

1,6×10-4
1,5×10-3

+

1,6×10-4
15,0×10-4
16,6×10-4

+

→ 1,66×10-3

Слайд 119

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

09.11.2021

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

длиной 4, 6, 8 и 10 байт.

Диапазон и точность представления чисел в формате с плавающей точной

Слайд 120

09.11.2021 Поля длиной 4 байта ─ короткие вещественные (одинарная точность) Код

09.11.2021

Поля длиной 4 байта ─ короткие вещественные (одинарная точность)

Код знака

числа S ─ 1 бит (31 бит)
Код машинного порядка Pм ─ 8 бит (23-30 биты)
Код мантиссы M ─ 23 бита (0-22 биты).

S=0 для положительных чисел и S=1 ─ для отрицательных
Код машинного порядка Pм равен порядку числа Pи увеличенному на 12710
Код мантиссы равен мантиссе, уменьшенной на единицу

Слайд 121

09.11.2021 Порядок получения кода числа в формате с плавающей точкой Перевести

09.11.2021

Порядок получения кода числа в формате с плавающей точкой

Перевести модуль числа

из десятичной системы счисления в двоичную.
Нормализовать число.
Сформировать знаковый бит S (0 → код знака плюс ; 1 → код знака минус).
Выделить истинный порядок (Pи).
Получить код машинного порядка (Pм=Pи+ 12710 или 7F16 или 111 11112).
Получить код мантиссы M, отбрасывая бит целой части.
Записать коды S, Pм, M в отведенные для них позиции.

+15,37510

→ 1111,0112

→ 1,111011×10112

S=0;

Pи = 112;

Pм = Pи + 111 11112 = 1000 00102;

M = 1110112

Код числа +15,37510 в формате с плавающей точкой в четырехбайтовом поле 0100 0001 0111 0110 0000 0000 0000 00002 или 41 76 00 0016

Пример:

Слайд 122

09.11.2021 Порядок получения числа по его коду в формате с плавающей

09.11.2021

Порядок получения числа по его коду в формате с плавающей точкой

Получить

запись числа в двоичной системе счисления.
Выделить код знака S и определить знак числа.
Выделить код машинного порядка Pм.
Получить истинный порядок Pи (Pи=Pм- 12710 или 7F16 или 111 11112).
Выделить код мантиссы М и получить мантиссу, дописывая бит целой части.
Получить число в нормализованной форме.
При необходимости денормализовать число, перевести его в десятичную систему счисления и дописать нужный знак.

Пример: С2B7AE0016

→1100 0010 1011 0111 1010 1110 0000 0000

1 10000101 01101111010111

S=1;

Pм = 100001012=8516;

→ Pи =(85-7F)16 = 616 =1102

М = 01101111010111

→ - 1,01101111010111×10+110

→ -1011011,110101112

→ - 5B,D716

= - 91,8398437510

Слайд 123

09.11.2021 Поля длиной 6 байтов ─ вещественные (обычная точность) Код знака

09.11.2021

Поля длиной 6 байтов ─ вещественные (обычная точность)

Код знака числа

S ─ 1 бит (47 бит)
Код машинного порядка Pм ─ 8 бит (39-46 биты)
Код мантиссы M ─ 39 бита (0-38 биты).

Правила прямого и обратного переходов те же самые, что и при использовании четырехбайтовых полей

Поля длиной 8 байтов ─ длинные вещественные (двойная точность)

Код знака числа S ─ 1 бит (63 бит)
Код машинного порядка Pм ─ 11 бит (52-62 биты)
Код мантиссы M ─ 52 бита (0-51 биты).

Правила прямого и обратного переходов те же самые, что и при использовании четырехбайтовых полей, но машинный порядок отличается от истинного на 102310

+15,37510

→ 1111,0112

→ 1,111011×10112

S=0;

Pи = 112;

Pм = Pи + 11 1111 11112 = 100 0000 00102;

M = 1110112

Пример:

Код числа +15,37510 в формате с плавающей точкой в восьмибайтовом поле 0100 0000 0010 1110 1100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00002 или 40 2E C0 00 00 00 00 0016

Слайд 124

09.11.2021 Поля длиной 10 байтов ─ расширенные вещественные Код знака числа

09.11.2021

Поля длиной 10 байтов ─ расширенные вещественные

Код знака числа S ─

1 бит (79 бит)
Код машинного порядка Pм ─ 15 бит (64-78 биты)
Код мантиссы M ─ 64 бита (0-63 биты).

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

+15,37510

→ 1111,0112

→ 1,111011×10112

S=0;

Pи = 112;

Pм = Pи + 11 1111 1111 11112 = 100 0000 0000 00102;

M = 11110112

Пример:

Код числа +15,37510 в формате с плавающей точкой в десятибайтовом поле 0100 0000 0000 0010 1111 0110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00002 или 40 02 F6 00 00 00 00 00 00 0016

Слайд 125

09.11.2021 Двоично-десятичный формат (BCD – формат ─ binary coded decimal )

09.11.2021

Двоично-десятичный формат (BCD – формат ─ binary coded decimal )

Неупакованный BCD

формат.
Упакованный BCD формат.
Знаковый BCD формат.

Разновидности BCD кодирования

Пример: число: +567 398 104

Текстовый код ASCII: 20 35 36 37 33 39 38 31 30 3416

Неупакованный BCD формат: 00 05 06 07 03 09 08 01 00 0416

Упакованный BCD формат: 05 67 39 81 0416

Знаковый BCD формат (для - 567398104) : 80 00 00 00 00 05 67 39 81 0416

Слайд 126

09.11.2021 Один и то же код может восприниматься и как код

09.11.2021

Один и то же код может восприниматься и как код цепочки

символов и как код целого числа в формате с фиксированной точкой и как код числа в формате с плавающей точкой, а также в любых других смыслах

С2ABE45216

Текстовый формат, кодировка Windows1251 → В « д R

Текстовый формат, кодировка КОИ-8 → б └ Д R

КОД:

Текстовый формат, кодировка ГОСТ → ┬ л ф R

Беззнаковый, фиксированная точка → 3 266 045 01010

Знаковый, фиксированная точка → - 1 028 922 28610

Формат с плавающей точкой → - 85,94629110

Слайд 127

09.11.2021 Необходимость в кодировании графических данных возникла в связи с появлением

09.11.2021

Необходимость в кодировании графических данных возникла в связи с появлением в

шестидесятых годах XX века в составе компьютеров устройств на основе электроннолучевых трубок — дисплеев (англ. display — показывать, демонстрировать).

Кодирование графических данных

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

Основные виды компьютерной графики в настоящее время: растровая, векторная, фрактальная, flash – графика.

Изображение строится из горизонтальных линий — строк. А каждая строка в свою очередь состоит из элементарных мельчайших единиц изображения — точек, которые принято называть пикселями (picsel — PICture'S ELement — элемент картинки).

Основы кодирования растровой графики

Слайд 128

09.11.2021 Изображение на экране → Фактическая структура изображения: строка → Всю

09.11.2021

Изображение на экране →

Фактическая структура изображения:

строка →

Всю совокупность элементарных

единиц изображения называют растром (лат. rastrum — грабли).

← пиксель

Слайд 129

09.11.2021 Степень четкости изображения зависит от количества строк на весь экран

09.11.2021

Степень четкости изображения зависит от количества строк на весь экран и

количества пикселей в строке, которые представляют разрешающую способность экрана или просто разрешение. Например, разрешение 800×600, то есть 800 точек на строку и 600 строчек на экран.

Количество строк (например,600)

Количество пикселей в строке (например, 800)

Стандартно используемые разрешения: 800×600, 1024 × 768, 1152 × 864, 1280 × 1024, 1600 × 1200, 1600 × 1280, 1920 × 1200, 1920 × 1600, 2048 × 1536.

Строки, из которых состоит изображение, принято просматривать сверху вниз друг за другом, как бы составив из них одну сплошную линию. Такой способ работы со строками называется строчной разверткой, или сканированием (scan — бегло просматривать; разлагать, развертывать изображение).

Слайд 130

09.11.2021 Кодирование черно-белых изображений Пример кодирования одной строки изображения. На строчку,

09.11.2021

Кодирование черно-белых изображений

Пример кодирования одной строки изображения.

На строчку, состоящую из 800

пикселей (точек), требуется 100 байтов памяти, а на весь растр 800×600 (на всё изображение)  — 60 000 байтов.

1. В изображении используется два цвета: белый и черный. Состояние пикселя кодируется одним битом.

Недостаток: получается чрезвычайно контрастное изображение

2. Более реалистический вариант ─ в изображении используются четыре цвета: белый, светло-серый, темно-серый и черный. На один пиксель требуется два бита.

На растр 800×600 требуется 120 000 байтов.

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

На кодирование одного пикселя требуется один байт, а на весь растр 800×600 ─ 480 000 байтов.

Слайд 131

09.11.2021 Кодирование цветных изображений. Метод RGB Для формирования цветных изображений используются

09.11.2021

Кодирование цветных изображений. Метод RGB

Для формирования цветных изображений используются несколько различных

способов, которые принято называть цветовыми системами, цветовыми моделями или цветовыми схемами. Наиболее известную цветовую систему, которая называется RGB, предложил Д. Максвелл в 1860 году.

Кодирование цветных пикселей в методе RGB основано на том, что белый цвет можно представить как сумму трех основных цветов: красного (Red), зеленого (Green), синего (Blue), а их смешение в различных пропорциях дает остальные цвета.

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

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

Слайд 132

09.11.2021 Цветовая система представляет собой способ представления цвета в виде набора

09.11.2021

Цветовая система  представляет собой способ представления цвета в виде набора чисел

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

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

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

При этом нулевое значение означает, что в суммарном цвете данный основной цвет отсутствует, а единичное — присутствует.

Слайд 133

09.11.2021 2. Полноцветный режим (режим True Color ─ истинный цвет). Для

09.11.2021

2. Полноцветный режим (режим True Color ─ истинный цвет). Для кодирования

каждого из основных цветов выделяется один байт.

Можно задать 256 оттенков каждого из основных цветов ─ всего 16 777 216 различных цветов. На кодирование одного пикселя требуется три байта, на растр 800×600 ─ 1 440 000 байтов.

В этом случае для кодирования одного цветного пикселя потребуется три бита — по одному на каждый цвет.

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

На кодирование растра 800×600 необходимо 180 000 байтов.

Слайд 134

09.11.2021 3. Режим High Color (high color — богатый цвет). Для

09.11.2021

3. Режим High Color (high color — богатый цвет). Для кодирования цвета

одного пикселя используется два байта. Можно передать 65 535 цветовых оттенков. Для растра 800×600 требуется 960 000 байтов.

4. Индексный режим. Для кодирования цвета одного пикселя используется один байт. Базируется на заранее созданной для данного рисунка таблице используемых в нем цветовых оттенков. Затем нужный цвет пикселя выбирается из этой таблицы с помощью номера — индекса, который занимает всего один байт памяти. Для растра 800×600 требуется 480 000 байтов.

Конкретный способ кодирования всей требуемой при записи изображения в память компьютера информации (цвет, яркость, контрастность, разрешение) образует графический формат. Форматы кодирования графической информации, основанные на передаче цвета каждого отдельного пикселя, из которого состоит изображение, относят к группе растровых или BMP (Bit MaP — битовая карта) форматов.

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

Слайд 135

09.11.2021 Другие методы и графические форматы Метод CMYK (от Cyan —

09.11.2021

Другие методы и графические форматы

Метод CMYK (от Cyan — голубой, Magenta — пурпурный,

Yellow — желтый и blacK — черный) основан на использовании цветов дополнительных к трем основным. Дополнением к красному является сочетание зеленого и синего ─ голубой. Дополнением к зеленому является сочетание красного и синего ─ пурпурный цвет. Дополнение к синему является сочетание красного и зеленого ─ голубой. Этот режим также относится к полноцветным. Для кодирования цвета одного пикселя требуется четыре байта памяти. Может быть передано 4 294 967 295 различных цветов.
Формат bmp (или dib от Device Independent Bitmap — независимый от устройства bitmap). Задается цветность всех пикселей изображения. При этом можно выбрать монохромный режим, использующий 256 градаций серого цвета, или цветной, использующий 16, 256 или 16 777 216 цветов. Изображения в этом формате требует много памяти.
Формат gif (от Graphics Interchange Format — графический формат обмена). Используются специальные методы сжатия кода, поддерживается только 256 цветов. Качество изображения немного хуже, чем в формате bmp, зато изображение занимает в десятки раз меньше памяти.
Слайд 136

09.11.2021 Формат jpeg (Joint Photographic Experts Group — объединенная группа экспертов

09.11.2021

Формат jpeg (Joint Photographic Experts Group — объединенная группа экспертов по фотографии)

использует методы сжатия, основанные на удалении «избыточной» информации и приводящие к потерям некоторых деталей. Поддерживает передачу 16 777 216 цветов. Достаточно высокое качество изображения. По требованиям к памяти формат jpeg занимает промежуточное положение между форматами bmp и gif.
Формат png (Portable Network Graphics — компактная графика для сети) представляет собой улучшение формата gif в области цветопередачи и сжатия кода. Создан для передачи изображений в Интернете. Не подходит для печати изображений.
Формат tiff (Tag Image File Format — формат файла образа, изображения, tag — используемый в реализации формата тэг, этикетка, ярлык). Представляет собой универсальный формат для хранения растровых изображений. Широко используется в издательских системах. По качеству сжатия он близок к форматам png и gif.
Формат pdf (Portable Document Format — компактный формат документов) Основное достоинство этого формата в том, что текст и графика, заключенный в электронном документе этого формата одинаково точно воспроизводятся на любой аппаратной платформе, что особенно важно в компьютерных сетях.
Слайд 137

09.11.2021 Растровая графика дает высококачественные изображения, но имеет существенный недостаток ─

09.11.2021

Растровая графика дает высококачественные изображения, но имеет существенный недостаток ─ плохо

переносит масштабирование, то есть изменение размеров.

а) исходное изображение, б) то же изображение, увеличенное в 8 раз

Слайд 138

09.11.2021 Другие виды компьютерной графики Векторная графика. Базовым объектом является не

09.11.2021

Другие виды компьютерной графики

Векторная графика. Базовым объектом является не точка, а

линия. При этом изображение формируется из описываемых математическим, векторным способом отдельных отрезков прямых или кривых линий, а также геометрических фигур — прямоугольников, окружностей и т. д., которые могут быть из них получены.
Трехмерная графика. Является особой разновидностью векторной графики, в которой специальными средствами фактически плоского рисунка добиваются визуальных эффектов объемности изображений.
Фрактальная графика. Формирование изображений целиком основано на математических формулах, уравнениях, описывающих те или иные фигуры, поверхности, тела. При этом само изображение в памяти компьютера фактически не хранится — оно получается как результат обработки некоторых данных. Таким способом, например, могут быть получены довольно реалистичные изображения природных ландшафтов.
Flash графика. В 1996 году компания Macromedia разработала стандарт flash графики (flash — мгновение, короткая телеграмма). Основное назначение этой технологии работы с графикой — создание высококачественных анимационных изображений для веб страниц Интернета.
Слайд 139

09.11.2021 Формат wmf ─ Windows Meta File ─ формат метафайлов операционной

09.11.2021

Формат wmf ─ Windows Meta File ─ формат метафайлов операционной системы

Windows. Используется для хранения созданных в приложениях операционной системы Windows изображений (например, в Microsoft Office).
Формат cdr ─ Corel DRaw ─ формат хранения изображений, используемый в мощном графическом редакторе Corel Draw.
Форматы ps ─ PostScript (от poster script — сценарий описания плакатов, объявлений, афиш) и eps ─ Encapsulated PostScript— инкапсулированный, то есть скрытый, заизолированный PostScript. Используются для описания как векторных, так и растровых изображений, а также разнообразных текстовых шрифтов.

Некоторые графические векторные форматы

Слайд 140

09.11.2021 Кодирование звуковых и видео данных Развитие способов кодирования звуковых данных,

09.11.2021

Кодирование звуковых и видео данных

Развитие способов кодирования звуковых данных, а также

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

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

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

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

Слайд 141

09.11.2021 Более точно: замена непрерывного звукового сигнала дискретным набором его значений

09.11.2021

Более точно: замена непрерывного звукового сигнала дискретным набором его значений —

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

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

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

Заметим, что получающиеся при оцифровывании значения отсчётов в литературе иногда называют сэмплами (англ. sample — образец). Но для обозначения отдельного отсчёта это название некорректно потому, что под термином «сэмпл» в практике оцифровывания звука понимается относительно небольшой звуковой фрагмент, а не отдельный отсчёт.

Слайд 142

09.11.2021 На рисунке показана развертка по времени звукового сигнала, который длится

09.11.2021

На рисунке показана развертка по времени звукового сигнала, который длится 2

секунды и заменяется на 100 отсчётов (жирные точки на графике сигнала). Количество отсчетов сигнала в единицу времени, которое принято называть частотой дискретизации, является очень важной характеристикой оцифровывания звука. Чем выше частота дискретизации, тем лучше качество оцифрованного звука.

50 герцам.

Чему равна частота дискретизации в рассматриваемом примере?

Слайд 143

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

09.11.2021

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

В. А. Котельникова.

При записи звука в мультимедийных технологиях применяются частоты 8, 11, 22, 44 и более килогерц. Для получения высококачественного звука используются частоты до 192 килогерц. Например, частота дискретизации 44 килогерца означает замену одной секунды непрерывного звучания набором из сорока четырех тысяч отдельных отсчетов сигнала.

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

Этот параметр, который принято называть разрядностью преобразования, определяет количество различных уровней сигнала, представимых при его квантовании. Чем больше количество битов, тем более качественно и точно происходит воспроизведение оцифрованного звука. Обычно используются разрядности 8, 16 и 24 бит.

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

Слайд 144

09.11.2021 На обсуждаемых стандартных способах оцифровывания звука основан, так называемый, волновой

09.11.2021

На обсуждаемых стандартных способах оцифровывания звука основан, так называемый, волновой формат

кодирования звука wav (от WAVeform-audio — волновая форма аудио).

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

Формат wav требует очень много памяти. Так, при записи стереофонического звука с частотой дискретизации 44 килогерца и разрядностью 16 бит — параметрами, дающими достаточно хорошее качество звучания — на одну минуту записи требуется около десяти миллионов байтов памяти.

В связи с особенностями программ, осуществляющих кодирование звука, оцифровывание удобнее характеризовать одним параметром, который называется битрейтом (англ. bit rate — битовая скорость).

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

Единицей измерения битрейта является бит в секунду (бит/c или bps — bit per second). Широко используются также кратные единицы — килобиты в секунду (кбит/с, kbit/s или kbps) и мегабиты в секунду (мбит/с, mbit/s или mbps). Во избежание путаницы отметим, что здесь приставки кило- и мега- означают 1 000 и 1 000 000 соответственно.

Слайд 145

09.11.2021 Для рассмотренного выше случая оцифровывания с частотой дискретизации 44 килогерца

09.11.2021

Для рассмотренного выше случая оцифровывания с частотой дискретизации 44 килогерца и

разрядностью 16 бит битрейт равен 44 000 (сек-1)×16 (бит) = 704 000 бит/с или 704 кбит/с. А для стереозвука, то есть для кодирования двух каналов битрейт оказывается равным 1408 кбит/с или примерно 1,4 мбит/с. Этот битрейт считается стандартным для несжатого звука формата CD-Audio, который применяется для записи музыкальных произведений на компакт-дисках.

На самом деле, точное значение стандартного битрейта равно 1411,2 кбит/с, так как частота дискретизации выбирается равной 44 100 герц — немного выше, чем в примере.

Слайд 146

09.11.2021 Для записи звука широко применяется формат midi (Musical Instruments Digital

09.11.2021

Для записи звука широко применяется формат midi (Musical Instruments Digital Interface —

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

Кодирование видеоинформации осуществляется с помощью дискретизации непрерывных изображений. Основано на свойстве человеческого глаза воспринимать быструю смену последовательности картинок с небольшими изменениями одна относительно другой как одну картинку с движением. Этот принцип используется в кино, в мультипликации и анимации. Стандартной частотой дискретизации для видеоизображений является 30 изображений (кадров) в секунду. Кодирование требует не только дискретизации непрерывных движений, но и синхронизации изображения со звуковым сопровождением. В настоящее время для этого используется формат, которой называется avi (Audio-Video Interleaved — чередующееся аудио и видео).

Слайд 147

09.11.2021 Форматы, основанные на сжатии информации Стандарты сжатия звука и видео

09.11.2021

Форматы, основанные на сжатии информации

Стандарты сжатия звука и видео MPEG (Moving

Pictures Experts Group — группа экспертов по движущимся изображениям) включают:

стандарт MPEG-1 описывает форматы записи звука. Например, формат MP-3 при практически том же качестве звука требуется в десять раз меньше памяти, чем при использовании формата WAV.
стандарт MPEG-2 описывает методы сжатия видеозаписей, которые обеспечивают телевизионное качество изображения и стереозвуковое сопровождение и имеют приемлемые требования к памяти.
стандарт MPEG-4 описывает методы сжатия видеозаписей, которые обеспечивают минимальные требования к памяти. Например, с его помощью можно полнометражный цветной фильм со звуковым сопровождением записать на стандартный компакт-диск. Разработан в 1999 году.

Слайд 148

09.11.2021 АЛГОРИТМЫ Выделенная из принятого сообщения информация так или иначе обрабатывается

09.11.2021

АЛГОРИТМЫ

Выделенная из принятого сообщения информация так или иначе обрабатывается и возможно

запоминается. Обработка информации может происходить осознанно или на уровне подсознания.

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

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

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

Слайд 149

09.11.2021 Имя автора трактата в европеизированной форме (Al­gorithmus) стало обозначением десятичной

09.11.2021

Имя автора трактата в европеизированной форме (Al­gorithmus) стало обозначением десятичной арифметики.


В настоящее время считается, что именно так появился современный термин алгоритм. Кроме того предполагают, что именно аль-Хорезми впервые использовал цифру 0 (нуль) для обозначения пропущенной позиции в записи числа в позиционной системе счисления. Её индийское название переведено как sifr, отсюда произошли нынешние термины «цифра» и «шифр».

Аль-Хорезми также считается основателем алгебры. Он написал книгу «Ал-китаб ал мухтасар фи хисаб ал-джабр ва-л-мукабала» («Книга о восполнении и противопоставлении») в которой описано несколько разновидностей квадратных уравнений и приведены способы их решения, в частности, с помощью приведения подобных, переноса в другую часть уравнения с переменой знака и т.д. От части названия книги «ал-джабр» произошло слово «алгебра».

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

В 30–50-х годах XX века в связи с формированием теории алгоритмов произошло кардинальное изменение в понимании их роли и значения в научной сфере и обычной жизни человека. В это время термин алгоритм приобрел чёткое научное определение.

Слайд 150

09.11.2021 Одновременно выяснилось, что огромное большинство своих действий в повседневной жизни

09.11.2021

Одновременно выяснилось, что огромное большинство своих действий в повседневной жизни и

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

В настоящее время понятие алгоритм является сложным и многоплановым, тем не менее, можно выделить три основных аспекта в его использовании:

интуитивный;
теоретический;
фундаментальный.

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

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

Слайд 151

09.11.2021 В этом смысле термин алгоритм является совершенно понятным, хотя и

09.11.2021

В этом смысле термин алгоритм является совершенно понятным, хотя и нестрогим.

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

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

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

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

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

Слайд 152

09.11.2021 В связи с появлением доказательств принципиальной невозможности получить решения некоторых

09.11.2021

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

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

То есть, необходимо уметь доказывать отсутствие алгоритма (способа) решения той или иной задачи.

Как оказалось, задача доказательства отсутствия решения совершенно отличается от задачи нахождения какого-либо решения.

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

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

Слайд 153

09.11.2021 Возьмем в качестве иллюстрации этих рассуждений геометрическую задачу о делении

09.11.2021

Возьмем в качестве иллюстрации этих рассуждений геометрическую задачу о делении любого

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

А вот внешне аналогичная задача о трисекции угла (о делении произвольного угла на три равные части) при тех же ограничениях решения не имеет, и никогда не будет иметь. Чтобы установить этот факт учёным понадобилось более 2 000 лет.

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

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

Слайд 154

09.11.2021 Задача точного определения понятия алгоритм стала центральной математической проблемой в

09.11.2021

Задача точного определения понятия алгоритм стала центральной математической проблемой в двадцатых

годах XX века. Её решение было получено в 30–50-х годах Д. Гильбертом, К. Гёделем, А. Черчем, С. Клини, Э. Постом, А. Тьюрингом, Н. Винером А. А. Марковым и А.Н. Колмогоровым.

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

Классические теории алгоритмов иногда объединяют под общим названием логической теории алгоритмов.

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

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

Слайд 155

09.11.2021 Машина Поста Машина Поста представляет собой идеальное, воображаемое устройство, состоящее

09.11.2021

Машина Поста

Машина Поста представляет собой идеальное, воображаемое устройство, состоящее из неограниченной

в обе стороны ленты и каретки, способной перемещаться вдоль ленты. Лента разбита на клетки. Любая клетка может быть отмеченной или нет. За один шаг каретка может переместиться на одну клетку вправо или на одну клетку влево. Каретка может определить отмечена текущая клетка или нет, а также поставить в текущую клетку отметку или же стереть её.

Машина Поста задается:

начальным распределением отмеченных клеток;
начальным положение каретки;
программой, определяющей последовательность действий каретки.

Слайд 156

09.11.2021 Система команд машины Поста Командой машины Поста называется указание исполнителю

09.11.2021

Система команд машины Поста

Командой машины Поста называется указание исполнителю (каретке) выполнить

единственное действие из набора возможных действий.

Структура команды машины Поста:

<порядковый номер команды>. <операция> <номер следующей команды>

Пример команды: 5. ⇒ 9
Пятая команда. Шаг вправо, перейти к выполнению команды с номером 9

Слайд 157

09.11.2021 Выполнение программы может: не завершится никогда (безостановочная работа); завершится безрезультатно

09.11.2021

Выполнение программы может:

не завершится никогда (безостановочная работа);
завершится безрезультатно на невыполнимой команде;
завершится

результативно на команде Стоп.

стереть отметку, если текущая клетка не отмечена;
поставить отметку, если текущая клетка уже отмечена.

Невыполнимые команды:

Требование к программе машины Поста

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

Слайд 158

09.11.2021 V 4 ξ 3 ⇐ 2 ⇒ 5 Стоп Пример

09.11.2021

V 4
ξ 3
⇐ 2
⇒ 5
Стоп

Пример программы машины Поста

Выполнение программы

V 4

5

5.

Клетка пуста, переход к 4 команде

⇒ 5

5.

Клетка не пуста, переход к 3 команде

3. ⇐ 2

2. ξ 3

Безрезультатная остановка

V 4
ξ 3
⇐ 6
⇒ 5
Стоп

6. Стоп

Результативная остановка

Слайд 159

09.11.2021 Изображение целого неотрицательного числа n в машине Поста представляет собой

09.11.2021

Изображение целого неотрицательного числа n в машине Поста представляет собой последовательность

из n+1 подряд расположенных отмеченных клеток, которые ограничены с двух сторон неотмеченными клетками. Положение каретки безразлично.

Пример: изображение числа 2 в машине Поста

1.

2. ⇒ 1
3. ⇐ 4
4. V 5
5. Стоп

Программа для машины Поста прибавления единицы

Слайд 160

09.11.2021 Интуитивное понятие алгоритма Упомянутые выше классические теории, дающие точное определение

09.11.2021

Интуитивное понятие алгоритма

Упомянутые выше классические теории, дающие точное определение алгоритма, связаны

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

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

С другой стороны для таких алгоритмов совершенно не нужен такой высокий уровень строгости как у классических теорий.

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

Слайд 161

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

09.11.2021

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

нестрогим понятием алгоритма, его понятием в, так сказать, житейском смысле.

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

Основными особенностями интуитивного представления об алгоритме является неопределённость терминов «исполнитель», «действие», «цель» и т.д. Именно поэтому существует несколько десятков «определений» алгоритма, которые на самом деле являются не более чем «объяснениями на пальцах».

Выдающийся советский математик А.Н. Колмогоров пишет, что «Алгоритм — это всякая система вычислений, выполняемых по строго определённым правилам, которая после какого-либо числа шагов заведомо приводит к решению поставленной задачи».

Создатель одной из классических теорий алгоритмов А.А. Марков приводит следующее объяснение: «Алгоритм — это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату».

Слайд 162

09.11.2021 Алгоритмом называется понятное и точное предписание, указание исполнителю совершить последовательность

09.11.2021

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

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

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

Алгоритм — это последовательность действий, либо приводящая к решению задачи, либо поясняющая, почему это решение получить нельзя;

Проанализировав все эти трактовки, можно заметить, что общими для них являются следующие моменты:

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

Слайд 163

09.11.2021 Исполнителем алгоритма называется субъект или объект, осуществляющий фактическое исполнение алгоритма.

09.11.2021

Исполнителем алгоритма называется субъект или объект, осуществляющий фактическое исполнение алгоритма.

Исполнение

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

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

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

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

И основным моментом, конечно же, является получение желаемого результата за конечное время. Более того, неявно подразумевается, что это время должно быть разумным, поскольку ждать от исполнителя требуемого результата сотни или даже десятки лет, обычно не может считаться приемлемым.

Слайд 164

09.11.2021 формой изложения научных результатов; руководством к действию при решении ранее

09.11.2021

формой изложения научных результатов;
руководством к действию при решении ранее изученных

проблем;
необходимым этапом при автоматизации обработки информации и решения различных задач.

Алгоритмы являются:

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

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

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

Слайд 165

09.11.2021 Алгоритм, записанный в понятной компьютеру или другому исполнителю форме, принято

09.11.2021

Алгоритм, записанный в понятной компьютеру или другому исполнителю форме, принято называть

программой

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

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

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

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

Слайд 166

09.11.2021 Свойства, которыми должен обладать алгоритм Дискретность. Вообще говоря, один и

09.11.2021

Свойства, которыми должен обладать алгоритм

Дискретность. Вообще говоря, один и тот же

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

А

В

А

В

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

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

Слайд 167

09.11.2021 Исполнение алгоритма всегда представляет собой дискретный процесс идущий в дискретном

09.11.2021

Исполнение алгоритма всегда представляет собой дискретный процесс идущий в дискретном времени.


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

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

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

Это утверждение требует, чтобы общее количество этапов в алгоритме было конечным.

Пример: правило вычисления значения 1+1/4+1/9+…─ задает бесконечное количество этапов, а правило 1+1/4+1/9+1/16+1/25+1/36+1/49+1/64+1/81+1/100 ─ задает конечное количество этапов.

Слайд 168

09.11.2021 Кроме того, нигде не сказано, что этап или группа этапов

09.11.2021

Кроме того, нигде не сказано, что этап или группа этапов может

быть выполнена только один раз.

Следовательно, какая-либо последовательная группа этапов алгоритма может выполняться неоднократно, и требование конечности алгоритма исключает случай бесконечного количества выполнений любой группы этапов.

Рассмотрим пример, в котором последовательность предписанных действий необходимо выполнить несколько раз. Врач выписал больному лекарство, которое: 1)следует купить в аптеке и принимать каждый день 2)утром, 3)в обед и 4)вечером, а после выздоровления больному следует 5)пройти контрольное обследование.

Что можно сказать об этом примере?

Явно видна дискретность этого предписания и конечность количества этапов, из которых оно состоит.

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

Слайд 169

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

09.11.2021

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

этап некорректность?

Если по прошествии нескольких (3-5) дней больной выздоровеет, то согласно указанию врача он может переходить к пятому пункту — прохождению контрольного обследования и в этом случае результат окажется полученным за конечное количество выполнений 2, 3 и 4 этапов.

А что если больному лучше не станет? Если врач неправильно поставил диагноз?

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

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

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

Слайд 170

09.11.2021 Любые современные компьютерные системы требуют не только конечного, но и

09.11.2021

Любые современные компьютерные системы требуют не только конечного, но и явного

задание всех этапов алгоритма.

Пример неявного задания этапов: 1+1/4+1/9+…+1/100 ─ подразумеваются действия по аналогии.

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

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

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

Слайд 171

09.11.2021 Это может означать только одно: инструкция начисления зарплаты составлена таким

09.11.2021

Это может означать только одно: инструкция начисления зарплаты составлена таким образом

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

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

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

Слайд 172

09.11.2021 Потенциальная выполнимость (результативность, направленность, завершаемость) алгоритма подразумевает направленность, нацеленность алгоритма

09.11.2021

Потенциальная выполнимость (результативность, направленность, завершаемость) алгоритма подразумевает направленность, нацеленность алгоритма на

получение результата. Более того, имеется в виду, что исполнение алгоритма всегда должно завершаться получением результата.

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

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

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

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

Слайд 173

09.11.2021 И при обнаружении такого равенства должно быть определено, что считать

09.11.2021

И при обнаружении такого равенства должно быть определено, что считать результатом,

а также должны быть указаны дальнейшие действия.

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

Алгоритм не содержит ошибок, если он даёт правильные результаты для любых допустимых исходных данных

Возникновение в алгоритме неконтролируемых действий, которые исполнитель не может выполнить, означает наличие в алгоритме ошибок. Кроме того, алгоритм содержит ошибки, если приводит к получению неправильных результатов либо вообще не даёт результатов.

Итак, исполнение алгоритма может завершиться за конечное время с получением требуемого результата только в том случае, если: 1) алгоритм не содержит ошибок, 2) алгоритм применяется к корректным, допустимым входным данным и 3) в алгоритме предусмотрена реакция на возникновение невыполнимых действий.

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

Слайд 174

09.11.2021 Понятность (элементарность) алгоритма предполагает что на каждом этапе правило выполнения

09.11.2021

Понятность (элементарность) алгоритма предполагает что на каждом этапе правило выполнения действий

должно быть относительно простым и локальным, то есть касающимся только данного этапа.

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

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

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

Для каждого алгоритма существует некоторое множество наборов величин, которые допустимы в качестве исходных данных. Например, в алгоритме деления вещественных чисел делимое может быть любым числом, а делитель не может быть равен нулю.

Слайд 175

09.11.2021 Алгоритм служит, как правило, для решения не одной конкретной задачи,

09.11.2021

Алгоритм служит, как правило, для решения не одной конкретной задачи, а

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

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

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

Слайд 176

09.11.2021 Алгоритмизация Использование компьютеров для решения различных задач, обработка любых данных

09.11.2021

Алгоритмизация

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

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

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

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

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

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

Слайд 177

09.11.2021 Поэтому разработку алгоритма предпочитают не привязывать ни к моделям компьютеров,

09.11.2021

Поэтому разработку алгоритма предпочитают не привязывать ни к моделям компьютеров, ни

к языкам программирования, и построение алгоритма определяется в основном решаемой задачей.

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

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

Способы задания алгоритмов

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

Слайд 178

09.11.2021 В информатике предъявляются особые требования к заданию алгоритмов в связи

09.11.2021

В информатике предъявляются особые требования к заданию алгоритмов в связи с

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

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

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

словесный;
двоичное кодирование;
графические;
словесно-формульные.

Слайд 179

09.11.2021 Словесный способ задания алгоритма состоит в его формулировке средствами естественного

09.11.2021

Словесный способ задания алгоритма состоит в его формулировке средствами естественного языка

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

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

Недостаток ─ непосредственное восприятие человеком алгоритма, заданного в двоичном алфавите, затруднено.

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

Такую форму записи, обеспечивающую свойство понятности алгоритма исполнителю — компьютеру, принято называть машинным языком (машинным кодом). Алгоритм, представленный на машинном языке, называют машинной программой.

Процессор компьютера ничего кроме машинного языка «не понимает».

Слайд 180

09.11.2021 Блок-схемой называется графическое изображение структуры алгоритма. Блок –схема представляет собой

09.11.2021

Блок-схемой называется графическое изображение структуры алгоритма. Блок –схема представляет собой группу

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

Начало

Конец

Основные элементы блок-схем

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

Слайд 181

09.11.2021 Выявленные особенности блок-схем определяют характер их применения: в настоящее время

09.11.2021

Выявленные особенности блок-схем определяют характер их применения: в настоящее время блок-схемы

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

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

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

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

Слайд 182

09.11.2021 Основным достоинством таких способов задания алгоритмов является то, что преобразование

09.11.2021

Основным достоинством таких способов задания алгоритмов является то, что преобразование на

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

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

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

Слайд 183

09.11.2021 Словесно-формульный способ базируется на естественном или узко-профессиональном языке. Чтобы избежать

09.11.2021

Словесно-формульный способ базируется на естественном или узко-профессиональном языке. Чтобы избежать неоднозначности,

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

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

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

Слайд 184

09.11.2021 Алгоритмическим языком называется формальная система представления (записи) алгоритмов, которая может

09.11.2021

Алгоритмическим языком называется формальная система представления (записи) алгоритмов, которая может быть

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

Программы, которые осуществляют автоматический перевод, получили название компиляторов (англ. compile — компилятор, переводчик), часто их называют ещё и трансляторами (англ. translator — переводчик).

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

Слайд 185

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

09.11.2021

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

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

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

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

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

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

Слайд 186

09.11.2021 Для выполнения целевой программы её необходимо определённым образом передать компьютеру

09.11.2021

Для выполнения целевой программы её необходимо определённым образом передать компьютеру и

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

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

Таким образом, все машинные языки автоматически считаются языками программирования. Далее из этого определения следует, что языками программирования могут считаться только те алгоритмические языки, для которых существует возможность их автоматического перевода на машинный язык некоторого компьютера. Это, например, такие языки как Паскаль, Delphi, Cи, Java и т.д.

Слайд 187

09.11.2021 Однако не любой алгоритмический язык может считаться языком программирования, и

09.11.2021

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

так же не любой язык программирования относится к алгоритмическим.

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

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

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

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

Слайд 188

09.11.2021 Самое главное в этом способе задания алгоритмов состоит в том,

09.11.2021

Самое главное в этом способе задания алгоритмов состоит в том, что:

текст может состоять только из знаков, входящих в фиксированный алфавит языка, а на запись текста программы накладывается строгая система правил.

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

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

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

Слайд 189

09.11.2021 Отметим терминологическую разницу в применении в информатике слов «алгоритм» и

09.11.2021

Отметим терминологическую разницу в применении в информатике слов «алгоритм» и «программа».

Слово «программа» обычно используется в тех случаях, когда алгоритм записан на машинном языке или на некотором языке программирования. Слово «алгоритм» можно использовать для всех способов задания алгоритмов, но обычно этот термин применяется, когда алгоритм задан на естественном языке или на языке блок-схем.

Завершая обсуждение способов задания алгоритмов, сравним запись алгоритма на алгоритмическом языке с другими способами задания:

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

Слайд 190

09.11.2021 в отличие от ассемблеров написание программы на высокоуровневых языках ориентировано

09.11.2021

в отличие от ассемблеров написание программы на высокоуровневых языках ориентировано

не на систему команд конкретной модели компьютера, а на проблемную область. Это делает программы машинно-независимыми — одна и та же программа может быть переведена на машинные языки самых разных моделей компьютеров, однако необходимо, чтобы для каждой такой модели была разработана программа-транслятор;
по сравнению с блок-схемами запись на алгоритмическом языке отличается компактностью, удобочитаемостью, и что самое главное, возможностью автоматического перевода на машинный язык.
Слайд 191

09.11.2021 Линейные алгоритмы. Отличительным свойством линейных алгоритмов является выполнение этапов алгоритма

09.11.2021

Линейные алгоритмы. Отличительным свойством линейных алгоритмов является выполнение этапов алгоритма в

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

Типы алгоритмов

Слайд 192

09.11.2021 Начальные понятия алгоритмических языков Алгоритмический язык представляет собой систему, которая

09.11.2021

Начальные понятия алгоритмических языков

Алгоритмический язык представляет собой систему, которая включает

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

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

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

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

Слайд 193

09.11.2021 Следует напомнить, что наличие у алгоритма свойства однозначного задания действий,

09.11.2021

Следует напомнить, что наличие у алгоритма свойства однозначного задания действий, является

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

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

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

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

Слайд 194

09.11.2021 Одним из самых распространённых метаязыков является универсальный язык БНФ (от

09.11.2021

Одним из самых распространённых метаязыков является универсальный язык БНФ (от Бекуса

Нормальная Форма) или в другом варианте названия язык формул Бекуса–Наура. Мы будем использовать этот метаязык в упрощённом виде.

В метаязыке БНФ правило, определяющее способ построения конструкции алгоритмического языка, состоит из двух частей, которые отделяются друг от друга знаком . Это знак понимается как «есть по определению». Слева от него в уголковых скобках указывается название определяемой конструкции или понятия, а справа — собственно определение:

<имя понятия> → определение 1 | определение 2 …

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

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

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

Слайд 195

09.11.2021 Разберём пример определения: → 0 | 1 | 2 |

09.11.2021

Разберём пример определения:

<цифра>→ 0 | 1 | 2 | 3

| 4 | 5 | 6 | 7 | 8 | 9

Здесь определяемым является понятие цифра, а справа десять различных вариантов его определения. Понимается этот текст следующим образом: «Цифра есть по определению знак 0, либо знак 1, либо знак 2, либо знак 3 и т.д.».

Таким образом, римские цифры I, V, X, а также «цифры» шестнадцатеричной системы счисления A, B, C, D, F и E с точки зрения этого определения не являются цифрами.

Комментарии

Текст программы на любом алгоритмическом языке предназначен не только для передачи его транслятору. Этот текст приходится неоднократно читать, во-первых, самому автору, причём это может потребоваться спустя некоторое, возможно значительное время, когда многое из того, что было сделано ранее уже забылось, а, во-вторых, другим программистам, заказчику работы, а также во многих других случаях.

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

Слайд 196

09.11.2021 Формой включения пояснений в текст программы являются комментарии, которые представляют

09.11.2021

Формой включения пояснений в текст программы являются комментарии, которые представляют собой

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

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

//так выглядит однострочный комментарий и в Паскале и в Си
{ так оформляется многострочный комментарий в Паскале }
(* другой способ оформления многострочного комментария в Паскале *)
/* а это оформление многострочного комментария в Си */

Существует два основных способа включения комментариев: однострочный и многострочный:

Слайд 197

09.11.2021 Присутствие комментариев в алгоритме или программе не является обязательным. Однако

09.11.2021

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

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

Алфавит языка

Алфавит любого языка программирования, как и вообще любой алфавит, представляет собой точно зафиксированное множество знаков

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

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

Слайд 198

09.11.2021 Например, в языке Паскаль элементы алфавита называются основными символами: →

09.11.2021

Например, в языке Паскаль элементы алфавита называются основными символами:

<основной символ>→<буква>|<цифра>|<специальный

знак>

Это определение понимается следующим образом: основной символ это либо <буква>, либо <цифра>, либо <специальный знак>. Фактически понятие «основной символ» сводится к другим перечисленным справа понятиям, каждый из них, следовательно, должен иметь своё отдельное определение.

<буква>→ a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

<специальный знак>→<знак арифметической операции>|<знак отношения>| <разделитель>|<ключевое слово>

<знак арифметической операции>→ + | - | * | /

<знак отношения >→ = | < | <= | > | >= | <>

разделитель>→ ⎵ (знак пробела) | . | , | ; | : | ( | ) | [ | ] | { | } | ↑ | ‘ | :=

Слайд 199

09.11.2021 → and | array | begin | case | const

09.11.2021

<ключевое слово>→ and | array | begin | case | const

| div | do | downto | else | end | for | function | goto | if | in | label | mod | nil | not | of | or | packed | procedure | program | record | repeat | set | then | to | type | until | var | while | with

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

Имя (идентификатор)

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

Слайд 200

09.11.2021 Имя или идентификатор (от англ. identification — опознание) служит для

09.11.2021

Имя или идентификатор (от англ. identification — опознание) служит для обозначения

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

В качестве имён могут использоваться, например, такие последовательности знаков: a, i, counter, z56yfw9q% .

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

Данные

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

Слайд 201

09.11.2021 Данными называются дискретные сообщения в форме, определяемой правилами используемого способа

09.11.2021

Данными называются дискретные сообщения в форме, определяемой правилами используемого способа задания

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

К данным в алгоритмах и программах относятся:

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

Слайд 202

09.11.2021 Основная разновидность непосредственных значений — числа, например, -5, 0, 3.1415926

09.11.2021

Основная разновидность непосредственных значений — числа, например, -5, 0, 3.1415926 и

т.д. Кроме них к непосредственным значениям обычно относятся заключённые в кавычки одиночные знаки из алфавита языка: 'a', '!’, … , образованные из таких знаков строки: ‘Введите количество слагаемых', а также логические значения true (истина), false (ложь).

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

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

Слайд 203

09.11.2021 Переменные В действиях, которые задаются в алгоритме, кроме непосредственных значений

09.11.2021

Переменные

В действиях, которые задаются в алгоритме, кроме непосредственных значений или заменяющих

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

В информатике для выполнения действий с такими величинами вводится понятие переменной.

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

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

Чтобы запомнить некоторое значение его закрепляют за выбранной для этой цели переменной — кладут в «сейф».

Переменная сохраняет значение в неизменном состоянии столько, сколько это требуется алгоритму.

Слайд 204

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

09.11.2021

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

переменной выполняют определённое действие, в результате которого её значение заменяется новым — старое значение из «сейфа» удаляется, а вместо него кладётся новое.

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

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

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

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

Слайд 205

09.11.2021 Тип переменной Любые данные в компьютере представлены некоторым двоичным кодом

09.11.2021

Тип переменной

Любые данные в компьютере представлены некоторым двоичным кодом и для

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

Однако с точки зрения программиста данные в алгоритмах и программах всегда наделены некоторым смыслом, определённым образом интерпретируются (англ. interpretation — толкование, объяснение). Скажем, одно и то же число может рассматриваться и как вес товара и как расстояние до некоторой точки.

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

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

Слайд 206

09.11.2021 Концепция (от лат. conceptio — понимание, система) представляет собой определённый

09.11.2021

Концепция (от лат. conceptio — понимание, система) представляет собой определённый способ

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

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

Тип представляет собой важнейшую характеристику данных, используемых в алгоритмах или программах. Тип определяет: 1)множество допустимых значений переменой, 2)множество операций, которые могут выполняться над этими значениями, 3)структуру значения (скаляр, вектор и т.д.), а также 4) способ машинного представления значения.

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

Слайд 207

09.11.2021 Различные типы данных имеют различные множества допустимых значений. Так, целые

09.11.2021

Различные типы данных имеют различные множества допустимых значений. Так, целые числа

в беззнаковом формате с фиксированной точкой могут находиться только в интервале [0, 4294967295], а множество логических значений содержит всего два элемента {true, false}. Этот аспект понятия тип вполне аналогичен множеству допустимых значений аргумента функции.

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

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

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

Слайд 208

09.11.2021 Все эти четыре аспекта интегрируются, объединяются в характеристике, которая и

09.11.2021

Все эти четыре аспекта интегрируются, объединяются в характеристике, которая и называется

тип данного.

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

Тип boolean (char, bool)

Два логических значения false и true. Причем, falseМашинное представление ─ нулевое и единичное значение бита: false кодируется 0, true ─ 1. Операции: ¬, ∨, ∧, =, < и т.д.

В качестве машинного представления этих значений можно было бы использовать состояние одного бита: нулевое значение бита естественно считать кодом значения false, а единичное — кодом значения true. Однако минимальной доступной процессору самостоятельной единицей памяти является байт. В качестве кода значения false выбрано нулевое значение байта 0000 00002, а кодом значения true считается любой ненулевой восьмибитный код.

Слайд 209

09.11.2021 Логические выражения, то есть выражения, которые имеют значение логического типа,

09.11.2021

Логические выражения, то есть выражения, которые имеют значение логического типа, играют

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

Тип integer, int

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

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

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

У стандартного целого типа integer (Паскаль), int (Си) длина поля равна двум байтам и используется знаковое представление формата с фиксированной точкой, отсюда диапазон значений [–32768, 32767].

Слайд 210

09.11.2021 Целые числа в программах на алгоритмических языках имеет вид последовательности

09.11.2021

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

перед которой может стоять знак плюс или минус, например: 73, -98, 5, 0, 19674.

Над данными целых типов определены арифметические операции сложения ( + ), вычитания ( - ), умножения ( * ), целочисленного деления (div — Паскаль, / — Cи) и остатка от деления (mod — Паскаль, % — Cи).

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

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

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

Тип real, float

Для значений этого типа выделяются поля длиной 4 байта, точность значений равна 7–8-ми десятичным цифрам, а их модули принадлежат диапазону (1,4×10–45; 3,4× 1038).

Слайд 211

09.11.2021 Внешним признаком вещественного числа в алгоритмических языках является наличие в

09.11.2021

Внешним признаком вещественного числа в алгоритмических языках является наличие в его

записи порядка и/или десятичной точки, которая разделяет целую и дробную части числа. При одновременном отсутствии и порядка и точки число считается целым.

Примеры записи вещественных чисел: 7.3 → 7,3; -5.0→ –5,0; 19E6 → 19×106, -1.34E-20 → –1,34×10-20.

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

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

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

Применение отношений «равно» и «не равно» для вещественных данных некорректно, так как сравнение приближенных чисел в отношении «равно» обычно даёт результат false, а сравнение в отношении «не равно», как правило, имеет результат true.

Слайд 212

09.11.2021 Вместо строгих неравенств «равно» и «не равно» для вещественных данных

09.11.2021

Вместо строгих неравенств «равно» и «не равно» для вещественных данных рекомендуется

применять нестрогие «больше или равно» и «меньше или равно».

Кроме того, вместо сравнения вещественных переменных на равенство более корректной является проверка их близости. Например, вместо равенства x=y лучше использовать неравенство вида |x-y|

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

Возьмём, например, отношение 5<>5.0 (Паскаль), 5!=5.0 (Си). обсуждаемое соотношение должно всегда иметь значение false, но скрытые детали реализации трансляторов могут дать любой результат вычислений, что влечёт за собой неоднозначность алгоритма, поэтому таких операций следует всемерно избегать.

Слайд 213

09.11.2021 Тип char Непосредственными значениями символьного типа по определению являются одиночные

09.11.2021

Тип char

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

Чтобы отличить однобуквенные имена, которые могут использоваться в алгоритмах, от непосредственных значений символьного типа, последние, заключаются в одиночные апострофы. Примеры: ‘a’, ‘!’, ‘5’.

п

Множество значений определяется кодовой таблицей и возможностями клавиатуры. Операции: +, =, <, и т.д. Машинное представление: текстовый формат ASCII, Unicode.

Слайд 214

09.11.2021 Величины, используемые в различных предметных областях, в том числе в

09.11.2021

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

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

Структурированные типы данных

Самыми простыми являются скалярные величины, такие как давление, температура, время. Значения этих величин не имеют внутренней структуры, они неделимы на составные части. Чтобы полностью задать скалярную величину остаточно указать только одно число.

Более сложную структуру имеют, например, вектора. Значение любого вектора состоит из нескольких компонентов — его координат. Например, вектор

представлен тремя составляющими его значение координатами x1, x2 и x3.

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

Слайд 215

09.11.2021 Пусть, например, требуется умножить вектор на некоторое число, тогда в

09.11.2021

Пусть, например, требуется умножить вектор на некоторое число, тогда в записи

операции следует указать только его имя:

Эта запись означает, что на заданное число необходимо умножить все координаты вектора .

А можно, например, выяснить знак у какой-то конкретной координаты вектора, тогда с помощью номера указывается только требуемая координата: x3>0, и действие сравнения с нулём выполняется только над ней.

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

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

Различают простые (скалярные, неструктурированные) и сложные (составные, структурированные) типы данных.

Слайд 216

09.11.2021 Значения простых типов данных не имеют никакой внутренней структуры, это

09.11.2021

Значения простых типов данных не имеют никакой внутренней структуры, это неделимые,

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

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

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

Значение скалярного типа представлено ровно одним компонентом (время, температура), значение структурированного типа представлено более чем одним компонентом (вектор, матрица).

Слайд 217

09.11.2021 Примеры структурированных значений: Структуры аналогичные векторам и матрицам в информатике

09.11.2021

Примеры структурированных значений:

Структуры аналогичные векторам и матрицам в информатике принято называть

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

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

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

Например, имена x и A обозначают весь вектор и всю матрицу соответственно.

Слайд 218

09.11.2021 Для выделения элементов массивов могут использоваться не только числа, поэтому

09.11.2021

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

которая определяет отдельный элемент массива, называют индексом. В качестве индекса в общем случае могут использоваться непосредственные значения, переменные или выражения целого, символьного или логического типов, например, x[k], w[j+3].

Для выделения отдельного компонента массива в квадратных скобках справа от названия указывается его номер или несколько номеров через запятую: w[5]; w[i+2]; A[1,2].

В языке Си, а также во многих родственных языках при указании отдельного элемента матрицы необходимо каждый индекс записывать в отдельной паре квадратных скобок: элементу матрицы A23 соответствует обозначение A[2][3].

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

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

Слайд 219

09.11.2021 Например, значение даты состоит из трёх полей, названия которых указаны

09.11.2021

Например, значение даты состоит из трёх полей, названия которых указаны в

заголовке таблицы: День, Месяц, Год.

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

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

В рассматриваемом примере чтобы указать какой месяц входит в дату, применяется составное имя Дата.Месяц, а имя Дата.Год служит для указания на входящий в дату год. Для первой строки таблицы имени Дата соответствует полное значение «9 Мая 1945», а составное имя Дата.Месяц имеет своим значением «Мая».

Описания

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

Слайд 220

09.11.2021 Тип непосредственных значений всегда можно определить по способу их записи

09.11.2021

Тип непосредственных значений всегда можно определить по способу их записи в

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

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

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

Описанием называется конструкция алгоритма или программы, в которой зафиксировано имя программного объекта и в зависимости от его природы указаны важнейшие его атрибуты, такие как значение, тип и т.д.

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

Слайд 221

09.11.2021 В описании константы необходимо указать выбранное для неё имя и

09.11.2021

В описании константы необходимо указать выбранное для неё имя и значение.

Для этого используется следующая конструкция:

<описание константы> const <имя>=<непосредственное значение> (Паскаль)

<описание константы> const <тип><имя>=<непосредствен. значение>(Си).

Пусть, например, имеются описания:

Теперь в любом месте алгоритма имя pi представляет число 3.1425926. Удобство применения констант в алгоритмах в том, что для любого непосредственного значения можно подобрать краткое и запоминающееся имя, которое в любом месте представляет это значение, причём изменить указанное в описании значение константы невозможно.

Заметим, что в этих определениях предполагается, что существуют и определения понятий <непосредственное значение>, <имя>, <тип>. Если их нет, то определение <описание константы> окажется некорректным.

const pi=3.1415926 // Па, const float pi=3.1425926 // Си.

Слайд 222

09.11.2021 Описания переменных простых типов в Паскале имеет вид: : Эта

09.11.2021

Описания переменных простых типов в Паскале имеет вид:

<описание простого типа> <список

имен через запятую>: <имя типа>

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

Описания простых переменных в Cи определяются немного по-другому:

<описание простого типа> <имя типа> <список имен через запятую>

И в Паскале и в Cи несколько подряд расположенных описаний отделяются друг от друга точкой с запятой.

y: real; b: char; i, j, n, counter: integer; // Па
float y; char a; int i, j, n, counter; // Cи

Слайд 223

09.11.2021 В Паскале описание массивов состоит из списка имен тех массивов,

09.11.2021

В Паскале описание массивов состоит из списка имен тех массивов, которые

имеют одинаковую структуру, а за списком после двоеточия записывается ключевое слово array (массив).

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

После квадратных скобок следует ключевое слово of (из) и завершается описание указанием типа элементов.

x,у: array[1..3] of real; w: array[1..9] of real; A, В, С: array[1..3, 1..3] of integer // Па

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

float x[3], w[9]; int A[3][3]; // Cи

Внимание! Нумерация элементов массивов в языке Cи всегда начинается с нуля.

Слайд 224

09.11.2021 Описания играют очень важную роль, так как транслятор использует их,

09.11.2021

Описания играют очень важную роль, так как транслятор использует их, во-первых,

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

Выражения

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

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

Для наиболее часто используемых на практике элементарных функций в алгоритмических языках определены имена, типы аргументов и результатов, а также способы вычисления их значений. Такие функции принято называть стандартными. Например, для вычисления квадратного корня из некоторого числа можно применить стандартную функцию с названием sqrt (англ. square — квадрат).

Слайд 225

09.11.2021 Имя функции вместе с заключённым в круглые скобки аргументом или

09.11.2021

Имя функции вместе с заключённым в круглые скобки аргументом или списком

аргументов называется указателем функции

Например: sqrt — это имя функции, а sqrt(4.8) — это указатель функции.

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

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

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

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

Но в любом случае эти правила обеспечивают стандартный математический порядок старшинства — сначала выполняются действия умножения и деления, а потом умножения и сложения.

Слайд 226

09.11.2021 Операции одинакового старшинства всегда выполняются слева направо. При необходимости изменить

09.11.2021

Операции одинакового старшинства всегда выполняются слева направо. При необходимости изменить порядок

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

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

запрещаются «многоэтажные» конструкции, а также любые надстрочечные и подстрочечные знаки;
знак операции умножения * пропускать и заменять его точкой ⋅, как это делается в математических текстах, нельзя;
аргументы функций заключаются в круглые скобки;
в выражении должен соблюдаться баланс скобок, то есть количество открывающих скобок должно быть в точности равно количеству закрывающих скобок и т.д.

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

Слайд 227

09.11.2021 Ещё одно важное требование: значения всех переменных, входящих в выражение,

09.11.2021

Ещё одно важное требование: значения всех переменных, входящих в выражение, должны

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

При записи выражений необходимо также следить за типами, входящих в выражение операндов: они должны обеспечивать возможность выполнения вычислений. Например, запись 'a'+4 является ошибочной, так как невозможно сложить букву с целым числом.

Поскольку «многоэтажные» конструкции в алгоритмических языках запрещены, соответствующее обсуждаемой дроби выражение должно быть записано в одну строчку: a+b/c+d.

Но эта запись ошибочна, так как с учётом старшинства операций получим, что эта строка задаёт такие вычисления:

Необходимый порядок действий можно задать только применив круглые скобки: (a+b)/(c-d).

Слайд 228

09.11.2021 Отношение в алгоритмических языках представляет собой два выражения одного и

09.11.2021

Отношение в алгоритмических языках представляет собой два выражения одного и того

же простого типа, которые связаны одним знаком отношения.

Примеры отношений: k > i–1, j<=3, x >= sqrt(r*r – y*y)

При записи в алгоритмических языках неравенств вида 0

Ошибка здесь в том, что отношение может включать только два выражения и только один знак отношения

Неравенства вида следует трактовать как два неравенства x>0 и x≤1, которые должны выполняться одновременно, то есть, связаны логической операцией конъюнкция: x>0 ∧ x≤1.

Правильный вариант записи: (x>0) and (x<=1) //Па (x>0) && (x<=1) //Cи

Слайд 229

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

09.11.2021

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

также фиксирует требуемую последовательность их выполнения.

Операторы и управляющие конструкции

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

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

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

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

Слайд 230

09.11.2021 Для определения требуемой последовательности действий в алгоритмах и программах используются

09.11.2021

Для определения требуемой последовательности действий в алгоритмах и программах используются управляющие

конструкции.

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

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

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

Слайд 231

09.11.2021 Закрепление за переменной некоторого текущего значения, также как и любое

09.11.2021

Закрепление за переменной некоторого текущего значения, также как и любое изменение

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

Присваивание

Присваивание нового значения выполняется независимо от того, определена или нет переменная, которой производится присваивание.

Если переменная была определена, то есть у неё было старое значение, то оно безвозвратно теряется, и установить каким оно было невозможно.

Синтаксис оператора присваивания в простейшем случае определяется следующим образом:

<оператор присваивания> → <Имя> := <Выражение > (Паскаль)
<оператор присваивания> → <Имя> = <Выражение > (Си)

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

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

Слайд 232

09.11.2021 Между левой и правой частью оператора находится знак присваивания, в

09.11.2021

Между левой и правой частью оператора находится знак присваивания, в качестве

которого в Паскале используется знак :=, а в Cи — знак =.

Заметим, что присваивание может изображаться и другими знаками, в частности, в языке Бейсик для этого используется ключевое слово Let, а в языках ассемблера — mov (от англ. move — движение, передача в другие руки).

Примеры присваиваний:

counter:=0; X:=10.3;Y:= 2.0*X+1.0; n:=4; n:=n+1; w[n+2]:=0.8; //Па

counter=0; X=10.3;Y= 2.0*X+1.0; n=4; n=n+1; w[n+2]=0.8; //Си

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

До начала действия переменная из левой части имеет старое значение или не имеет никакого;
После завершения действия она всегда имеет новое текущее значение.

X

10.3

X

X:=10.3
X=10.3

Неопределенное значение

Старое значение

Новое значение

4

n

Старое значение

5

n

n:=n+1n=n+1

Новое значение

Слайд 233

09.11.2021 Порядок выполнения присваивания вычисляется значение выражения в правой части, при

09.11.2021

Порядок выполнения присваивания

вычисляется значение выражения в правой части, при этом всегда

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

Действие, задаваемое оператором n:=n+1// Па, n=n+1; // Си, состоит в увеличении текущего значения переменной n на единицу. Такой оператор и аналогичные ему встречаются в алгоритмах очень часто, поэтому в языке Cи имеется короткая эквивалентная форма его записи n++;

Слайд 234

09.11.2021 Правила задания присваивания Тип переменной в левой части и тип

09.11.2021

Правила задания присваивания

Тип переменной в левой части и тип значения в

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

w[1] w[2] w[3] w[4] w[5] w[6] w[7] w[8] w[9]

w[n+2]:=0.8w[n+2]=0.8

Выполнение действия существенно зависит от текущего значения n. Так при n=5 значение индексного выражения определяет, что получить значение 0.8 должен седьмой элемент массива w.

0.8

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

X : real: C : char; I,J : integer;

X:=0.8;

C:=‘&’;

I:=6;

X:=‘&’;

C:=6;

I:=‘&’;

X:=C+I;

J:=2*J+I

Слайд 235

09.11.2021 Отличия действия присваивания от операции сравнения Присваивание это действие, в

09.11.2021

Отличия действия присваивания от операции сравнения

Присваивание это действие, в котором переменная

изменяет значение, сравнение это операция, которая не изменяя значений устанавливает факт равенства или не равенства правой и левой частей.

Действие n:=6 n=6

Сравнение n=6 n==6

4

n

Результат

6

n

4

n

Результат

false, 0

4

n

В операции сравнения левая и правая части равноправны, а в действии присваивания ─ не равноправны. В присваивании выражение слева писать нельзя, а в сравнении ─ можно.

n:=6;

n=6;

6:=n;

y:=2*x+1;

2*x+1:=y;

n:=5; j:=8; n:=j;

n:=5; j:=8; j:=n

6=n;

y=2*x+1;

2*x+1=y;

n:=5; j:=8; n=j;

n:=5; j:=8; j=n

Слайд 236

09.11.2021 Организация обмена В подавляющем большинстве случаев исполнителем алгоритма является компьютер,

09.11.2021

Организация обмена

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

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

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

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

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

Слайд 237

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

09.11.2021

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

особой разновидности операторов, которые называются процедурами обмена, а точнее операторами вызова процедур обмена.

Эти процедуры как раз и связаны и с аппаратурой компьютера и с языковыми конструкциями программы.

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

read(список вводимых величин) // Па, scan(список вводимых величин) // Cи

а для вывода процедуры —

write(список выводимых величин) // Па, print(список выводимых величин) // Cи

в которых вводимые/выводимые величины представлены в виде списка, состоящего из имён этих величин, перечисляемых через запятую.

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

Слайд 238

09.11.2021 Например, процедура read(y) scan(y) требует ввода одного вещественного числа —

09.11.2021

Например, процедура read(y) scan(y) требует ввода одного вещественного числа — значения

переменной y, для процедуры read(i, j) scan(I,j) на клавиатуре следует набрать два целых числа, а для процедуры read(A) scan(A)— девять вещественных чисел, являющихся значениями элементов матрицы A.

Структура программы — алгоритма, заданного на алгоритмическом языке, — в значительной мере зависит от используемого языка.

Общая структура программы

Программа на языке Паскаль в простейшем случае имеет вид:

var O1; O2;…;Om begin S1; S2; …; Sn end. // Па

То есть она содержит последовательность описаний O1;O2;…;Om используемых в программе переменных, и последовательность операторов S1;S2; …;Sn, которые задают нужные действия, здесь О и S — условные обозначения описания и оператора соответственно.

Любые два рядом стоящие описания или оператора разделяются точкой с запятой. Перед последовательностью описаний находится ключевое слово var (от англ. variable — переменная), последовательность операторов находится между ключевым словом begin (англ. — начало) и ключевым словом end (англ. — конец), а завершается текст программы точкой.

Слайд 239

09.11.2021 Программа на языке Си в простейшем случае имеет вид: main

09.11.2021

Программа на языке Си в простейшем случае имеет вид:

main (

) { S1; S2; …; Sn; } // Cи

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

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

В простейшем варианте написания программы на языке Cи перед фигурными скобками указывается имя main (англ. — главный) и пара круглых скобок, конструкции, являющейся частным случаем так называемого заголовка функции, который состоит из имени и заключаемого в круглые скобки списка параметров

Попутно отметим, что пара ключевых слов begin end в Паскале и пара фигурных скобок { } в Си называется операторными скобками, а конструкции begin S1; S2; …; Sn end и { S1; S2; …; Sn; } — составным оператором.

Важно! Заключение последовательности операторов в операторные скобки превращает эту последовательность с точки зрения синтаксических правил языка в один оператор

Слайд 240

09.11.2021 Процедуры ввода/вывода могут помещаться в любом месте внутри последовательности S1;S2;

09.11.2021

Процедуры ввода/вывода могут помещаться в любом месте внутри последовательности S1;S2; …;Sn

операторов программы. Однако в стандартном случае процедуры ввода помещают вначале, а процедуры вывода – в конце этой последовательности.
Слайд 241

09.11.2021 … Линейные алгоритмы. Управляющая конструкция следование. Для реализации линейных участков

09.11.2021


Линейные алгоритмы. Управляющая конструкция следование.

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

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

S1; S2; S3; … ;SN

S1

S2

S3

SN

Слайд 242

09.11.2021 Построение линейных алгоритмов обычно не вызывает затруднений, и состоит из

09.11.2021

Построение линейных алгоритмов обычно не вызывает затруднений, и состоит из следующих

шагов:

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

Слайд 243

09.11.2021 5 n 8 m 8 n 5 m Исходное состояние

09.11.2021

5

n

8

m

8

n

5

m

Исходное состояние

Требуемое результирующее состояние

Переменная n должна получить новое значение, равное старому

значению переменной m, в свою очередь переменная m должна получить новое значение, равное старому значению переменной n,

Пример. Обмен значениями двух переменных

Буквальная реализация условия задачи

5

n

8

m

n:=m
n=m

8

8

n

8

m

m:=n
m=n

5

n

8

m

m:=n
m=n

5

5

n

5

m

n:=m
n=m

5

Слайд 244

09.11.2021 5 n m Решение задачи обмена значениями Необходимо понять причину

09.11.2021

5

n

m

Решение задачи обмена значениями

Необходимо понять причину неудачи предыдущих вариантов решения.
Дело

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

8

k

5

8

5

k=n;
k=n;

n:=m;
n=m;

m:=k;
m=k;

Слайд 245

09.11.2021 //Паскале-подобный алгоритм обмена, var n, m, k: integer; //Описания используемых

09.11.2021

//Паскале-подобный алгоритм обмена,
var n, m, k: integer; //Описания используемых переменных

begin
read(n, m); //Ввод исходных данных
k:=n; n:=m; m:=k; // Обмен
write (n, m) //Вывод результатов
end.

//Си-подобный алгоритм обмена
main ( ) //Обязательный заголовок
{
int n, m; //Описания основных переменных
scan (n, m); //Ввод исходных данных
int k=n; n=m; m=k; //Описание промежуточной //переменной k и обмен
print (n, m); //Вывод результатов
}

Слайд 246

09.11.2021 Общий порядок построения алгоритма внимательно проанализировать условие задачи выявить, что

09.11.2021

Общий порядок построения алгоритма

внимательно проанализировать условие задачи выявить, что задано, какие

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

09.11.2021 Решение системы двух линейных уравнений с двумя неизвестнымиxx Шаги 1-3.

09.11.2021

Решение системы двух линейных уравнений с двумя неизвестнымиxx

Шаги 1-3. Когда

говорят «задана система алгебраических уравнений» это означает, что коэффициенты при неизвестных a11, a12, a21, a22 и ко­эффициенты b1, b2 в правой части известны.

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

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

По условию задачи также понятно, что искомыми результатами являются неизвестные x и y — их значения являются выходом алгоритма.

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

Слайд 248

09.11.2021 В данной задаче символьный, логический, а также структурированные типы для

09.11.2021

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

величин не допустимы, поскольку над ними требуется выполнять операции сложения и умножения

В качестве имён искомых неизвестных можно выбрать их названия x и y, использованные в математической постановке задачи.

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

Тогда подходящим может быть, например, такой выбор имён: a11, a12, a21, a22, b1 и b2.

Второй вариант основан на использовании сложной структуры данных — массива. В этом варианте коэффициенты левой части системы образуют матрицу A и тогда они обозначаются: A[1,1]; A[1,2], A[2,1], A[2,2], а коэффициенты правой части рассматриваются как элементы вектора b и обозначаются b[1] и b[2] соответственно.

Слайд 249

09.11.2021 Ответ на вопрос, какой из рассмотренных вариантов предпочтительнее зависит от

09.11.2021

Ответ на вопрос, какой из рассмотренных вариантов предпочтительнее зависит от размерности

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

Шаг 4. Решить систему — это значит найти её корни, то есть такие значения неизвестных величин x и y, при которых оба её уравнения превращаются в тождества. Каким способом можно решить эту систему?

Решение системы можно получить по правилу Крамера:

Шаги 5–6. Алгоритм определения корней складывается из ввода исходных данных, двух операторов присваивания, которые соответствуют приведённым соотношениям и вывода полученных результатов.

Слайд 250

09.11.2021 Вспомним сказанное раньше: обычно ввод организуют в самом начале алгоритма,

09.11.2021

Вспомним сказанное раньше: обычно ввод организуют в самом начале алгоритма, а

вывод ─ перед его конечной точкой.

Для ответа на этот вопрос можно использовать следующие соображения:

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

А какие величины из использованных в рассуждениях подлежат вводу и выводу?

Теперь обсудим собственно вычисления.

Слайд 251

09.11.2021 Легко заметить, что дроби, значения которых необходимо вычислить, имеют совершенно

09.11.2021

Легко заметить, что дроби, значения которых необходимо вычислить, имеют совершенно одинаковые

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

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

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

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

Слайд 252

09.11.2021 После этого вычисление корней сведется к очень простым действиям: Осталось

09.11.2021

После этого вычисление корней сведется к очень простым действиям:

Осталось определиться

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

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

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

Например, сначала можно найти числитель второй дроби, а затем первой, можно далее вычислить y, а затем уже x и т.д.

Но в любом случае значение переменных необходимо вычислять до их использования в каких-либо выражениях.

Слайд 253

09.11.2021 Начало Ввод A,b D:=a11a22-a12a21 Dx:=b1a22-b2a12 Dy:=b2a11-b1a21 x:=Dx/D y:=Dy/D Вывод x,y

09.11.2021

Начало

Ввод A,b

D:=a11a22-a12a21

Dx:=b1a22-b2a12

Dy:=b2a11-b1a21

x:=Dx/D

y:=Dy/D

Вывод x,y

Конец

A : array [1..2,1..2] of real; b:array[1..2] of real;

x, y, D, Dx, Dy: real; begin

read (A,b);

{вычисление главного детерминанта системы}
D:=a[1,1]*a[2,2]-a[1,2]*a[2,1];

{вычисление вспомогательного детерминанта Dx }
Dx:=b[1]*a[2,2]-b[2]*a[1,2];

{вычисление вспомогательного детерминанта Dy } Dy:=b[2]*a[1,1]-b[2]*a[2,1];

x := Dx/D;

y:= Dy/D;

write (x,y)

end.

Слайд 254

09.11.2021

09.11.2021

Слайд 255

09.11.2021 // Паскале-подобный. var a11,a12,a21,a22,b1,b2,x,y,D,Dx,Dy: real; begin read(a11, a12, a21, a21,

09.11.2021

// Паскале-подобный.
var a11,a12,a21,a22,b1,b2,x,y,D,Dx,Dy: real;
begin
read(a11, a12, a21, a21, a22, b1, b2);


D := a11*a22 – a12*a21; //Знаменатель
Dx := b1*a22 – b2*a12; //Числитель для x
Dy := b2*a11 – b1*a21; //Числитель для y
x := Dx/D; y := Dy/D; //Корни системы
write (x, y);
end.
Слайд 256

09.11.2021

09.11.2021

Слайд 257

09.11.2021 При записи текстов алгоритмов применяются простые графические приёмы: связанные по

09.11.2021

При записи текстов алгоритмов применяются простые графические приёмы: связанные по смыслу

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

Шаг 7. Тестирование алгоритма следует проводить для системы уравнений, решение которой известно. Возьмем, например, в качестве тестовой такую систему

Её корнями являются x=2 и у=4 , в чём можно убедиться непосредственной подстановкой в систему.

Слайд 258

09.11.2021 read(a11, a12, a21, a21, a22, b1, b2); D := a11*a22

09.11.2021

read(a11, a12, a21, a21, a22, b1, b2);

D := a11*a22

– a12*a21; //Знаменатель

Dx := b1*a22 – b2*a12; //Числитель для x

Dy := b2*a11 – b1*a21; //Числитель для y

x := Dx/D;

write (x, y);

y := Dy/D; //Корни системы

а11 а12 а21 а22 b1 b2

D Dx Dy

x y

5

3

10

-1

22

16

-35

-70

-140

2

4

Слайд 259

09.11.2021 Найденные в результате трассировки значения величин x и y совпали

09.11.2021

Найденные в результате трассировки значения величин x и y совпали с

известным решением системы. Можно ли говорить о безусловной правильности алгоритма?

Проведём для очистки совести ещё одну проверку. Возьмём, например, такую систему:

которая имеет точно такие же корни x=2 и у=4.

Слайд 260

09.11.2021 c read(a11, a12, a21, a21, a22, b1, b2); D :=

09.11.2021

c

read(a11, a12, a21, a21, a22, b1, b2);

D := a11*a22

– a12*a21; //Знаменатель

Dx := b1*a22 – b2*a12; //Числитель для x

Dy := b2*a11 – b1*a21; //Числитель для y

x := Dx/D;

write (x, y);

y := Dy/D; //Корни системы

а11 а12 а21 а22 b1 b2

D Dx Dy

x y

5

3

10

6

22

44

0

0

0

0/0 ?

Слайд 261

09.11.2021 Этот тест завершился выявлением в алгоритме принципиально невыполнимого действия. Несмотря

09.11.2021

Этот тест завершился выявлением в алгоритме принципиально невыполнимого действия.

Несмотря на

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

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

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

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

Слайд 262

09.11.2021 Получается, что обращение в нуль знаменателя является проявлением свойств самой

09.11.2021

Получается, что обращение в нуль знаменателя является проявлением свойств самой системы

уравнений, которые проявились на выбранном для теста наборе её коэффициентов.

Таким образом, проведённый анализ вернул нас к проверке метода решения задачи — правилу Крамера. Необходимо внимательнейшим образом проверить правильность понимания самого метода, а особенно условия его применения.

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

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

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

Слайд 263

09.11.2021 Заметим, что в проведённых рассуждениях анализ проводился в обратном направлении

09.11.2021

Заметим, что в проведённых рассуждениях анализ проводился в обратном направлении —

от точки появления ошибки к началу. Существует, ещё один вариант анализа когда проверка проводится в прямом направлении, с самого начала рассуждений. Заметим, что такой вариант может привести к обнаружению ошибки быстрее, чем обратный анализ.

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

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

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

Вопрос. А сколько именно ветвей необходимо зафиксировать в обсуждаемой алгоритме решения задачи?

И вновь лучше всего начать с математического аспекта решения рассматриваемой задачи.

Слайд 264

09.11.2021 Если вспомнить точные математические утверждения относительно существования решений системы линейных

09.11.2021

Если вспомнить точные математические утверждения относительно существования решений системы линейных алгебраических

уравнений, то получим следующие возможные ситуации:

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

Полный анализ позволяет утверждать, что в строящемся алгоритме должно быть предусмотрено три ветви

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

Кроме того, всегда следует помнить об обязательности проведения тестирования построенного алгоритма, которое при правильном его проведении обеспечивает нахождение большинства ошибок.

Слайд 265

09.11.2021 Алгоритмы с ветвлениями более сложны по сравнению с линейными. В

09.11.2021

Алгоритмы с ветвлениями более сложны по сравнению с линейными. В любом

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

Алгоритмы с ветвлением

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

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

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

Таким образом, выявлено два варианта возможных действий, две ветви алгоритма:

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

Слайд 266

09.11.2021 Обсудим подробнее структуру полученного алгоритма. Какой этап является этапом выбора?

09.11.2021

Обсудим подробнее структуру полученного алгоритма. Какой этап является этапом выбора?

Теперь обратим

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

Начальные действия, выполняемые с целью подготовки к каким-либо другим, более сложным действиям называются инициализацией (англ. initialization – инициирование): инициализация ветвления, инициализация цикла и т.д.

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

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

Этап определения характера гудков.

Слайд 267

09.11.2021 Затем размещаются точные описания каждого из вариантов действий (дождаться ответа

09.11.2021

Затем размещаются точные описания каждого из вариантов действий (дождаться ответа и

поговорить; не разговаривать).

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

Выявленная структура характерна для любого алгоритма с ветвлением:

общий участок инициализации, то есть подготовки к ветвлению;
этап выбора, содержащий одно или несколько условий;
отдельное описание каждой ветви;
общий участок, завершающий ветвление.

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

Слайд 268

09.11.2021 Получается, что в результате первоначального анализа были выделены только две

09.11.2021

Получается, что в результате первоначального анализа были выделены только две ветви,

затем одна из них разделилась ещё на две ветви. Таким образом, в алгоритме должно быть три ветви.

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

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

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

Слайд 269

09.11.2021 Общие рекомендации по построению алгоритмов с ветвлениями Участок инициализации —

09.11.2021

Общие рекомендации по построению алгоритмов с ветвлениями

Участок инициализации — подготовки к

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

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

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

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

Слайд 270

09.11.2021 Завершающий участок ветвления служит для объединения всех путей исполнения алгоритма.

09.11.2021

Завершающий участок ветвления служит для объединения всех путей исполнения алгоритма. Он

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

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

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

Слайд 271

09.11.2021 Несмотря на то, что участок инициализации ветвления должен находиться перед

09.11.2021

Несмотря на то, что участок инициализации ветвления должен находиться перед этапом

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

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

Слайд 272

09.11.2021 Управляющие конструкции ветвлений Заметим, что с организацией ветвлений мы уже

09.11.2021

Управляющие конструкции ветвлений

Заметим, что с организацией ветвлений мы уже фактически сталкивались,

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

условие

+

-

да

нет

S1

S2

Полное ветвление

if <условие> then S1 else S2

if (<условие>) S1; else S2;

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

Слайд 273

09.11.2021 Сокращенное ветвление условие + - да нет S1 if then

09.11.2021

Сокращенное ветвление

условие

+

-

да

нет

S1

if <условие> then S1

Сокращенное ветвление используется, если в одном из

вариантов никаких действий выполнять не нужно

if (<условие>) S1;

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

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

Слайд 274

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

09.11.2021

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

конкретных алгоритмах условия выбора ветвей L1 и L2 не должны пересекаться L1 ∩ L2 = ∅ и вместе они должны охватывать всю проблемную область задачи.

Как следствие в управляющих конструкциях ветвления можно использовать любое из условий L1 или L2. Фактически включённое в управляющую конструкцию условие мы будем называть условием разделения ветвей.

Для машин Поста условие разделения связано с наличием или отсутствием отметки в текущей клетке ленты. В блок-схемах такое условие может быть совершенно произвольным и его можно формулировать на естественном языке. А в условных операторах условие разделения всегда должно быть представлено выражением логического типа.

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

Слайд 275

09.11.2021 Пример организации полного ветвления Для любого заданного значения вещественного аргумента

09.11.2021

Пример организации полного ветвления

Для любого заданного значения вещественного аргумента x вычислить

значение кусочно-непрерывной функции y, заданной следующими соотношениями:

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

По определению функции возможны всего два варианта вычисления её значения:

Если фактическое значение аргумента x окажется больше чем 3 (x>3), то для вычисления следует выбрать верхнее определение y=2x+1.
Если заданное значение аргумента x окажется не больше чем 3 (x≤3), необходимо выбрать нижнее определение y=sin x.

Слайд 276

09.11.2021 Условия выбора ветвей x>3 и x≤3 взаимно не пересекаются, каждое

09.11.2021

Условия выбора ветвей x>3 и x≤3 взаимно не пересекаются, каждое из

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

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

Действия в каждой из ветвей задаются соответствующими операторами присваивания: y:=2x+1 для x>3 и y:=sin x для x≤3.

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

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

Слайд 277

09.11.2021 - нет x≤3 + да x>3 X>3 y:=2x+1 y:=sin x

09.11.2021

-

нет

x≤3

+

да

x>3

X>3

y:=2x+1

y:=sin x

Начало

Ввод x

Вывод x,y

Конец

var x, y: real;

begin

read(x);

If x>3 then

{x>3,

берется верхняя ветвь} y:= 2*x -1

else

{x≤3, берется нижняя ветвь} y:= sin(x);

write (x,y)

end.

Слайд 278

09.11.2021

09.11.2021

Слайд 279

09.11.2021 - нет X>3 + да x≤3 X≤3 y:=sin x y:=2x+1

09.11.2021

-

нет

X>3

+

да

x≤3

X≤3

y:=sin x

y:=2x+1

Начало

Ввод x

Вывод x,y

Если выбрать противоположное условие x≤3, то ветви следует

поменять местами.

-

нет

x≤3

+

да

x>3

X>3

y:=2x+1

y:=sin x

Начало

Ввод x

Вывод x,y

Конец

Конец

Слайд 280

09.11.2021

09.11.2021

Слайд 281

09.11.2021 Ещё раз обращаю внимание на графические приёмы оформления фрагментов программ,

09.11.2021

Ещё раз обращаю внимание на графические приёмы оформления фрагментов программ, которые

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

Отметим ещё одну особенность приведённых выше алгоритмов. Оператор присваивания записан в виде y:=2.0*x+1.0, хотя проще было бы записать его так: y:=2*x+1. Правильными являются оба варианта записи операторов.

Но в выражении 2*x+1 участвуют константы целого типа и вещественная переменная. Такая запись выражений разрешена, но во время выполнения вычислений целые константы придётся преобразовать к вещественному типу, а на это компьютеру потребуется дополнительное время. Поэтому лучше использовать вариант y:=2.0*x+1.0, в котором все типы совпадают.

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

Слайд 282

09.11.2021 Особо обращаю внимание на отсутствие точки с запятой после первой

09.11.2021

Особо обращаю внимание на отсутствие точки с запятой после первой ветви

в записи на языке Паскаль и в её наличие в этом месте в записи на языке Си. Это отличие объясняется разным смыслом использования этого знака в этих языках.

Это смысловое различие как раз и проявляется в обсуждаемых фрагментах. Если на языке Паскаль поставить точку с запятой после завершения первой ветви:

то она отделит начальный участок условного оператора

if x>3.0 then y:=2.0*x+1.0; else y:=sin(x)

if x>3.0 then y:=2.0*x+1.0

от его хвостовой части

else y:=sin(x)

которая не может самостоятельно использоваться. Такая запись полной формы условного оператора в языке Паскаль является грубой ошибкой.

Слайд 283

09.11.2021 Если на языке Си записать условный оператор без заканчивающей оператор

09.11.2021

Если на языке Си записать условный оператор без заканчивающей оператор точки

с запятой:

if (x<=3.0) y=sin(x) else y=2.0*x+1.0;

то это означает, что в оператор, задающий первую ветвь, войдут все символы текста до ближайшей точки с запятой, которой он должен заканчиваться

y=sin(x) else y=2.0*x+1.0;

Это запись также является грубой ошибкой.

Слайд 284

09.11.2021 Для алгоритмов с ветвлением тестовые наборы должны проверить каждую из

09.11.2021

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

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

В рассматриваемой задаче можно выбрать любое значение, меньшее чем 3, равное 3 и большее, чем 3.

Для конкретности возьмём в качестве тестовых значения x=2.0, 3.0 и 5.0. Для проведения теста необходимо заранее, до исполнения алгоритма знать каким должен быть ответ. В соответствии с определением функции, должно получиться:

y(2.0)=sin(2.0)≈0.9
y(3.0)=sin(3.0) ≈0.1
y(5.0)=11.0

Слайд 285

09.11.2021 main( ) { float x, y; scan (x); if (x

09.11.2021

main( )

{

float x, y;

scan (x);

if (x<=3.0)

y=sin

(x); //выбрана нижняя ветвь

else //выбрана верхняя ветвь

y=2.0*x+1.0;

print (x, y);

}

x y x<=3.0

2.0

1

0.9

2.0 0.9

Слайд 286

09.11.2021 main( ) { float x, y; scan (x); if (x

09.11.2021

main( )

{

float x, y;

scan (x);

if (x<=3.0)

y=sin

(x); //выбрана нижняя ветвь

else //выбрана верхняя ветвь

y=2.0*x+1.0;

print (x, y);

}

x y x<=3.0

5.0

0

11.0

5.0 11.0

Слайд 287

09.11.2021 На основании этих трассировок можно сделать вывод: проведённое тестирование не выявило ошибок в проверяемом алгоритме.

09.11.2021

На основании этих трассировок можно сделать вывод: проведённое тестирование не выявило

ошибок в проверяемом алгоритме.
Слайд 288

09.11.2021 Пример организации неполного ветвления Задана последовательность из двух элементов a1,

09.11.2021

Пример организации неполного ветвления

Задана последовательность из двух элементов a1, a2 .

Требуется переставить её элементы так, чтобы они образовали неубывающую последовательность.

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

Элементы заданной последовательности a1, a2 являются исходными величинами алгоритма. Как и ранее, можно считать их простыми переменными или же элементами массива.

Поскольку эта задача является частным случаем общей задачи упорядочивания последовательности, состоящей из n из элементов, целесообразно рассматривать последовательность как вектор a={a1,a2}, состоящий из двух (n=2) элементов.

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

В качестве имени массива целесообразно использовать его математическое обозначение a.

Слайд 289

09.11.2021 Для определённости будем считать элементы массива целыми. Как выглядят описания

09.11.2021

Для определённости будем считать элементы массива целыми. Как выглядят описания этого

массива на Паскале и на Си?

Над элементами массива в процессе преобразования потребуется выполнять только операции сравнения и присваивания.

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

К какому типу могут относиться элементы рассматриваемого массива?

Поэтому элементы массива могут относиться к целому, вещественному, логическому или символьному типу.

var a: array[1..2] of integer; // Па, int a[2]; // Cи.

Слайд 290

09.11.2021 Пусть a={4,8}. Компоненты вектора расположены в нужном порядке и делать

09.11.2021

Пусть a={4,8}. Компоненты вектора расположены в нужном порядке и делать ничего

не нужно.

Пусть теперь a={5,2}. В данном случае компоненты вектора следует переставить. В результате получится вектор a={2,5} с требуемым порядком следования компонент.

Чтобы понять в чём именно состоит задача и наметить путь её решения настоятельно рекомендуется выбрать несколько конкретных и простых числовых примеров и вручную получить искомый результат.

Далее можно рассуждать опираясь на математические соображения: между введёнными элементами массива a1 и a2 могут быть только два варианта отношений: либо a1≤a2, либо a1>a2.

Вспоминая математическое определение неубывающей последовательности, получаем, что в результирующей последовательности элементы должны удовлетворять условию а1≤а2.

Слайд 291

09.11.2021 Таким образом, получаем два варианта, две ветви алгоритма: при удовлетворении

09.11.2021

Таким образом, получаем два варианта, две ветви алгоритма:

при удовлетворении для

введённых значений неравенства а1≤а2 никаких действий выполнять не требуется — последовательность уже упорядочена;
при удовлетворении неравенства а1>а2 элементы последовательности придётся выполнить дополнительное действие: поменять местами элементы последовательности (что равносильно обмену значениями между компонентами вектора).

Условия выбора ветвей а1≤а2 и а1>а2 взаимно не пересекаются, каждое из них является отрицанием другого, и вместе они охватывают все возможные варианты соотношений между элементами массива а1 и а2, поэтому с их помощью можно построить корректное ветвление.

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

Для построения ветвления с использованием этой формы в качестве условия разделения следует взять неравенство а1>a2, при удовлетворении которого выбирается непустая ветвь

Слайд 292

09.11.2021 Непустая ветвь представляет собой линейный алгоритм обмена значениями, который был

09.11.2021

Непустая ветвь представляет собой линейный алгоритм обмена значениями, который был ранее

построен.

Только применить его требуется не к переменным n и m, а к элементам массива a1 и a2. Записать этот фрагмент алгоритма, используя для обмена вспомогательную переменную c.

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

с:=a[1]; a[1]:=a[2]; a[2]:=с

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

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

Слайд 293

09.11.2021 - нет + да a1>a2 a1>a2 c:=a1 Начало Ввод a1,a2

09.11.2021

-

нет

+

да

a1>a2

a1>a2

c:=a1

Начало

Ввод a1,a2

Вывод a

Конец

a1:=a2

a2:=c

a1≤a2

var a: array of real; c: real;

read(a);

if a[1]>a[2] then

begin

{обмен значениями}

c:=a[1];

a[1]:=a[2];

a[2]:=c

end;

begin

write(a)

end.

Слайд 294

09.11.2021 Записать алгоритм на СИ-подобном языке При обсуждении вариантов построения полного

09.11.2021

Записать алгоритм на СИ-подобном языке

При обсуждении вариантов построения полного ветвления было

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

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

Слайд 295

09.11.2021 Как и в случае полной формы для тестирования построенного алгоритма

09.11.2021

Как и в случае полной формы для тестирования построенного алгоритма необходимы,

по крайней мере, три тестовых набора — по одной на каждую ветвь и один на точку перехода между ветвями. Можно взять, например, такие наборы: (5, 2), (4, 8) и (3, 3).

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

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

В таких случаях применяется составной оператор, поскольку любая группа операторов, заключенная в операторные скобки, по правилам алгоритмических языков считается одним оператором. Именно поэтому при выполнении условия a[1]

Теперь рассмотрим, к чему приведёт ошибка, если по невнимательности, или по незнанию в алгоритме не использовать составной оператор.

Слайд 296

09.11.2021 - нет + да a1>a2 a1>a2 c:=a1 Начало Ввод a1,a2

09.11.2021

-

нет

+

да

a1>a2

a1>a2

c:=a1

Начало

Ввод a1,a2

Вывод a

Конец

a1:=a2

a2:=c

a1≤a2

Невозможность выполнить присваивание для некоторых вариантов исходных данных.
Несоответствие смысла

действий условиям задачи и разработанному способу её решения.
Слайд 297

09.11.2021 Алгоритмы с большим количеством ветвей В задачах часто возникают ситуации,

09.11.2021

Алгоритмы с большим количеством ветвей

В задачах часто возникают ситуации, при

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

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

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

Алгоритм, содержащий n ветвей, строится за n-1 шаг. На каждом шаге производится отделение одной ветви, для чего применяется одна управляющая конструкция ветвления.

Слайд 298

09.11.2021 Конструкция первого шага образует внешнее ветвление, а каждая следующая вкладывается

09.11.2021

Конструкция первого шага образует внешнее ветвление, а каждая следующая вкладывается в

ветвление предыдущего шага.

На первом шаге выбирается любая ветвь, желательно с простым условием выбора, а все оставшиеся ветви объединяются в группу. Эта группа считается второй ветвью обычного ветвления, которое реализуется условным оператором в полной форме. В результате такого разделения в «групповой» ветви окажется n-1 исходная ветвь.

Далее точно таким же способом «групповая» ветвь вновь разделяется на две. После чего в новой «групповой» ветви останется n-2 исходные ветви.

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

Слайд 299

09.11.2021 Пример: алгоритм с тремя ветвями Построить алгоритм вычисления значения функции

09.11.2021

Пример: алгоритм с тремя ветвями

Построить алгоритм вычисления значения функции

для любого вещественного

значения аргумента x.

Рассуждая точно также как ранее. приходим к выводу о том, что входной величиной алгоритма является вещественная переменная х, а выходной — вещественная переменная у. И описания переменных и действия, связанные с вводом/выводом, записываются точно такие же, как в решении задачи о полном ветвлении.

Слайд 300

09.11.2021 при x≤0: y(x)=0; при 0 при x>1: y(x)=x2+sin πx. По

09.11.2021

при x≤0: y(x)=0;
при 0 при x>1: y(x)=x2+sin πx.

По

определению функции, видно, что в зависимости от заданного значения аргумента х возможны три варианта вычисления её значения:

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

По общей схеме организации ветвления вначале с помощью условия x≤0 выделим две ветви ─ одну обычную, содержащую первый вариант вычисления y:=0, а вторую ─ объединяющую все оставшиеся варианты.

Слайд 301

09.11.2021 - нет x>1 + да 0 x>0 ─ уже выполнено

09.11.2021

-

нет

x>1

+

да

0

x>0 ─ уже выполнено

-

нет

x>0

+

да

x≤0

x≤0

y:=0

Остальные варианты

Начало

Ввод x

Вывод x,y

Конец

x≤1

y:=x2-x

y:=x2+sin πx

Остальные варианты

x>0 ∧

x>1 ⇒ x>1
Слайд 302

09.11.2021 - нет x>1 + да 0 x>0 - нет +

09.11.2021

-

нет

x>1

+

да

0

x>0

-

нет

+

да

x≤0

x≤0

y:=0

Начало

Ввод x

Вывод x,y

Конец

x≤1

y:=x2-x

y:=x2+sin πx

Слайд 303

09.11.2021 Обратите внимание на оформление в этой блок-схеме вложенного и внешнего

09.11.2021

Обратите внимание на оформление в этой блок-схеме вложенного и внешнего ветвлений.


Блоки действий в ветвях рекомендуется располагать на одном и том же уровне.

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

Такое оформление помогает лучше понять содержание ветвлений, и кроме того, соответствует технологии структурного программирования, о которой речь пойдёт в дальнейшем.

Слайд 304

09.11.2021 // Паскале-подобный var x, y: real; begin read(x); if x

09.11.2021

// Паскале-подобный

var x, y: real;

begin

read(x);

if x<=

0.0 then //x<=0.0, выбрана верхняя ветвь

y:=0.0

else //x>0, выбрана «групповая» ветвь

{Остальные варианты}

write (x, y);

end.

Теперь, учитывая, что в точке алгоритма, обозначенной комментарием «Остальные варианты», неравенство x>0 удовлетворяется, разделим две оставшиеся ветви. Выбрав неравенство x<=1 в качестве условия вложенного ветвления, получим такое уточнение:

Слайд 305

09.11.2021 if x y:=x*x–x else {x>1 — нижняя ветвь} y:=x*x+ sin(π*x);

09.11.2021

if x<=1.0 then {0 y:=x*x–x
else {x>1

— нижняя ветвь}
y:=x*x+ sin(π*x);

{Остальные варианты. x уже больше нуля}

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

Слайд 306

09.11.2021

09.11.2021

Слайд 307

09.11.2021

09.11.2021

Слайд 308

09.11.2021 Для тестирования алгоритма, содержащего n ветвей необходимо подобрать 2n-1 тестовый

09.11.2021

Для тестирования алгоритма, содержащего n ветвей необходимо подобрать 2n-1 тестовый набор,

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

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

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

В построенном алгоритме для внешнего ветвления было выбрано условие разделения x≤0. Вообще говоря, для разделения ветвей можно выбрать любое другое условие. Исходя из того, что в рассматриваемом алгоритме три ветви и каждое вложенное ветвление можно записать двумя способами, получаем, что алгоритм можно записать шестью различными способами. Несложно доказать, что для алгоритма, содержащего n ветвей при использовании условного оператора существует n! вариантов его записи.

Слайд 309

09.11.2021 - нет x≤0 + да 0 x≤1 - нет +

09.11.2021

-

нет

x≤0

+

да

0

x≤1

-

нет

+

да

x>1

x>1

y:=x2+sinπx

Начало

Ввод x

Вывод x,y

Конец

x>0

y:=x2-x

y:=0

Слайд 310

09.11.2021 - нет x>1 + да 0 x>0 - нет +

09.11.2021

-

нет

x>1

+

да

0

x>0

-

нет

+

да

x≤0

x≤0

y:=0

Начало

Ввод x

Вывод x,y

Конец

x>1

y:=x2-x

y:=x2+sin πx

Слайд 311

09.11.2021 - нет x>1 + да 0 x≤0 ∨ x>1 -

09.11.2021

-

нет

x>1

+

да

0

x≤0 ∨ x>1

-

нет

+

да

x≤0

0

y:=x2-x

Начало

Ввод x

Вывод x,y

Конец

x≤0

y:=0

y:=x2+sin πx

Слайд 312

09.11.2021 Все построенные таким путём варианты со смысловой точки зрения одинаковы

09.11.2021

Все построенные таким путём варианты со смысловой точки зрения одинаковы и

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

Например, условие выбора средней ветви использовать не следует, так как по правилам алгоритмических языков ему соответствует выражение вида (x>0.0) ∧ (x≤1.0), содержащее три операции, следовательно, соответствующий фрагмент алгоритма будет менее эффективным, чем при использовании простых выражений вида x>1.0.

Слайд 313

09.11.2021 Построение циклических алгоритмов Решения подавляющего большинства задач включают в себя

09.11.2021

Построение циклических алгоритмов

Решения подавляющего большинства задач включают в себя многократно выполняющиеся

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

Общую структуру циклических алгоритмов удобно проследить на примере, рассмотренном при обсуждении свойства конечности алгоритма. В этом алгоритме циклический участок образуется из трех действий: 1) приём лекарства утром, 2) приём лекарства в обед и 3) приём лекарства вечером.

Такую группу многократно выполняемых действий принято называть телом цикла. Однократное выполнение тела цикла называется итерацией (англ. iteration — повторение). В рассматриваемом примере итерация представляет собой совокупность действий по приёму дневной нормы лекарства.

С телом цикла связано условие повторения, которое определяет необходимость выполнения действий, входящих в тело. В примере условие повторения имеет вид «пока больной не выздоровеет».

Слайд 314

09.11.2021 Фрагмент конструкции цикла, в котором находится условие повторения, обычно называют

09.11.2021

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

цикла. Таким образом, в стандартном варианте цикл состоит из заголовка и тела.

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

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

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

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

Слайд 315

09.11.2021 Итак, в структуре алгоритма с циклом имеется три основных, связанных

09.11.2021

Итак, в структуре алгоритма с циклом имеется три основных, связанных с

его организацией элемента:

инициализация цикла;
условие повторения/условие завершения;
тело цикла.

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

Фактически мы уже сталкивались с циклами, когда обсуждали программу для машины Поста. Если проанализировать, например, ход выполнения программы увеличения заданного на ленте числа на единицу, легко заметить, что команды 1 и 2 выполняются два раза подряд, следовательно, они образуют тело цикла, в котором исполняются две итерации.

Слайд 316

09.11.2021 условие Тело цикла Действия, которые требуются выполнить многократно, образуют тело

09.11.2021

условие

Тело цикла

Действия, которые требуются выполнить многократно, образуют тело цикла. Часть цикла,

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

Инициализация

false

true

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

Слайд 317

09.11.2021 В соответствии с этой схемой вначале выполняются все связанные с

09.11.2021

В соответствии с этой схемой вначале выполняются все связанные с инициализацией

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

Сама управляющая конструкция цикла с предусловием предписывает следующую последовательность шагов его выполнения:

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

Особо подчеркнём, что если условие повторения окажется нарушенным при самой первой проверке, то тело цикла не выполнится ни разу.

Слайд 318

09.11.2021 Эта управляющая конструкция имеет практически точные аналоги почти во всех

09.11.2021

Эта управляющая конструкция имеет практически точные аналоги почти во всех алгоритмических

языках.

while <условие > do <тело цикла>

while (<условие >) <тело цикла>;

Так, в языке Паскаль цикл с предусловием определяется так:

В Си подобных языках:

Начальный фрагмент оператора while <логическое выражение> do // Па, while (<логическое выражение>) // Cи представляет собой заголовок цикла, а входящее в заголовок логическое выражение — это записанное по правилам соответствующего языка условие повторения тела цикла.

Завершающий фрагмент конструкции <оператор> — это тело цикла, то есть многократно повторяющееся действие. Из определений следует, что тело цикла в этой форме оператора может быть задано только одним оператором.

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

Слайд 319

09.11.2021 Значение входящего в заголовок логического выражения вычисляется перед каждым выполнением

09.11.2021

Значение входящего в заголовок логического выражения вычисляется перед каждым выполнением тела

цикла.

Если получается логическое значение true, то оператор, задающий тело цикла, выполняется.

Как только логическое выражение получит значение false — выполнение оператора цикла завершается и наступает очередь выполнения оператора, расположенного следом за оператором цикла

Слайд 320

09.11.2021 Общие рекомендации по построению циклических алгоритмов Чтобы обеспечить корректность построения

09.11.2021

Общие рекомендации по построению циклических алгоритмов

Чтобы обеспечить корректность построения циклов можно

придерживаться следующих рекомендаций:

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

Слайд 321

09.11.2021 Эти рекомендации имеют весьма общий характер, и их следует тщательно

09.11.2021

Эти рекомендации имеют весьма общий характер, и их следует тщательно соблюдать,

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

Одна из самых характерных ошибок в построении циклов состоит в некорректной формулировке условия повторения.

Главное в проверке корректности условий повторения и завершения: убедится в том, что итерации (выполнения) тела цикла рано или поздно прекратятся. То есть необходимо следить за тем, чтобы на какой-либо итерации было удовлетворено условие завершения, что и обеспечивает завершаемость цикла.

Завершаемость за конченое время всего алгоритма в целом гарантируется завершаемостью каждого присутствующего в алгоритме цикла.

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

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

Слайд 322

09.11.2021 Вход в цикл представляет собой выполнение всех действий участка инициализации

09.11.2021

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

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

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

Слайд 323

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

09.11.2021

Задача о рекуррентной последовательности

Пусть элементы последовательности связаны друг с другом соотношением:

Последовательности

у которых явно заданы k подряд расположенных элемента, а любые другие элементы связаны друг с другом одним и тем же соотношением an=f(an-1, an-2, …,an-k) называются рекуррентными.

Требуется найти a) 5, б) 100, в) n-й элемент последовательности.

Найти пятый элемент последовательности можно следующим способом:

Положим k=1, тогда, зная a0 можно найти a1:

Положим k=2, тогда, зная a1 можно найти a2:

a1=1*a0+1/2=1

a2=2*a1+1/3≈2,33.

Положим k=3, тогда, зная a2 можно найти a3:

a3=3*a2+1/4 ≈ 7,25

Положим k=4, тогда, зная a3 можно найти a4:

a4=4*a3+1/5≈29,2

Положим k=5, тогда, зная a4 можно найти a5

a5=5*a4+1/6 ≈ 146,17

Пример.

Подготовительные действия: положим k=0 и a0=0.5

Слайд 324

09.11.2021 Зафиксируем вытекающие из рекуррентного соотноше­ния важные для дальнейшего моменты в

09.11.2021

Зафиксируем вытекающие из рекуррентного соотноше­ния важные для дальнейшего моменты в проведённых

рассуждениях: для определения любого элемента последовательности ak (кроме нулевого) необходимо знать: 1) его номер k ; 2) значение предыдущего элемента последовательности ak-1.

Обратим также внимание на то, что алгоритм определения пятого элемента последова­тельности состоит ровно из шести шагов.

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

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

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

Слайд 325

09.11.2021 С теоретической точки зрения линейный алгоритм, несмотря на то, что

09.11.2021

С теоретической точки зрения линейный алгоритм, несмотря на то, что он

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

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

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

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

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

Слайд 326

09.11.2021 При анализе проведённых расчётов возникает ощущение, что при вычислении каждого

09.11.2021

При анализе проведённых расчётов возникает ощущение, что при вычислении каждого очередного

элемента последовательности приходится выполнять одни и те же действия:

Чтобы это увидеть следует ввести в рассуждения переменную, которая имеет смысл текущего элемента последовательности. Назовем такую переменную, например a.

Особенность переменной а в том, что её значение совпадает с значением элемента последовательности, который рассматривается на текущем шаге:

0) а=a0

1) a=a1

2)a=a2

k)a=ak


Тогда, опираясь на свойства действия присваивания, вычисление очередного элемента можно записать в виде:

а:=k*a+1/(k+1)

Слайд 327

09.11.2021 По условиям задачи в начальный момент исполнения действий к=0, а=0.5.

09.11.2021

По условиям задачи в начальный момент исполнения действий к=0, а=0.5.

k :=

0: a := 0.5; {Задание начальных значений}

k := 1; a:=k*a+1/(k+1); {Вычисление первого элемента}

k := 2; a:=k*a+1/(k+1); {Вычисление второго элемента}

k := 3; a:=k*a+1/(k+1); {Вычисление третьего элемента}

k := 4; a:=k*a+1/(k+1); {Вычисление четвертого элемента}

k := 5; a:=k*a+1/(k+1); {Вычисление пятого элемента}

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

k:=k+1

k := 0: a := 0.5: {Инициализация, задание начальных значений}

k := k+1; a:=k*a+1/(k+1); {Вычисление первого элемента}

k := k+1 ; a:=k*a+1/(k+1); {Вычисление второго элемента}

k := k+1; a:=k*a+1/(k+1); {Вычисление третьего элемента}

k := k+1; a:=k*a+1/(k+1); {Вычисление четвертого элемента}

k := k+1; a:=k*a+1/(k+1); {Вычисление пятого элемента}

Слайд 328

09.11.2021 // Си-подобный k = 0; a = 0.5; // Задание

09.11.2021

// Си-подобный
k = 0; a = 0.5; // Задание начальных значений
k

++; a = k*a+1.0/(k+1); // Вычисление первого элемента
k ++; a = k*a+1.0/(k+1); //Вычисление второго элемента
k ++; a = k*a+1.0/(k+1); //Вычисление третьего элемента
k ++; a = k*a+1.0/(k+1); //Вычисление четвертого элемента
k ++; a = k*a+1.0/(k+1); //Вычисление пятого элемента
Слайд 329

09.11.2021 1. Устанавливаем, из каких действий состоит тело цикла: Увидели, что

09.11.2021

1. Устанавливаем, из каких действий состоит тело цикла:

Увидели, что имеется группа

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

2. Определяем условие повторения:

повторяем вычисления, пока требуемый элемент не окажется уже вычисленным, то есть, его номер k меньше номера n искомого.

Определяем действия инициализации:

k=0 и a=0.5

увеличение номера элемента k на единицу и вычисление значения очередного элемента последовательности (текущего значения a).

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

Слайд 330

09.11.2021 Подготовка Начало k k:=k+1 false true a:=0.5 k:=0 Ввод N

09.11.2021

Подготовка

Начало

k

k:=k+1

false

true

a:=0.5

k:=0

Ввод N

a:=k*a+1/(k+1)

Вывод N, а

Конец

Тело цикла

N,k: integer; a:real;

read(n);

a:=0.5;

begin

k:=0;

while k

begin

{Номер очередного элемента}
k:=k+1;


{вычисление очередного элемента} a:=k*a+1/(k+1);

end;

write(N,a)

end.

{Подготовка к циклу}

Слайд 331

09.11.2021 // Си-подобный main ( ) { int n; scan(n); //Ввод

09.11.2021

// Си-подобный
main ( )
{
int n;
scan(n); //Ввод заданного номера

n
// Инициализация цикла
int k=0; //Начальный номер
float a=0.5; //Начальный элемент
while (k {
//Получение номера элемента
k++;
//Получение его значения
a=k*a+1.0/(k+1);
}
// Вывод номера и значения искомого элемента
print (n, a[n]);
}
Слайд 332

09.11.2021 Условие k Начало k k:=k+1 false true a:=0.5 k:=0 Ввод

09.11.2021

Условие k

Начало

k

k:=k+1

false

true

a:=0.5

k:=0

Ввод N

a:=k*a+1/(k+1)

Вывод N, а

Конец

N,k: integer; a:real;

read(n);

a:=0.5;

begin

k:=0;

while k≤N do

begin

{Номер очередного элемента}
k:=k+1;


a:=k*a+1/(k+1);{вычисление очередного элемента}

end;

write(N,a)

end.

{Подготовка к циклу}

N k a

5

0

0.5

(k=0)< (N=5) ⇒ true

1

1

(k=1)< (N=5) ⇒ true

2

2,33

(k=2)< (N=5) ⇒ true

3

7,25

(k=3)< (N=5) ⇒ true

4

29,2

(k=4)< (N=5) ⇒ true

5

146,17

(k=5)< (N=5) ⇒ false

Результат:

5

146,17

5

146,17

N a

Слайд 333

09.11.2021 Начало k false true a:=0.5 k:=0 Ввод N a:=k*a+1/(k+1) Вывод

09.11.2021

Начало

k

false

true

a:=0.5

k:=0

Ввод N

a:=k*a+1/(k+1)

Вывод N, а

Конец

N,k: integer; a:real;

read(n);

a:=0.5;

begin

k:=0;

while k

begin

a:=k*a+1/(k+1);{вычисление очередного элемента}

end;

write(N,a)

end.

{Подготовка к

циклу}

!

Слайд 334

09.11.2021 Начало k≤N k:=k+1 false true a:=0.5 k:=0 Ввод N a:=k*a+1/(k+1)

09.11.2021

Начало

k≤N

k:=k+1

false

true

a:=0.5

k:=0

Ввод N

a:=k*a+1/(k+1)

Вывод N, а

Конец

Начало

k

k:=k+1

false

true

a:=0.5

k:=1

Ввод N

a:=k*a+1/(k+1)

Вывод N, а

Конец

!

!

Слайд 335

09.11.2021 Начало k a:=k*a+1/(k+1) false true a:=0.5 k:=0 Ввод N k:=k+1

09.11.2021

Начало

k

a:=k*a+1/(k+1)

false

true

a:=0.5

k:=0

Ввод N

k:=k+1

Вывод N, а

Конец

Начало

k

a:=k*a+1/(k+1)

false

true

a:=0.5

k:=1

Ввод N

k:=k+1

Вывод N, а

Конец

!

!

!

Слайд 336

09.11.2021 Начало k≤N a:=k*a+1/(k+1) false true a:=0.5 k:=1 Ввод N k:=k+1

09.11.2021

Начало

k≤N

a:=k*a+1/(k+1)

false

true

a:=0.5

k:=1

Ввод N

k:=k+1

Вывод N, а

Конец

N,k: integer; a:real;

read(n);

a:=0.5;

begin

k:=1;

while k≤N do

begin

{Номер следующего элемента}
k:=k+1;

a:=k*a+1/(k+1);{вычисление

очередного элемента}

end;

write(N,a)

end.

{Подготовка к циклу}

Слайд 337

09.11.2021 Ещё раз, кратко: Выявить группу повторяющихся действий ─ сформировать тело

09.11.2021

Ещё раз, кратко:

Выявить группу повторяющихся действий ─ сформировать тело цикла.
Установить условия

повторения этих действий.
Установить начальные значения величин, участвующих в условии и в теле цикла ─ выполнить инициализацию цикла.
Слайд 338

09.11.2021 Задача вычисления суммы Исходной величиной задачи является переменная N целого

09.11.2021

Задача вычисления суммы

Исходной величиной задачи является переменная N целого типа ─

количество слагаемых, величина i ─ номер текущего слагаемого ─ является промежуточной также целого типа, а величина S ─ искомая сумма вещественного типа.

Мы можем рассматривать переменную S как текущее значение накапливаемой суммы, вычислять и по очереди добавлять к ней каждое слагаемое. Тогда после добавления последнего слагаемого значение S будет представлять собой искомый результат

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

Условие, при котором выполняются эти действия ─ наличие еще не вычисленных и не добавленных слагаемых.

До начала вычислений уже накопленное значение суммы равно нулю, а накапливать сумму можно начать с первого слагаемого.

Слайд 339

09.11.2021 var S,a: real; N,I :integer; begin read (N); {Ввод количества

09.11.2021

var S,a: real; N,I :integer;

begin

read (N); {Ввод количества слагаемых}

{Инициализация цикла}

S:=0;

{Начальное значение накапливаемой суммы}

i:=1; {накопление суммы с первого слагаемого }

while i≤N do {пока есть еще не рассмотренные слагаемые}

begin

a:=1/(i*i+1); {вычисление очередного слагаемого }

S:=S+a; {добавление очередного слагаемого}

i:=i+1 {переход к следующему слагаемому}

end;

write (N,S) {Вывод результатов}

end.

Слайд 340

09.11.2021

09.11.2021

Слайд 341

09.11.2021 S: real; N,i:integer; begin read (N); {Ввод количества слагаемых} {Инициализация

09.11.2021

S: real; N,i:integer;

begin

read (N); {Ввод количества слагаемых}

{Инициализация цикла}

S:=0; {Начальное значение

накапливаемой суммы}

i:=1; {накопление суммы с первого слагаемого }

while i≤N do {пока есть еще не рассмотренные слагаемые}

begin

S:=S+1/(i*i+1); {добавление очередного слагаемого}

i:=i+1 {переход к следующему слагаемому}

end;

write (N,S) {Вывод результатов}

end.

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

Слайд 342

09.11.2021 S: real; N,i:integer; begin read (N); {Ввод количества слагаемых} {Инициализация

09.11.2021

S: real; N,i:integer;

begin

read (N); {Ввод количества слагаемых}

{Инициализация цикла}

S:=0.5; {Начальное значение

накапливаемой суммы}

i:=2; {накопление суммы со второго слагаемого }

while i≤N do {пока есть еще не рассмотренные слагаемые}

begin

S:=S+1/(i*i+1); {добавление очередного слагаемого}

i:=i+1 {переход к следующему слагаемому}

end;

write (N,S) {Вывод результатов}

end.

В данном случае в качестве начального значения S можно выбрать первое слагаемое. Тогда циклический процесс накопления суммы нужно начинать со второго слагаемого.

!

!

Слайд 343

09.11.2021 S: real; N,i:integer; begin read (N); {Ввод количества слагаемых} {Инициализация

09.11.2021

S: real; N,i:integer;

begin

read (N); {Ввод количества слагаемых}

{Инициализация цикла}

S:=0; {Начальное значение

накапливаемой суммы}

i:=0; {начальное значение номера}

while i

begin

S:=S+1/(i*i+1); {добавление очередного слагаемого}

i:=i+1 {получение номера текущего слагаемого}

end;

write (N,S) {Вывод результатов}

end.

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

!

!

!

Слайд 344

09.11.2021 S: real; N,i:integer; begin read (N); {Ввод количества слагаемых} {Инициализация

09.11.2021

S: real; N,i:integer;

begin

read (N); {Ввод количества слагаемых}

{Инициализация цикла}

S:=0; {Начальное значение

накапливаемой суммы}

i:=N; {накопление суммы с последнего слагаемого }

while i≥1 do {пока есть еще не рассмотренные слагаемые}

begin

S:=S+1/(i*i+1); {добавление очередного слагаемого}

i:=i-1 {переход к предыдущему слагаемому}

end;

write (N,S) {Вывод результатов}

end.

В данном случае можно начать накопление суммы с последнего слагаемого и двигаться к первому, переходя от текущего к предыдущему

!

!

!

Слайд 345

09.11.2021 Суммирование с рекуррентным соотношением между слагаемыми Пусть ai ─ очередное

09.11.2021

Суммирование с рекуррентным соотношением между слагаемыми

Пусть ai ─ очередное i слагаемое

ai=1/i!. Тогда

Таким образом, для слагаемых получено следующее рекуррентное соотношение:

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

Слайд 346

09.11.2021 S,a: real; N,i:integer; begin read (N); {Ввод количества слагаемых} {Инициализация

09.11.2021

S,a: real; N,i:integer;

begin

read (N); {Ввод количества слагаемых}

{Инициализация цикла}

S:=1. {Начальное значение

накапливаемой суммы}

i:=1; {накопление суммы с первого слагаемого }

while i≤N do {пока есть еще не рассмотренные слагаемые}

begin

S:=S+a; {добавление очередного слагаемого}

i:=i+1 {переход к следующему слагаемому}

end;

write (N,S) {Вывод результатов}

end.

a:=1; {Нулевое слагаемое}

a:=a/i; {Рекуррентное определение очередного слагаемого}

Слайд 347

09.11.2021

09.11.2021

Слайд 348

09.11.2021 Суммирование произвольных слагаемых x: array of real; S: real; N,i:

09.11.2021

Суммирование произвольных слагаемых

x: array of real; S: real; N,i: integer;

begin

read (N,

x); {Ввод количества слагаемых и всех элементов массива}

{Инициализация цикла}

S:=0; {Начальное значение накапливаемой суммы}

i:=1; {накопление суммы с первого слагаемого }

while i≤N do {пока есть еще не рассмотренные слагаемые}

begin

S:=S + x[i]; {добавление очередного слагаемого}

i:=i+1 {переход к следующему слагаемому}

end;

write (N,S) {Вывод результатов}

end.

Слайд 349

09.11.2021 Нахождение экстремального элемента массива Пусть задан массив x ={x1,x2,…,xn}. В

09.11.2021

Нахождение экстремального элемента массива

Пусть задан массив x ={x1,x2,…,xn}. В простейшем случае

необходимо найти его наибольший (наименьший) элемент.

Пусть max ─ переменная, которая играет роль «кандидата на должность» наибольшего элемента, i ─ номер очередного элемента массива. Если элементы массива, относятся к целому типу, то и max тоже величина целого типа.

x: array of integer; i, N, max: integer;

begin

read (N, x); {ввод размерности и значений элементов массива}

max:=x[1]; {назначение кандидатом первого элемента массива}

i:=2: {перебор остальных элементов массива, начиная со второго}

while i ≤ N do {пока есть ещё не рассмотренные элементы}

if x[i]>max then max:=x[i]; {сравнение очередного с кандидатом}

begin

i:=i+1 {переход к следующему элементу массива}

end;

write (max)

end.

Слайд 350

09.11.2021

09.11.2021

Слайд 351

09.11.2021 5 3 8 -1 9 7 Проведем тестирование алгоритма на

09.11.2021

5

3

8

-1

9

7

Проведем тестирование алгоритма на примере x={5, 3, 8, -1, 9, 7}

x[1] x[2] x[3] x[4] x[5] x[6]

i

max

i:=2: {перебор остальных элементов массива, начиная со второго}

while i ≤ N do {пока есть ещё не рассмотренные элементы}

if x[i]>max then max:=x[i]; {сравнение очередного с кандидатом}

begin

i:=i+1 {переход к следующему элементу массива}

end;

max:=x[1]; {назначение кандидатом первого элемента массива}

i ≤ N

x[i]>max

N

read (N, x); {ввод размерности и значений элементов массива}

x: array of integer; N, i, max: integer;

6

5

2

(i=2) ≤(N=6) ⇒ true

(x[2]=3) > (max=5)⇒ false

3

(i=3) ≤(N=6) ⇒ true

(x[3]=8) > (max=5)⇒ true

8

4

(i=4) ≤(N=6) ⇒ true

(x[4]=-1) > (max=8)⇒ false

5

(i=5) ≤(N=6) ⇒ true

(x[5]=9) > (max=8)⇒ true

9

6

(i=6) ≤(N=6) ⇒ true

(x[6]=7) > (max=9)⇒ false

7

(i=7) ≤(N=6) ⇒ false

write (max)

Слайд 352

09.11.2021 int n, x[ ]; scan (n, x); //ввод размерности и

09.11.2021

int n, x[ ];

scan (n, x); //ввод размерности и значений элементов

массива

Int max=x[1]; //назначение кандидатом первого элемента массива

int i=2; //перебор остальных элементов массива, начиная со второго

while (i <=n) //пока есть ещё не рассмотренные элементы

if (x[i]

{

i++; //переход к следующему элементу массива

}

print (max);

}

!

main ()

{

if (x[i]

Слайд 353

09.11.2021 int n, x[ ]; scan (n, x); //ввод размерности и

09.11.2021

int n, x[ ];

scan (n, x); //ввод размерности и значений элементов

массива

int Nmax=1; //назначение кандидатом первого элемента массива

int i=2; //перебор остальных элементов массива, начиная со второго

while (i <= n) //пока есть ещё не рассмотренные элементы

{

i++; //переход к следующему элементу массива

}

print (x[Nmax]);

}

main ()

{

if (x[i]>x[Nmax]) Nmax=i; //очередной лучше (больше) - заменяем

Определение номера экстремального элемента

Слайд 354

09.11.2021 В посленднем варианте построения алгоритма результат его выполнения при наличии

09.11.2021

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

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

Чтобы убедиться в этом можно взять, например, такой набор входных данных n=6 и x=(4, 9, 2, 9, 0, 3). Непосредственно видно, что в этом массиве имеется два одинаковых максимальных: второй и четвёртый элементы имеет значение 9.

Если искать только значение максимального, то ответ в любом случае один и тот же — 9. Если же требуется не само значение, а его номер, то ответом может быть и 2 и 4.

Обсудим теперь зависимость результата от строгости знака. Пусть сравнение в цикле осуществляется оператором if (x[i]>x[Nmax]) Nmax=i, условие которого содержит строгое неравенство x[i]>x[Nmax].

Тогда в результате выполнения алгоритма ответом будет номер первого среди максимальных Nmax=2. В самом деле, при i=4 неравенство x[i]>x[Nmax], в котором сравниваться x[4]=9 и a[Nmax]=9, не выполняется, поэтому замены значения Nmax не произойдёт.

Если же в условном операторе использовать нестрогое неравенство x[i]>=x[Nmax], которое при i=4 выполняется, замена значения Nmax произойдёт и алгоритм выдаст в качестве ответа номер последнего среди максимальных Nmax=4.

Слайд 355

09.11.2021 Определение экстремального элемента и его номера int i, n, max,

09.11.2021

Определение экстремального элемента и его номера

int i, n, max, Nmax

, x[ ];

scan (n, x); //ввод размерности и значений элементов массива

max=x[1]; Nmax=1; //назначение кандидатов

i=2; //перебор остальных элементов массива, начиная со второго

{

i++; //переход к следующему элементу массива

}

print (max, Nmax);

}

main ()

if (x[i]

while (i <= n) //пока есть ещё не рассмотренные элементы

{

max=x[i]; Nmax=i; //очередной лучше – заменяем

}

Слайд 356

09.11.2021 Во всех рассмотренных выше вариантах алгоритма в качестве «кандидата» во

09.11.2021

Во всех рассмотренных выше вариантах алгоритма в качестве «кандидата» во время

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

В частности, начинать перебор можно как обычно с первого элемента массива. Отличие этого варианта только в том, что во время выполнения цикла произойдет одно лишнее сравнение «кандидата» с самим собой. На конечный результат это дополнительное сравнение никак не повлияет.

Кроме первого элемента на этапе инициализации «кандидатом» может быть назначен любой элемент массива. Это также приведёт к одному лишнему сравнению и не повлияет на конечный результат.

Следует понимать, что выбор начального значения «кандидата» среди элементов массива возможен только том случае, если эти элементы уже известны.

То есть, чтобы назначить «кандидата» во время инициализации цикла хотя бы один элемент массива должен быть уже известен.

Если до начала вычислений элементы массива не известны можно предложить другой способ выбора «кандидата». А именно «кандидатом» назначается любое значение, которое окажется заведомо «хуже» любого возможного значения элемента массива. Такой заведомо худший «кандидат» сразу же заменится первым же вычисленным элементом массива.

Слайд 357

09.11.2021 Например, при вычислении наибольшего среди положительных чисел, в качестве «кандидата»

09.11.2021

Например, при вычислении наибольшего среди положительных чисел, в качестве «кандидата» можно

взять нуль или любое отрицательное число. А при вычислении наименьшего среди отрицательных «кандидатом» может быть любое положительное число.
Слайд 358

09.11.2021 Задача поиска Общая постановка. В заданной совокупности элементов требуется найти

09.11.2021

Задача поиска

Общая постановка. В заданной совокупности элементов требуется найти элемент, обладающий

заданным набором свойств.

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

43

55

82

42

94

18

x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]

6

63

25

a

Ответ: В рассматриваемом массиве x элемента, совпадающего с заданным a =25 нет.

18

a

Ответ: В рассматриваемом массиве x есть элемент, совпадающий с заданным a=18. Его номер k=6.

Слайд 359

09.11.2021 a)Классический алгоритм Предлагается очевидный подход к решению задачи: последовательное сравнение

09.11.2021

a)Классический алгоритм

Предлагается очевидный подход к решению задачи: последовательное сравнение каждого очередного

элемента массива с заданным. Такой способ называется линейным поиском.

43

55

82

42

94

18

x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]

6

63

25

a

Ответ

Не совпадают

43

55

82

42

94

18

x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]

6

63

18

a

Ответ

Не совпадают

Не совпадают

Совпадают, k=6

Совпадают

Слайд 360

09.11.2021 25 x :array of integer; a, k, i,n :integer; flag:

09.11.2021

25

x :array of integer; a, k, i,n :integer; flag: boolean;

begin
read(n,x,a);

{ввод количества элементов в массиве, самих элементов массива и искомого элемента }

flag:=false; k:=0; {элемент не найден}

while (i<=N) and not flag do {Поиск продолжается}

if x[i]=a then begin {элемент найден} k:=i; flag:=true end
else {переход к следующему элементу} i:=i+1;

{вывод результатов flag и k}

i:=1; {поиск начинается с первого элемента}

x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]

a

Ответ

i

k

flag

n

43

55

82

42

94

18

6

63

8

1

false

0

((i=1) ≤ (n=8))∧ not flag ⇒ true

(x[i]=43) = (a=25) ⇒ false

2

((i=2) ≤ (n=8))∧ not flag ⇒ true

(x[i]=55) = (a=25) ⇒ false

3

((i=3) ≤ (n=8))∧ not flag ⇒ true

(x[i]=82) = (a=25) ⇒ false

4

((i=4) ≤ (n=8))∧ not flag ⇒ true

(x[i]=42) = (a=25) ⇒ false

5

((i=5) ≤ (n=8))∧ not flag ⇒ true

(x[i]=94) = (a=25) ⇒ false

6

((i=6) ≤ (n=8))∧ not flag ⇒ true

(x[i]=18) = (a=25) ⇒ false

7

((i=7) ≤ (n=8))∧ not flag ⇒ true

(x[i]=6) = (a=25) ⇒ false

8

((i=8) ≤ (n=8))∧ not flag ⇒ true

(x[i]=63) = (a=25) ⇒ false

9

((i=9) ≤ (n=8))∧ not flag ⇒ false

false

Слайд 361

09.11.2021 18 x :array of integer; a, k, i,n :integer; flag:

09.11.2021

18

x :array of integer; a, k, i,n :integer; flag: boolean;

begin
read(n,x,a);

{ввод количества элементов в массиве, самих элементов массива и искомого элемента }

flag:=false; k:=0; {элемент не найден}

while (i<=N) and not flag do {Поиск продолжается}

if x[i]=a then begin {элемент найден} k:=i; flag:=true end
else {переход к следующему элементу} i:=i+1;

{вывод результатов flag и k}

i:=1; {поиск начинается с первого элемента}

x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]

a

Ответ

i

k

flag

n

43

55

82

42

94

18

6

63

8

1

false

0

((i=1) ≤ (n=8))∧ not flag ⇒ true

(x[i]=43) = (a=18) ⇒ false

2

((i=2) ≤ (n=8))∧ not flag ⇒ true

(x[i]=55) = (a=18) ⇒ false

3

((i=3) ≤ (n=8))∧ not flag ⇒ true

(x[i]=82) = (a=18) ⇒ false

4

((i=4) ≤ (n=8))∧ not flag ⇒ true

(x[i]=42) = (a=18) ⇒ false

5

((i=5) ≤ (n=8))∧ not flag ⇒ true

(x[i]=94) = (a=18) ⇒ false

6

((i=6) ≤ (n=8))∧ not flag ⇒ true

(x[i]=18) = (a=18) ⇒ true

true

6

true

((i=6) ≤ (n=8))∧ not flag ⇒ false

Слайд 362

09.11.2021 i:=1; x[N+1]:=a; while x[i] a do i:=i+1 б)Быстрый алгоритм Идея

09.11.2021

i:=1; x[N+1]:=a; while x[i]<>a do i:=i+1

б)Быстрый алгоритм

Идея быстрого алгоритма состоит в

том, что выражения flag и x[i]=a эквивалентны. Следовательно, в условии в заголовке цикла вместо not flag можно использовать x[i]<>a, и отказаться от использования индикатора flag.

i:=1;
while (i<=N) and (x[i]<>a) do i:=i+1; {пока номер не превосходит последний и искомый элемент не найден перейти к следующему элементу}

в)Алгоритм с барьером

Следующее улучшение состоит в упрощении условия в заголовке цикла. Целевым является условие x[i]<>a, которое убрать или упростить невозможно. Следовательно, можно рассматривать только условие i<=N, обеспечивающие прекращение просмотра после исчерпания всех элементов цикла. Идея состоит в выставлении в конце массива «барьера». Для этого в массив добавляется N+1 элемент, значение которого приравнивается к искомому.

В алгоритмах линейного поиска максимальное количество операций, которое приходится проделать для определения результата поиска пропорционально N.

Слайд 363

09.11.2021 Дальнейшее улучшение алгоритма поиска, который можно было бы использовать для

09.11.2021

Дальнейшее улучшение алгоритма поиска, который можно было бы использовать для работы

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

г)Бинарный поиск.

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

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

Массив x называется отсортированным или упорядоченным, если для всех его элементов выполняется какое-либо одно из неравенств: x[i]x[i+1] или x[i]≥x[i+1], ∀ i=1,2, …, n–1, где n — количество элементов в массиве,

Если выполняется неравенство x[i]≤x[i+1], ∀ i=1,2,…,n-1, то массив называется упорядоченным (отсортированным) по возрастанию.

Если выполняется неравенство x[i]≥x[i+1], ∀ i=1,2,…,n-1, то массив называется упорядоченным (отсортированным) по убыванию.

Слайд 364

09.11.2021 Свойство упорядоченности у элементов массива обеспечивает возможность использования общематематического приёма

09.11.2021

Свойство упорядоченности у элементов массива обеспечивает возможность использования общематематического приёма деления

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

1. Выбирается один из элементов массива, который объявляется «средним» (то есть, находящимся примерно посередине списка элементов массива).

Существуют различные способы выбора такого элемента. В простейшем варианте «средний» элемент выбирается точно так же как вычисляется координата с середины отрезка [a, b]: c=(a+b)/2. Так как номера элементов могут быть только целыми, то номер M выбранного «средним» элемента массива, состоящего из n элементов, можно найти с помощью оператора M:=( n+1) div 2.

2. Выбранный элемент x[M] сравнивается с искомым a и если x[M]=a, то задача поиска считается решённой с положительным результатом и M есть номер найденного элемента.

43

55

82

42

94

18

x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]

6

63

43

a

М=4, x[4]=43

Слайд 365

09.11.2021 43 55 82 42 94 18 x[1] x[2] x[3] x[4]

09.11.2021

43

55

82

42

94

18

x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]

6

63

25

a

3. При

несовпадении элементов, опираясь на упорядоченность массива, в дальнейшем поиске можно не рассматривать одну из половин массива.

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

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

Действия пунктов 1–3 применяются к выбранной для продолжения поиска части массива, затем к половине этой части и т.д., до тех пор, пока искомый элемент не будет найден, или же область поиска не окажется пустой. В последнем случае задача поиска считается решённой с отрицательным результатом.

Слайд 366

09.11.2021 Итак, во время поиска приходится повторять следующие действия: 1) выбирать

09.11.2021

Итак, во время поиска приходится повторять следующие действия: 1) выбирать средний

элемент массива; 2) сравнивать его с искомым; 3) при необходимости уменьшать рассматриваемую часть массива в два раза выбором его правой или левой половины.

Так как начальный и конечный элементы рассматриваемой части массива при отбрасывании одной из половин массива будут изменяться, то для записи алгоритма следует использовать переменные, имеющие смысл номеров начального (левого) L и конечного (правого) R элементов массива. Поскольку в начале рассматривается весь массив, то L=1, а R=N. Номер среднего элемента M можно найти стандартным способом: M=(R+L) div 2.

43

55

82

42

94

18

x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]

6

63

25

a

1

8

L

R

M

4

В данном случае выбранный элемент массива не совпадает с искомым. Он больше его. Следовательно для поиска нужно выбрать левую половину таблицы.

Слайд 367

09.11.2021 Выбор левой половины массива означает, что его правая граница перемещается

09.11.2021

Выбор левой половины массива означает, что его правая граница перемещается к

среднему элементу: R:=M .

43

42

18

6

25

a

1

8

L

R

M

4

4

Но уже известно, что средний элемент не совпадает с искомым, следовательно, область поиска можно ёще больше сузить и считать правой границей элемент, стоящий перед средним: R:=M-1

42

18

6

25

a

1

8

L

R

M

4

3

x[1] x[2] x[3] x[4]

x[1] x[2] x[3]

Слайд 368

09.11.2021 42 18 6 25 a 1 8 L R M

09.11.2021

42

18

6

25

a

1

8

L

R

M

2

3

x[1] x[2] x[3]

Вновь находим средний элемент рассматриваемой части массива: M:=(L+R)

div 2, M=2.

Опять не совпадение среднего элемента с искомым. Так как он меньше искомого (x[2]=18,a=25), то для дальнейшего поиска следует выбрать правую половину массива, сместив левую границу L к среднему. Учитывая, предыдущее соображение относительно выбранного элемента, получим, что нужно взять следующий за средним L:=M+1

42

25

a

1

8

L

R

M

2

3

x[3]

3

Слайд 369

09.11.2021 Вновь находим средний элемент рассматриваемой части массива: M:=(L+R) div 2,

09.11.2021

Вновь находим средний элемент рассматриваемой части массива: M:=(L+R) div 2, M=3.

42

25

a

1

8

L

R

M

2

3

3

x[3]

3

И

вновь не совпадение среднего элемента с искомым. Так как выбранный элемент больше искомого (x[3]=42,a=25), то для дальнейшего поиска следует выбрать левую половину массива, сместив правую границу R к следующему за выбранным R:=M-1, R:=2.

25

a

L

R

2

3

M

3

Пришли к ситуации, когда дальнейший поиск невозможен, так как левая граница массива стала больше правой L>R ─ массив исчерпан.

Слайд 370

09.11.2021 {flag — показывает результат поиска.} Таким образом, повторяющиеся действия состоят

09.11.2021

{flag — показывает результат поиска.}

Таким образом, повторяющиеся действия состоят в выборе среднего

элемента массива M:=(L+R) div 2 и организации соответствующего рассмотренной ситуации ветвления. Повторять эти действия следует пока искомый элемент ещё не найден и при этом левая граница рассматриваемого участка массива не превосходит правую. Начальные значения L и R уже обсуждались.

L:=1; {левая граница отрезка поиска совпадает с 1}

R:=N; {правая граница отрезка поиска совпадает с N}


flag:=false;{элемент еще не найден}

while (L<=R) and not flag do

begin

M:=(L+R) div 2; {определение номера среднего элемента}

if x[M]=a then {элемент найден}
flag:=true

else {элемент не найден}
if x[M] L:=M+1

else {перенос правой границы отрезка поиска}
R:=M-1

end;

09.11.2021 Эффективность алгоритмов Нами были построены различные алгоритмы решения одной и

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

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

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

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

09.11.2021 Временная и объёмная эффективности довольно сложным образом связаны и с

алгоритмом и друг с другом.

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

Пусть DA— множество допустимых для данного алгоритма A наборов исходных данных. Конкретный набор исходных данных d∈DA, для которого осуществляется фактическое исполнение алгоритма, принято для краткости называть входом алгоритма. Например, входом алгоритма поиска является набор входных данных d= {n → 6 ,x → (4, 9, 2, 9, 0, 3)}.

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

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

09.11.2021 Это даёт возможность не учитывать различную скорость работы исполнителей. Однако

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

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

К отдельным действиям алгоритма при таком подсчёте относятся: арифметические операции (+, –, ×, /), операции сравнения (=, ≠, >, < , ≤, ≥), логические операции (∧, ∨, ¬ ), а также присваивание и некоторые другие действия. А вот действия, связанные с организацией обмена (ввода или вывода данных), как правило, не учитываются.

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

09.11.2021 В связи с тем, что временная эффективность алгоритма и количество

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

Трудоёмкостью алгоритма A называется характеристика, численно равная количеству действий, которые потребуется выполнить для получения результа во время исполнения алгоритма A на некотором его входе d∈DA.

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

Поскольку на различных входах d∈DA трудоёмкость одного и того же алгоритма A различна, естественно ввести в рассмотрение функцию трудоёмкости, отражающую эту зависимость.

Функция трудоёмкости TA(d) представляет собой отображение множества допустимых наборов данных DA на множество целых положительных чисел N, которое для каждого конкретного входа d∈DA определяет трудоёмкость алгоритма .

09.11.2021 Таким образом, можно утверждать, что вход алгоритма d является аргументом,

сам алгоритм A определяет вид функциональной зависимости для функции трудоёмкости TA(d).

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

S=0.0; i=1; while (i<=n) { a=1.0/(i*i+1.0); S=+a; i++; }

Этот фрагмент содержит:

два действия присваивания на этапе инициализации (S=0.0 и i=1);
одну операцию сравнения, входящую в условие повторения i<=n;
три арифметические операции и присваивание в операторе a=1.0/(i*i+1.0);
одну арифметическую операцию и присваивание в операторе S=S+a;
одну арифметическую операцию и присваивание в операторе i=i+1 (i++).

Суммарное количество перечисленных в пунктах 1–5 действий равно одиннадцати.

09.11.2021 Но девять действий пунктов 2–5 (определение значения условия повторения и

входящие в тело цикла) выполняются на каждой итерации цикла, а количество итераций равно n. Получаем, что функция трудоёмкости алгоритма равна TA(d)=9n+2.

В рассматриваемом случае любой вход алгоритма состоит из одной переменной n, значение которой определяет количество слагаемых в сумме. Естественно, что она же и оказалась аргументом функции трудоёмкости TA(d)=TA(n)=9n+2 .

Объёмная эффективность

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

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

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

09.11.2021 Следовательно, совершенно некорректно говорить об общей эффективности алгоритма, учитывая при

только временные требования.

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

Функция объёма памяти VA(d) представляет собой отображение множества допустимых наборов данных DA на множество целых положительных чисел N, которое для каждого конкретного входа d∈DA определяет объём памяти (оперативной и внешней), необходимой для выполнения алгоритма A.

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

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

09.11.2021 Обычно как для функции трудоёмкости, так и для функции объёма

09.11.2021 Его фунция трудоёмкости имеет вид TA(d)=TA(n)=6n+2, зависит только от одной

величины n, которая определяет размерность векторов. При этом сами компоненты векторов на значение функции трудоёмкости никакого влияния не оказывают.

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

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

VA(d)=VA(n)=8n+16.

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

09.11.2021 Так, в алгоритме вычисления суммы размер входа определяет количество слагаемых,

09.11.2021 В этом ветвлении неравенство x[i]>max удовлетворяется для одних элементов массива

не удовлетворяется для других. Следовательно, сколько именно раз окажется выполненным оператор max=x[i] существенно зависит от исходного массива x.

Получается, что в этом алгоритме невозможно даже определить вид обычной функции трудоёмкости. Но зато очень просто определить лучший и худший случаи. А именно: в лучшем случае оператор max=x[i] не выполнится ни разу, а в худшем случае этот оператор будет выполняться каждый раз, для каждого очередного элемента массива.

Лучший случай возникает, когда первый элемент массива оказывается наибольшим. Тогда в результате первого присваивания мax=x[1] значение переменной max оказывается равным значению этого первого элемента массива и неравенство x[i]>max не удовлетворяется ни одним из последующих элементов массива.

В этом случае на каждой итерации выполняется всего четыре действия i<=n x[i]>max и i++, следовательно, функция трудоёмкости лучшего случая имеет вид: TAν(n)=4n+2.

09.11.2021 Худший случай возникает, когда каждый следущий элемент массива оказывается больше

09.11.2021 Опираясь на проведённый для алгоритмов поиска анализ, мы можем уточнить

без точного определения понятия лучшего и худшего случаев функции трудоёмкости и функции объёма памяти.

Чтобы сформулировать такое определение найдём, например, трудоёмкость худшего случая для классического алгоритма, если на его вход подается массив с рамерностью, скажем, n=10. По второй строке таблицы находим, что трудоёмкость классического алгоритма в этом случае равна 63.

Теперь найдем трудоёмкость худшего случая алгоритма с барьером для массива из 20 элементов (то есть для n=20). По этой же таблице получаем, что трудоёмкость в этом случае равна 84. Другими словами, получается, что не для любых входов алгоритм с барьером лучше, чем классический.

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

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

09.11.2021 Кратные (вложенные) циклы Структура алгоритма, в котором внутри цикла находится

называется кратным или вложенным циклом. Глубина вложения циклов может быть любой.

Пример: задача сложения матриц.

Пусть имеются две матрицы An×m и Bn×m. Требуется найти их сумму.

Во-первых, из определения суммы матриц следует, что суммировать можно только матрицы одинаковой размерности, то есть матрицы, состоящие из одинакового количества строк n и столбцов m. Следовательно, исходными данными задачи являются n ─ общее для A и B количество строк, и m ─ общее количество столбцов. Элементы матриц A и B могут быть целого или вещественного типов. Для определенности будем считать, что эти элементы относятся к вещественному типу.

Во-вторых, из того же определения следует, что сумма матриц A и B есть матрица C той же самой размерности Cn×m, элементы которой cij определяются как сумма соответствующих элементов матриц слагаемых: aij и bij

09.11.2021 Задача сортировки элементов массива Сортировкой в информатике называется переупорядочение рассматриваемых

некоторому признаку или системе признаков. Например, упорядочение слов по алфавиту называется лексикографической сортировкой.

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

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

Более подробно. На первом шаге ищется минимальный элемент во всем рассматриваемом массиве.

x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]

43

55

82

42

94

18

6

63

В данном случае это x[7]=6. Чтобы массив был упорядоченным этот элемент должен стоять на первом месте. Поэтому, совершим обмен значениями между найденным и начальным элементом массива.

6

43

09.11.2021 Эта закономерность дает возможность подсчитать общее количество итераций вложенного цикла

09.11.2021 Итерация и рекурсия В математике для решения подавляющего большинства задач

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

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

С точки зрения структуры алгоритма итерация представляет собой циклический алгоритм

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

09.11.2021 Основные структуры данных В информатике используется большое количество различных структур

09.11.2021 Структуры, аналогичные строкам таблицы, называют записями. Компоненты записей принято называть

09.11.2021 Множество Во многих математических и информационных задачах возникает необходимость в

09.11.2021 Модели и моделирование В любой научной дисциплине часто приходится использовать

понятия модель и система. Эти понятия постоянно встречаются и в повседневной жизни человека. Например:

большая часть детских игрушек — машинки, куклы, кубики, всевозможные конструкторы и т.д. являются моделями реальных объектов;
разнообразные тренажеры для водителей автомобилей, летчиков и космонавтов также представляют собой модели реальных автомобилей, самолётов и космических аппаратов;
к моделям относятся и манекены в магазинах, и макеты зданий и географические карты, и самые разные чертежи;
картины художников, скульптуры, памятники также можно считать моделями природных пейзажей, животных, людей, а литературные произведения — моделями различных жизненных ситуации;
многие простые понятия, которыми оперируют люди, такие как, например, точка, прямая, окружность, куб и т.д. являются идеализацией реальных объектов, их моделями;
моделями являются представления человека о строении атома, о происхождении различных видов растений и животных, да и самой жизни на Земле;
исторические представления — это модели событий прошлого.

09.11.2021 Важнейшая роль понятия «модель» является, по-видимому, следствием самого способа мышления

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

Следовательно, на понятии «модель» базируется по существу любой теоретический или экспериментальный метод научного и технического исследования, в котором вместо реальных объектов используются их идеальные или материальные образы.

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

09.11.2021 Объект (от лат. objectum — предмет) — существующий в реальной

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

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

Любое изучение или использование предметной области, так или иначе, связано с формированием её упрощенного образа в сознании человека, то есть её модели.

Модель — это некоторый заместитель оригинала, с помощью которого осуществляется изучение важных для решаемой задачи свойств оригинала. При этом термин «модель» используется для обозначения устройства-аналога, каким-либо образом воспроизводящего реальный объект, или же его чертежа, схемы, макета, словесного или математического описания реального объекта

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

09.11.2021 Модель считается адекватной, если она верно отображает важнейшие с точки

решаемой задачи особенности реальных объектов или явлений.

Отвлечение от несущественных деталей принято называть абстрагированием. При абстрагировании осуществляется определенное огрубление реальной действительности. Абстрагирование является одним из важнейших инструментов при построении модели какой-либо предметной области.

Моделью (от лат. modulus — образец) называется материальный или идеальный образ реального объекта или некоторой совокупности объектов, который при определенных обстоятельствах используется в качестве заменителя или представителя исходных объектов. Это образ, полученный с помощью концентрации внимания только на некоторых важнейших с точки зрения решаемой задачи свойствах рассматриваемых объектов и отбрасыванием всех их несущественных свойств. Реальный объект, для которого построена модель, называется оригиналом или прототипом модели. Моделированием называется процесс построения и использования модели.

09.11.2021 Наличие адекватной модели позволяет спрогнозировать свойства и поведение реального объекта

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

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

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

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

09.11.2021 В таких случаях формируется более простая модель, постановка задачи упрощается

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

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

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

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

Кроме того, точность модели должна быть согласована с желательной точностью результатов, которые должны соответствовать реальным потребностям практики. Скажем, бессмысленно стремиться составлять прогноз температуры воздуха на следующий день с точностью 0,1 градуса, достаточно указать прогнозное значение с разбросом в 2–3 градуса.

09.11.2021 Одним из самых важных свойств модели является её потенциальность (от

potentia — мощь, сила) или предсказательность, под которой понимается возможность получения новых знаний о реальном объекте на основании изучения модели, а также возможность составления прогноза поведения объекта в тех или иных условиях.

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

Французский учёный У. Леверье на основании математических расчётов, выполненных с использованием закона всемирного тяготения и экспериментально полученных данных о движении уже известной планеты Уран, предсказал положение ещё неизвестной планеты Солнечной системы Нептун.

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

09.11.2021 Моделирование это всегда упрощение. Это замена сложного более простым. Получается

другой, более простой задачи. Это решение можно трактовать как некоторое приближенное, неточное решение исходной задачи. Но это решение может быть достаточно хорошим приближением к искомому и давать возможность строить прогноз, предсказывать поведение изучаемой системы с необходимой степенью точностью.
Модель есть упрощение некоторого оригинала и без оригинала не может быть построена.
Моделирование является единственным способом описания и изучения реального мира.
Моделирование это обязательный, необходимый этап решения любой задачи.
Одна и та же проблемная область может иметь несколько различных моделей, описывающих ее с различных точек зрения. Разные задачи изучающие одну и ту же проблемную область могут потребовать построения различных моделей.
При наличии нескольких моделей и возможности сопоставления их с оригиналом обычно считается, что та модель лучше, которая более точно соответствует оригиналу, более адекватна реальности.

09.11.2021 Классификация моделей Классификацией называется распределение рассматриваемых объектов по группам в

09.11.2021 Информационные модели Информационная модель представляет собой нематериальный, воображаемый образ объекта,

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

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

Математические модели

Математическая модель (в узком смысле, с точки зрения математики) ─ это одно или несколько множеств элементов произвольной природы, на которых определено конечное множество отношений.

Структурные модели

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

09.11.2021 Системы Системой называется сложная структура, состоящая из взаимодействующих компонентов, каждый

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

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

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

Изучение системы осуществляется с помощью построения ее модели. Модель сложного объекта также будет сложной структурой, это значит, что сама модель может быть системой.

09.11.2021 Выделение систем связано с постановкой и решением следующих задач: Изучение

09.11.2021 Статические и динамические системы Система называется статической если множество компонентов,

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

Замкнутые и незамкнутые системы

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

09.11.2021 Одно и то же дискретное сообщение можно представить в различных

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

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

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

Теория кодирования предлагает конкретные, готовые варианты построения кодов и определяет условия их применимости.

Тема 4. Введение в теорию информации и теорию кодирования

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

09.11.2021 Для решения многих практических задач информатики, например, для определения места

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

Количество информации

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

Количество информации представляет собой количественную характеристику сообщений, численную меру, связанную с объёмом носителя (жёсткого или оптического диска, «флешки» и т.д.), необходимого для хранения сообщения, требуемым временем передачи сообщения между источником и приёмником и другими параметрами хранения, передачи и обработки сообщений.

09.11.2021 Эта характеристика не имеет ничего общего с измерением информации, понимаемой

смысл сообщения. Более правильным было бы название количество сообщения, но в научной терминологии закрепилось исторически сложившееся название «количество информации».

Существует два основных способа определения количества информации, один из которых называется объемным, а другой, рассматриваемый в этом и последующих разделах, называется вероятностным. Более простой объёмный подход чаще всего применяется в практических приложениях информатики, а вероятностный — в теоретических её разделах.

Вероятностный подход, предложенный К. Шенноном в 1948 году, базируется на следующих исходных представлениях.

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

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

09.11.2021 Теперь представим, что получено сообщение, содержащее более полную информацию —

дата, время прибытия и номер поезда. В этом случае неопределённость ситуации значительно меньше. Меньше и количество возможных вариантов при выборе действий — остается выбрать только один из вагонов указанного поезда.

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

Имеющуюся в сообщении неопределённость, недостающую информацию принято называть информационной энтропией или просто энтропией.

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

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

09.11.2021 Проведённые выше качественные рассуждения представляют собой близкую к существу дела,

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

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

Перед приёмом сообщения естественно считать, что существует полная неопределенность в том какие знаки и в каком порядке поступят. Это означает, что энтропия сообщения равна некоторому исходному значению.

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

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

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

09.11.2021 Всё количество полученной информации оказывается равным исходному значению энтропии только

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

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

Вероятность

Результаты таких наблюдений, испытаний или опытов принято называть событиями (или исходами) и обозначать большими латинскими буквами A, B, C и т.д.

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

Все события можно разделить на две группы — детерминированные и случайные.

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

09.11.2021 Подбрасывая монету, несложно убедиться в том, что результатом может быть

либо «герба», либо «решки».

Каждый такой результат и есть элементарный исход. Видно, что любой из исходов исключает другой, и оба они не сводятся к более простым. Пространством элементарных исходов этого опыта является множество {«выпал герб», «выпала решка»}, а общее количество исходов равно двум.

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

Если пространство элементарных исходов состоит только из одного элемента, то это детерминированное событие.

Пусть опыт заключается в бросании игрального кубика, тогда выпадение одного очка, двух очков, трёх очков и т.д. — это элементарные исходы, а множество {1, 2, 3, 4, 5, 6} — представляет собой пространство элементарных исходов опыта с количеством элементов равным шести.

Вытаскивание наугад игральной карты из колоды в 36 карт имеет пространство из 36 элементарных исходов вида {6♠, 7♠, …,T♠, 6♣, 7♣, …,T♣, 6♦, 7♦, …,T♦, 6♥, 7♥, …,T♥}.

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

09.11.2021 Дело в том, что, например, исход «вынут белый шар» не

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

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

Например: событие «выпадение чётного количества очков» при бросании игрального кубика происходит при наступлении любого из трёх элементарных исходов: выпадение двух, четырёх или шести очков.

Событие «выбор карты красной масти» происходит в результате наступления любого из 18 элементарных исходов: {6♦, 7♦, …,T♦, 6♥, 7♥, …,T♥}, а «выбор чёрной восьмерки» — только в результате двух исходов {8♠, 8♣}.

Событие «вынут белый шар» происходит при выборе любого из двух, имеющихся в ящике белых шаров.

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

09.11.2021 Событие Z считается невероятным (невозможным), если его наступление не происходит

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

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

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

Суммой двух событий A и В считается событие C=A ∨ B, состоящее в том, что произошло либо событие A, либо событие B, либо и то и другое. Произведением двух событий A и B считается событие C=A ∧ B, состоящее в том, что произошли оба события.

Часто приходится рассматривать два или более случайных события, которые происходят одновременно или последовательно друг за другом. Например, можно бросать два кубика одновременно или рассматривать два последовательных бросания одного. Можно изучать последовательные вытаскивания карт из колоды, цветных шаров из ящика, выстрелы орудия, приём последовательных знаков дискретного сообщения и т.д.

09.11.2021 Анализируя и сравнивая между собой различные опыты, можно заметить, что

09.11.2021 Пусть вероятность перегорания лампочки при её включении равна p=1/1000, то

09.11.2021 Количество информации и алфавит Приём дискретного сообщения можно рассматривать как

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

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

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

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

Если известно, что все знаки алфавита имеют равную вероятность появиться в сообщении, то определить количество информации, которое несёт с собой каждый знак любого сообщения можно по формуле Хартли

09.11.2021 Разумеется, из этих результатов не следует делать вывод о том,

русский язык более богат, чем английский, так как такой расчёт не имеет никакого отношения к смысловой стороне текстов.

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

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

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

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

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

09.11.2021 I0,I1,I2,… ─ убывающая последовательность. Подобные рассуждения можно распространить не только

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

С практической точки зрения вычисление количества информации с учётом связей между отдельными знаками естественных алфавитов, то есть вычисление значений I2, I3, I4 … и т. д. вызывает значительные сложности, поэтому, как правило, ограничиваются расчётом I0(A) или I1(A), для которых появление каждого следующего знака происходит независимо от всех предшествующих.

Итак, будем считать, что каждый знак дискретного сообщения несёт с собой количество информации I0(A) или I1(A), которое полностью определяется только свойствами используемого алфавита A.

Общее количество информации IS в сообщении S равно сумме количеств информации от всех его знаков: IS=L*I(A) , где L — количество знаков в сообщении, а сомножитель I(A) равен I0(A) или I1(A) в зависимости от выбранного способа подсчёта.

09.11.2021 Количество информации в сообщении численно равно минимально необходимому количеству двоичных

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

Этот подход позволяет рассматривать понятие «информации» (точнее — сообщения) только с количественной стороны, безотносительно к её смысловому содержанию и ценности для получателя.

При таком подходе одна страница печатного текста содержит одно и то же количество информации, которое определяется только количеством знаков на странице и её оформлением, вне зависимости от того, что на этой странице напечатано: бессмысленный, случайный набор знаков, отрывок из романа «Война и мир» или же доказательство математической теоремы.

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

09.11.2021 Правило, описывающее соответствие между знаками первичного алфавита и знаками или

вторичного называется кодом.

Кодирование сообщений

Исходный алфавит A1, в котором записано сообщение, называется первичным алфавитом. Целевой алфавит A2, в который преобразуется сообщение называется вторичным алфавитом.

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

Дискретное сообщение исходя из технических соображений или из особенностей органов чувств человека, участвующих в приеме или передаче сообщений, разбивают на конечные подпоследовательности знаков, которые принято называть словами. Количество знаков в слове называется длиной слова. Если все слова языка имеют одно и то же количество знаков, то такие слова называются n-разрядными (n ─ длина слова)

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

09.11.2021 Кодированием называется последовательность действий по переводу сообщения из первичного во

алфавита.

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

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

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

Кодером называется устройство, обеспечивающее выполнение операции кодирования. Декодером называется устройство, обеспечивающее выполнение операции декодирования.

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

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

09.11.2021 Задачи эффективного и оптимального кодирования часто решаются с помощью сжатия


Различают два вида сжатия — без потери информации и с потерей информации.

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

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

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

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

09.11.2021 Отношение L2/L1 имеет смысл количества знаков вторичного алфавита, которое требуется

кодирования одного знака первичного алфавита в конкретном рассматриваемом сообщении.

В обсуждавшемся примере L2/L1=23/5=4,6, то есть на один знак исходного алфавита потребовалось 4,6 двоичных знака.

Значение L2/L1 существенно зависит от кодируемого сообщения. Например, для сообщения «МАМА» и результата кодирования «10101 1110 10101 1110» получим L1=4, L2=18 и L2/L1 = 18/4=4,5.

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

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

09.11.2021 Теорема Шеннона о кодировании при отсутствии помех При отсутствии помех

09.11.2021 из сравнения двух используемых вариантов расчёта I(A) вытекает, что для

09.11.2021 В своей теореме К. Шеннон только доказал теоретическую возможность построения

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

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

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

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