Основы программирования


Программа. Этапы разработки программы. Спецификация. Разработка алгоритма. Кодирование. Отладка. Тестирование. Создание справочной системы. Создание установочного диска. Алгоритм и программа. Компиляция. Язык программирования Delphi. Тип данных. Переменная. Константы. Инструкция присваивания. Выражение. Тип выражения. Выполнение инструкции присваивания. Стандартные функции. Математические функции. Функции преобразования. Ввод данных. Вывод результатов. Процедуры и функции. Структура процедуры. Структура функции. Запись инструкций программы. Стиль программирования

Программа

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

Этапы разработки программы

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

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

1. Спецификация (определение, формулирование требований к программе).

2. Разработка алгоритма.

3. Кодирование (запись алгоритма на языке программирования).

4. Отладка.

5. Тестирование.

6. Создание справочной системы.

7. Создание установочного диска (CD-ROM).

Спецификация

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

Разработка алгоритма

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



Кодирование

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

Отладка - это процесс поиска и устранения ошибок. Ошибки в программе разделяют на две группы: синтаксические (ошибки в тексте) и алгоритмические. Синтаксические ошибки - наиболее легко устраняемые. Алгоритмические ошибки обнаружить труднее. Этап отладки можно считать законченным, если программа правильно работает на одном-двух наборах входных данных.

Тестирование

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

Создание справочной системы

Если разработчик предполагает, что программой будут пользоваться другие, то он обязательно должен создать справочную систему и обеспечить пользователю удобный доступ к справочной информации во время работы с программой. В современных программах справочная информация представляется в форме СНМ- или HLP-файлов. Помимо справочной информации, доступ к которой осуществляется из программы во время ее работы, в состав справочной системы включают инструкцию по установке (инсталляции) программы, которую оформляют в виде Readme-файла в одном из форматов: TXT, DOC или НТМ.

Создание установочного диска

Установочный диск или CD-ROM создаются для того, чтобы пользователь мог самостоятельно, без помощи разработчика, установить программу на свой компьютер. Обычно помимо самой программы на установочном диске находятся файлы справочной информации и инструкция по установке программы (Readme-файл). Следует понимать, что современные программы, в том числе разработанные в Delphi, в большинстве случаев (за исключением самых простых программ) не могут быть установлены на компьютер пользователя путем простого копирования, так как для своей работы требуют специальных библиотек и компонентов, которых может и не быть у конкретного пользователя. Поэтому установку программы на компьютер пользователя должна выполнять специальная программа, которая помещается на установочный диск. Как правило, установочная программа создает отдельную папку для устанавливаемой программы, копирует в нее необходимые файлы и, если надо, выполняет настройку операционной системы путем внесения дополнений и изменений в реестр.

Алгоритм и программа

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

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

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

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

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


Компиляция

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

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

1. Проверяет текст исходной программы на отсутствие синтаксических ошибок.

2. Создает (генерирует) исполняемую программу - машинный код.

Рис. 2. Схема работы компилятора

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

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

Язык программирования Delphi

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

Каждая инструкция состоит из идентификаторов. Идентификатор может обозначать:

· Инструкцию языка(:=, if, while, for);

· переменную;

· константу (целое или дробное число);

· арифметическую (+, -,*,/) или логическую (and, or, not) операцию;

· подпрограмму (процедуру или функцию);

· отмечать начало (procedure, function) или конец (end) подпрограммы ИЛИ блока (begin, end).

Тип данных

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

Целый тип

Язык Delphi поддерживает семь целых типов данных: shortint, smailint, Longint, Int64, Byte, word и Longword, описание которых приведено в табл. 1.


Таблица 1. Целые типы

Тип Диапазон Формат
Shortint -128-127 8 битов
Smallint -32 768 - 32 767 16 битов
Longint -2 147 483 648 - 2 147 483 647 32 бита
Int64 -2 63 - 2 63 - 1 64 бита
Byte 0-255 8 битов, беззнаковый
Word 0-65 535 16 битов, беззнаковый
Longword 0 - 4 294 967 295 32 бита, беззнаковый

Object Pascal поддерживает и наиболее универсальный целый тип - Integer, который Эквивалентен Longint.

Вещественный тип

Язык Delphi поддерживает шесть вещественных типов: Real48, single, Double, Extended, comp, Currency. Типы различаются между собой диапазоном допустимых значений, количеством значащих цифр и количеством байтов, необходимых для хранения данных в памяти компьютера (табл. 2).

Таблица 2. Вещественные (дробные) типы

Тип Диапазон Значащих цифр Байтов
Real48 2.9x 10 -39 -1.7x10 38 11-12
Single 1.5 x 10 -45 -3.4х 10 38 7-8
Double 5.0x10- 324 -1.7x10 308 15-16
Extended 3.6x10- 4951 -1.1 х10 4932 19-20
Comp 2 63 +1 - 2 63 -1 19-20
Currency -922 337 203 685 477.5808 --922 337 203 685 477.5807 19-20

Язык Delphi поддерживает и наиболее универсальный вещественный тип - Real, который эквивалентен Double.


Символьный тип

Язык Delphi поддерживает два символьных типа: Ansichar и Widechar:

· тип Ansichar - это символы в кодировке ANSI, которым соответствуют числа в диапазоне от 0 до 255;

· тип widechar - это символы в кодировке Unicode, им соответствуют числа от 0 до 65 535.

Object Pascal поддерживает и наиболее универсальный символьный тип - Char, который эквивалентен Ansichar.

Строковый тип

Язык Delphi поддерживает три строковых типа: shortstring, Longstring

· тип shortstring представляет собой статически размещаемые в памяти компьютера строки длиной от 0 до 255 символов;

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

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

В языке Delphi для обозначения строкового типа допускается использование идентификатора string. Тип string эквивалентен типу shortstring.

Логический тип

Логическая величина может принимать одно из двух значений True (истина) или False (ложь). В языке Delphi логические величины относят к типу Boolean.


Переменная

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

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

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

Следует обратить внимание на то, что компилятор языка Delphi не различает прописные и строчные буквы в именах переменных, поэтому имена SUMMA, Summa и summa обозначают одну и ту же переменную.

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

ах2 + bх + с = 0

вполне логично присвоить имена а, b, с, x1 и х2. Другой пример. Если в программе есть переменные, предназначенные для хранения суммы покупки и величины скидки, то этим переменным можно присвоить имена TotalSumm и Discount или ObSumma и Skidka.

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

В общем виде инструкция объявления переменной выглядит так:

· имя - имя переменной;

· тип - тип данных, для хранения которых предназначена переменная.

а: Real; b: Real; i: Integer;

В приведенных примерах объявлены две переменные типа real и одна переменная типа integer.

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

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

а,b,с: Real; x1,x2: Real;

Константы

В языке Delphi существует два вида констант: обычные и именованные.

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

Числовые константы

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

Ниже приведены примеры числовых констант:

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

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

Таблица 3. Примеры записи дробных чисел

Строковые и символьные константы

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

"Язык программирования Delphi 1 "Delphi 6"

Здесь следует обратить внимание на константу " 2.4". Это именно символьная константа, т. е. строка символов, которая изображает число "две целые четыре десятых", а не число 2,4.

Логические константы

Логическое высказывание (выражение) может быть либо истинно, либо ложно. Истине соответствует константа True, значению "ложь" - константа False.

Именованная константа

Именованная константа - это имя (идентификатор), которое в программе используется вместо самой константы.

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

константа = значение;

· константа - имя константы;

· значение - значение константы.

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

Урок математики

«Программа действий. Алгоритм».

Цели: 1)обучающая

Сформировать первоначальные представления о понятиях «блок-схема», «программа

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

2)развивающая

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

3)воспитывающая

Формировать коммуникативные навыки (воспитание товарищества, взаимопомощи).

1. Самоопределение к деятельности (организационный момент)

2. Актуализация знаний.

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

(учились находить операцию и результат операции; учились находить операцию обратную данной)

Все эти знания могут нам сегодня пригодиться, чтобы помочь Ивану Царевичу победить злого Кощея и освободить Василису Премудрую.

Хотите со мной отправиться в сказку про «Кощея Бессмертного»?

Ну что ж, в путь! (слайд №1)

Ребята, многие наверное из вас читали эту сказку, кто помнит, где спрятана смерть Кощея Бессмертного?

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

Какие же препятствия нужно преодолеть на пути? Кто сможет это воспроизвести?

добраться достать догнать сбить достать победить

