Uploaded by Dasha M

Программирование Лекция 1-2 Системы программирования Алгоритмизация

advertisement
ПРОГРАММИРОВАНИЕ
ЛЕКЦИЯ 1. СИСТЕМЫ ПРОГРАММИРОВАНИЯ
Предметом курса являются методы и средства составления алгоритмов и программ с
целью решения задач на ЭВМ.
Для разработки программ используются специальная группа программных средств, которые называются системами программирования.
Сделаем небольшой экскурс в программные средства и их классификацию.
Программное обеспечение
Программное обеспечение (ПО, англ. software) – это совокупность программ, обеспечивающих функционирование компьютеров и решение с их помощью задач предметных областей. Программное обеспечение (ПО) представляет собой неотъемлемую часть компьютерной системы, является логическим продолжением технических средств и определяет сферу
применения компьютера.
ПО современных компьютеров включает множество разнообразных программ, которое
можно условно разделить на три группы:
1. Системное программное обеспечение (системные программы);
2. Прикладное программное обеспечение (прикладные программы);
3. Инструментальное обеспечение (инструментальные системы).
Программирование. Лекция 1. Системы программирования
2
Системное программное обеспечение (СПО) – это программы, управляющие работой
компьютера и выполняющие различные вспомогательные функции, например, управление ресурсами компьютера, создание копий информации, проверка работоспособности устройств
компьютера, выдача справочной информации о компьютере и др. Они предназначены для всех
категорий пользователей, используются для эффективной работы компьютера и пользователя,
а также эффективного выполнения прикладных программ.
СПО делится на:
 операционные системы;
 сервисные системы;
 системы технического обслуживания
 служебные программы (утилиты).
Операционная система (ОС) – это комплекс программ, предназначенных для управления загрузкой, запуском и выполнением других пользовательских программ, а также для
планирования и управления вычислительными ресурсами ЭВМ, т.е. управления работой
ПЭВМ с момента включения до момента выключения питания. Она загружается автоматически при включении компьютера, ведет диалог с пользователем, осуществляет управление компьютером, его ресурсами (оперативной памятью, дисковым пространством и т.д.), запускает
другие программы на выполнение и обеспечивает пользователю и программам удобный способ общения – интерфейс – с устройствами компьютера. Другими словами, операционная
система обеспечивает функционирование и взаимосвязь всех компонентов компьютера, а
также предоставляет пользователю доступ к его аппаратным и программным возможностям.
ОС определяет производительность системы, степень защиты данных, выбор программ, с которыми можно работать на компьютере, требования к аппаратным средствам. Примерами ОС являются MS DOS, OS/2, Unix, Linux, Windows.
Сервисные системы расширяют возможности ОС по обслуживанию системы, обеспечивают удобство работы пользователя. К этой категории относят системы технического обслуживания, программные оболочки и среды ОС, а также служебные программы.
Системы технического обслуживания – это совокупность программно-аппаратных
средств ПК, которые выполняют контроль, тестирование и диагностику и используются для
проверки функционирования устройств компьютера и обнаружения неисправностей в процессе работы компьютера. Они являются инструментом специалистов по эксплуатации и ремонту технических средств компьютера.
Для организации более удобного и наглядного интерфейса пользователя с компьютером используются программные оболочки операционных систем – программы, которые позволяют пользователю отличными от предоставляемых ОС средствами (более понятными и эффективными) осуществлять действия по управлению ресурсами компьютера. К числу наиболее популярных оболочек относятся пакеты Norton Commander, FAR, Total Commander и др.
Служебные программы (утилиты, лат. Utilitas – польза) – это вспомогательные программы, предоставляющие пользователю ряд дополнительных услуг по реализации часто выполняемых работ или же повышающие удобство и комфортность работы. К ним относятся:
 программы-упаковщики (архиваторы), которые позволяют более плотно записывать информацию на дисках, а также объединять копии нескольких файлов в один, так называемый,
архивный файл (архив);
 антивирусные программы, предназначенные для предотвращения заражения компьютерными вирусами и ликвидации последствий заражения;
 программы контроля качества дисков и оптимизации и дискового пространства;
 программы восстановления информации, форматирования, защиты данных;
 программы для записи компакт-дисков;
 драйверы – программы, расширяющие возможности операционной системы по управлению
