Программирование >>  Аргументация конструирования 

1 ... 20 21 22 [ 23 ] 24 25 26 ... 108



Программа yDemo начинается с объявления прототипов функций sumArrayO

и displayArray (), которые понадобятся нам позже. Главная часть программы содержит довольно скучный цикл ввода значений. На этот раз вводимые значения сохраняются в массиве inputvalues.

Ввод осуществляется в цикле for. Введенное значение сначала сохраняется в локальной переменной integerValue. Если оно оказывается отрицательным, оператор break прерывает выполнение цикла. Если же нет, значение integerValue копируется в массив.

Целочисленная переменная OfVaiues используется в качестве индекса массива. Она инициализирована нулем еще до начала цикла for. При каждой итерации индекс увеличивается. В условии выполнения цикла for осуществляется контроль за тем, чтобы количество введенных чисел не превышало 128, т.е. размера массива (после введения 128 чисел программа переходит к выводу элементов массива на экран независимо от того, ввел пользователь отрицательное число или нет).

объявлении массива inputvalues было указано, что его максимальная

длина равна 128. При записи большего числа данных, чем определено

в объявлении, ваша программа может работать неправильно и даже аварийно

завершать работу. Поэтому лучше застраховаться и оставить больше места для хранения данных. Неважно, насколько велик массив; всегда нужно следить за тем, чтобы операции с массивом не приводили к выходу за его пределы.

Функция main заканчивается выводом на экран содержимого массива и суммы его

элементов. Функция displayArray () содержит обычный цикл for, который используется для прохождения по массиву. Каждый очередной элемент массива добавляется к переменной accumulator. Передаваемый функции параметр sizeOfArray включает количество значений, содержащихся в массиве.

Напомню еще раз, что индекс массива в C + + отсчитывается от 0, а не от 1. Кроме того, обратите внимание, что цикл for прерывается в тот момент, когда значение

i становится равным sizeOfArray. Вы же не хотите добавлять все 128 элементов

массива integerArray к accumulator? Ни один элемент массива, индекс которого

больше или равен числу sizeOfArray, учитываться не будет.

Инициализация массива

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

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

К счастью, массив может быть инициализирован сразу во время объявления, например:

float floatArray[5] = {0.0, 1.0, 2.0, 3.0, 4.0);

В этом фрагменте элементу floatArray [0] присваивается значение О, floatArray [1] - 1, floatArray/27 - 2 и ТД

Размер массива может определяться и количеством инициализирующих констант. Например, перечислив в скобках значения инициализаторов, можно ограничить размер массива floatArray пятью элементами. C++ умеет очень хорошо считать (по

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

float floatArrayi = {0.0, 1,0 2.С, 3.0, 4,0};



Выход за границы массива

Математики пересчитывают содержимое массивов, начиная с элемента номер 1. Первым элементом математического массива х является х(1). Во многих языках программирования также начинают перечисление элементов массива с 1. Но в C++ массивы индексируются начиная с 0! Первый элемент массива C++ обозначается как Первый индекс массива C++ нулевой; поэтому последним элемен-то ентного целочисленного массива является гАггау [127], а не in-tegerArray [128].

К сожалению, в C + + не проверяется в1ход индекса за пределы массива. Этот язык будет рад предоставить вам доступ к эдемепту IntegerArray[200]. Бодее того, С+ + позводит вам обратиться даже к IntegerArray[-15].

Приведем такую аналогию. Длину трассы можно измерять равными промежутками между многочисленными придорожными столбами. Назовем их единицами измерения длины дороги. Чтобы попасть к моему дому, нужно свернуть с главной трассы и по прямой ехать до конца дороги, длина которой равна точно девяти столбам. Если начинать отсчет с последнего телеграфного столба на трассе, тогда столб у моего дома

будет иметь 10-й номер.

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

Конечно, вы можете отмерить расстояние в 20 столбов от трассы. Но дороги там уже не будет (помните, она кончается у моего дома?). Трудно точно сказать, что вы

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

даже в чьей-то спальне (вот будет весело!). Угадать, куда в этом случае попадешь, довольно трудно, но хранить там что-то еще рискованнее. Оставить вещь в поде - это одно, но забросить ее в комнату моего соседа совсем другое (я-то знаю это наверняка, так как каждый раз, когда газеты исчезают из моего почтового яшика, они оказываются в гостиной моего соседа).

То же происходит и в программировании. Пытаясь прочитать 20-й элемент (array массива, вы получите то или другое случайное число

(а возможно, программа просто аварийно завершит работу). А записывая в array; 20] какое-то значение, вы подучите непредсказуемый результат. Скорее всего, ничего в него не запишется, но возможны и другие странные реакции вплоть до краха программы.

Самой распространенной ошибкой является неправильное обращение к последнему элементу по адресу integerArray 1128]. Хотя это всего лишь следующий за концом массива элемент, записывать или считывать его не

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

Разумеется, программа делает то же самое, что и не основанные на

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

И все же в возможности повторного отображения введенных значений кроется значительное преимущество использования массивов. Массивы позволяют программе многократно обрабатывать серии чисел. Главная программа б]ла способна передать массив входн1х значений функции displayArray () для отображения, а затем в Su-для суммирования.




Определение и использование массивов

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

(каждый ее элемент имеет две координаты - х и у).

В C + + матрицы определяются следующим образом: int intMatrix[10] [5] ;

Эта матрица может иметь 10 элементов в одном измерении и5в другом, что в сумме составляет 50 элементов. Другими словами, intMatrix является 10-элементным массивом, каждый элемент которого - массив из 5 элементов. Легко догадаться, что один угол матрицы обозначается Matrix [0] [0], тогда как второй - intMatrix[9][4].

Индексы intMatrix можно рассматривать в любом удобном порядке. По какой оси отложить длину 10 - решайте сами, исходя из удобства представления. Матрицу можно инициализировать так же, как и массив:

in rix [2] [3 ] = 2, 3), (4, 5, бЦ;

Здесь фактически выполняется инициализация двух трехэлементных массивов: intMatrix [0] - значениями I, 2 и 3, а intMatrix [1] - 4, 5 и б соответственно.

UauubsoeoHue символьнихмассио

Элементы массива могут быть любого типа. В C++ возможны массивы любтх числовых типов - float, double, long, однако символьные массивы имеют особое значение.

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

char sMyNarae [ ] = , г , e , p , h , e , П } ;

Мое имя можно отобразить с помощью следующей небольшой программы:

CharDisplay - выводит ка экран массив символов в окне MS DOS finclude <3tdio.h> #include <iostream.h>

объявления прототипов

void displayCharArray(char stringArray[],

int SizeOfloatArray);

int nArg, char*

char charMyName [] = { S , t, e, p, h, e, n}; displayCharArray(charMyName, 7) ;

cout << \n ; return 0;

displayCharArray - отображает массив символов, по одному при каждой итерации void displayCharArray(char stringArray[],

int SizeOfloatArray)



1 ... 20 21 22 [ 23 ] 24 25 26 ... 108

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика