Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Определение символических констант



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

Пример.

PI=3.141593 TAB_SIZE=100

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

С

Формат директивы определения символической константы:

#define < имя> < постоянное выражение>

Пример.

# define PI 3.141593

#define EOF (-1)

#define PI2 (2*PI)

Значение константы желательно заключать в скобки, поскольку при подстановке возможны ошибки.

Пример.

а) #define E (5+10)

б) #define E 5+10

Подстановка 2*E в случае б) даст ошибку.

Некоторые определения.

Макроопределение – определение имени с помощью директивы #define.

Макроподстановка – замена имени в тексте программы на значение соответствующей константы.

Макровызов – появление имени символической константы в тексте.

Макросредства или макросы – средства, реализующие макроподстановки.

Пример. При вычислении квадратичной формы замена размера массивов, равного 4 или 30, на константу SIZE позволяет при модификации программы сделать изменение размера в месте ее объявления, т.е. не будет необходимости поиска и замены всех вхождений данного размера в текст программы.

#define SIZE 30

...............

float matrix( int m, float a[ ][SIZE], float x[ ], float y[ ]){

…………..

}

Basic

Здесь также существует директива, выполняющая аналогичные функции. Ее формат:

#Const < имя> =< постоянное выражение>

Пример.

#Const PI=3.141593

#Const LEN_A=300

#Const LEN_B=300

#Const LEN_C=( LEN_A+ LEN_B)

Включение файлов в текст программы

Файл – любая совокупность данных, имеющая отдельную спецификацию и включенная в каталог (папку) операционной системы. Формат спецификации: < имя>.< тип (расширение)>

Принятые по умолчанию типы файлов:

.c - исходный текст на языке C,

.cpp - исходный текст на языке C++,

.vb - исходный текст на языке Visual Basic.NET,

.obj|o - объектный (оттранслированный) модуль,

.exe - загрузочный (выполняемый) модуль,

.h - заголовочный ( header ) файл.

C

Включение файла в текст программы выполняется с помощью директивы вида:

# include {" < спецификация файла> " | < < спецификация файла> > }

Пример.

# include < stdio.h>

# include " my.h"

Обычно в текст программы включают заголовочные (.h ) файлы. В заголовочные файлы принято включать общие для различных процедур символические константы, прототипы функций, другие описания и определения. Очень много.h файлов входят в состав транслятора. Например, stdio.h описывает стандартный пакет библиотечных функций ввода-вывода, в частности функции scanf и printf, math.h содержит прототипы всех библиотечных математических функций, coniow.h – прототипы упоминавшихся выше функций консольного ввода-вывода.

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

Теперь приведем в качестве примера законченную работоспособную программу.

#include < stdio.h>

#define SIZE 30

#define ESC 27

/*******************************************************/

/* ВЫЧИСЛЕНИЕ КВАДРАТИЧНОЙ ФОРМЫ */

/*******************************************************/

