Раздельная компиляция

Задания раздела 6.1.2
6.8. Напишите файл заголовка по имени Chapter6.h, содержащий объявление функций, написанных для упражнений раздела 6.1.
Читать далее «Раздельная компиляция»

Локальные объекты

Задания раздела 6.1.1
6.6. Объясните различия между параметром, локальной переменной и локальной статической переменной. Приведите пример функции, в которой каждая из них могла бы быть полезной.
6.7. Напишите функцию, которая возвращает значение 0 при первом вызове, а при каждом последующем вызове возвращает последовательно увеличивающиеся числа.
Читать далее «Локальные объекты»

Основы функций

Задания раздела 6.1
6.1. В чем разница между параметром и аргументом.
6.2. Укажите, какие из следующих функций ошибочны и почему. Предложите способ их исправления.
(a) int f() {
string s;
//...
return s;
}
(b) f2(int i) { /* ... */}
(c) int calc (int v1, int v1) {/* ... */}
(d) double square (double x) return x*x;
6.3. Напишите  и проверьте собственную версию функции fact().
6.4. Напишите взаимодействующую с пользователем функцию, которая запрашивает число и вычисляет его факториал. Вызовите эту функцию из функции main().
6.5. Напишите функцию, возвращающую абсолютное значение ее аргумента.
Читать далее «Основы функций»

Стандартные исключения, try, throw

Задания раздела 5.6.3
5.23. Напишите программу, которая читает два целых числа со стандартного устройства ввода и выводит результат деления первого числа на второе.
5.24. Перепишите предыдущую программу так, чтобы она передавала исключение, если второе число - нуль. Проверьте свою программу с нулевым вводом, чтобы увидеть происходящее при отсутствии обработчика исключения.
5.25. Перепишите предыдущую программу так, чтобы использовать для обработки исключения блок try. Раздел catch должен отобразить сообщение и попросить пользователя ввести новое число и повторить код в блоке try.
Читать далее «Стандартные исключения, try, throw»

Оператор goto

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

Пример этого раздела

begin:
int sz=get_size();
if (sz<=0) {
goto begin;
}

Читать далее «Оператор goto»

Оператор continue

Задания раздела 5.5.2
5.21. Переделайте программу из упражнения раздела 5.5.1 так, чтобы она искала дубликаты только тех слов, которые начинаются с прописной буквы.
Читать далее «Оператор continue»

Оператор break

Задания раздела 5.5.1
5.20. Напишите программу, которая читает последовательность строк со стандартного устройства ввода до тех пор, пока не встретится повторяющееся слово или пока ввод слов не будет закончен. Для чтения текста по одному слову используйте цикл while. Для выхода из цикла при встрече двух совпадающих слов подряд используйте оператор break. Выведите повторяющееся слово, если оно есть, а в противном случае отобразите сообщение, свидетельствующее о том, что повторяющихся слов нет.
Читать далее «Оператор break»

Оператор do while

Задания раздела 5.4.4
5.18. Объясните каждый из следующих циклов. Исправьте все обнаруженные ошибки.
(a) do
int v1, v2;
cout << "Please enter two numbers to sum:";
if (cin >> v1 >> v2)
cout << "Sum is: " << v1+v2 << endl;
while (cin);
(b) do {
// ...
} while (int ival=get_response());
(c) do {
int ival=get_response();
} while (ival);
5.19. Напишите программу, использующую цикл do while для циклического запроса у пользователя двух строк и указания, которая из них меньше другой.
Читать далее «Оператор do while»

Традиционный оператор for

Задания раздела 5.4.2
5.15. Объясните каждый из следующих циклов. Исправьте все обнаруженные ошибки.
(a) for (int ix=0; ix!=sz; ++ix) {/* ... */}
if (ix!=sz)
//...
(b) int ix;
for (ix!=sz;++ix) {/* ... */}
(c) for (int ix=0; ix!=sz;++ix, ++ sz) {/* ... */}
5.16. Цикл while особенно хорош, когда необходимо выполнить некое условие; например, когда нужно читать значения до конца файла. Цикл for считают циклом пошагового выполнения: индекс проходит диапазон значений в коллекции. Напишите идиоматическое использование каждого цикла, а затем перепишите каждый случай использования в другой конструкции цикла. Если бы вы могли использовать только один цикл, то какой бы вы выбрали и почему?
5.17. Предположим, есть два вектора целых чисел. Напишите программу, определяющую, не является ли один вектор префиксом другого. Для векторов неравной длины сравнивайте количество элементов меньшего вектора. Например, если векторы содержат значения 0, 1, 1, 2 и 0, 1, 1, 2, 3, 5, 8 соответственно, ваша программа должна возвратить true.
Читать далее «Традиционный оператор for»

Оператор while

Задания раздела 5.4.1
5.14. Напишите программу для чтения срок со стандартного устройства ввода и поиска совпадающих слов. Программа должна находить во вводе места, где одно слово непосредственно сопровождается таким же. Отследите наибольшее количество повторений и повторяемое слово. Отобразите максимальное количество дубликатов или сообщение, что никаких повторений не было. Например, при вводе how now now now brown cow cow вывод должен указать, что слово now встретилось три раза.
Читать далее «Оператор while»