Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие1.doc
Скачиваний:
1
Добавлен:
14.08.2019
Размер:
1.32 Mб
Скачать

Глава 3 технология разработки программ на эвм.

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

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

3.1. Этапы решения задачи на ЭВМ

При решении задач в вычислительной системе можно выделить следующие этапы:

 А. Постановка и формулировка задачи.

Необходимо в самом начале четко поставить задачу, то есть:

- определить цели решения и наименование задачи;

- изучить закономерности исследуемого процесса;

- обосновать и выбрать показатели эффективности;

- определить исходные данные с указанием размерности и пределов изменения;

- определить выходные данные (результаты счета);

- оговорить промежуточные результаты;

- ввести ограничения и допущения, принимаемые в задаче.

В результате этого этапа мы имеем словесное формулирование задачи с указанием исходных данных, ожидаемых промежуточных и конечных результатов, их точности и достоверности.

Б. Разработка математической модели и составление алгоритма.

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

"Математическая модель - приближенное описание какого-либо класса явлений внешнего мира, выраженное с помощью математической символики" (академик А.Н.Тихонов).

Результат этапа: метод решения поставленной задачи.

В. Разработка алгоритма.

Разработка алгоритма, то есть разработка последовательности математических действий, обеспечивающих достижение результата решения.

Термин "алгоритм" обычно используется для обозначения некоторой последовательности действий, приводящих к достижению нужного результата.

В IX в. великий узбекский математик Мохаммед аль-Хорезми разработал правила выполнения четырех арифметических действий над числами в десятичной системе счисления. Множество этих правил назвали алгоритмом (algorithmi - от латинского написания аль-Хорезми (из Хорезма)), а затем словом "алгоритм" стали обозначать совокупность правил подобного вида, а не только правил выполнения арифметических действий.

Долгое время понятие алгоритма использовалось исключительно математиками, обозначая правила решения различных задач. Развитие математической науки привело к необходимости уточнения понятия алгоритма - одного из основных, базовых математических понятий, к разработке новой математической дисциплины "теории алгоритмов".

Большое значение понятия алгоритма стало особенно очевидным в связи с развитием вычислительных систем. Оказалось, что составление алгоритма является необходимым этапом решения задач при помощи компьютера. Сегодня - алгоритм, а завтра - компьютерная программа.

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

Алгоритм характеризуется следующими свойствами:

  • дискретностью, т.е. способностью преобразования исходных данных за прерывистые отдельные законченные шаги;

  • массовостью, т.е. применимостью алгоритма ко всем задачам рассматриваемого типа при любых исходных данных. Как установлено в теории алгоритмов, существуют и такие классы задач, для решения которых нет и не может быть установлен универсальный прием - алгоритм решения (хотя при отдельных ограничениях на данные решения может быть найден). Примером такой алгоритмически неразрешимой задачи является теорема Ферма: xn + yn = zn при n>4. Возможно перевести некоторые алгоритмически неразрешимые задачи в алгоритмически разрешимые. Например, задачи перевода вещественных чисел из десятичной системы в двоичную, путем введения ограничения по точности;

  • определенностью, т.е. строгим однозначным определением смысла и порядка выполнения его отдельных шагов;

  • результативностью, т.е. выполнимостью его за конечное число шагов;

  • формальностью, т.е. возможностью правильного восприятия и выполнения его любым пользователем;

  • сложностью, т.е. минимальным количеством информации, необходимым для его описания. Сложность алгоритма определяется: полиномиально, в степенном виде, логарифмически;

  • трудоемкостью, т.е. сложностью вычислений, определяемой объемом вычислений и количеством работы вычислительной системы в целом;

  • детерминированностью, т.е. однозначностью результата при заданных исходных данных;

  • понятностью, когда каждая команда алгоритма входит в систему команд исполнителя (СКИ) и обеспечивает его выполнение.

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

Будем называть два алгоритма эквивалентными, если:

1) множество допустимых исходных данных одного из них является множеством допустимых исходных данных и для другого; из применимости одного алгоритма к каким-либо исходным данным следует применимость и другого алгоритма к этим исходным данным;

2) применение этих алгоритмов к одним и тем исходным данным дает одинаковые результаты.

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

1) Описания используемых в алгоритме переменных

2) Ввода. Присваиваются некоторым переменным значения исходных данных, подготовленных на внешних носителях.

3) Вывода. На внешний носитель передаются значения вычисленных переменных.

4) Присваивания (вычислительный). Присваивают переменным значения, полученные в результате вычисления выражений

y=y+2

Значение переменной y формируется из старого ее значения и прибавления константы равной 2. После выполнения операции в поле памяти переменной y будет записано новое значение, старое при этом будет уничтожено.

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

6) Стандартный. Обращение к стандартному, т.е. заранее разработанному программному обеспечению; например, встроенной функции, подпрограмм и т.д.

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

При графической форме алгоритм представляется в виде схемы в соответствии с ГОСТ 19.003-80.

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

Алгоритм сложной программы представляет собой всевозможные комбинации рассмотренных трех типов. Заметьте, что каждая структуры имеет один вход и один выход. Комбинации правильных программ, полученные с использованием трех основных управляющих структур (последовательности, выбора и повторения), также являются правильными программами. Допустимо вложение нескольких циклов друг в друга. Перекрытие циклов запрещено. Переход внутрь цикла извне запрещен.

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

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

Г. Разработка программы на алгоритмическом языке.

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

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

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

1. При разработке программа делится на небольшие модули, имеющие низкую степень связи друг с другом.

2. Написание программы выполняется в соответствии с правилами структурного программирования.

3. Программа пишется так, чтобы ее текст не требовал серьезной доработки и перестройки при тестировании и отладке.

4. При сомнении в правильности использования и выполнения того или иного оператора (компонента ОС) следует проверить свои подозрения с помощью специально подобранных тестовых данных и программ.

Д. Отладка и тестирование.

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

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

Известны следующие подходы к отладке программ.

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

Большая часть работы по отладке программ выполняется при пропуске их через ЭВМ. При этом предполагается максимальное использование компонентов программного обеспечения ЭВМ для выявления ошибок.

Процесс отладки совмещается с процессом написания программ. Это позволяет обнаруживать и устранять ошибки в программе в ходе ее кодирования.

В целом отладка может выполняться следующими методами:

1. Проверка программы за столом путем мысленного выполнения ее операторов, используя конкретные исходные данные;

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

3. Интерактивный режим, при котором специальными программными средствами (например, встроенным отладчиком Borland-Pascal 7.0) обеспечивается возможность непосредственного наблюдения за процессом выполнения программы на ЭВМ и оперативного вмешательства в него.

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

1) ошибки описания задачи, допущенные при ее постановке;

2) ошибки в выборе алгоритма (метода) решения задачи;

3) ошибки анализа ситуаций, в которых может оказаться программа при ее функционировании в реальных условиях;

4) ошибки этапа программирования;

5) ошибки в документации;

6) ошибки физического характера:

- потеря или перестановка строк;

- несоответствие исходных данных требуемому формату;

- ошибки при набивке и т.п.;

7) ошибки аппаратуры.

Таблица 3.1 Характерные ошибки подготовки задачи к решению в ВС

Вид ошибки

Пример

Неправильная постановка задачи

Правильное решение неверно сформулированной задачи

Неверный алгоритм

Выбор алгоритма, приводящего к неточному или неэффективному решению задачи

Ошибки анализа

Неправильное программирование алгоритма

Семантические ошибки

Непонимание порядка выполнения команд

Синтаксические ошибки

Нарушение правил, определяемых языком программирования

Ошибки при выполнении

операций

Отсутствие указаний на ограничивающие условия вычислений (деление на 0 и т.п.)

