Перевести страницу

Создание приложений для науки и производства ещё не было таким простым

Операции управления данными

Операции управления данными предназначены для передачи значений между переменными, инициализации, получения сведений о данных и удаления переменных.


=

Форматы вызова:

    <parameter0> = <parameter1>;

    (<parameter0> = <parameter1>)

    = <parameter0> <parameter1>;

    (= <parameter0> <parameter1>)

возвращает значение любого типа, возврат можно проигнорировать, число параметров 2;

первый параметр любого типа, допустима только переменная, массив не допустим;

второй параметр такого же типа, как первый, допустим любой операнд, массив не допустим;

назначение операции: присвоение, копирует значение второго параметра в полученную первым переменную, может возвращать скопированное значение для дальнейшего использования (использования в качестве параметра другой операции),

    str s1 s2; s1 = "строка";

    puts (s2 = s1);

в результате s2 будет содержать такое же значение, как s1, и оно будет напечатано в стандартный вывод.


data

Формат вызова:

    data <parameter0> <parameter1> [<parameter2>...<parameter31>];

ничего не возвращает, число параметров от 2 до максимально допустимого;

первый параметр только массив любого типа (если указан не массив, то компиляция будет прервана с сообщением об ошибке);

остальные параметры такого же типа, как первый, любые операнды, массивы не допустимы;

назначение операции: инициализация массива, принимает первым параметром имя массива любого типа, для которого допустимо присвоение, вторым и следующими параметрами значения данных такого же типа, заполняет ими элементы массива по очереди, с 0-го и до последнего, если указано меньше значений, чем размер массива, оставшиеся элементы не изменятся, если указано больше, то лишние значения будут проигнорированы, например:

    str message[3];

    int i;

    data message "so good" "so so" "so bad";

    for i ((sizeof message) - 1) 0 -1

    {

        stdout message[ i ] " ... ";

    }

в результате будет напечатано:

    so bad ... so so ... so good


sizeof

Формат вызова:

    (sizeof <parameter0>)

возвращает беззнаковое целое, параметр один;

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

назначение операции: вычисление размера массива (числа элементов), возвращает беззнаковое целое, равное числу элементов массива, полученного параметром. Примеры:

    floatarray[100];

    puts (sizeofarray);

в результате будет напечатано число 100

    float a1[10];

    uint a2[(sizeof a1)];

в результате массив целых a2 получит такой же размер, как и массив вещественных a1.


sizeof-1

Формат вызова:

    (sizeof-1 <parameter0>)

возвращает беззнаковое целое, параметр один;

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

назначение операции: принимает параметром массив любого типа и возвращает его размер минус единица, эквивалентно ((sizeof array) - 1), но более удобно при вычислении размера массива для выполнения циклической операции над его элементами при помощи операции for. Пример использования:

    str a[10];

    int i;

    filereads somefile a;

    for i 0 (sizeof-1 a) 1

        { puts a[i] };

загрузит текстовые строки из файла, имя которого содержится в somefile (подразумевается, что оно задано в Ci-программе ранее) и напечатает их.


Следует заметить, что более удобно использовать для аналогичных целей цикл loop, но в этом случае надо указывать полное количество элементов, то есть, использовать sizeof:

    str a[10];

    int i;

    filereads somefile a;

    loop

    {

        puts a[i]

    } (sizeof a) i;


clear

Формат вызова:

    clear <parameter0> [<parameter1>...<parameter31>];

ничего не возвращает, число параметров от 1 до максимального;

параметры любого типа, допустимы только переменные, допустимы массивы, типы всех параметров могут быть различны;

назначение операции: очистка данных, устанавливает в одиночных переменных или во всех элементах массива значения как после их создания, например:

    int a1 a2[10];

    a1 = (a2[5] = 10);

    clear a1 a2;

    puts a1 " " a2[5];

в результате будет напечатано: 0 0


sort

Формат вызова:

    sort <parameter0> [<parameter1>];

ничего не возвращает, число параметров от 1 до 2;

первый параметр любого типа, допустим только массив;

второй параметр типа bool, допустим любой операнд;

назначение операции: сортировка массивов различных типов данных, для которых разрешено сравнение, первый параметр задает массив для сортировки, второй необязательный параметр задает направление сортировки (если опущен или FALSE то сортировка по возрастанию, если TRUE, то по убыванию), если указан массив такого типа, который недопустим для сортировки, то программа прерывается с сообщением об ошибке во время выполнения, пример использования:

    data fa 0.01 3e8 123.456 987E-2;

    puts fa[0] fa[1] fa[2] fa[3] fa[4];

    ``напечатает: 1.000000E-2 3.000000E8 1.234560E2 9.870000 0.000000

    sort fa TRUE;

    puts fa[0] fa[1] fa[2] fa[3] fa[4];

    ``напечатает: 3.000000E8 1.234560E2 9.870000 1.000000E-2 0.000000

    data sa "a" "-----" "123456" ". ." "message";

    puts sa[0] sa[1] sa[2] sa[3] sa[4];

    ``напечатает: a ----- 123456 . . message

    sort sa;

    puts sa[0] sa[1] sa[2] sa[3] sa[4];

    ``напечатает ----- . . 123456 a message