514.85K
Категория: ПрограммированиеПрограммирование

Программирование и основы алгоритмизации. Тема 3. Структурное программирование

1.

Программирование и основы алгоритмизации
Тема 3. Структурное
программирование
Шевченко А. В.
Тема 3. Структурное программирование
1

2.

Программирование и основы алгоритмизации
На заре программирования...
QTRAN::
1$:
2$:
Шевченко А. В.
.IRPC
MOV
.ENDR
MOV
MOV
CLR
ADD
SOB
MOV
MOV
MUL
CLRB
SOB
Тема 3. Структурное программирование
X,<1234>
R’X,-(SP)
Q.RTBA(R5),R0
Q.RTBS(R5),R1
TR.RLC(R0)
#TR.SIZ,R0
R1,1$
Q.ATBA(R5),R0
Q.ATBS(R5),R1
#TA.SIZ,R1
(R0)+
R1,2$
2

3.

Программирование и основы алгоритмизации
Что такое хорошая программа?
Раньше хорошими программистами считали тех, кто писал весьма
хитроумные программы, которые занимали минимум оперативной памяти
и выполнялись за кратчайшее время. Это было естественно, потому что в
"старое доброе время" размер оперативной памяти был сильно ограничен,
а машины были намного медленнее, чем сегодня. Результатом
хитроумного кодирования оказывались программы, которые было трудно
понять другим лицам. Программисты зачастую сами признавали, что
свою собственную программу они с трудом понимают уже через полгода, а
то и через месяц.
Дж. Хьюз, Дж. Мичтом. Структурный подход к программированию
Шевченко А. В.
Тема 3. Структурное программирование
3

4.

Программирование и основы алгоритмизации
Проблема "блюда спагетти"
Шевченко А. В.
Тема 3. Структурное программирование
4

5.

Программирование и основы алгоритмизации
Разработка программ подчиняется законам Мэрфи
Законы Мэрфи
Всё сложнее чем кажется.
Всё тянется дольше, чем можно ожидать.
Всё оказывается дороже, чем планировалось.
Если что-то может испортиться, оно обязательно портится.
Комментарий Каллагана к законам Мэрфи
Мэрфи был оптимистом.
Шевченко А. В.
Тема 3. Структурное программирование
5

6.

Программирование и основы алгоритмизации
Предпосылки структурного программирования
"На протяжении многих лет я очень хорошо знал, что квалификация
программистов - убывающая функция от плотности операторов GOTO в
создаваемых ими программах. Но лишь совсем недавно я обнаружил,
почему использование оператора GOTO имеет такие гибельные
последствия. Я пришел к убеждению, что этот оператор должен быть
исключён из всех языков программирования высокого уровня.
Эдсгер Дейкстра, март 1968
Структурное программирование программирование без GOTO
Шевченко А. В.
Тема 3. Структурное программирование
6

7.

Программирование и основы алгоритмизации
Структурный подход к программированию
Нисходящая
разработка
Структурное
программирование
Сквозной структурный
контроль
Цель - разработка понятных, правильных,
легко сопровождаемых программ
Шевченко А. В.
Тема 3. Структурное программирование
7

8.

Программирование и основы алгоритмизации
Нисходящая разработка
Модуль
Модуль
Модуль
Модуль
Шевченко А. В.
Заглушка
Модуль
Заглушка
Модуль
Заглушка
Разработка «сверху-вниз» по
модульному принципу
Тема 3. Структурное программирование
8

9.

Программирование и основы алгоритмизации
Свойства модуля
1. Модуль может быть отдельной программой или подпрограммой (функцией).
2. На модуль можно ссылаться с помощью имени, называемого именем модуля.
3. Модуль должен возвращать управление тому, кто его вызвал.
4. Модуль может обращаться к другим модулям.
5. Модуль должен иметь один вход и один выход.
6. Модуль должен быть сравнительно небольшим (20 - 200 строк кода).
7. Модуль не должен быть зависим от истории своих вызовов.
8. В идеале модуль должен реализовывать одну функцию, причём целиком.
Шевченко А. В.
Тема 3. Структурное программирование
9

10.

Программирование и основы алгоритмизации
Модульность в среде Borland C++ Builder
Система
Приложение 1
Форма 1
Приложение 2
Форма 2
Функция 1
Шевченко А. В.
...
Приложение N
Форма 3
Функция 2
Функция 3
Тема 3. Структурное программирование
10

11.

Программирование и основы алгоритмизации
Пример нисходящей разработки приложения
Управление
заказами
Загрузка
данных
Создание
Шевченко А. В.
Продукция
Редактирование
Клиенты
Поиск
Отображение
Тема 3. Структурное программирование
Заказы
Сохранение
данных
Удаление
11

12.

Программирование и основы алгоритмизации
Структурное программирование
Следование
Развилка (условие)
Цикл
Логическая структура программы может быть
выражена комбинацией трех базовых структур
Шевченко А. В.
Тема 3. Структурное программирование
12

13.

Программирование и основы алгоритмизации
Комбинирование трёх конструкций
Построение модулей по
принципу «один вход - один
выход», комбинируя три
основные
конструкции:
следования, развилки и
цикла
Шевченко А. В.
Тема 3. Структурное программирование
13

14.