Ошибки в данных

Неудачное определение возможного диапазона изменения данных

Ошибки в документации

Документация пользователя не соответствует действующему варианту программы

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

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

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

Е. Счет, обработка и анализ результатов вычислений.

Сущность этапа: проведение необходимых объемов вычислений по разработанной программе, сопоставление полученных результатов с логическими закономерностями реального процесса или явления.

Ж. Составление документации на программу.

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

Составление и оформление программной документации ведётся параллельно с разработкой и отладкой программ и является весьма ответственной частью работы по разработке программного изделия. Разработка и оформление программной документации осуществляются в соответствии с правилами, устанавливаемыми комплексом государственных стандартов, получивших общее название Единая система программной документации (ЕСПД). Состав и назначение ЕСПД устанавливается ГОСТ 19.001-77. Виды и содержание программных документов устанавливаются ГОСТ 19.101-77.

Документация на программу должна содержать:

  1. Наименование задачи и ее назначение.

  2. Автор и дата разработки.

  3. Математическое описание задачи и обоснование выбора численного метода решения.

  4. Блок-схема алгоритма.

  5. Таблица идентификаторов и текст программы на языке программирования с необходимыми комментариями.

  6. Контрольный вариант для проверки работоспособности программы. Исходные данные и результаты.

  7. Общие сведения о программе: используемые подпрограммы, язык, время выполнения, требуемый объем памяти, место хранения и способ обращения к ней.

  8. Литература.

3.2. Программирование по принципу сверху вниз

Когда поставленная задача требует составления сложной программы, обычно человеку не удается сразу представить себе детальный вид этой программы в ее эффективной реализации, так как для этого пришлось бы удерживать в голове большой объем информации.

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

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

Пусть требуется написать процедуру, вычисляющую k-е гармоническое число h(k)=1+1/2+...+1/k в виде несократимой дроби числитель/знаменатель. Первый набросок процедуры может быть таким:

1. Procedure Harm (k: integer; var num, denum: integer);

2. Объявления переменных и других объектов

3. Begin

4. Положить h(0)=0

5. For n: =1 to k do

6. Begin

7. h(n):=h(n-1)+1/n

8. Вычислить НОД дроби и сократить ее

9. end

10. end;

Строки 2,4,7 и 8 написаны на естественном языке, остальные - на формальном языке (Паскале).

В этом наброске выделен заголовок процедуры, указаны ее параметры и намечены основные фрагменты будущей программы: задание начального гармонического числа h(0) и цикла для вычисления h(k).

В цикле указана рекуррентная формула для h(k) и сокращение дроби на наибольший общий делитель.

Напишем вторую итерацию программы, детализируя указанные строки. Фраза "Положить h(0)=0" уточняется операторами num:=0; denum:=1; а строка 7 - операторами num:=n*num+denum; denum:=n*denum. Здесь num - числитель, а denum - знаменатель очередной дроби h(n). Вычисление НОД числителя и знаменателя удобно оформить в виде функции NOD(a,b); тогда фраза 8 будет детализирована операторами: d:=NOD(num,denum); num:=num div d; denum:=denum div d. В результате этих уточнений вторая итерация процедуры примет вид:

1. Procedure Harm (k: integer; var num, denum: integer);

2. Объявления переменных и других объектов

3. Begin

4. Положить h(0)=0

4.1. num:=0; denum:=1;

5. For n: =1 to k do

6. Begin

7. h(n): =h(n-1)+1/n

7.1. num: =n*num+denum; denum: =n*denum;

8. Вычислить НОД дроби и сократить ее

8.1. d: =NOD (num, denum); num: =num div d;

denum:=denum div d

9. end

10. end;

Теперь осталось вставить в программу описания переменных n,d и функции NOD, чтобы получить окончательную версию программы.

Program Ex1;

Var k,num,denum,n,d:integer;

{Вычислить НОД дроби и сократить ее}

Function NOD(a,b:integer):integer;

