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

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

Жанры

Программирование. Принципы и практика использования 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
должен быть определен и проинициализирован заранее. Если мы забудем это сделать, то компилятор выдаст сообщение об ошибке. Если мы определим счетчик цикла, но забудем проинициализировать его, то большинство компиляторов предупредят об этом, но не станут препятствовать выполнению программы. Не настаивайте на этом! Компиляторы практически никогда не ошибаются, если дело касается неинициализированных переменных. Такие переменные часто становятся источником ошибок. В этом случае следует написать

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

На распутье

Кронос Александр
2. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На распутье

Идеальный мир для Лекаря 15

Сапфир Олег
15. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 15

Гром над Академией Часть 3

Машуков Тимур
4. Гром над миром
Фантастика:
фэнтези
5.25
рейтинг книги
Гром над Академией Часть 3

Попаданка в Измену или замуж за дракона

Жарова Анита
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Попаданка в Измену или замуж за дракона

Проданная невеста

Wolf Lita
Любовные романы:
любовно-фантастические романы
5.80
рейтинг книги
Проданная невеста

Лорд Системы

Токсик Саша
1. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
4.00
рейтинг книги
Лорд Системы

Вторая жизнь майора. Цикл

Сухинин Владимир Александрович
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Вторая жизнь майора. Цикл

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Уязвимость

Рам Янка
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Уязвимость

Имя нам Легион. Том 4

Дорничев Дмитрий
4. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 4

Безумный Макс. Ротмистр Империи

Ланцов Михаил Алексеевич
2. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
4.67
рейтинг книги
Безумный Макс. Ротмистр Империи

Наследница Драконов

Суббота Светлана
2. Наследница Драконов
Любовные романы:
современные любовные романы
любовно-фантастические романы
6.81
рейтинг книги
Наследница Драконов

Вечный. Книга III

Рокотов Алексей
3. Вечный
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга III

Дурашка в столичной академии

Свободина Виктория
Фантастика:
фэнтези
7.80
рейтинг книги
Дурашка в столичной академии