Чтение онлайн

на главную - закладки

Жанры

Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:

// в дюйме

double length = 1; // длина в дюймах или сантиметрах

char unit = 'a';

cout << "Пожалуйста, введите длину и единицу
измерения (c или i):\n";

cin >> length >> unit;

switch (unit) {

case 'i':

cout << length << "in == " << cm_per_inch*length << "cm\n";

case 'c':

cout << length << "cm == " << length/cm_per_inch << "in\n";

}

}

К

сожалению, компилятор примет этот текст, и когда вы закончите выполнение раздела
case
с меткой
'i'
, просто “провалитесь” в раздел case с меткой
'c'
, так что при вводе строки
2i
программа выведет на экран следующие результаты:

2in == 5.08cm

2cm == 0.787402in

Мы вас предупредили!

ПОПРОБУЙТЕ

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

switch
. Добавьте конвертацию юаня и кроны. Какую из версий программы легче писать, понимать и модифицировать? Почему?

4.4.2. Итерация

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

4.4.2.1. Инструкции while

В качестве примера итерации рассмотрим первую программу, выполненную на компьютере EDSAC. Она была написана Дэвидом Уилером (David Wheeler) в компьютерной лаборатории Кэмбриджского университета (Cambridge University, England) 6 мая 1949 года. Эта программа вычисляет и распечатывает простой список квадратов.

0 0

1 1

2 4

3 9

4 16

...

98 9604

99 9801

Здесь в каждой строке содержится число, за которым следуют знак табуляции (

'\t'
) и квадрат этого числа. Версия этой программы на языке C++ выглядит так:

// вычисляем и распечатываем таблицу квадратов чисел 0–99

int main

{

int i = 0; // начинаем с нуля

while (i<100) {

cout << i << '\t' << square(i) << '\n';

++i; //
инкрементация i (т.е. i становится равным i+1)

}

}

Обозначение

square(i)
означает квадрат числа
i
. Позднее, в разделе 4.5, мы объясним, как это работает.

Нет, на самом деле первая современная программа не была написана на языке С++, но ее логика была такой же.

• Вычисления начинаются с нуля.

• Проверяем, не достигли ли мы числа 100, и если достигли, то завершаем вычисления.

• В противном случае выводим число и его квадрат, разделенные символом табуляции (

'\t'
), увеличиваем число и повторяем вычисления. Очевидно, что для этого необходимо сделать следующее.

• Способ для повторного выполнения инструкции (цикл).

• Переменная, с помощью которой можно было бы отслеживать количество повторений инструкции в цикле (счетчик цикла, или управляющая переменная). В данной программе она имеет тип

int
и называется
i
.

• Начальное значение счетчика цикла (в данном случае — 0).

• Критерий прекращения вычислений (в данном случае мы хотим выполнить возведение в квадрат 100 раз).

• Сущность, содержащая инструкции, находящиеся в цикле (тело цикла).

В данной программе мы использовали инструкцию

while
. Сразу за ключевым словом
while
следует условие и тело цикла.

while (i<100) // условие цикла относительно счетчика i

{

cout << i << '\t' << square(i) << '\n';

++i; // инкрементация счетчика цикла i

}

Тело цикла — это блок (заключенный в фигурные скобки), который распечатывает таблицу и увеличивает счетчик цикла

i
на единицу. Каждое повторение цикла начинается с проверки условия
i<100
. Если это условие истинно, то мы не заканчиваем вычисления и продолжаем выполнять тело цикла. Если же мы достигли конца, т.е. переменная
i
равна 100, выходим из инструкции
while
и выполняем инструкцию, следующую за ней. В этой программе после выхода из цикла программа заканчивает работу, поэтому мы из нее выходим.

Счетчик цикла для инструкции

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

Поделиться:
Популярные книги

Сын Тишайшего

Яманов Александр
1. Царь Федя
Фантастика:
попаданцы
альтернативная история
фэнтези
5.20
рейтинг книги
Сын Тишайшего

"Искажающие реальность" Компиляция. Книги 1-14

Атаманов Михаил Александрович
Искажающие реальность
Фантастика:
боевая фантастика
космическая фантастика
киберпанк
рпг
5.00
рейтинг книги
Искажающие реальность Компиляция. Книги 1-14

Школа. Первый пояс

Игнатов Михаил Павлович
2. Путь
Фантастика:
фэнтези
7.67
рейтинг книги
Школа. Первый пояс

Невеста на откуп

Белецкая Наталья
2. Невеста на откуп
Фантастика:
фэнтези
5.83
рейтинг книги
Невеста на откуп

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2

Вперед в прошлое!

Ратманов Денис
1. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое!

Аргумент барона Бронина 4

Ковальчук Олег Валентинович
4. Аргумент барона Бронина
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Аргумент барона Бронина 4

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Измена. Право на обман

Арская Арина
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на обман

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Жаба с кошельком

Донцова Дарья
19. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
8.26
рейтинг книги
Жаба с кошельком

Бастард Императора. Том 11

Орлов Андрей Юрьевич
11. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 11

Академия чаросвет. Тень

Ярошинская Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Академия чаросвет. Тень

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4