устройствами ввода/вывода, оперативной памятью и т.д. При подключении к компьютеру
новых устройств необходимо установить соответствующие драйверы;
 коммуникационные программы, организующие обмен информацией между компьютерами
и др.
Программирование. Лекция 1. Системы программирования
3
Некоторые утилиты входят в состав операционной системы, а некоторые поставляются
на рынок как самостоятельные программные продукты, например, многофункциональный пакет сервисных утилит Norton Utilities,.
Прикладное программное обеспечение (ППО) предназначено для решения задач
пользователя. В его состав входят прикладные программы пользователей и пакеты прикладных программ (ППП) различного назначения.
Прикладная программа пользователя – это любая программа, способствующая решению какой-либо задачи в пределах данной проблемной области. Прикладные программы могут использоваться либо автономно, либо в составе программных комплексов или пакетов.
Пакеты прикладных программ (ППП) – это специальным образом организованные программные комплексы, рассчитанные на общее применение в определенной проблемной области и дополненные соответствующей технической документацией. Различают следующие
типы ППП:
ППП общего назначения – универсальные программные продукты, предназначенные
для автоматизации широкого класса задач пользователя. К ним относятся:
 текстовые редакторы и текстовые процессоры (например, Блокнот, Writer, MS Word и
др.);
 табличные процессоры (например, MS Excel, Lotus 1-2-3, Quattro Pro);
 системы динамических презентаций (например, MS Power Point, Freelance Graphics,
Harvard Graphics);
 системы управления базами данных (например, MS Access, Oracle, MS SQL Server,
Informix);
 графические редакторы (например, Сorel Draw, Adobe Photoshop);
 издательские системы (например, Page Maker, Venture Publisher);
 системы автоматизации проектирования (например, BPWin, ERWin);
 электронные словари и системы перевода (например, Prompt, Сократ, Лингво, Контекст);
 системы распознавания текста (например, Fine Reader, Cunei Form).
Системы общего назначения часто интегрируются в многокомпонентные пакеты для
автоматизации офисной деятельности – офисные пакеты – Microsoft Office, StarOffice и др.
 методо-ориентированные ППП, в основе которых лежит реализация математических методов решения задач. К ним относятся, например, системы математической обработки данных
(Mathematica, MathCad, Maple), системы статистической обработки данных (Statistica, Stat).;
 проблемно-ориентированные ПП предназначены для решения определенной задачи в конкретной предметной области. Например, информационно-правовые системы ЮрЭксперт,
ЮрИнформ; пакеты бухгалтерского учета и контроля 1С: Бухгалтерия, Галактика, Анжелика; в области маркетинга –Касатка, Marketing Expert; банковская система СТБанк;
 интегрированные ППП представляют собой набор нескольких программных продуктов, объединенных в единый инструмент. Наиболее развитые из них включают в себя текстовый
редактор, персональный менеджер (органайзер), электронную таблицу, систему управления
базами данных, средства поддержки электронной почты, программу создания презентационной графики. Результаты, полученные отдельными подпрограммами, могут быть объединены в окончательный документ, содержащий табличный, графический и текстовый материал. К ним относят, например, MS Works. Интегрированные пакеты, как правило, содержат
некоторое ядро, обеспечивающее возможность тесного взаимодействия между составляющими.
Обычно пакеты прикладных программ имеют средства настройки, что позволяет при
эксплуатации адаптировать их к специфике предметной области.
К инструментальному программному обеспечению относят:
 системы программирования – для разработки новых программ (например, Паскаль, Бейсик и др.);
 инструментальные среды для разработки приложений, которые включают средства визуального программирования (например, Visual C++, Delphi, Visual Basic, Java и др.);
Программирование. Лекция 1. Системы программирования
4
 системы моделирования (например, система имитационного моделирования MatLab, системы моделирования бизнес-процессов BpWin и баз данных ErWin и другие).
