Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
obp_shpory.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
260.1 Кб
Скачать

Int main()

{

int ia[9] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };

int *pbegin = ia;

int *pend = ia + 9;

while ( pbegin != pend ) {

cout << *pbegin <<;

++pbegin;

}

}

Указатель pbegin инициализируется адресом первого элемента массива. Каждый проход по циклу увеличивает этот указатель на 1, что означает смещение его на следующий элемент. Как понять, где остановиться? В нашем примере мы определили второй указатель pend и инициализировали его адресом, следующим за последним элементом массива ia. Как только значение pbegin станет равным pend, мы узнаем, что массив кончился. Перепишем эту программу так, чтобы начало и конец массива передавались параметрами в некую обобщенную функцию, которая умеет печатать массив любого размера:

#inc1ude <iostream>

void ia_print( int *pbegin, int *pend )

{ while ( pbegin != pend ) { cout << *pbegin << ' '; ++pbegin; }}

Int main()

{ int ia[9] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 }; ia_print( ia, ia + 9 );}

Наша функция стала более универсальной, однако, она умеет работать только с массивами типа int. Есть способ снять и это ограничение: преобразовать данную функцию в шаблон (шаблоны были вкратце представлены в разделе 2.5):

#inc1ude <iostream>

template <c1ass e1emType>

void print( elemType *pbegin, elemType *pend )

{ while ( pbegin != pend ) {

cout << *pbegin << ' ';

++pbegin;

}}

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

Int main()

{

int ia[9] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };

double da[4] = { 3.14, 6.28, 12.56, 25.12 };

string sa[3] = { "piglet", "eeyore", "pooh" };

print( ia, ia+9 ); print( da, da+4 ); print( sa, sa+3 );}

Мы написали обобщенную функцию. Стандартная библиотека предоставляет набор обобщенных алгоритмов (мы уже упоминали об этом в разделе 3.4), реализованных подобным образом. Параметрами таких функций являются указатели на начало и конец массива, с которым они производят определенные действия. Вот, например, как выглядят вызовы обобщенного алгоритма сортировки:

#include <a1gorithm>

Int main()

{ int ia[6] = { 107, 28, 3, 47, 104, 76 };

string sa[3] = { "piglet", "eeyore", "pooh" };

sort( ia, ia+6 ); sort( sa, sa+3 );

};

16. if

Как работает условный оператор if

Синтаксис оператора имеет следующий вид:

if (выражение) оператор;

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

Блок-схема выполнения оператора if приведена на рис. 3.1.

Например, предположим, что проходной балл на экзамене равен 60. Оператор псевдокода

Если оценка студента больше или равна 60

Вывести на экран «Зачет»

определяет, является ли условие «оценка студента больше или равна 60» истинным или ложным. Если условие истинно, на экран выводится «Зачет» и «выполняется» следующий по порядку оператор псевдокода. Если условие ложно, вывод на экран игнорируется и выполняется следующий по порядку оператор псевдокода.

Предыдущий условный оператор псевдокода может быть написан на С++ как

if (grade >= 60 )

cout << “Зачет”;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]