До дуба cундук зайца утку из моря Кощея

Молодцы! Я думаю, что Иван Царевич поблагодарил бы вас.

Ребята, а как нам показать, что эти действия идут именно в такой последовательности? Какой значок нам придумать? ()

Т.о. мы получили схему действий.

А как бы вы назвали полученную схему действий?

(план, маршрут, путь, путешествие,….)

Вывод: В математике такую схему называют блок-схемой.

В каждом её блоке операция, которую нужно выполнить.

Это наша программа действий.

Поэтому как вы думаете, какова тема нашего урока?

3. «Открытие» детьми нового знания.

Тема: «Программа действий. Алгоритм» (слайд №2)

А чему мы будем учиться сегодня на уроке? Что нового узнаем?

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

1) -Какая же 1-я операция в нашей программе? (добраться до дуба) (слайд №3)

Ребята, а давайте посмотрим простой ли это дуб? А дуб-то не простой, а с заданием. И только выполнив его, мы сможем добраться до дуба.

Какое же задание нам надо выполнить?

(из 45 вычесть 14, т.е. заполнить пустое окошечко)

А кто думает иначе? Результат операции равен 31.

2) –Итак, до дуба мы добрались! Молодцы!

А сундук-то тоже необычный, а математический (слайд № 5)

Ребята, а как нам здесь-то быть?

Вопрос стоит на первом месте, а результат известен? Что нам делать?

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

3) -Молодцы! Научились выполнять обратную операцию, достали сундук!

Открываем его, а из него выскакивает заяц и убегает (слайд № 6)

Попробуем его догнать. Поэтому на вопросы отвечайте быстро (слайд № 7)

Сосчитайте от 327 до 332, хором 1,2 группы.

А теперь в обратном порядке две другие группы.

Какое круглое число встретилось вам при счёте? (330)

Даёте характеристику этому числу, выложите графическую модель.

(330 – трёхзначное, т.к. в записи этого числа 3 знака, чётное, т.к. оканчивается на 0, соседи этого числа 329 и 331, сумма цифр числа равна 6, его можно представить в виде суммы разрядных слагаемых 330= 300+30, т. д…..)

(1 ученик выкладывает графическую модель этого числа на наборном полотне)

4) -Поймали мы зайца, но из него вылетела утка (слайд № 8)

Кто быстрее собьёт её из ружья?

Давайте, выразим 330см в различных единицах длины (слайд № 9)

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

330см=…м…см 330см=…дм 330см=…м…дм

Самыми быстрыми и меткими у нас оказались …

Большое спасибо за работу, но наша-то конечная цель добраться до Василисы Премудрой, давайте пойдём дальше.

5) -Молодцы! Утку, мы сбили, а яйцо упало в море (слайд № 10)

Чтобы достать его нужно подобрать подходящую схему и решить задачу (слайд № 11)

Задача: Иван Царевич проплыл по морю в первый день 12км. А во второй на 4км больше. Сколько километров проплыл Иван Царевич во второй день?

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

Решите задачу самостоятельно на индивидуальных досках.

Иван Царевич предлагает свой вариант ответа. Проверьте, пожалуйста (слайд № 12)

12+4=16(км)

Поднимите руку, у кого из вас такое же решение, как и у Иван Царевича. Кто не согласен,

поспорьте с ним.

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

Как ответить на вопрос задачи?

6)- Вот и достали яйцо, осталось сломать иглу и Кощей будет побеждён (слайд № 13)

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

Если вы их выложите правильно, в нужном порядке, то Кощей будет побеждён.

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

3. Постановка проблемы.

Какие операции надо выполнить, чтобы найти Василису Премудрую? (слайд № 14)

(-скакать на коне по лесу;

Плыть по морю на корабле;

Лететь на ковре самолёте через горы)

Что мы с вами составляем?

(план, маршрут, программу действий,…)

1-я группа пообщайтесь с классом, какую программу действий составили вы? (затем слово 2-й, 3-й, 4-й группам)

Почему в начале урока мы быстро составили программу действий, а сейчас не можем?

Почему возникли разные мнения? (мы не знаем порядка действий, не знаем, что за чем идёт)

Вывод: - В математике говорят, мы не знаем алгоритма (слайд № 15)

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

А важно ли уметь её составлять? (да)

