Предположим, вам надо приготовить обед из трёх блюд. Тогда последовательность действий может быть такой:
PROGRAM СваритьОбед;
BEGIN
ПриготовитьПервое;
ПриготовитьВторое;
ПриготовитьДесерт
END Сварить обед.
PROCEDURE ПриготовитьПервое;
BEGIN
ПодготовитьМясо;
НарезатьКартошку;
НарезатьЛук;
ПоставитьКастрюлюСво<wbr />дой;
ЕСЛИ ВодаВскипела ТО БроситьМясоВводу END;
ЕСЛИ МясоГотово ТО ДобавитьКартошку; ДобавитьЛук END;
КОГДА МясоСВарилось ВЫХОД END (*завершение процедуры*);
END ПриготовитПервое;
Аналогично пишутся и процедуры для второго блюда, и для десерта.
В свою очередь, каждый шаг внутри каждой процедуры (поставить кастрюлю с водой на плиту, положить мясо в воду, когда вода вскипела...) - это тоже всё более простые и простые процедуры, которые в конечном итоге, на каком-то шаге вложенности, сведутся к нескольким базовым командам языка.
Это и есть пример программирования сверху вниз: когда исходная задача разбивается на ряд шагов, затем каждый шаг опять разбивается на ряд ещё более мелких, и так далее.
Программирование снизу вверх может включать в себя и какие-то вещи из "сверху вниз". ПРи программировании снизу вверх сначала решаются какие-то частные задачи, пишутся простые программки для частных и/или простых случаев, на которых отрабатываются отдельные алгоритмы или отдельные процедуры большой программы. К примеру, для программы редактирования текста пишутся отдельные блоки - отбражение текста на экране, поиск и замена последовательности символов в тексте, проверка орфографии, шрифтовое оформление текста... Все эти блоки могут создаваться и отлаживаться отдельно и независимо, и каждый и- нх сам по себе, в рамках выполняемой задачи, вполне может писаться "сверху вниз", но с точки зрения основной программы это будет именно снизу вверх.