Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Введение_в_специальность

.pdf
Скачиваний:
94
Добавлен:
15.03.2016
Размер:
1.05 Mб
Скачать

На рис. 7.4 представлен блок-соединение.

А

А

Рис. 7.4. Соединительный блок

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

Программа описание структуры алгоритма на языке алгорит- мического программирования.

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

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

Линейной называют алгоритмическую конструкцию, реализо- ванную в виде последовательности действий (шагов), в которой каждое действие (шаг) алгоритма выполняется ровно один раз, при- чем после каждого i-го действия (шага) выполняется (i+1)-е дей- ствие (шаг), если i-е действие не конец алгоритма.

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

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

71

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

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

Ложь (Нет)

 

 

Истина (Да)

 

 

 

Условие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Действие 1

 

 

 

Действие 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 7.5. Полное ветвление

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

Рассмотрим три типа циклических алгоритмов: цикл с парамет- ром (арифметический цикл), цикл с предусловием и цикл с посту- словием (итерационный цикл).

Цикл с предусловием

В данной циклической структуре сначала проверяется значение условного выражения (условие) перед выполнением очередного ша- га цикла. Если значение условного выражения истинно, исполняет- ся тело цикла. После чего управление вновь передается проверке условия и т. д. Эти действия повторяются до тех пор, пока условное выражение не примет значение ЛОЖЬ. При первом же несоблюде- нии условия цикл завершается. Количество шагов цикла заранее не определено и зависит от входных данных задачи. Особенностью цикла с предусловием является то, что если изначально условное выражение ложно, то тело цикла не выполнится ни разу.

72

Условие

 

 

Ложь (Нет)

+

Условие

Тело цикла

Истина (Да)

 

Тело цикла

Рис. 7.6. Блок-схема цикла с предусловием

Цикл с постусловием

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

 

Тело цикла

 

Тело цикла

Ложь (Нет)

Условие

Истина (Да)

 

 

Условие

 

 

+

 

 

Рис. 7.7. Блок-схема цикла с постусловием

73

Цикл с параметром

Существует разновидность цикла с предусловием, называемая арифметический цикл (рис. 7.8) . В арифметическом цикле число его шагов (повторений) однозначно определяется правилом измене- ния параметра, которое задается с помощью начального N и конеч- ного К значений параметра и шагом h его изменения, т. е. на первом шаге цикла значение параметра равно N, на втором N+h, на треть- ем N+2h и т. д. На последнем шаге цикла значение параметра не больше К, но такое, что дальнейшее его изменение приведет к зна- чению большему, чем К.

Например, вывести 10 раз слово «Привет!». Его блок-схема ис- пользует специальный блок начала арифметического цикла с указа- нием, что переменная i в нем будет изменяться от 1 до 10 с шагом 1.

Начало

i=1,10,1

Привет!!!

Конец

Рис. 7.8. Цикл с параметром

Контрольные вопросы

1.Понятие алгоритма и его свойства.

2.Способы описания алгоритмов.

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

74

ГЛАВА 8

ХАРАКТЕРИСТИКА ЯЗЫКОВ И СИСТЕМ ПРОГРАММИРОВАНИЯ

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

Язык программирования (англ. Programming language) – система обозначений для описания алгоритмов и структур данных, опреде- ленная искусственная формальная система, средствами которой можно выражать алгоритмы. Язык программирования определяет набор лексических, синтаксических и семантических правил, зада- ющих внешний вид программы и действия, которые выполняет ис- полнитель (компьютер) под ее управлением [10, 14].

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

Реализация языка это системная программа, которая перево- дит (преобразует) записи на языке высокого уровня в последова- тельность машинных команд.

Имеется два основных вида средств реализации языка: компиля- торы и интерпретаторы.

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

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

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

75

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

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

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

8.1. Уровни языков программирования

Языки программирования низкого уровня Разные типы процессоров имеют разные наборы команд. Если

язык программирования ориентированный на конкретный тип про- цессора и учитывает его особенности, то он называется языком про- граммирования низкого уровня. Операторы языка низкого уровня близки к машинному коду и ориентированы на конкретные коман- ды процессора [9].

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

76

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

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

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

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

Преимущества языков низкого уровня

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

Недостатки языков низкого уровня

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

77

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

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

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

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

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

Языки программирования высокого уровня имеют следующие особенности:

1)алфавит значительно шире машинного, что делает его гораздо более выразительным, существенно повышает наглядность и по- нятность текста;

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

3)конструкция команд (операторов) отражает содержательные виды обработки данных и задается в удобном для человека виде;

4)используется аппарат переменных и действия над ними;

5)поддерживается широкий набор типов данных.

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

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

К языкам программирования высокого уровня относятся: Форт-

ран, Кобол, Алгол, Pascal, Java, C, C++, C#, Objective C, Smalltalk, Delphi и др.

78

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

8.2. Компилируемые и интерпретируемые языки

Языки программирования делятся на два класса компилируе- мые и интерпретируемые.

Программа на компилируемом языке при помощи специальной программы компилятора преобразуется (компилируется) в набор инструкций для данного типа процессора (машинный код) и далее записывается в исполняемый файл, который может быть запущен на выполнение как отдельная программа. Другими словами, компиля- тор переводит программу с языка высокого уровня на низкоуровне- вый язык, понятный процессору [1, 10].

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

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

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

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

79

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

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

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

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

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

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

8.3. Системы программирования

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

80