Для чего? (чтобы правильно выполнять действия, прийти к намеченной цели,…)

А часто ли в жизни нам приходится сталкиваться с алгоритмом?

А как нам узнать, правильное ли решение принял Иван Царевич, смогли ли мы ему помочь?

(достаю яйцо, раскрываю его, достаю 4 бумажки, на которых написано:

М Л Г М Л Г МОРЕ ЛЕС ГОРЫ МОРЕ ЛЕС ГОРЫ (слайд № 16)

Сейчас вы получите зашифрованный путь Ивана Царевича к Василисе Премудрой.

Разгадайте этот путь.

Что бы это значило? И выложите у себя на столах. (По заданному алгоритму дети

выкладывают)

(1 представитель от группы выступает)

А кто из вас изначально так составил?

Ребята, а кто составил по другому, это что ваша вина, вы что не хотели спасти Василису Премудрую?

А почему вы не смогли это сделать? (Не знали порядок действий. Не знали алгоритма).

Вывод: - Значит, что мы с вами сейчас составили? (алгоритм) (слайд №17)

А как по - другому можно сказать? (программа действий)

-Какими способами, т.е. чем может быть записана программа действий?

(буквами, словами. Картинками, блок-схемой,…) (слайд № 18)

-Мы свою программу выполнили?

-Вот и уничтожили злого Кощея. Молодцы! (слайд № 19)

-А почему мы смогли её выполнить? (потому что знали алгоритм)

5. Первичное закрепление.

1) -Люди, которые составляют эти программы, т.е. алгоритмы называются программистами.

Вы хотите ими сегодня побыть?

Но так как мы ещё маленькие попробуем составить программу действий с помощью картинок. (4 набора – режим дня)

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

(Дети выкладывают программу на наборное полотно).

Вывод: Каждый организованный человек живёт по режиму дня.

Но как вы поняли мы с вами составили только фрагмент из вашего режима.

Что, вы заметили?

- А можно ли какие-то этапы алгоритма, т.е. операции поменять местами?

Если мы поменяем, что-то от этого изменится?

Вывод: Те операции, которые можно поменять местами наз. перестановочными.

(меняю 2 любых операции)

А эти операции можно поменять местами? (нет)

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

(неперестановочными)

Вывод: Итак, в программе операции могут быть перестановочны, а могут нет.

Какие ещё операции в этой программе могут быть перестановочны?

2)Работа в группах.

1 группа : Сделай бутерброд.

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

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

Алгоритм «Сделай бутерброд» (предполагаемый вариант)

1) Возьми хлеб.

2) Возьми нож.

3) Отрежь кусок хлеба.

4) Возьми масло.

5) Намажь маслом кусок.

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

2 группа: «Закопай червонцы».

(Помоги Буратино правильно закопать золотые червонцы на Поле чудес)

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

Положи деньги в ямку. Скажи: «Крекс, фекс, пекс!» Полей водой. Выкопай ямку. Засыпь ямку землёй.

Алгоритм «Закопай червонцы» (предполагаемый вариант)

1) Выкопай ямку.

2) Положи деньги в ямку.

3) Полей водой.

4) Засыпь ямку землёй.

5) Скажи: «Крекс, фекс, пекс!»)

3 группа: «Помоги Вини-Пуху подкрепиться».

(Расставь события по порядку)

? – Вымой лапы.

? – Открой кран.

? – Сядь за стол.

? – Закрой кран.

? – Вытри лапы полотенцем.

? – Съешь мёд.

? – Возьми ложку.

(Предполагаемый ответ:

1. Открой кран.

2. Вымой лапы.

3. Закрой кран.

4. Вытри лапы полотенцем.

5. Сядь за стол.

6. Возьми ложку.

7. Съешь мёд.)

4 группа : Сборка пирамидки и разборка пирамидки.

а) Составить программу сборки пирамидки

б) Составь программу разборки собранной пирамидки.

(каждая группа защищают свой алгоритм)

Ребята, понравилось вам быть программистами?

Составили мы свои программы действий?

А кому было трудно?

6. Д/з: 1)№9 с.12 – из учебника на повторение;

2) Иван Царевич предлагает своё дифференцированное задание

в конвертах. (1,2 группе – посложнее, 3,4 – полегче)

Вы должны восстановить порядок действий.

1 группа: Приготовь яичницу.

