четверг, 30 апреля 2009 г.

Обзор технологий программирования. Структурное программирование.


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

Порядок составления программ:

задача ¾

алгоритмы

программа

ЭВМ

На практике широко используются два подхода к алгоритмизации:

1) традиционный подход (с использованием блок-схем);

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

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

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

При структурном подходе к составлению алгоритмов и программ используются три основных правила композиции:

1) альтернативный выбор;

2) циклический повтор;

3) вспомогательные алгоритмы (подпрограммы).

Структурированными считаются алгоритмы и программы состав­ленными только с использованием указанных трех правил структур­ной композиции. Неструктурированными считаются алгоритмы и программы, в которых используются операторы goto ... или отсутст­вует ступенчатая запись циклов и альтернатив.

Основные правила структурной композиции алгоритмов с при­мерами записи их на языке структурированного Бейсика:

1. Альтернативный выбор:

Алгоритм Запись

если х > 0 то if х > 0 then

у := х у = х

иначе else

у := -х у = -х

кесли end if

2. Циклический повтор:

Алгоритм Запись

пока х > 1 цикл do while х > 1

х: = х/2 х = х/2

кцикл loop

3. Вспомогательные алгоритмы (подпрограммы).

Алгоритм Подпрограмма

алг «у = |х|» mod: 'у = |х|

нач '

если х > 0 то if х > 0 then

у := х у = х

иначе else

у := -х у = -х

все end if

кон return

Обращение к алгоритму Обращение к подпрограмме

«у = |х|» gosub mod

В качестве иллюстрации приведем пример структурированного алгоритма «Галерея картинок» и соответствующей структурирован­ной программы:

Сценарий «Галерея картинок»

Список картинок:

1. треугольник

2. прямоугольник

3. кольцо

номер =? «N»


n = 1 n =2 n = 3


В соответствии с этими четырьмя картинками построим три вспо­могательных алгоритма рисования отдельных картинок из «Галереи» и общий алгоритм выбора картинок в соответствии с приведенным выше сценарием:

алг «Галерея картинок»

нач алг «рисунок_треугольника»

вывод («Список картинок:») нач

вывод («1. треугольник») линия (150,50)-(100,100)

вывод («2. прямоугольник») линия (150,50)-(200,100)

вывод («3. кольцо») линия (100,100)-(200,100)

запрос(«номер =», n) кон

графический_экран

если n = 1 то алг «рисунок_прямоугольника»

рисунок_треугольника нач

инес n = 2 то рамка (50,50)-( 150,100)

рисунок_прямоугольника кон

инес n = 3 то

рисунок_кольца алг «рисунок_кольца»

иначе нач

вывод («нет такого рисунка») окружность (100,100), 20

все окружность (100,100),50

кон кон

Реализация данного алгоритма в виде структурированной про­граммы:

Алгоритмы: Программа:

алг «Галерея картинок» 'Галерея картинок

нач cls

вывод («Список картинок:») print «Список картинок:»

вывод («1. треугольник») print «1. треугольник»

вывод («2. прямоугольник») print «2. прямоугольник»

вывод («З. кольцо») print «3. кольцо»

запрос(«номер =», n) input «номер =», n

если n = 1 то if n = 1 then

рисунок_треугольника gosub treug

инеc n = 2 то if n = 2 then

рисунок_прямоугольника gosub box

инеc n = 3 то if n = 3 then

рисунок_кольца gosub ring

инеc п <>или n > 3 то if n <>3 then

вывод («нет такого рисунка») print «нет такого рисунка»

все 'все

кон end

алг «рисунок треугольника» treug: 'рисунок треугольника

нач cls

графический_экран screen 2,0

линия (150,50)-( 100,100) line (150,50)-(100,100),3

линия (150,50)-(200,100) line (150,50)-(200,100),3

линия (100,100)-(200,100) line (100,100)-(200,100),3

кон return

алг «рисунок прямоугольника» box: 'рисунок прямоугольника

нач cls

графический_экран screen 2,0

рамка (50,50)-(150,100) line (50,50)-(150,100),3,b

кон return

алг «рисунок кольца» ring: 'рисунок кольца

нач cls

графический_экран screen 2,0

окружность (100,100),20 circle (100,100),20

окружность (100,100),50 circle (100,100),50

кон return

Данный подход - составление структурированных алгоритмов может применяться к составлению структурированных программ для любых ЭВМ на любых языках программирования - Паскаль, Си, Ада, Модула и т. д.

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

1. Условные действия.

если у <> if у <>then

вывод («недопустим») print «недопустим»

кесли end if

2. Многоальтернативный выбор.

если х > 1 то if х > 1 then

у: = 1 у = 1

инес х < -1 то elseif х < -1 then

у: = -1 у = -1

иначе else

у: = х у = х

кесли end if

3. Циклы со счетчиком:

от k = 1 до п цикл for k = 1 to n

вывод (k×k) print k*k

кцикл next k

4. Циклы с выходами.

цикл do

s: = s + x s = s + x

при х < style=""> if х < 1 then exit do

х: = x/2 x = x/2

кцикл loop

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

Пример записи структурированных алгоритмов и программ с использованием циклов для алгоритма игры-эксперимента «звезд­ное небо»:

Алгоритм Программа

алг «звездное небо» ' звездное небо»

нач сls

цикл do

запрос(«звезд=», п) input «звезд=», n

при п <= 0 выход if n <= 0 then exit do

графический_экран screen 2,10

от k = 1 до п цикл for k = 1 to n

х: = случайное [0:200] х = rnd*200

у: = случайное [0:200] у = rnd*200

точка (х,у) pset (x,y),3

кцикл next k

кцикл end do

кон end

Пример структурированного алгоритма и программы с приме­нением многоальтернативного выбора и циклов с несколькими выходами:

Алгоритм Программа

алг «угадай-ка» ' угадай-ка

нач cls

вывод («Угадай-ка число») print «Угадай-ка число»

вывод («от 1 до 100») print от 1 до 100»

z: = случайное [0:100] z = int (rnd*100)

цикл do

запрос («число =», х) input «число =», х

при х = z вых if х = z then exit do

если х <> if х < z then

вывод («мало») print «мало»

инеc х > z тo elseif х > z then

вывод («много») print «много»

все end if

кцикл end do

вывод («молодец, умница») print «молодец, умница»

кон end