16+
ComputerPrice
НА ГЛАВНУЮ СТАТЬИ НОВОСТИ О НАС




Яндекс цитирования


Версия для печати

Модуль поиска не установлен.

Программирование на С++ - это не сложно! Часть 2

11.08.2008

KyberAleх KyberAlex@mail.ru


Основные понятия языка С++. Раздел 2. Массивы и строки.

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

int coord1 = 34;
int coord2 = 65;
int coord3 = 17;
int coord4 = 9;
int coord5 = 48.

Такую запись гораздо удобнее представить в виде массива (когда мы перейдем к программированию, вы увидите все преимущества массивов на практике):

int coord[5] = {34, 65, 17, 9, 48};

или в общем виде:

ТипМассива

ИмяМассива [СколькоВсегоПеременных]={СписокЗначений}.

Список значений можно не указывать, а задать значения отдельно для каждого элемента массива, например так:

int coord[5];
...
coord[3] = 9; переменная coord4 = 9
coord[0] = 34; переменная coord1 = 34
...
coord[4] = 48; переменная coord5 = 48

Обратите внимание на то, что теперь обращение к переменным coord1..coord5 осуществляется через т.н. индекс, указывающий на нужную переменную в массиве. Нумерация индексов начинается от 0, т.е. для массива из 5 элементов допустимый диапазон индексов 0..4, а переменная coord1 будет указываться как coord[0]. Недостаток С++ в том, что он не проверяет корректность индексов, т.е. если в нашем случае вы укажете coord[500], то С++ это не заметит, но при исполнении программы произойдет ошибка. Так же как и для отдельных переменных, значения элементов массива можно менять неограниченное количество раз. При определении массива поле "Сколько

ВсегоПеременных" можно не указывать.

ТипМассива ИмяМассива[] = {СписокЗначений}.

В этом случае размер массива будет определен автоматически, исходя из количества значений в поле "СписокЗначений".

С понятием массива тесно связано понятие "строка символов". Выше мы определили типы char и unsignеd char как целочисленные типы размером 1 байт. На самом деле эти типы можно использовать и для задания в программе символьных переменных. Все вышеприведенные переменные являлись числовыми, т.е. над их содержимым можно производить различные арифметические действия (см. ниже) как над обычными числами. Символьная же переменная хранит некоторый символ, который можно вывести на экран, сохранить в файл, передать по сети и т.п. Задается символьная переменная следующим образом:

char ИмяПеременной = 'символ';

Внутри одиночных кавычек вы можете указать любой символ из набора символов данного шрифта, например 'А' или '4'. Каждый шрифт имеет 256 символов с кодами 0..255 (шрифты UNICODE здесь не рассматриваем), что и позволяет нам использовать для их хранения однобайтный тип char.

Один символ это хорошо, но чаще всего требуется строка символов. Здесь нам и придут на помощь массивы. Для определения строки можно определить такой массив:

char ИмяСтроки[] = "любая строка"

Размер массива (в данном случае длина строки) будет определен автоматически, и к нему будет добавлена единица, т.к. С++ к концу любой строки дописывает символ с кодом 0 как признак ее конца. Данный сим-вол не отображается на экране, но байт в памяти он занимает (такой формат строк называется ASCIIZ). С элементами полученной строки символов можно работать, как с обычным массивом:

char stroka[] = "abcdefgh";
...
stroka[2] = 'z';
stroka[5] = 'y';

теперь переменная stroka равна "abzdeygh" (не забудьте, что индексы отсчитываются от 0) .

В заключение раздела рассмотрим многомерные массивы. Примером такого массива может служить шахматная доска. Предположим, что в нашей программе для игры в шахматы все фигуры обозначены цифрами, например король-1, ферзь-2 и т.д. Каким образом мы можем указать, что король стоит на поле b5? Определим двумерный массив в виде:

short chess[8][8];
и укажем, что король стоит на b5 (строка 5, колонка 2)
chess[4][1] = 1;

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

Размер, занимаемый массивом в памяти, легко вычисляется по формуле:

ЗанятаяПамять = РазмерТипа*РазмерИзмерения1*- * РазмерИзмеренияN,

где РазмерИзмеренияN - это количество переменных в N-ом измерении массива.

Вот и закончен наш рассказ про массивы. В следующем разделе будет рассказано про арифметические выражения в С++.

Раздел 3

Арифметические операторы С++.

Итак, мы уже умеем создавать переменные и массивы различных типов. Теперь посмотрим, как можно производить над ними необходимые нам действия. Начнем со всем известных четырех арифметических действий.

int x = 9;
int y = 2;
int z1 = x + y; сложение
int z2 = x - y; вычитание
int z3 = x * y; умножение
int z4 = x / y; деление

Из приведенного примера видно, что знаки сложения и вычитания имеют привычный всем вид, умножение обозначается символом "*", а для обозначения деления применяется наклонная справа налево черта. Обратите внимание - именно справа налево! Если вы попробуете использовать символ черты, наклоненной в другую сторону, то С++ будет этим очень огорчен :). Упомянем здесь, что в С++ знаки действий называются операторами. Например "+" - оператор сложения.