Системы программирования: состав систем программирования
Системы программирования предоставляют программистам сервисные возможности
для разработки их собственных компьютерных программ.
Состав систем программирования
Системой программирования (СП) называется комплекс программных средств, предназначенных для создания, разработки, отладки (и эксплуатации) программ на конкретном
языке программирования на ЭВМ определенного типа. ПО.
В общем случае, программа – это последовательность предписаний (команд), записанных на языке, понятном некоторому исполнителю (процессору).
Язык, который понятен процессору, состоит из 0 и 1. Поэтому программа, записанная
таким образом, носит название машинного кода.
Однако, такой язык не понятен для человека, поэтому для желающих писать программы
были придуманы языки программирования высокого уровня (такое название было дано для
того, чтобы отличить их от языков, непосредственно понятных машинам), которые позволяют
быстро и понятно (для людей) записать последовательность действий, которые должен выполнить компьютер.
Рис.1. Общая классификация языков программирования
Уровни языков программирования
Уровень языка программирования определяет степень его удаленности от языка процессора и приближенности к естественному или формальному языку, используемого человеком. (Чем выше уровень, тем дальше он от компьютера и ближе к человеку).
Рис.2. Уровни языков программирования
Современные системы программирования, как правило, представляют собой интегрированную среду разработки (integrated development environment – IDE), к компонентам которой относятся следующие программные средства:
Программирование. Лекция 1. Системы программирования



5
язык программирования (ЯП) – это формальная знаковая система, содержащая специально
обусловленный набор символов, слов и мнемонических (особым образом организованных
и заранее оговоренных) сокращений, используемых для описания алгоритмов в форме, которая понятна компьютеру.
Язык программирования определяет набор лексических, синтаксических и семантических правил, используемых при составлении компьютерной программы. Он позволяет программисту точно определить то, как и на какие события будет реагировать компьютер, как будут храниться и передаваться данные, а также какие именно действия следует выполнять в тех или иных обстоятельствах.
текстовый редактор (editor), предназначенный для создания текстов исходной программы
на языке высокого уровня (ЯВУ) или ассемблере (макроассемблере);
транслятор – это основа систем программирования. Трансляторы языков программирования, т.е. программы, обеспечивающие перевод исходного текста программы на машинный
язык (объектный код), бывают двух типов: интерпретаторы и компиляторы.
 Интерпретатор – это транслятор, который обеспечивает последовательный синхронный «перевод» и выполнение каждой строки программы, причем при каждом запуске
программы на выполнение вся процедура полностью повторяется. Достоинством интерпретатора является удобство отладки программы в интерактивном режиме, а недостатком - малая скорость работы.
К интерпретируемым языкам относятся: Бейсик, Пролог, Лисп и др.
 Компилятор – это транслятор, который исходный текст программы переводит в машинный код. Если в тексте программы нет синтаксических ошибок, то машинный код
будет создан. Но это, как правило, не работоспособный код, т.к. в этой программе не
хватает подпрограмм стандартных функций, поэтому компилятор выдает промежуточный код, который называется объектным кодом и имеет расширение .obj.
К компилируемым языкам относятся языки: Паскаль, Си, Фортран и др.
 библиотека стандартных или прикладных подпрограмм (library), содержащая часто используемые функции в виде готовых объектных модулей;
 компоновщик (linker) (или редактор связей), предназначенный для объединения одного
или нескольких объектных модулей, созданных компилятором или взятых из стандартных библиотек, в единое целое – исполняемый файл программы;
 загрузчик (loader), обеспечивающий подготовку готовой программы к выполнению;
 отладчик (debugger), выполняющий программу в заданном режиме с целью поиска, обнаружения и локализации ошибок.
