Заходи
Гость

Хостинг

Статистика
Яндекс.Метрика Счетчик PR-CY.Rank
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Ccылки

Свежак

Главная » Статьи » Все статьи » Прогараммирование

ТЕОРИЯ ПЕРВИЧНЫХ ПРОГРАММ

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

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

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

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

Любая блок-схема состоит только из этих трех компонентов.

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

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

Первичные программы а, б, д, и представляют собой последовательности функциональных узлов. Первичная программа еконструкция if-then, .ж — do-while, з - repeat-until, к - if-then-else, л - do-while-do.

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

Многие из описанных выше наборов управляющих структур были включены в существующие языки программирования. Эти структуры представляют собой первичные программы с неболь­шим количеством узлов и просты для понимания.

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

АЛЬТЕРНАТИВЫ

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

Условный оператор является частным случаем case- или switch-оператора, в котором выражение имеет булев тип. Так как булевы типы имеют только два допустимых значения, условный оператор делает выбор между двумя возможными путями. Конструкция для двух альтернатив на Паскале имеет следующий вид:

if  L

 then begin

{Действие  при  L-True} end; else begin

{Действие  при L=Falseend;   здесь L-логическое выражение.

Вариант конструкции для нескольких альтернатив имеет вид:

Switch  :  =         0;

L1   :   =. .

L2   :   =   . .        .

L3   :   =. .

if L1 then Swich : = 1;

if L2 then Swich : = 2;

if L3 then Swich : = 3;

case Swich of 1: begin

{Действие   при  L1=True} end; 2 : begin

{Действие  при L2=True} end; 3:begin

{Действие  при L3=Тrие} end; else begin

{Вывод сообщения об ошибочном кодировании модуля} end; end;    {End  of  Case}


ЦИКЛЫ

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

Цикл while-do                             Цикл repeat-until

{Подготовка}                         {Подготовка}

While   L  do                               repeat
begin                                        {
тело  цикла}

{тело  цикла}                      until   L;
end;

здесь L -логическое выражение, которое при значении True явля­ется условием продолжения выполнения while-do или условием окончания выполнения repeat-until. Подготовка и тело цикла явля­ются цепочками функциональных узлов.

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

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

for <параметр_цикла> := <нач_знач>

 to <кон знач> do <оператор>;

здесь for, to, do — зарезервированные слова; <параметр _цикла> — переменная любого перечисляемого типа.

Цикл выполняется для каждого из значений от <нач_знач>

и до <кон_знач>.

ОПЕРАТОРЫ ПЕРЕХОДА

Оператор безусловного перехода имеет следующий вид: goto, здесь goto — зарезервированное слово: <метка> — метка.

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

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

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

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

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

В современных языках Object Pascal, Ada, C++ и Eiffel есть спе­циальные языковые конструкции, так называемые исключения, ко­торые непосредственно решают и эту проблему.

Категория: Прогараммирование | Добавил: Iron (12.06.2012)
Просмотров: 394 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Статьи
[Менеджмент]
Факторы микросреды организации
[Безопасность систем]
Защита исходных текстов и двоичного кода
[Устронение ошибок систем]
Возможные нежелательные последствия разгона
[Операционные системы]
MAC OS
[Устронение ошибок систем]
Сообщения об ошибках AMI BIOS (часть 2)
[Прогараммирование]
Подпрограммы
[Безопасность систем]
Резервирование и восстановление
[Прогараммирование]
ТЕОРИЯ ПЕРВИЧНЫХ ПРОГРАММ
[Устронение ошибок систем]
Сообщения об ошибках AMI BIOS
[Устронение ошибок систем]
Восстановление загрузки Windows 7 без установочного диска

Категории
Операционные системы [30]
Устронение ошибок систем [13]
Безопасность систем [9]
Прогараммирование [32]
Технологические [0]
Информатика [23]
Бухгалтерский учет [3]
Ценообразование [0]
Экономика [0]
Менеджмент [3]
Психология [0]
Разное [4]

Популярный софт
Iron Kaspersky Internet Security 2015
Kaspersky Internet Security 2015
Iron Virtual DJ
Virtual DJ
Iron SoundForge 11
SoundForge 11
Iron Alcohol 120
Alcohol 120
Iron Norton Internet Security 2014
Norton Internet Security 2014
Iron Loaris Trojan Remover
Loaris Trojan Remover

Жми

Copyright MyCorp © 2017Конструктор сайтов - uCoz