Слайд 1Программирование и основы алгоритмизации
Тема 3. Структурное программирование
1
Тема 3. Структурное программирование
Шевченко
А. В.
Слайд 2Программирование и основы алгоритмизации
Тема 3. Структурное программирование
2
Шевченко А. В.
На заре
программирования...
QTRAN:: .IRPC X,
MOV R’X,-(SP)
.ENDR
MOV Q.RTBA(R5),R0
MOV Q.RTBS(R5),R1
1$: CLR TR.RLC(R0)
ADD #TR.SIZ,R0
SOB R1,1$
MOV Q.ATBA(R5),R0
MOV Q.ATBS(R5),R1
MUL #TA.SIZ,R1
2$: CLRB (R0)+
SOB R1,2$
Слайд 3Программирование и основы алгоритмизации
Тема 3. Структурное программирование
3
Шевченко А. В.
Что такое
хорошая программа?
Раньше хорошими программистами считали тех, кто писал весьма хитроумные
программы, которые занимали минимум оперативной памяти и выполнялись за кратчайшее время. Это было естественно, потому что в "старое доброе время" размер оперативной памяти был сильно ограничен, а машины были намного медленнее, чем сегодня. Результатом хитроумного кодирования оказывались программы, которые было трудно понять другим лицам. Программисты зачастую сами признавали, что свою собственную программу они с трудом понимают уже через полгода, а то и через месяц.
Дж. Хьюз, Дж. Мичтом. Структурный подход к программированию
Слайд 4Программирование и основы алгоритмизации
Тема 3. Структурное программирование
4
Шевченко А. В.
Проблема "блюда
спагетти"
Слайд 5Программирование и основы алгоритмизации
Тема 3. Структурное программирование
5
Шевченко А. В.
Разработка программ
подчиняется законам Мэрфи
Законы Мэрфи
Всё сложнее чем кажется.
Всё тянется дольше, чем
можно ожидать.
Всё оказывается дороже, чем планировалось.
Если что-то может испортиться, оно обязательно портится.
Слайд 6Программирование и основы алгоритмизации
Тема 3. Структурное программирование
6
Шевченко А. В.
Предпосылки структурного
программирования
"На протяжении многих лет я очень хорошо знал, что квалификация
программистов - убывающая функция от плотности операторов GOTO в создаваемых ими программах. Но лишь совсем недавно я обнаружил, почему использование оператора GOTO имеет такие гибельные последствия. Я пришел к убеждению, что этот оператор должен быть исключён из всех языков программирования высокого уровня.
Эдсгер Дейкстра, март 1968
Структурное программирование - программирование без GOTO
Слайд 7Программирование и основы алгоритмизации
Тема 3. Структурное программирование
7
Шевченко А. В.
Структурный подход
к программированию
Нисходящая
разработка
Структурное
программирование
Сквозной структурный
контроль
Цель - разработка понятных, правильных,
легко
сопровождаемых программ
Слайд 8Программирование и основы алгоритмизации
Тема 3. Структурное программирование
8
Шевченко А. В.
Нисходящая разработка
Модуль
Модуль
Заглушка
Модуль
Модуль
Модуль
Модуль
Заглушка
Заглушка
Разработка
«сверху-вниз» по модульному принципу
Слайд 9Программирование и основы алгоритмизации
Тема 3. Структурное программирование
9
Шевченко А. В.
Свойства модуля
1.
Модуль может быть отдельной программой или подпрограммой (функцией).
2. На модуль
можно ссылаться с помощью имени, называемого именем модуля.
3. Модуль должен возвращать управление тому, кто его вызвал.
4. Модуль может обращаться к другим модулям.
5. Модуль должен иметь один вход и один выход.
6. Модуль должен быть сравнительно небольшим (20 - 200 строк кода).
7. Модуль не должен быть зависим от истории своих вызовов.
8. В идеале модуль должен реализовывать одну функцию, причём целиком.
Слайд 10Программирование и основы алгоритмизации
Тема 3. Структурное программирование
10
Шевченко А. В.
Модульность в
среде Borland C++ Builder
Система
Приложение 2
...
Приложение N
Форма 1
Приложение 1
Форма 2
Форма 3
Функция
1
Функция 2
Функция 3
Слайд 11Программирование и основы алгоритмизации
Тема 3. Структурное программирование
11
Шевченко А. В.
Пример нисходящей
разработки приложения
Управление
заказами
Продукция
Клиенты
Сохранение
данных
Создание
Загрузка
данных
Заказы
Редактирование
Поиск
Удаление
Отображение
Слайд 12Программирование и основы алгоритмизации
Тема 3. Структурное программирование
12
Шевченко А. В.
Структурное программирование
Следование
Развилка
(условие)
Цикл
Логическая структура программы может быть выражена комбинацией трех базовых структур
Слайд 13Программирование и основы алгоритмизации
Тема 3. Структурное программирование
13
Шевченко А. В.
Комбинирование трёх
конструкций
Построение модулей по принципу «один вход - один выход», комбинируя
три основные конструкции: следования, развилки и цикла
Слайд 14Программирование и основы алгоритмизации
Тема 3. Структурное программирование
14
Шевченко А. В.
Псевдокод
Следование
Развилка (условие)
Цикл
Действие
1
Действие 2
Действие 3
ЕСЛИ условие
ТО
Действия
ИНАЧЕ
Действия
ВСЁ-ЕСЛИ
ЦИКЛ
ПОКА условие
Действия
ВСЁ-ЦИКЛ
Слайд 15Программирование и основы алгоритмизации
Тема 3. Структурное программирование
15
Шевченко А. В.
Использование псевдокода
ЕСЛИ
условие 1
ТО
Действие 2
Действие 3
ЕСЛИ условие 4
ТО
ИНАЧЕ
Действие 5
ВСЁ-ЕСЛИ
ИНАЧЕ
Действие 6
ЦИКЛ-ПОКА условие 7
Действие 8
Действие 9
ВСЁ-ЦИКЛ
Действие 10
ВСЁ-ЕСЛИ
2
3
6
7
1
9
4
5
10
8
Слайд 16Программирование и основы алгоритмизации
Тема 3. Структурное программирование
16
Шевченко А. В.
Пошаговая детализация
Загрузка
данных
Загрузка данных о продукции
Загрузка данных о клиентах
Загрузка данных о заказах
Открыть
файл "Продукция"
Читать данные
Закрыть файл
Слайд 17Программирование и основы алгоритмизации
Тема 3. Структурное программирование
17
Шевченко А. В.
От пошаговой
детализации к псевдокоду
Открыть файл "Продукция"
ЕСЛИ успешно
ТО
Сбросить счетчик
элементов массива "Продукция"
ЦИКЛ-ПОКА не встречен конец файла
Читать очередную запись в массив
Увеличить счетчик на 1
ВСЁ-ЦИКЛ
Закрыть файл "Продукция"
ИНАЧЕ
Сообщение об ошибке "Файл не найден"
ВСЁ-ЕСЛИ
Слайд 18Программирование и основы алгоритмизации
Тема 3. Структурное программирование
18
Шевченко А. В.
От псевдокода
к программе на С++
Открыть файл "Продукция"
ЕСЛИ успешно
ТО
Сбросить
счетчик элементов
ЦИКЛ-ПОКА до конца файла
Читать очередную запись
Увеличить счетчик на 1
ВСЁ-ЦИКЛ
Закрыть файл "Продукция"
ИНАЧЕ
Сообщение об ошибке
ВСЁ-ЕСЛИ
FILE* pf = fopen("product.dat", "rb");
if(pf)
{
prod_count = 0;
while(!feof(pf))
{
fread(&prod[prod_count],
sizeof(PROD), 1, pf);
prod_count++;
}
fclose(pf);
}
else
ShowMessage("Файл не найден");
Слайд 19Программирование и основы алгоритмизации
Тема 3. Структурное программирование
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("Файл не найден");
Слайд 20Программирование и основы алгоритмизации
Тема 3. Структурное программирование
20
Шевченко А. В.
Некоторые приемы
структурного программирования на С++
Макросы
#define MODULE(a, b) \
...
Однократное описание повторяющегося кода
Функции
void
MODULE(int a, int b)
{ ... }
Шаблоны
template
MODULE(x a, x b)
{ ... }
Слайд 21Программирование и основы алгоритмизации
Тема 3. Структурное программирование
21
Шевченко А. В.
Некоторые приемы
структурного программирования на С++
int a;
int b;
int c;
void main()
{
a
= StrToInt(...);
b = StrToInt(...);
c = a+b;
}
Отказ от глобальных переменных в пользу локальных
void main()
{
int a;
int b;
int c;
a = StrToInt(...);
b = StrToInt(...);
c = a+b;
}
Слайд 22Программирование и основы алгоритмизации
Тема 3. Структурное программирование
22
Шевченко А. В.
Некоторые приемы
структурного программирования на С++
Возможно более позднее определение переменных
void main()
{
int a;
int b;
int c;
a = ...;
b = ...;
c = a+b;
}
void main()
{
int a = ...;
int b = ...;
int c = a+b;
}
Слайд 23Программирование и основы алгоритмизации
Тема 3. Структурное программирование
23
Шевченко А. В.
Некоторые приемы
структурного программирования на С++
int i;
for(i = 0; i < N;
i++)
a += b[i];
for(i = 0; i < M; i++)
a -= c[i];
for(int i = 0; i < N; i++)
a += b[i];
for(int i = 0; i < M; i++)
a -= c[i];
FILE* inp;
if(inp = fopen(...))
{
...
}
if(FILE* inp = fopen(...))
{
...
}
Сокращение области видимости переменных
Слайд 24Программирование и основы алгоритмизации
Тема 3. Структурное программирование
24
Шевченко А. В.
Сквозной структурный
контроль
Обнаружение и исправление ошибок
на ранних стадиях проекта, пока
стоимость
исправления минимальна,
а последствия наименее значительны
Слайд 25Программирование и основы алгоритмизации
Тема 3. Структурное программирование
25
Шевченко А. В.
Верификация программного
обеспечения
Проверка правильности работы программ
Peer review
(проверка кода)
Тестирование
(проверка результатов)