Современные инструментальные среды (системы программирования), как правило, используют компилятор. Схема получения исполняемой программы, которая и хранится в файле
с расширением ЕХЕ или СОМ, имеет вид:
Рис.3. Схема работы системы программирования
Программирование. Лекция 1. Системы программирования
6
Эволюция языков программирования
В развитии инструментального программного обеспечения (т.е. программного обеспечения, служащего для создания программных средств в любой проблемной области) рассматривают пять поколений языков программирования.
ЯП первого поколения представляли собой набор машинных команд в двоичном (бинарном) или восьмеричном формате, который определялся архитектурой конкретной ЭВМ.
Каждый тип ЭВМ имел свой ЯП, программы на котором были пригодны только для
данного типа ЭВМ. От программиста при этом требовалось хорошее знание не только машинного языка, но и архитектуры ЭВМ.
Второе поколение ЯП характеризуется созданием языков ассемблерного типа (ассемблеров, макроассемблеров), позволяющих вместо двоичных и других форматов машинных команд использовать их мнемонические символьные обозначения (имена). Являясь существенным шагом вперед, ассемблерные языки все еще оставались машинно-зависимыми, а программист все также должен был быть хорошо знаком с организацией и функционированием аппаратной среды конкретного типа ЭВМ. При этом ассемблерные программы все так же затруднительны для чтения, трудоемки при отладке и требуют больших усилий для переноса на другие типы ЭВМ. Однако и сейчас ассемблерные языки используются при необходимости разработки высокоэффективного программного обеспечения (минимального по объему и с максимальной производительностью).
Третье поколение ЯП начинается с появления в 1956 г. первого языка высокого уровня
– Fortran, разработанного под руководством Дж. Бэкуса в фирме IBM. За короткое время
Fortran становится основным ЯП при решении инженерно-технических и научных задач. Первоначально Fortran обладал весьма ограниченными средствами обеспечения работы с символьной информацией и с системой ввода-вывода. Однако постоянное развитие языка сделало
его одним из самых распространенных ЯВУ на ЭВМ всех классов – от микро- до суперЭВМ,
а его версии используются и для вычислительных средств нетрадиционной параллельной архитектуры. Вскоре после языка Fortran появились такие ныне широко известные языки, как
Algol, Cobol, Basic, PL/1, Pascal, APL, ADA, C, Forth, Lisp, Modula и др. В настоящее время
насчитывается свыше 2000 различных языков высокого уровня.
ЯП четвертого поколения носят ярко выраженный непроцедурный характер, определяемый тем, что программы на таких языках описывают только что, а не как надо сделать. В
Программирование. Лекция 1. Системы программирования
7
программах формируются скорее соотношения, а не последовательности шагов выполнения
алгоритмов. Типичными примерами непроцедурных языков являются языки, используемые
для задач искусственного интеллекта (например, Prolog, Langin). Так как непроцедурные
языки имеют минимальное число синтаксических правил, они значительно более пригодны
для применения непрофессионалами в области программирования.
Второй тенденцией развития ЯП четвертого поколения являются объектно-ориентированные языки, базирующиеся на понятии программного объекта, впервые использованного в
языке Simula-67 и составившего впоследствии основу известного языка SmallTalk. Программный объект состоит из структур данных и алгоритмов, при этом каждый объект знает, как выполнять операции со своими собственными данными. На самом деле, различные объекты могут пользоваться совершенно разными алгоритмами при выполнении действий, определенных
одним и тем же ключевым словом 2 (так называемое свойство полиморфизма). Например, объект с комплексными числами и массивами в качестве данных будет использовать различные
алгоритмы для выполнения операции умножения. Такими свойствами обладают объектноориентированные Pascal, Basic, С++, SmallTalk, Simula, Actor и ряд других языков программирования.
Третьим направлением развития языков четвертого поколения можно считать языки
запросов, позволяющих пользователю получать информацию из баз данных. Языки запросов
имеют свой особый синтаксис, который должен соблюдаться, как и в традиционных ЯП третьего поколения, но при этом проще в использовании. Среди языков запросов фактическим
стандартом стал язык SQL (Structured Query Language).
И, наконец, четвертым направлением развития являются языки параллельного программирования (модификация ЯВУ Fortran, языки Occam, SISAL, FP и др.), которые ориентированы на создание программного обеспечения для вычислительных средств параллельной архитектуры (многомашинные, мультипроцессорные среды и др.), в отличие от языков третьего
поколения, ориентированных на традиционную однопроцессорную архитектуру.
К интенсивно развивающимся в настоящее ЯП пятого поколения относятся языки искусственного интеллекта, экспертных систем, баз знаний (InterLisp, ExpertLisp, IQLisp, SAIL
и др.), а также естественные языки, не требующие освоения какого-либо специального синтаксиса (в настоящее время успешно используются естественные ЯП с ограниченными возможностями – Clout, Q&A, HAL и др.).
ЛЕКЦИЯ 2. ОСНОВЫ АЛГОРИТМИЗАЦИИ
Основные определения и понятия.
Введем некоторые понятия, необходимые для изложения материала.
Исполнитель – это живое существо или машина, умеющая выполнять определенный
набор действий. Как правило, при решении задачи исполнитель должен выполнить последовательно несколько указанных ему действий. Отдельное указание исполнителю выполнить некоторое законченное действие называется командой. Совокупность всех команд, которые может выполнить исполнитель, называется системой команд исполнителя.
Для решения задачи исполнителю необходимо иметь точное и понятное описание последовательности действий, которые приводят к искомому ответу. Такое описание называется алгоритмом.
Алгоритмизация – это процесс построения алгоритма решения задачи, результатом которого является выделение этапов процесса обработки данных, формальная запись содержания этих этапов и определение порядка их выполнения.
Алгоритм – это точное предписание, определяющее вычислительный процесс, ведущий
от варьируемых начальных данных к искомому результату.
Каждый алгоритм должен обладать рядом свойств, важнейшими из которых являются:
1. Массовость.
2. Понятность (или детерминированность).
3. Дискретность.
Программирование. Лекция 1. Системы программирования
8
4. Конечность.
5. Определенность.
6. Эффективность.
Чтобы разработать алгоритм, нужно детально представить ход решения задачи, разбив
его на последовательно выполняемые этапы (или шаги), так, чтобы каждый этап мог быть описан одной или несколькими командами исполнителя. Затем необходимо зафиксировать (записать) эти шаги определенным образом. Способ записи алгоритма зависит от того, кто будет
исполнять алгоритм. Если исполнителем является человек, то алгоритм записывают на обычном, естественном для человека языке. Для других исполнителей приходиться фиксировать
алгоритм каким-то другим способом. Как правило, разработчиком алгоритма в большинстве
случаев является человек, поэтому на первом этапе разработки алгоритма его обычно записывают на естественном для человека языке. Некоторые способы записи алгоритма используют
лишь для того, чтобы упростить процесс разработки алгоритма, сделать его более наглядным
и понятным.
Одним из идеальных исполнителей, универсальной машиной для обработки информации является электронно-вычислительная машина (ЭВМ). С ее помощью можно получать, эффективно и очень быстро обрабатывать и хранить огромные объемы информации. При решении задачи на ЭВМ приходится, как правило, поэтапно использовать следующие способы фиксации алгоритма:
1. Сначала алгоритм «записывают» на естественном языке. Этот язык предназначен для человека, поэтому правила записи в нем не являются жесткими. Записанный таким образом
алгоритм является основой создания алгоритма, предназначенного для ЭВМ.
2. Для того, чтобы упростить разработку алгоритма и более наглядно представить ход решения
задачи, часто алгоритм изображают в виде блок-схемы.
3. Запись алгоритма в виде программы.
Указания, которые получает ЭВМ, будут поняты ею только при строгом соблюдении
определенных правил записи. Формализованные языки, используемые при записи алгоритмов, предназначенных для ЭВМ, называют алгоритмическими языками (или языками программирования).
Процесс конструирования алгоритма с использованием того или иного алгоритмического языка называется программированием, а его результат – программой. Таким образом, программа – это алгоритм решения задачи, записанный на языке, понятном ЭВМ. В
свою очередь вычислительную машину можно определить как программно-управляемое
устройство, позволяющее автоматизировать процесс обработки информации и обеспечить
автоматическое выполнение команд программы.
Алгоритмический язык – набор символов и правил образования и истолкования конструкций из этих символов для записи алгоритмов.
Язык программирования предназначен для фиксации алгоритма, который будет исполняться ЭВМ.
Программа – это алгоритм, записанный в форме, воспринимаемой машиной.
С понятием программы тесно связано понятие оператора – минимальной структуры
программы, производящей некоторое законченное действие.
Для выполнения алгоритма любому исполнителю. как правило, необходима определенная информация. Если предполагается, что задача будет решаться на ЭВМ, то необходимую
для решения задачи информацию нужно представить в определенном виде. Практически любая программа предназначена для обработки, преобразования информации, представленной в
виде величин или данных.
Данными называют все величины, которые участвуют в решении задачи, то есть те величины, над которыми производятся определенные действия в программе.
Данные фиксируются в алгоритме в виде констант или переменных.
Программирование. Лекция 1. Системы программирования
9
Величина, значение которой не меняется в процессе исполнения алгоритма называется
константой. Величина, к которой обращаются, используя ее имя, и которая может меняется
в процессе исполнения алгоритма, называется переменной. Те переменные, значения которых
должны быть заданы перед выполнением алгоритма, называются начальными переменными
(или аргументами). Перед выполнением алгоритма аргументы получить определенные значения (или как часто говорят – должны быть заданы). Заданные значения аргументов называются исходными данными. Переменные, значения которых должны быть получены в ходе исполнения алгоритма, называются результирующими переменными (или результатом). Значения результирующих переменных называются выходными данными. Часто для преобразования исходных данных в выходные приходится привлекать и оперировать так называемыми
промежуточными данными.
Следует обратить внимание на правильный подбор имен переменных, которые должны
подсказывать назначение переменной и тем самым обеспечивать большую ясность алгоритма
или программы.
Запись алгоритмов на естественном языке
Алгоритм на естественном языке представляет собой текст, зафиксированный произвольным образом в устной или письменной форме. Для достижения большей четкости описания текст алгоритма обычно делится на отдельные предложения (шаги), которые нумеруются.
Каждый шаг алгоритма описывает отдельное, логически законченное действие. Исполнитель
должен механически выполнять каждый шаг алгоритма. Выполнив очередной шаг, он должен
переходить к выполнению следующего по порядку шагу алгоритма, если нет других специальных указаний. При необходимости отдельные этапы могут быть детализированы, то есть
разбиты на ряд более простых этапов. В этом случае говорят о методе пошаговой детализации
алгоритма.
Для сокращения объема записи алгоритма используют специальные правила, символы,
обозначения.
Например, в математике в выражении
y=2x +bx+c
под 2, b и c понимают коэффициенты, которые принимают единственное значение, а под x и y
- переменные, которые принимают множество значений. В любых алгоритмических языках
величины b, c, x, y выражения y=2x +bx+c считаются переменными, так как обращение к ним
осуществляется с помощью их имен.
Целью любого алгоритма является получение результатов и присваивание их результирующим переменным. В процессе выполнения алгоритма исполнителю для хранения данных
часто приходится использовать и промежуточные переменные. Поэтому оператор присваивания является одним из основных операторов в любом языке программирования. Для записи
оператора присваивания в некоторых языках программирования используют символ «:=», в
других – символ «=». Фиксируя алгоритм на естественном языке или в виде блок-схемы
обычно оператор присваивания изображают символом «:=». Так запись x:=5 означает «переменной с именем x (переменной x) присвоить значение 5». Данный знак нельзя путать со знаком математического равенства. Знак «:=» указывает исполнителю на действие, а знак «=» в
математическом выражении никаких действий не предполагает. Так, запись x=x+1 является
бессмысленной, а запись x:=x+1 предписывает исполнителю к значению x прибавить единицу,
а затем полученный результат присвоить переменной x. После выполнения этой команды переменная x будет иметь значение на 1 больше, чем перед ее выполнением. По команде y:=x
переменной y необходимо присвоить то значение, которое имеет переменная x. При этом x
сохраняет свое прежнее значение.
Пример 1. Вычислить значение y по заданному значению x
y = 5x 2 - 3x
Программирование. Лекция 1. Системы программирования
10
Сама формула не является алгоритмом, поскольку она не дает исполнителю точной
последовательности действий, позволяющей найти значение y.
Алгоритм решения задачи на естественном языке можно записать следующим образом:
1. Получить значение переменной x
2. a:  x 2
3. b:  5a
4. c:  3x
5. y:  b  c
6. Вывод значения переменной y
7. Конец
Это описание действий является алгоритмом только для того исполнителя, которому
понятны все шаги, то есть для которого все команды алгоритма входят в систему его команд.
Если же исполнитель не сможет выполнить хотя бы одну из операций (например, извлечение
корня), то он не даст ответ на поставленную задачу. Данная совокупность команд, в этом случае, не является для исполнителя алгоритмом. В этом случае нужно заменить непонятные исполнителю команды другими, которые входят в систему команд (например, заменить пункт 2
на следующий 2. a:=x x). Если в предыдущем примере в качестве исходного данного взять
x=2, то исполнив алгоритм, получим результат y=14. Заметим, что оператор присваивания может включать в себя и вычисления сложных выражений, записанных в правой части, то есть
алгоритм решения задачи в примере 1 может быть записан более компактно и просто:
1. Получить значение переменной x
2. y:  5x 2  3x
3. Вывод значения переменной y
4. Конец
Пример 2. Вычислить по заданному x значение функции
5x 2 - 3x
y=
x -2
В область определения функции не входит значение x=2. Алгоритм должен предусматривать определенные действия исполнителя и при данном значении аргумента. В этом случае
ответом может быть строка «значение функции y не определено». В противном случае «значение функции y определено» и оно может быть вычислено по представленной формуле. Здесь
мы имеем дело с так называемой строковой переменной, значениями которой является определенная совокупность букв, цифр и других символов. Значения строковых величин обычно
пишут в кавычках или апострофах.
Таким образом, алгоритм данной задачи на естественном языке можно записать так:
1. Получить значение переменной x
2. Если x=2, идти к пункту 6, иначе к пункту 3
2
3. y:=( 5x - 3x) / ( x - 2)
4. Вывод значения переменной y
5. Идти к пункту 7
6. Вывод «значение функции не определено»
7. Конец
Результатом данного алгоритма являются в одном случае значение переменной y (если
x  2), в другом случае (x=2) – текстовая строка.
В данном алгоритме есть шаги, которые нарушают естественный порядок выполнения
этапов алгоритма (пункты 2, 5). При записи алгоритма в этом случае часто используют следующее правило: если в каком-либо пункте или команде алгоритма нет указания на то, какой
пункт должен выполняться следующим, то после окончания выполнения этого пункта исполнитель должен переходить к выполнению следующего по порядку пункту. Следуя этому правилу, пункт 2 алгоритма запишем в виде
Программирование. Лекция 1. Системы программирования
11
2. Если x=2, идти к пункту 6
Выполняя команду, исполнитель должен будет перейти к п.6 если x=2 и к следующему
по порядку пункту (то есть к п.3), если x  2.
Блок-схемы
Как уже отмечалось, любой алгоритм
предназначен для какого-либо исполнителя, то
есть он разрабатывается для того, чтобы исполнитель мог решить определенную задачу.
Разработчиком алгоритма является человек.
Для того чтобы более наглядно и ясно увидеть
связи между отдельными шагами алгоритма,
облегчить процесс понимания и конструирования алгоритма, упростить процесс детализации, уточнения алгоритма, еще до написания
программы убедиться в правильности алгоритма используют блок-схемы. Таким образом, блок-схемы предназначены не для исполнителя, а для разработчика алгоритма.
Блок-схема алгоритма – это средство
графического изображения структуры, процесса исполнения алгоритма.
Для обозначения отдельных этапов алгоритма в блок-схеме используются геометрические фигуры (блоки). Каждый блок содержит описание соответствующих действий.
Операторы присваивания записываются в прямоугольниках (арифметические блоки). Условия записываются в ромбах (логические блоки). Овалами в блок-схемах указываются начало
и конец алгоритма. Блоки ввода аргументов и вывода результатов
изображаются в виде параллелограммов. Блоки соединяются стрелками, которые показывают порядок
выполнения команд. Каждый блок
(за исключением блока «начало»)
содержит хотя бы одну входную
стрелку (вход). Арифметические
блоки имеют одну выходную
стрелку (выход), а логические блоки
имеют два выхода «да» и «нет».
Если условие выполняется, то исполнитель должен выполнять команды, встречающиеся ему на пути
«да». В противном случае необходимо идти по пути «нет».
На рис.1 и 2 приведены блоксхемы алгоритмов, рассмотренные в
примере 1, а на рис.3 – блок-схема алгоритма, рассмотренного в примере 2. Из рис.1 видно,
что команды в алгоритме выполняются последовательно одна за другой. Такие алгоритмы
называются линейными. Алгоритм, представленный блок-схемой на рис.3, называется алгоритмом с ветвлением.
Программирование. Лекция 1. Системы программирования
12
Отметим, что если алгоритм представлен в виде блок-схемы, то запись его на какойлибо язык программирования не представляет, как правило, больших трудностей. О важности
блок-схем говорит и тот факт, что существуют специальные стандарты на их оформление.
Помимо блок-схем используются и другие средства, облегчающие иллюстрацию логической структуры алгоритма:
 псевдокод.
