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

Вид материалаЗадача

Содержание


Виды алгоритмов и соответствующие им алгоритмические структуры
Жизненный цикл программы
Составление внешних спецификаций к программе
Составление внутренних спецификаций.
Тестирование и отладка.
История возникновения языков программирования
Подобный материал:

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



Название «алгоритм» связано с именем выдающегося среднеазиатского математика IX в. н.э. Мохаммеда Аль Хорезми. Таким образом, понятие алгоритма возникло и используется давно, значительно раньше появления первых ЭВМ. Тем не менее, широким распространением это понятие обязано основополагающей идее – идее автоматизации поведения исполнителя-автомата, реализуемой на основе алгоритма.

Задача обучения алгоритмизации заключается в том, чтобы научить составлять записи алгоритмов, причем, делать это так, чтобы воображаемый при этом исполнитель (человек, робот, компьютер) мог однозначно и точно следовать предписаниям алгоритма и эффективно получать определенный результат. Это накладывает на записи алгоритмов целый ряд обязательных требований, которые можно обозначить как свойства алгоритма:
  1. Одним из основных требований, которым должен удовлетворять любой алгоритм, состоит в том, что описываемый процесс должен быть разбит на последовательность отдельных шагов. Возникающую при таком разбиении запись алгоритма представляет собой упорядоченную совокупность четко разделенных друг от друга предписаний (директив, команд), образующих его прерывистую (или дискретную) структуру. Рассмотренное свойство алгоритма называют свойством дискретности.
  2. Используемые на практике записи алгоритмов составляют с ориентацией на определенного исполнителя. Чтобы составить для него алгоритм, нужно знать, какие предписания этот исполнитель может понять и исполнить, то есть знать его систему предписаний или команд. Поэтому, составляя алгоритм дл конкретного исполнителя можно использовать только те предписания, которые он может исполнить. При этом подразумевается, что они должны быть ему понятны. Это свойство алгоритма будем называть свойством понятности.
  3. Будучи понятным, алгоритм не должен содержать предписаний, смысл которых может восприниматься неоднозначно. Это означает, что одно и то же предписание, будучи понятным разным исполнителям, после исполнения каждым из них должно давать одинаковый результат. Говоря иначе, алгоритм не должен оставлять места для произвола исполнителя. Поэтому такие предписания, как, например, «Взять две-три ложки сахарного песку», «Через несколько минут снять трубку с рычага» не могут встречаться в алгоритмах. Кроме того, в алгоритмах недопустимы также ситуации, когда после выполнения очередного предписания алгоритма исполнителю неясно, какое из предписаний должно выполняться на следующем шаге. Описанное свойство алгоритма называют свойством определенности, детерминированности или точности.
  4. Наиболее предпочтительными являются алгоритмы, обеспечивающие решение широкого класса задач данного типа. Это свойство алгоритма называется свойством массовости. В простейшем случае оно обеспечивается возможностью использовать различные допустимые значения исходных (начальных) данных, например, алгоритм решения квадратного уравнения.
  5. Обязательное требование к алгоритмам – их результативность. Смысл этого требования состоит в том, что при точном исполнении всех предписаний алгоритма процесс должен завершиться за конечное число шагов и при этом должен быть получен какой-либо определенный ответ на вопрос, сформулированный в задаче.
  6. Важным свойством алгоритмов, является свойство формальности. Оно означает, что на каждом конкретном шаге выполнения алгоритма решения задачи, исполнитель выполняет предписания алгоритма автоматически – формально, не вдумываясь в содержание задачи. Это свойство алгоритмов и определяет их широкое использование в автоматических устройствах как основы их функционирования.

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

1) словесный (текстовый) – ориентирован на исполнение человеком.