2 группа: «Завари чай».

3 группа: Съешь яблоко».

4 группа: Съешь конфету»

3) по желанию: составить программу своего пути в школу (творческое задание)

(на следующем уроке эту программу удобно использовать на этапе постановки проблемы)

7. Итог урока.

Наш урок подошёл к концу.И вот сегодня в наши знания добавилась ещё одна маленькая деталь. Какая? Чему учились сегодня на уроке?- А, что такое алгоритм?-Кто помогал нам в этом? (Иван Царевич) -Поблагодарим его и пригласим на следующий урок, чтобы он проверил наши знания.-А сейчас оцените свою работу на уроке (на доске рисунок Ивана Царевича на коне)ёжик – если на уроке было трудно и вам нужна помощь;цветок – если можете работать самостоятельно, но ещё в чём-то затрудняетесь;ягодка – могу работать сам и могу помочь другому.-Над чем ещё надо поработать? (наметить цели последующей деятельности).-И я, и Иван Царевич благодарим вас за хорошую работу.Урок окончен!

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

1. Алгоритм Деккера и Петерсона

Взаимоисключение - возможность одному процессу приостановить остальные.

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

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

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

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

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

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

Собственно алгоритм:

shared int ready = {0,0}; // готовность ко входу

shared int turn; // чья очередь