int main( ){

float u[SIZE], // Входной вектор

b[SIZE][SIZE], // Входная матрица v[SIZE], // Вектор b*u

scalar( int , float [ ], float [ ]); // Скалярное произведение векторов

int m, // Размер массивов

i, j;

bool fl; // true-неправильный ввод

void matrix( int, float [ ][SIZE],

float [ ], float [ ]); // Умножение матрицы на вектор

do {

fl= true;

while (fl){

clrscr( );

printf(" Размер матрицы: " );

scanf(" %d", & m);

if (m< 1||m> SIZE){

printf(" Размер матрицы должен быть в диапазоне[1: %d]\n",

SIZE);

getch();

} else fl= false;

}

printf(" Исходный вектор: \n" );

for (i=0; i< m; i++){

scanf(" %f", & u[ i ]);

}

printf(" Исходная матрица: \n" );

for (i=0; i< m; i++){

for (j=0; j< m; j++){

scanf(" %f", & b[ i ][ j ]);

}

}

matrix(m, b, u, v );

printf(" \n\nКвадратичная форма равна %.5g\n", scalar(m, v, u ));

printf(“\nEsc – выход из программы, продолжение – любая

клавиша\n”);

while (getch( )! =ESC);

}// End main

/* Умножение матрицы на вектор */

void matrix( int m, float a[ ][SIZE], float x[ ], float y[ ]){

int i, j;

for (i=0; i< m; i++){

for (y[ i ]=j=0; j< m; j++){

y[ i ]+=a[ i ][ j ]*x[ j ];

}

}

}// End matrix

/* Скалярное произведение векторов */

float scalar( int m, float x[ ], float y[ ]){

int i;

for (z=i=0; i< m; i++){

z+=x[ i ]*y[ i ];

}

return z;

}// End scalar

Basic .

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


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

Вопросы для самопроверки

1. Где записываются директивы препроцессора?

2. Какова область действия директивы?

3. Можно ли обойтись без директивы #include в языке C?

Контрольные вопросы

1. Что такое препроцессор?

2. В чем выгода применения директивы #define?

3. В каких заголовочных файлах находятся прототипы математических функций и функций ввода-вывода?

 

СТИЛЬ ПРОГРАММИРОВАHИЯ

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

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

9.1. Формирование листинга

Исторически листингом называли распечатку текста программы. Сейчас под этим можно понимать размещение текста программы на любом носителе.

Размещение инструкций. Следует записывать 1 инструкцию (кроме сложных) в строку.

Причины:

- соответствует правилам структурного программирования, требующим сдвигать инструкцию по строке в соответствии с уровнем ее вложенности;

- облегчает коррекцию текста.

Перенос:

- если слово не входит в строку, начинайте его с новой;

- делайте перенос после знака операции; это даст ошибку при трансляции в случае случайного удаления строки продолжения.

Пример.

a=b-c Hехорошо! a=b-c- Хорошо!

-(d+2); (d+2);

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

Циклы.

for (i=0; i< 16; i++){ For i=0 To 15

c=0; c=0

for (k=0; k< 12; k++){ For k=0 To 11

c+=b[k]; d[k]=sqrt(k+1); c+=b(k): a(k)=Sqrt(k+1)

} Next k

a[ i ]=c; a(i)=c

} Next i

Условные инструкции.

if (a> b){ If a> b Then

a=-a; b*=a; a=-a: b*=a

} else { Else

a*=b; b=-b; a=a*b: b=-b

} End If

При переносе инструкции строки продолжения следует сдвигать вправо на 5-6 позиций.

Пропуск строк и пробелы. Пропуск строки – это вертикальная разрядка текста.

Применение:

- выделение логических частей текста;

- после нарушения естественного порядка выполнения программы (инструкции continue, break, goto, различные формы инструкции Exit );

- выделение комментариев.

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

Пример.

if (a< b & & b< c){

Комментарии

Цель – пояснить логику, облегчить отладку, тестирование и сопровождение программ.

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

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

Можно также привести грубый количественный критерий: ориентировочный объем комментариев – 30-50% от объема кода программы.

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

Оглавления. Разумно составлять для программ, объем кода которых превышает 300 – 500 КБ.

Вводные. Записываются перед началом текста процедуры. Содержание:

- функция, выполняемая процедурой;

- характеристики и особенности процедуры.

Пример.

/**********************************************************/

/* WHEN_WHOLE_BASE */

/* Редактировать поле, если БД не разделена */

/**********************************************************/

Пояснительные. Служат для пояснения:

- параметров и переменных при объявлении (помещаются справа от имени);

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

- логического фрагмента процедуры (на отдельных строках перед началом фрагмента).

Пример.

if (adpec == NULL){ // Hесогласованная ссылка

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

Имена


Поделиться:



Последнее изменение этой страницы: 2017-04-12; Просмотров: 366; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.054 с.)
Главная | Случайная страница | Обратная связь