CбИС++ «БИТ»
   О ПРОГРАММЕ   
   О КОМПАНИИ   
   ЗАГРУЗИТЬ   
   ДОКУМЕНТАЦИЯ   
   · Руководство пользователя 
   · СБиС news
   · Статьи
   · Функции
   ПРАЙС-ЛИСТ   
   ВАКАНСИИ   
   АВТОМАТИЗАЦИЯ ТОРГОВЛИ   
СБиС news №18/18.11.98

Новое в новой версии

   Как уже говорилось в предыдущих выпусках нашего листка, вот-вот, ну вот-вот, должна увидеть свет долгожданная новая версия СБиС++ под номером 1.4. В этом выпуске продолжим обсуждение несомненных достоинств этой версии комплекса.


Справка в справке о взаиморасчетах

   Уже упоминалось о новой возможности получать некоторую справочную информацию непосредственно из отчетов. Попробуйте нажать комбинацию <Alt+F1> в справке о взаиморасчетах.
   Результат, как говорится, превосходит все ожидания. Посмотрите, как она (справка) нравится бухгалтеру, в какой он (бухгалтер) отличной форме. СБиС++ - рекомендации лучших бухгалтероводов!


Протокол операций с БД

   Как Вы должны знать, СБиС ведет протокол действий, выполняющихся пользователем. Все значимые действия оператора записываются в файл “MESSAGE.TMP”. После очередного наезда на СБиС++ и разборки с сердитым пользователем было решено фиксировать в этом файле и операции сохранения/восстановления резервной копии базы данных.


Обещанное продолжение:
функции с переменным числом параметров

   В шестнадцатом выпуске в качестве примера мы рассматривали функцию “Макс3”, потом “Макс4”. А вдруг захочется “Макс5” или “Макс666”? Для решения таких задач удобнее описать одну функцию, принимающую произвольное количество параметров, и потом, где надо указывать три параметра, где надо – четыре, а где надо и шестьсот.

Три точки вместо переменных

   В описании таких функций нужно вместо списка параметров указать три точки. То есть заголовок нашей функции преобразуется следующим образом.

функция Максимум(...)

   При взгляде на эту строку у Вас тут же должен возникнуть вопрос – “А как в такой функции обращаться к переданным параметрам?”

Массив “Параметры”

   При вызове функции с переменным числом параметров создается специальный массив с именем “Параметры”, в который и помещаются указанные в скобках параметры. Элементы массива именуются, начиная с “1”, дальше “2” и т.д. То есть, если написать -

Максимум(120,230,403);

   …то будет создан массив из трех элементов:

 Имя   Значение 
1 120
2 230
3 403

   Вот теперь можно приступать к описанию функции. В первом приближении это будет выглядеть так.

функция Максимум(...)
{
   перем П = Параметры[1];
   перем Имя;
   ДляВсех(Элементов(Параметры,Имя))
      П = Макс(П,Параметры[Имя]);
   вернуть П;
}

Обязательные параметры

   На первый взгляд, вроде бы, всё о'кей. И это на самом деле в большинстве случаев будет работать. Но что будет, если эту функцию вызвать без параметров? Можно сразу сказать – “Ничего хорошего!” Потому что в первой строке функции мы рассчитываем на существование параметра с номером “1”. Конечно, по большому счету, функция “Максимум” без параметров смысла не имеет, но нужно ведь это донести и до программы. Для этого необходимо в заголовке функции указать обязательные параметры, а уж потом ставить три точки, например, так.

функция Максимум( A, ... )

   Здесь параметр “А” является обязательным, а уж потом идут необязательные параметры. Описанную таким образом функцию программа не разрешит вызывать без параметров. Как минимум один параметр должен быть указан. Теперь при таком вызове

Максимум(120,230,403);

   …будет создана переменная с именем “А”, хранящая значение “120”, и массив “Параметры”, состоящий из двух элементов:

 Имя   Значение 
1 230
2 403

   Вооружившись новыми знаниями, перепишем нашу многострадальную функцию так:

функция Максимум( А, ... )
{
   перем Имя;
   ДляВсех(Элементов(Параметры,Имя))
      А = Макс(А,Параметры[Имя]);
   вернуть А;
}

   Ну вот, теперь наша функция сделана по последнему слову науки и техники. Хотя, как говорится, нет предела совершенству.

Количество параметров

   И еще один прием, который может пригодиться при написании функций, принимающих произвольное количество параметров. Для определения количества переданных при вызове функций переменных удобно использовать функцию “Размер”.

Информация к размышлению:
функция “Размер”, принимает в качестве параметра массив, возвращает количество элементов в этом самом массиве.

   Например, хочется Вам сообщать об ошибке, если нашей функции “Максимум” передан только один параметр.

функция Максимум( А, ... )
{
   Если( Размер(Параметры)==0 )
      Сообщить(“Ошибка!!!”);
   иначе
   {
      перем Имя;
      ДляВсех(Элементов(Параметры,Имя))
         А = Макс(А,Параметры[Имя]);
   }
   вернуть А;
}

   Как видите, функции таят в себе много нового и неожиданного, так что не расслабляйтесь! Продолжение следует…


Операторы ++ и --

   Наконец-то в СБиС++'е можно писать ++ и даже --. В отличие от большинства других операторов это унарные операторы, то есть в них участвует только одна переменная. Итак, оператор ++ увеличивает значение переменной на единицу, а оператор -- соответственно уменьшает значение переменной на единицу, например:

A = 10;
A++;
# в этой точке А равно 11
A--;
# в этой точке А равно 10

   Конечно, то же самое можно было бы написать и по-другому, но так гораздо короче. Для сравнения – три следующие строчки делают практически одно и то же.

А = А + 1;
А += 1;
A++;

   Как правило, рассматриваемые операторы используются для организации циклов. Например, если некоторое действие нужно выполнить энное количество раз, можно написать так.

i = 1;
Пока( i <= N )
{
   ...
   i++;
}

   Кроме того, что эти операторы увеличивают или уменьшают на единицу переменную, они еще и возвращают некоторое значение. Что вернет оператор, зависит от того, до или после переменной он стоит. Да, да! Операторы ++ и -- можно писать как до, так и после переменной. Если сначала идет оператор, а потом переменная, то вернется значение после выполнения оператора. Если же сначала идет переменная, а потом оператор, то вернется значение переменной до выполнения оператора.
   Дабы проиллюстрировать вышесказанное, предлагаю самостоятельно рассмотреть следующий пример.

А = 0;
Сообщить(++А);
Сообщить(А++);

   Попробуйте сами догадаться, какие сообщения порадуют Ваш взгляд при выполнении данного фрагмента текста.
   Конечно, полезность этого свойства операторов ++ и -- может быть и не столь очевидна, но, например, предыдущий цикл можно переписать так.

i = 0;
Пока( i++ < N )
{
   ...
}

   Безусловно, использовать или нет операторы ++ и -- личное дело каждого. Так что нравится - пользуйтесь, не нравится - не пользуйтесь.


<<< Предыдущий выпуск | Архив выпусков | Следующий выпуск >>>