2) графический – схемы или блок-схемы алгоритмов. Они представляют алгоритм в наглядной графической форме. Предписания (команды) помещают внутрь блоков, соединенных стрелками, показывающими очередность выполнения команд алгоритма. Приняты определенные стандарты графических изображений блоков, это – плоские геометрические фигуры: прямоугольник, параллелограмм, ромб, шестиугольник, овал. Блок-схемы обладают большей наглядностью, чем словесная форма записи;

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

^ Виды алгоритмов и соответствующие им алгоритмические структуры

Различают следующие виды алгоритмов: 1)Линейный; 2)Разветвляющийся; 3)Циклический.

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

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




2. Разветвляющийся



3. Циклический


    1. ^

      Жизненный цикл программы


Жизненный цикл программы состоит из нескольких фаз:

1. Составление требований к программе.

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

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

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

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

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

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

Хорошее владение инструментами отладки существенно убыстряет создание программного продукта.
  1. Оформление программной документации и сдача программы заказчику.



  1. ^

    История возникновения языков программирования


Компьютер «мыслит» нулями и единицами, из которых складываются числа. И это все что может сделать компьютер. Поэтому, программы - это тоже цифры, которые воспринимаются процессором компьютера как команды к выполнению каких либо действий. Вот так и появились на свет программисты, которые писали последовательность команд для процессора. Эти последовательности выглядели как простые цифры и получили название машинный код. Итак, первые программисты писали в машинных кодах. Тогда еще не было компиляторов и приходилось все писать числами. Сейчас уже невозможно даже и представить какой это адский труд. Постоянно держать в памяти таблицу машинных кодов. Например, число 8BC3. А это простая команда копирования между двумя ячейками регистров ebx в eax.

Со временем компьютер стал «умнеть». Он все так же оперировал числами, но делал это намного быстрее. Но программист - это человек, и ему очень тяжело создавать логику в числах. Намного легче работать с привычными словами. Например, все ту же команду удобней записать как «скопировать ebx в eax». Но что делать, если компьютер не понимает слов, а только числа? Выход есть - написать такую программу, которая будет превращать текст в машинные коды. Пусть компьютер сам создает байт-код. Такую программу назвали компилятором. А язык, на котором писался текст программы, назвали языком программирования. Первым компилятором был Аssembler, что переводиться как сборщик. Писать на нем практически так же, как и в машинных кодах, только теперь уже использовались не числа, а понятные человеку слова. Например, все та же команда копирования регистров теперь выглядела так: «mov eax, ebx». То есть цифры заменились на понятные слова.

С помощью Assembler программы получились удобные, писались быстрее, а это один из основных факторов успеха любой программы на рынке. Люди начинают пользоваться той программой, которая выходит на рынок первой. Даже если более поздний вариант лучше, человека трудно переубедить перейти на другую версию. Здесь играет большую роль фактор привычки. К тому же, к тому моменту, когда программист напишет свою первую версию в машинных кодах, программист на Аssembler выпустит уже пару новых версий.

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

И начался тогда настоящий бум. Языки программирования стали появляться один за другим. Так появились языки С, ADA, FoxPro, Fortran, Basic, Pascal и другие языки. Следующей ступенью стало объектно-ориентированное программирование. Язык С превратился в С++, Pascal превратился в Object Pascal и так далее. И снова скорость разработки против быстроты кода.

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

Лидеров в визуальных языках является Borland, а приверженцем объектных языков остается Microsoft, но он выглядит примитивно по сравнению с такими гигантами, как Delphi, Kulix или C++ Builder. На сегодняшний день существует такая градация выбора языка программирования:
  1. Если нужно написать базы данных, программы общего значения или утилиты, то нужен язык Delphi или C++ Builder.
  2. Если это игры, то желательно Visual C++ или Watcom C плюс знание Аssembler. Но это не значит, что нельзя использовать Delphi или C++ Builder.
  3. Если это будут драйверы и работа с железом, то тут критичен размер файла, а значит, нужен язык чистый С или Аssembler. Визуальные языки будут жить и за ними будущее и на данный момент единственным лидером здесь является Borland.