Псевдокод – позволяет формально изображать логику программы, не заботясь при
этом о синтаксических особенностях конкретного языка программирования. Обычно представляет собой смесь операторов языка программирования и естественного языка. Является средством представления логики программы, которое можно применять вместо блоксхемы.
 структурные диаграммы.
Структурные диаграммы – могут использоваться в качестве структурных блок-схем,
для показа межмодульных связей, для отображения структур данных, программ и систем
обработки данных. Существуют различные структурные диаграммы: диаграммы НассиШнейдермана, диаграммы Варнье, Джексона и др.
АЛГОРИТМЫ СТАНДАРТНЫХ ЗАДАЧ
Блок-схемы алгоритмов с ветвлением
Необходимо отметить, что если алгоритм разработан и записан на естественном языке, а тем более изображен в виде блок-схемы, то составить на этой основе программу, как правило, совсем не трудно. Поэтому в данной
главе будем конструировать только блок-схемы различных задач, с тем, чтобы в дальнейшем, когда будем изучать тот или иной язык программирования, использовать
их при составлении программ.
Пример 3. Найти большее из двух чисел x и y. Если
числа равны, то в качестве большего взять любое из чисел.
Разработка алгоритма решения этой задачи не
представляет каких-либо трудностей, поэтому сразу же
рисуем блок-схему. При этом будем использовать следующие имена переменных: x, y - исходные числа (аргументы), m - большее из чисел x, y (результат).
Следует сказать(это уже отмечалось), что практически любую задачу можно решить несколькими способами. Например, большее из двух
чисел можно получить, используя следующий алгоритм (см. рис. ).Обратите внимание на реализацию данного алгоритма. Значение переменной m в результате выполнения алгоритма будет равно либо значению переменной x, либо переменной y. Значение одной из этих переменных присваивается переменной m сразу же после ввода исходных данных (m:=x). Далее переменная m меняет свое значение только в том случае, если x<y. Если же x y, то значение y
сохраняется без изменений. Идея этого алгоритма, позволяющая в данном случае единообразными действиями найти большее из трех, четырех и т.д. чисел, часто используется при решении многих других задач. В алгоритме, изображенном на рис.4, используется так называемая
полная команда ветвления. Она содержит команды и по пути «да» и по пути «нет».В алгоритме
же, изображенном на рис.5, используется неполная команда ветвления или обход.
Программирование. Лекция 1. Системы программирования
13
Пример 4. Найти большее из трех чисел x, y и z. Для решения
задачи можно использовать следующую блок-схему (рис.6):
Из блока-схемы видно, что для нахождения большего
из 3-х чисел необходимо, по сути, два раза исполнить алгоритм «большее из 2-х чисел»:
Назовем этот алгоритм
БИД(x,y;m).
Алгоритм, который используется в составе других алгоритмов, называется вспомогательным. Команду вызова вспомогательного алгоритма на блок-схеме будем изображать в виде
флажка, в котором записывается название вспомогательного алгоритма, его аргументы и результаты. Таким образом, блок-схема
нахождения большего из трех чисел значительно упростится
(см.рис.7).
Рассмотрим еще одну простую задачу, при решении которой можно использовать как полную, так и неполную команды
ветвления.
Пример 5. Нахождение модуля числа. Обозначим исходное
число через x. Модуль числа x можно получить несколькими способами. На рис.8 и 9 приведены два алгоритма решения этой
задачи. В первом алгоритме для результирующей переменной –
модуля числа x выбрано имя mod. В алгоритме, приведенном на
рис.9 переменная с именем x сначала используется как аргумент, а затем как результирующая
переменная
Программирование. Лекция 1. Системы программирования
Пример 6. Составить блок-схему алгоритма решения линейного уравнения ax=b.
Алгоритм решения задачи, записанный на естественном языке имеет вид:
1. Получить значение x
2. Если a=0, идти к пункту 6
3. x:=b/a
4. Вывести s, x
5. Идти к пункту 8
6. Если b=0 s:="нет решения", иначе s:="x - любое число"
7. Вывести s
8. Конец
Пример 7. Выяснить, принадлежит ли точка x промежутку [a;b].
14
Программирование. Лекция 1. Системы программирования
Данную блок-схему можно упростить, если использовать составное условие.
15
Download