R-технология

Выбор языка программирования

При разработке ПП стараются выбрать такой язык программирования, который наиболее оптимально подходит к программированию данного класса задач. Так, на ряду с универсальными ЯПВУ существуют специализированные языки. Например, FORTRAN предназначен для программирования математических и научных задач, а GOBOL – для программирования экономических задач. Кроме того, имеются ЯП, позволяющие проще и качественней создавать программы по обработке БД.

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

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


 

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

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

Рассмотрим пример: пусть требуется подсчитать число букв А в тексте, ограниченном справа символом #. Запись соответствующего алгоритма на Pascal имеет следующий вид:

Program СЧЕТ_БУКВЫ_А;

Var s:char;c:inseger;

Begin c:=0;

Repeat Read(s);

If s=’A’ Ther c:=c+1

Until s=’#’;

Readln (c)

End

 

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

 

Где дуга без стрелки соответствует отождествлено соединяемых его вершин. «Все» - это интерм или символ внутреннего алфавита RBM, означающих (и в данном случае), что на дуге «все» может быть любой символ из тех, которые используются для записи исходного текста. Приведенный граф является программой R-машины или R-программы. Эта программа задает пока только логическую структуру исходного текста (ЛСД). В данном случае она задает ЛСД как произвольную последовательность любых символов, выделяя в ней два символа А и #.

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

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

 

 

Такой граф является окончательной R-программой. Запись этой программы для ввода-вывода в компьютер имеет следующий вид

R-программа счетчик_букв_А

счетчик с

 

нач.уст *   с=0   счет
счет А с=с+1 Счет
  # Печать с Выход
  все * Счет
  конец    

 

Первые две строки этой программы – вспомогательные и задают соответственно имена программы и используемый счетчиковой памяти RBM.

Запись R-программы и каждой команды RBM производится в четыре колонки. В первой и последней записываются метки (нач.уст, счет, выход), задающие последовательность шагов по реализации алгоритма. Во 2-й колонке записывается информация по структуре исходного текста. Эта информация является некоторым условием выполнения линейных операторов алгоритма, которые записываются в 3-й колонке.

Работа R-программы начинается анализом 1-й команды RBM в 1-м комплексе команд, обозначенным именем «нач.уст.». В нашем случае этот комплекс содержит одну команду, которая всегда выполнима, т.к. содержит во 2-й колонке после условий метасимвол *. Поэтому счетчику «с» присваивается 0 и управление передается следующему комплексу команд RBM с именем «счет». Этот комплекс состоит из трех команд RBM. 1-ая из них выполнима, если 1-й символ (в общем случае – текущий) исходного текста является буквой А. В этом случае счетчик увеличивается на 1, управление передается тому же комплексу команд «счет», а текущим символом исходного текста объявляется следующий. Если 1-ая команда этого комплекса невыполнима (т.е. текущий символ не А), то анализируется следующая команда этого комплекса и т.д. Если невыполнимы все команды комплекса, то R-машина остановится, что соответствует ошибке в исходном тексте, либо в самой R-программе. В этом случае ошибка исправляется либо программистом вручную либо автоматически с помощью соответствующего алгоритма нейтрализации ошибки. При отсутствии ошибок работа R-программы заканчивается при переходе на фиксированную метку «выход», во 2-й команде комплекса – «счет». Условием выполнения этой команды является # в качестве текущего в исходном тексте. В этом случае по оператору «печать с» осуществляется печать содержимого счетчика С и останов R-машины на метке «выход». Если анализируется 3-я команда комплекса «счет», то текущий символ исходного текста сравнивается с любым символом синтерма «все». При сравнении никаких действий не производится, т.к. в 3-ей колонке команды записан метасимвол *. Управление передается тому же комплексу команд «счет», а текущим объявляется следующий символ исходного текста и т.д.


Пример:

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

Анализ приведенных примеров позволяет сделать выводы общего характера:

1. R-программа – это наиболее наглядный способ в записи алгоритма. Это высказывание относится к графической и к линейной форме записи программы. Традиционная форма записи программ на языках программирования менее технологична, чем форма записи R-программы. Поэтому R-программы эффективнее в отладке, изучении и эксплуатации, чем программы, написанные на традиционных ЯП. Позиционный способ записи R-программы обладает еще одним преимуществом по сравнению с традиционным. В R-программах отсутствуют ключевые слова If, case, for, while.

В самих R-программах также имеется элемент, которого не было в традиционных программах – это метки, задающие порядок выполнения R-программ. Поэтому может показаться, что метки утяжеляют текст R-программы. Но это не так, т.к. метки R-программ активно участвуют в документировании программ, обозначая отдельные участки алгоритмов. Кроме того, метки R-программ вынесены из основного поля программы на края и записываются строго в первой и последней колонках, поэтому при чтении R-программ метки могут игнорироваться. В отличие от блок-схем графическая запись R-программ намного технологичнее. Она не содержит сложных профилей (¸, * и т.п.). Графическая R-программа

Графическая R-программа и R-программа в машине всегда соответствуют друг другу с точность до простейших перекодировок, которые всегда могут быть выполнены малоквалифицированным персоналом или автоматически на ЭВМ с выдачей на принтер или графопостроителем.

2. Для записи алгоритма в R-программе используется только линейные операторы типа присваивания обращения к процедурам стандартных операций записи чтения поиска и т.д. на различные типы памяти ЭВМ.

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

3. R-программа – это наиболее компактный способ записи. Обычно R-программа в 1,5-3 раза короче (содержит меньше символов), чем аналогичная программа на языке высокого уровня.

Пример. Пусть требуется вычислить корни уравнения ах2+bx+c=0. Известным решением этого уравнения является формула , где D=b2-4ac. Алгоритм вычисления корней в общем случае можно записать следующим образом.

Шаг 1. если а=0, то шаг 5 иначе

d=x2,

Шаг 2 если d=0, то ДРВК: , х21-d, x2=x1-d, x1=x1+d,

выход

Шаг 3. если d<0, то ДКК: , выход

Шаг 4 DPK: выход

Шаг 5 если , то КО: . Выход

Шаг 6 если , то КН: выход

Шаг 7 КБН: выход

 

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

ДРВК – два различных вещественных корня

ДКК – два комплексных корня

КО – корень один

КН – корней нет

КБМ – корней бесконечно много.

Составим блок-схему этого алгоритма.

 

КБМ

 

R-программа этого же алгоритма будет выглядеть следующим образом:

 

 

 

Запись этого алгоритма в линейном виде для ввода в ЭВМ имеет следующий вид

 

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

счетчик a, b, c, d, x1, x2

начало * ввод a, b, c анализ

анализ условие a<>0 x1= , ДРВК

 

КО b<>0 Выход
КН c<>0 * Выход
КБН * * Выход
ДРВК d>0 d= sqrt(d) x2=x1-d x1=x1-d Выход
ДКК d<0 х2= sqrt(-d) Выход
ДРК d=0 * Выход
    Конец