С делением в С++ связан один тонкий момент. Как вы думаете, в вышеприведенном примере, какое значение будет иметь переменная z4 после выполнения деления? Если ваш ответ 9/2=4.5 , то вы ошиблись. Напомним, что int - это целочисленный тип, а значит, дробная часть будет автоматически отброшена, и z4 получит значение 4 ровно. Если же вам необходимо получать точное значение, то вы должны определить переменную z4 как принадлежащую к одному из дробных (правильнее говорить - вещественных) типов ( см. раздел 2, табл. 1. ). Например, так:

float z4 = x / y;
теперь z4 получит правильное значение 4.5. Относитесь к выбору типов переменных внимательно, это избавит вас от многих проблем при написании программ. Кроме того, С++ не позволит вам изменить тип переменной. Если вы определили z4 как int, то далее по тексту программы уже нельзя написать float z4.

Приоритет действий соответствует обще-принятому, т.е. умножение и деление выполняются раньше, чем сложение и вычитание, изменения в приоритете определяются порядком расстановки скобок. Выражения в современных версиях С++ не имеют ограничений по сложности, т.е. вы спокойно можете написать нечто вроде
d = b*b + a*a*( -b + 1/4 ).

Запись отрицательных чисел также не вызывает затруднений. Если отрицательное число стоит первым в выражении или первым после открывающей скобки (как -b в вышеприведенной формуле), то перед ним просто ставится знак "-" :

a = -3 / f;
b = 7 * ( -z + 4 );
иначе его необходимо заключить в скобки:
b = 5 * (-a);

Естественно, не рекомендуется работать с отрицательными числами, присваивая полученный результат переменным, объявленным как unsigned.

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

Предположим, что нам надо увеличить значение переменной х на 10. Очевидный способ записи:

x = x + 10.

Такие языки программирования, как Basic, Pascal и т.п., на этом и ограничиваются, но С++ предоставляет возможность сокращенной записи подобных выражений. Вышеприведенная строка в С++ может быть записана следующим образом:

х += 10.

Смысл выражения не изменился, просто его запись стала короче. Соответственно для других арифметических действий имеем операторы "-=", "*=" и "/=". А частный случай прибавления или вычитания единицы записывается еще короче. Вместо

а = а + 1; с = с - 1;
запишите
++а; --с.

Эти операторы, так же как и обычные, можно применять в составе сложных формул, при этом следует помнить, что приоритет операторов вида "+=" ниже, чем у обычного сложения и вычитания, а приоритет операторов вида "++" выше, чем у обычного умножения и деления. Т.е. в выражении

х = 3 * ++z

сначала будет прибавлена единица к переменной "z", а затем полученный результат будет умножен на 3 и записан в переменную "х", а в выражении
int y = a*=4 + 5
сначала выполнится сложение 4 + 5, а затем "а" будет умножено на полученную девятку. Здесь надо отметить несколько моментов. Во-первых, после участия в этих операторах, переменные сохраняют свое новое значение и после выхода из текущей формулы. Т.е. пусть
x = 4; y = 7;
z = y * ++x;
теперь мы имеем "z = 35" и "x = 5".

Второе замечание касается положения операторов "++" и "--" относительно модифицируемой переменной. Если мы просто изменяем значение одиночной переменной, то записи

++а; и а++
равнозначны. Если же эти операторы используются в составе сложной формулы, то их действия, в зависимости от положения относительно переменной, трактуются следующим образом: если оператор стоит перед переменной, то сначала выполняется он, и полученное значение подставляется в другие части формулы. Если же оператор стоит после переменной, то сначала в формулу подставляется текущее значение этой переменной, а затем выполняется этот оператор. Поясним примером:
x = 4; y = 7;
z = y * ++x;
сначала к х прибавляется 1, затем полученное значение "х=5" используется в формуле для умножения на "y", и в итоге мы получаем "z = 35" и "x = 5". А теперь запишем так:
x = 4; y = 7;
z = y * x++;
здесь на "y" будет умножено текущее значение "х=4", а потом к "х" добавится единица, и в итоге мы получаем "z = 28" и "x = 5".

В заключение раздела рассмотрим оператор "%". Несмотря на свой вид, он предназначен не для нахождения процента, а для получения остатка от целочисленного деления. Вернемся к нашему примеру из начала раздела:

int x = 9;
int y = 2;
int z4 = x / y.

Уже было упомянуто, что дробная часть в таком выражении будет отброшена, и мы получим "z4 = 4". Применив оператор "%" в виде

int z5 = x % y.
мы получим "z5 = 1", т.к. остаток от деления 9 на 2 равен единице. Отметим, что для вещественных переменных использовать оператор "%" нет смысла.

Оператор "%" удобно использовать для ограничения значения переменной в некоторых пределах. Например, в нижеприведенной формуле

int a = b % 10.
величина переменной "а" никогда не выйдет за пределы 0..9, при любом значении переменной "b".

На этом данный раздел завершен. В следующем разделе мы рассмотрим команды, составляющие основу С++.

Программирование на С++ - это не сложно! Часть 1
Программирование на С++ - это не сложно! Часть 3
Программирование на С++ - это не сложно! Часть 4



статьи
статьи
 / 
новости
новости
 / 
контакты
контакты