while (условие) {

ready[i] = 1; // сообщаем о желании войти в КС

turn = 1 - i; // даем возможность входа другому процессу

while (ready && (turn == 1-i)); // если очередь оказалась не нашей, ждем пока он не выйдет из КС

// критическая секция

ready[i] = 0; // сообщаем о выходе из КС

Требования к программной реализации:

* Не используется аппаратная поддержка

* Нет предположений о скорости процессоров и их количестве

* В критической секции только один процесс

* Условие ограниченного ожидания - если один процесс решил войти в свою критическую секцию, это не должно продолжаться неограниченно долго.

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

2. М еханизм синхронизации. Семафоры

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

* P(S) - операция пролога критической секции

Пока S=0 процесс блокируется

Когда S>0, S=S-1

* V(S) - операция эпилога критической секции

Операция V атомарна автоматически, атомарность P надо обеспечивать - программистом, аппаратным обеспечением или ОС.

Для задачи «потребитель-производитель» критической операцией будет любая работа с буфером.

semaphore mutex = 1; // бтв, я нихуц не понял почему переменные названы

semaphore empty = N; // именно так, ибо смысл у них обратный их

semaphore full = 0; // названиям. Так что я бы full empty.

void Prod() { // производитель

while (1) {

Произвести() ; // производим нечто

P(empty) ; // проверяем наличие места в буфере. Если полон ( empty==0 ) , залипаем, иначе уменьшаем количество места в нем на единицу

P(mutex) ; //

ПоложитьВБуфер() ;

V(mutex) ; // освобождаем mutex

V(full) ; // увеличиваем количество элементов в буфере. Это разлепляет ожидающих потребителей

void Cons() { // потребитель

while (1) {

P(full) ; // проверяем есть ли в буфере что-нибудь. Если пуст ( full==0 ) , залипаем, иначе уменьшаем количество элементов на единицу.

P(mutex) ; // залипаем если сейчас между P(mutex) и V(mutex) находится другой процесс

ИзвлечьИзБуфера() ;

V(mutex) ; // освобождаем mutex . Остальные процессы могут ходить сюда отныне

V(empty) ; // увеличиваем количество свободного места на единицу. Это разлепляет производителей

ИспользоватьПолученныеДанные() ; // радостно съедаем полученую из буфера нямку

3. М еханизм синхронизации. Мониторы

Появились в 1974. Хор.

Являются более высокоуровневым механизмом чем семафоры. Были созданы для устранения недостатков семафоров.

Строятся на основе языков ООП.

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

описание данных

void m1 (…) {…}

void mN(…) {…}

{инициализация /* выполняется один раз при создании монитора */}

Только один процесс может в один момент времени работать с монитором (находиться в состоянии исполнения или готовности к исполнению).

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

Если процесс выполняет wait(), он блокируется и переходит в состояние ожидания.

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

condition full, empty;

if (count==N) full.wait();

ПоложитьВБуфер(el);

if (count==1) empty.signal(); // если раньше очередь была пуста, сигналим

if (count==0) empty.wait();

ИзвлечьИзБуфера();

if (count==(N-1)) full.signal();

// инициализация:

Prod() { // производитель

ПРОИЗВОДИТ!

Cons() { // потреблятель

ПОТРЕБЛЯТ!}}

4. Механизм синхронизации процессов. Сообщения, эквивален тность механизмов синхронизации

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

Критическая секция (КС) - часть кода программы, которая может привести к конфликтам.

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

Структура КС: пролог, КС, эпилог.

Требования к алгоритмам взаимоисключений:

1. Решение программным путем.

2. Отсутствие предположений о количестве процессоров и их быстродействии.

3. Условие взаимоисключения, т.е. в КС находится только один процесс.

4. Условие прогресса - если процесс находится вне КС, он не должен препятствовать другим процессам входить в свои КС.

5. Условие ограниченного ожидания - если процесс захотел войти в КС это не должно откладываться бесконечно долго.

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

Сообщения.

Наиболее простой механизм синхронизации. Реализуется с использованием 2х примитивов:

send (Q, mess) - отправить сообщение mess, процессу / объекту Q.

receive (Q, mess) - получить сообщение mess, от процесса / объекта Q.

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

- : медленно.

+: возможно использование для общения удаленных процессов.

Эквивалентность механизмов синхронизации.

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

Реализация мониторов с помощью семафоров.

Для этого нам нужно реализовывать взаимоисключения при входе в монитор и условные переменные. Возьмем семафор mutex с начальным значением 1 для реализации взаимоисключения при входе в монитор и по одному семафору ci для каждой условной переменной. Кроме того, для каждой условной переменной заведем счетчик fi для индикации наличия ожидающих процессов. Когда процесс входит в монитор, компилятор будет генерировать вызов функции monitor_enter, которая выполняет операцию P над семафором mutex для данного монитора. При нормальном выходе из монитора (то есть при выходе без вызова операции signal для условной переменной) компилятор будет генерировать вызов функции monitor_exit, которая выполняет операцию V над этим семафором.

Для выполнения операции wait над условной переменной компилятор будет генерировать вызов функции wait, которая выполняет операцию V для семафора mutex, разрешая другим процессам входить в монитор, и выполняет операцию P над соответствующим семафором ci, блокируя вызвавший процесс. Для выполнения операции signal над условной переменной компилятор будет генерировать вызов функции signal_exit, которая выполняет операцию V над ассоциированным семафором ci (если есть процессы, ожидающие соответствующего события), и выход из монитора, минуя функцию monitor_exit.

01 Semaphore mutex = 1;

02 void monitor_enter()

06 void monitor_exit()

10 Semaphore ci = 0;

19 void signal_exit(i)

Заметим, что при выполнении функции signal_exit, если кто-либо ожидал этого события, процесс покидает монитор без увеличения значения семафора mutex, не разрешая тем самым всем процессам, кроме разбуженного, войти в монитор. Это увеличение совершит разбуженный процесс, когда покинет монитор обычным способом или когда выполнит новую операцию wait над какой-либо условной переменной.

Реализация сообщений через семафоры.

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

Процесс, желающий получить сообщение.

Процесс-получатель с номером i прежде всего выполняет операцию P(mutex), получая в монопольное владение разделяемую память. После чего он проверяет, есть ли в буфере сообщения. Если нет, то он заносит себя в список процессов, ожидающих сообщения, выполняет V(mutex) и P(ci). Если сообщение в буфере есть, то он читает его, изменяет счетчики буфера и проверяет, есть ли процессы в списке процессов, ожидающих записи. Если таких процессов нет, то выполняется V(mutex), и процесс-получатель выходит из КС. Если такой процесс есть (с номером j), то он удаляется из этого списка, выполняется V для его семафора cj, и выходим из КС. Проснувшийся процесс начинает выполняться в КС, так как mutex имеет значение 0 и никто более не может попасть в КС. При выходе из КС разбуженный процесс производит вызов V(mutex).

Работа процесса-отправителя (номером i). Процесс, посылающий сообщение, ждет, пока не сможет иметь монополию на использование разделяемой памяти, выполнив операцию P(mutex). Далее он проверяет, есть ли место в буфере, и если да, то помещает туда сообщение, изменяет счетчики и смотрит, есть ли процессы, ожидающие сообщения. Если нет, выполняет V(mutex) и выходит из КС, если есть, то «будит» один из них (с номером j), вызывая V(cj), с одновременным удалением этого процесса из списка процессов, ожидающих сообщений, и выходит из КС без вызова V(mutex), предоставляя тем самым возможность разбуженному процессу прочитать сообщение. Если места в буфере нет, то процесс-отправитель заносит себя в очередь процессов, ожидающих возможности записи, и вызывает V(mutex) и P(ci).

Реализация семафоров с помощью мониторов

Самый простой способ такой реализации выглядит следующим образом. Заведем внутри монитора переменную-счетчик, связанный с эмулируемым семафором списком блокируемых процессов и по одной условной переменной на каждый процесс. При выполнении операции P над семафором вызывающий процесс проверяет значение счетчика. Если оно больше нуля, уменьшает его на 1 и выходит из монитора. Если оно равно 0, процесс добавляет себя в очередь процессов, ожидающих события, и выполняет операцию wait над своей условной переменной. При выполнении операции V над семафором процесс увеличивает значение счетчика, проверяет, есть ли процессы, ожидающие этого события, и если есть, удаляет один из них из списка и выполняет операцию signal для условной переменной, соответствующей процессу.

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

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

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

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

5 . Ра спределение памяти раз делами, перемещаемыми разделами

Распределение памяти фиксированными разделами.

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

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

Варианты определения раздела для загрузки:

1. первый попавшийся.

2. Наиболее подходящий.

3. Наименее подходящий.

+: простота реализации, запуск нескольких процессов, отсутствует внешняя фрагментация (вся память распределена по разделам)

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

Распределение памяти разделами переменной длины.

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

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

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

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

- : большая внешняя фрагментация.

Распределение памяти перемещаемыми разделами.

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

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

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

+: отсутствие внутренней фрагментации; малая внефняя фрагментация.

- : большие накладные расходы, во время сжатия работа всех программ приостанавливается

6 . Ст раничное распределение памяти

Память разделяется на страницы фиксированного размера (кратные степени 2, для х86 - 4Кб).

Логическое адресное пространство состоит из логических страниц, а физическое из физических.

Адрес представляет собой пару (p, d), где p - номер логической страницы, а d - смещение в ней.

Схема преодразования логического адреса (ЛА) в физический (ФА):

синхронизация код программный алгоритм

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

Реализуется программно или аппаратно (процессор имеет регистр с адресом таблицы страниц текущего процесса)

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

- : большие накладные расходы без аппаратной поддержки.

Для уменьшения накладных расходов таблицу страниц можно хранить в кэше процессора.

7. Сегментное распределение памяти

При сегментной организации памяти, память разбивается на сегменты. Сегменты могут иметь переменный размер, могут задаваться программистом или по умолчанию компилятором. Адрес сегмента двухкомпонентный. Максимальный размер сегмента определяется разрядностью адресной шины (т.е. при 32-разрядной шине использовать можно сегмент размерностью 2 32 бит).

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

Преобразование адресов производится следующим образом (не для DOS):

Рисунок 1. Преобразование адресов при сегментной адресации

На данный момент аппаратная поддержка сегментов реализована только в Intel.

Достоинства сегментной организации памяти:

Защита памяти (имеется атрибут сегмента в таблице);

Недостатки:

Сегменты должны храниться непрерывно.

8. Сегментно-страничное распределение памяти

Заключается в том, что сегмент состоит из страниц (см. вопрос 6,7 СПО).

Адрес состоит из трех полей:

Достоинства:

Возможно совместное использование памяти процессами;

Гибкая настройка прав доступа, т.к. у каждой таблицы имеются атрибуты.

Недостатки:

Для доступа к данным необходимо три обращения.

9. Виртуальная память на основе сегментно-с траничного распределения памяти

Виртуальная память.

Виртуальная память используется в качестве расширения доступной памяти. Ее особенность состоит в том, что она использует несколько уровней памяти (например, винчестер и ОП).

Появилась в 1959 г.

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

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

1) Программа не ограничена объемом ОП.

2) Есть возможность частичного размещения программ, что позволяет увеличить количество выполняемых программ.

3) Объем ввода / вывода информации значительно меньше, чем в классическом swapping"е (суть swapping"а - страницы копируются на винчестер при отсутствии места в ОП).

4) Объем адресуемой памяти становится равным максимальному объему для данной разрядности (к примеру, 32 разряда = 4 Гб).

