Смекни!
smekni.com

Лекции по информатики 2 (стр. 17 из 43)

ЭВМ

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

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 п < 1 или n > 3 тоif n < 1 or 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),20circle (100,100),20

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

конreturn

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

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

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

если у < 0 то if у < 0 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 + xs = s + x

при х < 1 выход if х < 1 then exit do

х: = x/2x = 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

если х < z тоif х < z then

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

инеc х > z тoelseif х > z then

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

всеend if

кциклend do

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

конend

В о п р о с ы

1. Что такое алгоритмизация?

2. Что такое структурированные алгоритмы?

3. Что такое неструктурированные алгоритмы?

4. В чем достоинства структурированных программ?

5. В чем недостатки неструктурированных программ?

6. Можно ли гарантировать отсутствие ошибок в программах?

З а д а ч и

1. Постройте вспомогательные алгоритмы и подпрограммы с выде­лением параметров для рисования следующих блоков:

а) крыша;

б) дерево;

в) стена с окном;

г) столб.

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

а) домика с окном и деревом;

б) домика с двумя окнами;

в) домика с собачьей будкой;

г) двухэтажного домика,

3. Составьте алгоритм вывода на экран полной таблицы умножения.