
- •Технология программирования
- •Содержание
- •1. Курсовой проект по технологии программирования
- •1.1. Цели и задачи дисциплины
- •1.2. Тематика курсовых проектов
- •1.3. Сроки выполнения отдельных этапов
- •1.4. Порядок защиты курсового проекта
- •2. Содержание пояснительной записки
- •3. Разработка технического задания
- •3.1. Соглашение между заказчиком и исполнителем
- •3.2. Правила оформления технического задания
- •4. Анализ и методы решения задачи
- •5. Анализ потоков данных. Организация структур данных программы
- •5.1. Диаграммы потоков данных
- •5.2. Представление потоков данных
- •5.3. Структуры данных
- •5.4. Диаграмма Джексона
- •6. Разработка структуры программы
- •6.1. Декомпозиция программной системы
- •6.2. Методы проектирования
- •6.3. Модульное программирование
- •6.4. Драйвера и заглушки
- •Разработка алгоритмов решения задачи
- •7.1. Описание алгоритмов
- •7.2. Методы разработки алгоритмов
- •8. Разработка пользовательского интерфейса
- •9. Текст программы
- •9.1. Структура листинга
- •9.2. Количество операторов в строке
- •9.3. Отступы
- •9.4. Операторные скобки
- •9.5. Пробелы
- •9.6. Пустые строки
- •9.7. Имена
- •9.8. Комментарии
- •10. Тестирование и отладка программы
- •11. Разработка программных документов
- •11.1. Единая система программной документации
- •11.2. Руководство пользователя
- •11.3. Руководство системного администратора
- •12. Требования по оформлению пояснительной записки
- •Библиографический список
- •Приложения
- •4. Требования к программной документации
- •Федеральное агентство по образованию рф Омский государственный технический университет Кафедра «Автоматизированные системы обработки информации и управления»
- •Пояснительная записка к курсовому проекту на тему: Система учета текущей успеваемости студентов
9.4. Операторные скобки
Существует два основных подхода к расстановке операторных скобок. Первый подход иллюстрируется следующим участком программы:
int factorial( int n ) {
if( n > 1 )
return n * factorial( n-1 );
if( n < 0 ) {
fprintf( stderr, "Factorial error: negative argument\n" );
return -1; //Заведомо невозможный результат
}
return 1;
}
Открывающаяся скобка помещается на той же строке, что и управляющая конструкция, а закрывающаяся — строго на уровне управляющей конструкции.
Второй подход покажем на том же примере:
int factorial( int n )
{
if( n > 1 )
return n * factorial( n-1 );
if( n < 0 )
{
fprintf( stderr, "Factorial error: negative argument\n" );
return -1; //Заведомо невозможный результат
}
return 1;
}
Как видно, отличие состоит в положении открывающейся скобки. Однако закрывающаяся скобка в обоих случаях должна находится на уровне управляющего оператора или описания.
Автору представляется, что второй подход оправдан в большей мере, т. к. обеспечивает улучшенную наглядность. Открывающиеся и закрывающиеся скобки при этом располагаются строго друг под другом, что помогает находить начало и конец составного оператора, функции или описания класса.
Заметим, что наличие или отсутствие скобок не влияет на наличие и размер отступов, что видно в приведенных примерах.
9.5. Пробелы
Особенность зрительного восприятия человека такова, что пробелы распознаются лучше других знаков синтаксиса. Поэтому отдельные элементы текста необходимо отделять пробелами, несмотря на то, что первые, возможно, уже отделены другими знаками препинания (скобки, запятые, точки с запятой и т.д.). В особенности важно отделять стоящие рядом операторы и списки аргументов функций:
Неправильно |
Правильно |
while(i++<dim) move(a,b,ptr[base+off*i]); |
while( i++ < dim ) move( a, b, ptr[base + off*i] ); |
Дополнительные пробелы могут быть также использованы для выравнивания сходных по смыслу или однотипных частей выражений с целью улучшения наглядности, например, при объявлении переменных и для серии присваиваний:
int a, size;
char *buf;
float lenght1, lenght2;
. . .
a = 1;
lenght1 = GetLength();
lenght2 = 0;
size = (int) lenght1;
Практику правильного использования пробелов можно также изучить по всем остальным примерам данного подраздела.
9.6. Пустые строки
Использование пустых строк является важным средством для выделения участков программы. При этом имеет смысл отделять:
определения переменных:
char str[80];
int counter = 0;
fgets( str, 79, infile);
counter++;
последовательности однотипных инструкций или директив:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define NAME_SIZE 256
#define MAX_LEN 3000
3) функции:
int main()
{
. . .
}
char *get_name(FILE *f)
{
. . .
}
4) любые логически завершенные блоки кода:
printf( "Enter size and delta: " ); //Блок ввода данных
scanf( "%d", &size );
scanf( "%f", &delta );
for( i=0; i<size; i++ ) //Блок использования данных
{ a[i] -= delta;
b[i] += delta;
}