Begin

If b=0 then NOD: =a else NOD: =NOD (b, a mod b)

End;

Begin

Read (k);

{Положить h(0)=0}

num: =0; denum:=1; For n:=1 to k do

begin

{h(n): =h(n-1)+1/n} num:=n*num+denum; denum:=n*denum;

d:=NOD(num, denum); num:=num div d; denum:=denum div d

end;

write(num,'/', denum)

End.

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

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

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

Пусть большая программа М вызывает модули А и В, а те, в свою очередь - C,D и E,F, как показано на рисунке 3.1:

Рис. 3.1 Структура вызовов модулей программой М методом снизу вверх

Рассмотрим теперь, как происходит отладка программы М методом сверху вниз. Программа М пишется первой, чтобы отладить ее, нужны программы А и В, но их нет. Тогда вместо этих программ создаются так называемые заглушки, представляющие собой очень простую версию будущей программы. Пусть, например, модуль А вычисляет значения интеграла от функции f(x) на [a,b], причем функция может быть задана аналитически или таблично, а границы отрезка определяются модулями C и D. Если f(x) задана аналитически, то модуль А переводит ее в специальное представление и вычисляет требуемые значения. Если же f(x) задана таблично, то модуль А находит значения функции некоторым специальным методом. Как видим модуль А делает достаточно сложную работу. Однако заглушка для А может быть очень простой: для любых f(x), a и b она всегда выдает одно и то же число, т.е. имеет вид:

Function ModA(a,b:real; var f:text):real;

Begin ModA:=3 end;

Имея заглушки для А и В, можно отладить всю программу М: проверить ее логику, ввод, вывод и другие детали. Если обозначить через * заглушку, то программу М в этом варианте можно записать как М(*,*).

Итак, можно предложить, к примеру, следующую схему разработки и отладки программы М:

1) М(*,*)

2) М(А(*,*),*)

3) М(А(*,*),В(*,*))

4) М(А(С,*),В(*,*))

5) М(А(С,D),В(*,*))

6) М(А(С,D),В(E,*))

7) М(А(С,D),В(E,F))

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

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

Остановимся на некоторых характеристиках программы, таких как степень комментированности и сложность.

Степень комментированности вычисляется как отношение числа символов в комментариях к общему числу символов в программе. Хорошим стилем считается комментированность в пределах 10-20%. Сложность программы равна числу условий плюс 1. Под условием понимается любая проверка в программе, приводящая к ветвлению вычислительного процесса. Сюда попадают выбирающие операторы, циклы и оператор перехода goto. Если сложность ниже 10 единиц, то получившаяся программа считается приемлемой. В противном случае ее рекомендуется перепроектировать, чтобы сложности составляющих ее процедур, функций и операторной части были по отдельности меньше 10 единиц. Как показывают специально проведенные исследования, программы с большей сложностью гораздо труднее понимать и отлаживать. (Для процедуры Harm комментированность составляет 27,4% , а сложность составляет 3 единицы).

3.3. Программирование по принципу снизу вверх

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

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

В этом случае одна из возможных схем разработки программы М могла бы быть такой:

1) создать C, D;

2) A(C,D);

3) создать E,F;

4) B(E,F);

5) M(A(C,D),B(E,F)).

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

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

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

3.4. Принципы структурированного программирования

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

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

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

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

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

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

3) циклическим повторением более мелкого действия при определенных значениях параметров;

4) использованием более мелкого действия как процедуры или подпрограммы.

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

Вопросы для самоконтроля

  1. В чём заключается первый этап проектирования постановки и формулировки задачи.

  2. Что включает в себя этап математического описания задачи.

  3. Что такое математическая модель?

  4. Какие типы алгоритмов вы знаете?

  5. Назовите известные вам формы представления алгоритма?

  6. В чем заключается принцип программирования «снизу вверх»?

  7. В чем заключается принцип программирования «сверху вниз»?