Виртуальная память может быть распределена как:

а) страничная;

б) сегментная;

в) странично-сегментная.

Технология виртуализации памяти может быть полностью реализована программно.

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

Основана на таблице страниц, куда добавляются биты:

1) Бит модификации (была ли изменена страница).

2) Бит присутствия (где страница лежит - в ОП или на винчестере).

3) Бит обращения (происходило ли обращение к странице).

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

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

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

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

2) Стратегия размещения - в какой участок первичной памяти поместить поступающую страницу.

3) Стратегия замещения - какую страницу нужно вытолкнуть во внешнюю память, чтобы освободить место в оперативной памяти. Для данной стратегии используются алгоритмы FIFO и др.

Размещено на Allbest.ru

Подобные документы

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

    курсовая работа , добавлен 16.12.2014

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

    лекция , добавлен 05.02.2009

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

    курсовая работа , добавлен 15.04.2015

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

    курсовая работа , добавлен 26.01.2013

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

    курсовая работа , добавлен 29.08.2010

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

    курсовая работа , добавлен 02.06.2015

    Понятие и назначение штрихового кода, его разновидности и сферы применения. Параметры символики и структура символа в кодах. Алгоритм преобразования числовых данных в знаки Interleaved 2 of 5. Распознавание штрих-кода и вычисление контрольной цифры.

    контрольная работа , добавлен 23.08.2009

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

    дипломная работа , добавлен 19.01.2017

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

    дипломная работа , добавлен 03.06.2012

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

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

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

