Кроме того, часто допускается также операция сцепления строк, записываемая с помощью символа «+». Например:
"123" + "4567" - получится "1234567""абв " + "abc " + " эюя" — получится "абв abc эюя"
Тип «строка»
Бейсик | Паскаль | Си++ |
STRING | string | Базового типа «строка» нет |
Указатели
Некоторые языки программирования допускают в явном виде работу с указателями — адресами физической памяти. При этом в них имеется специальная операция получения адреса конкретной переменной, что позволяет работать с памятью напрямую, примерно так, как это происходит в языках ассемблера. Такая возможность позволяет добиваться высокой эффективности работы программы, но часто приводит к ошибкам, если указатель вдруг получает неверное значение и при его использовании начинает портиться область памяти, предназначенная совсем для других целей.
Сложные данные
Структуры. До сих пор рассматривались базовые типы данных: числа, строки, логические величины — и операции над базовыми данными. Однако для повышения производительности труда программистов и повышения качества их работы необходимо, чтобы язык программирования имел средства, позволяющие описывать данные в виде, максимально приближенном к их реальным аналогам. Например,
Глава 20. Основы программирования
чтобы организовать обработку данных по студентам, в программе удобно не просто описать десяток различных переменных, а объединить их в структуру (или запись) «студент», состоящую из полей разного типа «имя», «пол», «год рождения», «группа» и т. д.
Современные языки программирования позволяют применять такие сложные типы данных, составляющиеся из базовых и определенных ранее сложных типов. В результате удается организовывать структуры данных произвольной сложности: списки, деревья и т. п. При этом структура объединяет группу разных данных под одним названием.
Получить доступ к отдельным составляющим (полям) этой структуры можно по их именам. В рассматриваемых языках программирования такой доступ осуществляется указанием имени структуры и имени поля через точку. Если подобным способом происходит обращение к полю, которое само является структурой, то выделение нужного поля продолжается приписыванием справа имени вложенного поля через точку.Синтаксис описания структуры
20.3. Алгоритмическое (модульное) программирование
Доступ к содержимому структуры:
Student.BirthYear = 1980; Массивы. Доступ к элементам структуры осуществляется по имени ее составляющих. В одних случаях это значительно повышает наглядность исходных текстов и упрощает процесс программирования, но имеется немало ситуаций, когда надо организовать обработку больших объемов данных одного типа, при этом создавать структуры с сотнями и тысячами полей неразумно. Поэтому в дополнение к структурам в языки программирования введено понятие массива, сложного типа данных, доступ к элементам которого происходит по их положению, по номеру или индексу. Например, можно описать массив, состоящий из тысячи элементов численного типа, и затем обратиться к десятому или сотому элементу по его номеру. При описании массива обычно указывается его размер (число элементов) или верхняя и нижняя границы — диапазон, в рамках которого можно обращаться к элементам массива.Синтаксис описания массива
В Бейсике нижней границей считается 1, в Си++ — 0, в Паскале она указывается явно.Вот примеры описания массивов.
Бейсик:
DIM IntArray(1000) AS INTEGER Паскаль: array[1..1000] of integer Си++: int IntArray[1000];Доступ к элементу массива осуществляется по его номеру. Этот номер указывается в круглых (Бейсик) или квадратных (Паскаль, Си++) скобках сразу за именем массива (такое действие называется индексированием):
IntArray( 12 )
IntArray[ i+1 ]Массивы, границы которых явно заданы в команде описания, называются статическими. Их размер известен заранее и не меняется на всем протяжении работы программы.
В последних версиях компилируемых языков программирования реализуются так называемые динамические массивы, размер которых может меняться во время выполнения программы. В ряде случаев это весьма удобно, так как позволяет экономно расходовать память, захватывая ее по мере необходимости. Недостаток динамических массивов в том, что организовать эффективную работу с ними, исполь-Глава 20. Основы программирования
зуя компиляторы, сложно. Приходится выполнять множество проверок, связанных с расходованием памяти компьютера, что понижает общую эффективность приложения. Динамические массивы в Паскале начали поддерживаться совсем недавно, с активным распространением новых мощных ПК, а в интерпретируемых языках типа Бейсика это было сделано довольно давно.
Во многих языках программирования строки рассматриваются как массивы символов. Их допускается индексировать как обычные массивы.
Отличие базовых типов от сложных в том, что в базовых типах нельзя выделить составные части. При этом поле структуры или элемент массива считаются обычными переменными, и их использование в любых операторах ничем не отличается от использования переменных базовых типов.
В развитых языках программирования допускаются массивы, состоящие из структур, и структуры, состоящие из массивов. При этом возможны достаточно сложные формы записи, например: а[0].Items.Strings[4].valueМассив а состоит из структур, в описании которых есть поле Items, являющееся тоже структурой, имеющей поле Strings, которое, в свою очередь, представляет собой массив структур, имеющих поле value.
значение.
Синтаксис команд описания данных
Бейсик | Паскаль | Си++ |
DIM имя AS тип | var имя: тип; | тип имя; |
Вот примеры описания переменных. Бейсик:
DIM X AS DOUBLE Паскаль:
var x: real; var Str: record
PI: integer; S: string; end;20.3. Алгоритмическое (модульное) программирование
Си++: float х; int a [20];При описании переменных одного типа в Паскале и Си++ их можно указывать через запятую.
Паскаль: var хх, z2: integer; Си++: int xx, yy[10], z2;Новые типы данных
При определении нескольких переменных со сложной структурой удобно описывать каждую переменную, многократно используя одну и ту же запись структуры. Если, например, в нее потребуется внести изменение (добавить новое поле, изменить тип существующего и т. д.), то придется делать это несколько раз, рискуя ошибиться и пропустить одно из описаний, особенно если они сделаны в разных местах программы.Чтобы избежать этой проблемы и позволить программистам активно применять нужные структуры данных, в современных языках программирования разрешено определять собственные типы данных, которые допускается использовать в командах описания наравне с базовыми типами.
Синтаксис описания нового типа
Бейсик | Паскаль | Си++ |
Аналогичен описанию структуры, которое уже является описанием нового типа | type имя = описание; | typedef struct имя-структуры { поля-структуры; } имя; Имя структуры надо указывать только из-за требований синтаксиса. Реально оно нигде не применяется |
Название нового типа можно использовать во всех последующих командах описания переменных.