Программирование и основы алгоритмизации
Псевдокод
Следование
Действие 1
Действие 2
Действие 3
Шевченко А. В.
Развилка (условие)
ЕСЛИ условие
ТО
Действия
ИНАЧЕ
Действия
ВСЁ-ЕСЛИ
Тема 3. Структурное программирование
Цикл
ЦИКЛ ПОКА условие
Действия
ВСЁ-ЦИКЛ
14

15.

Программирование и основы алгоритмизации
Использование псевдокода
1
2
6
3
7
8
4
9
5
10
Шевченко А. В.
Тема 3. Структурное программирование
ЕСЛИ условие 1
ТО
Действие 2
Действие 3
ЕСЛИ условие 4
ТО
ИНАЧЕ
Действие 5
ВСЁ-ЕСЛИ
ИНАЧЕ
Действие 6
ЦИКЛ-ПОКА условие 7
Действие 8
Действие 9
ВСЁ-ЦИКЛ
Действие 10
ВСЁ-ЕСЛИ
15

16.

Программирование и основы алгоритмизации
Пошаговая детализация
Загрузка данных о продукции
Открыть файл "Продукция"
Читать данные
Закрыть файл
Загрузка данных
Загрузка данных о клиентах
Загрузка данных о заказах
Шевченко А. В.
Тема 3. Структурное программирование
16

17.

Программирование и основы алгоритмизации
От пошаговой детализации к псевдокоду
Открыть файл "Продукция"
ЕСЛИ успешно
ТО
Сбросить счетчик элементов массива "Продукция"
ЦИКЛ-ПОКА не встречен конец файла
Читать очередную запись в массив
Увеличить счетчик на 1
ВСЁ-ЦИКЛ
Закрыть файл "Продукция"
ИНАЧЕ
Сообщение об ошибке "Файл не найден"
ВСЁ-ЕСЛИ
Шевченко А. В.
Тема 3. Структурное программирование
17

18.

Программирование и основы алгоритмизации
От псевдокода к программе на С++
Открыть файл "Продукция"
FILE* pf = fopen("product.dat", "rb");
ЕСЛИ успешно
if(pf)
{
ТО
prod_count = 0;
Сбросить счетчик элементов
while(!feof(pf))
ЦИКЛ-ПОКА до конца файла
{
Читать очередную запись
fread(&prod[prod_count],
sizeof(PROD), 1, pf);
Увеличить счетчик на 1
prod_count++;
ВСЁ-ЦИКЛ
}
Закрыть файл "Продукция"
ИНАЧЕ
Сообщение об ошибке
ВСЁ-ЕСЛИ
Шевченко А. В.
fclose(pf);
}
else
ShowMessage("Файл не найден");
Тема 3. Структурное программирование
18

19.

Программирование и основы алгоритмизации
Оптимизация кода С++
if(FILE* pf = fopen("product.dat", "rb"))
{
for(prod_count = 0; !feof(pf); prod_count++)
fread(&prod[prod_count], sizeof(PROD), 1, pf);
fclose(pf);
}
else
ShowMessage("Файл не найден");
Шевченко А. В.
Тема 3. Структурное программирование
19

20.

Программирование и основы алгоритмизации
Некоторые приемы структурного программирования на С++
Макросы
Функции
Шаблоны
#define MODULE(a, b) \
...
void MODULE(int a, int b)
{ ... }
template<class x>
MODULE(x a, x b)
{ ... }
Однократное описание повторяющегося кода
Шевченко А. В.
Тема 3. Структурное программирование
20

21.

Программирование и основы алгоритмизации
Некоторые приемы структурного программирования на С++
int a;
void main()
int b;
{
int c;
int a;
int b;
void main()
int c;
{
a = StrToInt(...);
a = StrToInt(...);
b = StrToInt(...);
b = StrToInt(...);
c = a+b;
c = a+b;
}
}
Отказ от глобальных переменных в пользу локальных
Шевченко А. В.
Тема 3. Структурное программирование
21

22.

Программирование и основы алгоритмизации
Некоторые приемы структурного программирования на С++
void main()
void main()
{
{
int a;
int a = ...;
int b;
int b = ...;
int c;
int c = a+b;
}
a = ...;
b = ...;
c = a+b;
}
Возможно более позднее определение переменных
Шевченко А. В.
Тема 3. Структурное программирование
22

23.

Программирование и основы алгоритмизации
Некоторые приемы структурного программирования на С++
int i;
for(int i = 0; i < N; i++)
a += b[i];
for(i = 0; i < N; i++)
a += b[i];
for(int i = 0; i < M; i++)
a -= c[i];
for(i = 0; i < M; i++)
a -= c[i];
FILE* inp;
if(FILE* inp = fopen(...))
if(inp = fopen(...))
{
{
...
...
}
}
Сокращение области видимости переменных
Шевченко А. В.
Тема 3. Структурное программирование
23

24.

Программирование и основы алгоритмизации
Сквозной структурный контроль
Обнаружение и исправление ошибок
на ранних стадиях проекта, пока
стоимость исправления минимальна,
а последствия наименее значительны
Шевченко А. В.
Тема 3. Структурное программирование
24

25.

Программирование и основы алгоритмизации
Верификация программного обеспечения
Проверка правильности
работы программ
Peer review
(проверка кода)
Шевченко А. В.
Тема 3. Структурное программирование
Тестирование
(проверка результатов)
25
English     Русский Правила