Как создаются алгоритмы действий?

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

Или еще пример: чтобы скопировать картинку или текст, нажимаем правой кнопкой мыши на картинку, затем выбираем «Копировать», помещаем в нужное место, нажимаем правой кнопкой » Вставить», и результат достигнут.

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

Опишите последовательность действий — это запоминается

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

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

Алгоритм действий в графике — это блок-схема

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

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

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

Блок-схемы применяются в продажах

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

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

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

Сервисы для разработки блок-схем

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

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

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

Создавайте игровые блок-схемы для своих детей

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

Моя блок-схема

Вот какая блок-схема у меня получилась в первый раз. Для того, чтобы увеличить изображение, нажмите на него. После перехода на Cacoo, под записью «просмотр фигуры», нажимайте на картинку. Она откроется в большом окне. Удачи!

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

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

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

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

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

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

Какими свойствами должен обладать алгоритм? Перечислим их:

дискретность2 -- алгоритм делится на отдельные элементарные шаги;

определенность -- каждая команда однозначно определяет действие исполнителя;

конечность(результативность) -- алгоритм должен завершаться за конечное число шагов.

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

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

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

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

Но процессор не понимает команд языков высокого уровня, поэтому их предварительно нужно "перевести". Для этого служат особые программы -- трансляторы5.

Сейчас в мире существует множество языков программирования, рассчитанных на различные области применения. Мы в нашем курсе будем использовать Лого6 -- язык, специально созданный для обучения основам программирования. Этот язык очень простой (кстати, в отличие от профессиональных языков программирования, он позволяет записывать команды на русском языке), но, в то же время, способствует формированию навыков, позволяющих затем, при желании, без особых проблем перейти к работе с такими популярными языками, как Си или Паскаль. Особо знаменит язык Лого своей "черепашьей графикой". О том, что это такое, мы и поговорим в следующей главе.

Примечания

Algorithmi (лат.) -- искаженное имя математика IX века аль-Хорезми, предложившего способ выполнения арифметических вычислений с многозначными числами.

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

Discrete (англ.) -- состоящий из отдельных частей

Formalis (лат.) -- строго по установленным правилам

Programma (греч.) -- распоряжение

Translator (англ.) -- переводчик

Язык Лого (Logo, от греч. Logos -- слово, мысль) разработан в 1972 г. Сеймуром Пейпертом (Массачусетский Технологический институт, США). "Прародителем" его был наиболее известный из языков функционального программирования -- Лисп, однако, в процессе развития Лого приобрел ряд особенностей, позволяющих использовать при работе с ним как функциональный, так и процедурный подходы.