Я не использовала русификацию букв в командах вывода.
Для этого можно добавить #include <windows.h>
А после строки int main () {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
...
после чего русификация будет работать!
19.1. Использование числовых последовательностей
Числовые последовательности позволяют описывать многие процессы, происходящие в природе и обществе.
Например, последовательность чисел 2, –1, 0, 2, 0, 1, –2 может задавать значения температуры по дням недели; последовательность 746, 751, 758 — значения средней заработной платы сотрудников предприятия за квартал и т. д.
Последовательности могут задаваться формулой, в которой значение элемента зависит от того, какой у него номер в последовательности (пример 19.1).
Подтверждением важности числовых последовательностей является тот факт, что создана целая энциклопедия числовых последовательностей (Онлайн-энциклопедия целочисленных последовательностей. Режим доступа: http://oeis.org/?language=russian (дата доступа: 17.01.2018)).
Пример 19.1.
Элементы последовательности нечетных положительных чисел можно описать с помощью формулы an = 2n – 1. В этой формуле n — номер элемента в последовательности. Минимальное значение числа n = 1. Используя формулу, получим последовательность: 1, 3, 5, 7, ... .
Элементы последовательности могут быть действительными числами.
Например, формула an = n / (n2 + 1) задает следующую последовательность:
0.5, 0.4, 0.3, 0.235, 0.192, ... .
Другим способом задания элементов последовательности является определение значения нового элемента через значение предыдущего (пример 19.2).
Пример 19.2.
Одной из наиболее известных последовательностей является последовательность Фибоначчи: 1, 1, 2, 3, 5, 8, 13, ... . Несложно заметить, что каждый ее элемент, начиная с третьего, равен сумме двух предыдущих. Это можно записать так: fn = fn – 1 + fn – 2, f1 = 1, f2 = 1.
Есть последовательности, которые можно задавать как первым, так и вторым способом (пример 19.3). Последовательности могут строиться из случайных чисел.
Пример 19.3.
Рассмотрим последовательность 2, 4, 8, 16, ... . Каждое число в этой последовательности является степенью числа 2, поэтому можно задать последовательность формулой an = 2n . С другой стороны, каждый элемент последовательности, начиная со второго, в два раза больше предыдущего. Получим формулу an = 2an – 1 (для n > 1, a1 = 2).
Пример 19.4.
Вывести на экран первые k четных чисел.
Этапы выполнения задания
II. Результат: k четных числа, начиная с 2.
III. Алгоритм решения задачи.
1. Ввод числа k.
2. Для получения четного числа запишем формулу an = 2n.
3. Так как количество чисел заранее известно, то для их поучения можно воспользоваться циклом for.
4. Текущее число будем хранить в переменной а. Значение a вычисляется по формуле и зависит от значения n — счетчика цикла. Переменная n будет изменяться от 1 (номер первого четного числа) до k (номер последнего числа).
5. Полученные числа будем выводить в цикле через пробел.
IV. Описание переменных: k, a — int.
Пример 19.5.
Вывести на экран все элементы последовательности Фибоначчи меньше x (x вводится).
Этапы выполнения задания
II. Результат: числа Фибоначчи меньше x.
III. Алгоритм решения задачи.
1. Ввод числа x.
2. Вывод первых двух элементов.
3. Числа Фибоначчи, начиная с третьего, получают по формуле an = an – 1 + an – 2 (a1 = a2 = 1). Для вывода чисел понадобятся три переменные: значение а, которое нужно вывести, и два предыдущих значения — b и c.
5. В цикле выводим текущее значение a, «сдвигаем» значения переменных и получаем новое значение a.
IV. Описание переменных: x, a, b, c — int.
Числа Фибоначчи обладают множеством интересных математических свойств. Например:
1. Могут быть вычислены по формуле Бине:
2. Отношение следующего числа к предыдущему является постоянной величиной ≈ 1.618 (начиная с 13-го). Это число называют золотым сечением.
3. Для трех последовательных чисел Фибоначчи верно соотношение Кассини: fn + 1fn − 1 − fn2 = (−1)n.
Пример 19.6.
Катя и Петя решили организовать благотворительную лотерею. Для этого они случайным образом генерируют номер билета. Номера билетов принадлежат промежутку [1..100]. Выигрышным билетом будет тот, номер которого кратен 5. Определить, сколько будет выигрышных билетов среди n сгенерированных Катей и Петей.
Этапы выполнения задания
II. Результат: k — количество выигрышных билетов.
III. Алгоритм решения задачи.
1. Ввод числа n.
2. До начала генерации количество выигрышных билетов равно нулю (k = 0).
3. Так как количество билетов заранее известно, то для получения их номеров можно воспользоваться циклом for.
4. Текущий номер билета будем хранить в переменной а. Номера билетов будем получать по формуле a = 1 + rand()%100 и выводить на экран.
Для каждого номера будем проверять, равен ли 0 остаток от деления числа на 5. И если равен, то увеличим на 1 значение переменной k.
5. Вывод результата.
IV. Описание переменных: n, k, a — int.
19.2. Нахождение суммы элементов числовой последовательности
Пример 19.7.
В лаборатории выводят полезные бактерии. Экспериментально было установлено, что количество бактерий (в млн) зависит от номера дня, в который проводится эксперимент, следующим образом:
Этапы выполнения задания
II. Результат: S (общее количество бактерий).
III. Алгоритм решения задачи.
1. Ввод числа m.
2. Для вычисления общего количества бактерий необходимо последовательно прибавлять количество бактерий, выведенных в текущий день, к уже полученному количеству бактерий. Начальное значение суммы равно 0.
3. Так как количество бактерий заранее известно, для вычисления суммы можно воспользоваться циклом for.
4. Количество бактерий в текущий день будем хранить в переменной а.
Значение a зависит от значения n — счетчика дней. Переменная n изменяется от 1 до m.
5. Вывод результата S.
IV. Описание переменных: m — int; S, a — float.
19.3. Возведение числа в степень
Пример 19.8. Возвести вещественное число a в целую степень n.
Этапы выполнения задания
II. Результат: S (значение степени).
III. Алгоритм решения задачи.
1. Ввод чисел a, n.
2. Для возведения числа в целую неотрицательную степень нужно последовательно умножать на основание степени то значение, которое получили на предыдущем шаге. Это вытекает из равенства: an = an-1*a.
3. Если степень отрицательная, то результат можно получить из равенства: Количество повторений цикла m можно определить как m = ⏐n⏐.
4. Для вычисления произведения можно воспользоваться циклом for. Начальное значение степени равно 1.
5. В конце проверим, является ли значение n положительным или отрицательным. Если оно отрицательно, то нужно изменить значение переменной S.
6. Вывод результата S.
IV. Описание переменных: m, n — int; a, S — float.
19.4. Построение таблицы значений функции
Пример 19.9.
Вывести на экран таблицу значений функции .
Количество значений вводится. Начальное значение x = –3, значения аргумента выводятся с шагом h = 0,5.
Этапы выполнения задания
II. Результат: k значений аргумента и соответствующих им значений функции.
III. Алгоритм решения задачи.
1. Ввод числа k.
2. Для получения таблицы нужно в цикле вычислять и выводить значение аргумента и соответствующее ему значение функции:
1) начальное значение аргумента x = –3. Для получения очередного значения аргумента нужно к текущему значению прибавить шаг h;
2) значение функции вычисляется по формуле

3) полученные значения выводятся на экран. Для того чтобы значения выводились строго одно под другим, нужно использовать форматный вывод.
Для этого задать количество позиций для вывода значения и определить количество цифр после запятой. Запись x:7:2 означает, что для вывода переменной используется 7 позиций, после запятой выводятся 2 цифры.
3. Поскольку количество точек известно, воспользуемся циклом for.
IV. Описание переменных: k — int, x, y, h — float.
19.5. Выделение цифр из числа
Понятие числа возникло в глубокой древности из практической потребности людей. Для записи чисел используют цифры. Любая информация в компьютере представляется с помощью всего двух цифр (0 и 1).
Числовой код имеет каждая страна мира, цифры задают пин-код банковской карты. Сегодня с помощью цифр можно получить числовой образ практически любого объекта.
Пример 19.10.
Дано натуральное число n. Вывести цифры числа по одной в строке (начиная с разряда единиц). Определить, сколько цифр в числе.
Этапы выполнения задания
II. Результат: z (текущая цифра числа), k (количество цифр в числе n).
III. Алгоритм решения задачи.
1. Ввод исходных данных — число n.
2. Определение начального значения счетчика для количества цифр (k = 0).
3. Количество цифр числа равно количеству десятичных разрядов в числе. Для нахождения каждой цифры числа нужно:
а) разделить число на 10;
б) найти целую часть от деления и остаток (остаток и будет очередной цифрой) и увеличить счетчик количества цифр;
в) вывести полученную цифру;
г) поскольку количество цифр в числе заранее неизвестно, будем использовать цикл while. Пока целая часть от деления больше 0, в числе еще есть цифры и нужно перейти к выполнению пункта а), иначе все цифры найдены.
4. Вывод значения переменной k.
IV. Описание переменных: k, n, z — int.
Программа:
using namespace std;
int main()
{
int k,n,z;
cout << "Vvedite n = ";
cin >> n;
k = 0;
while (n > 0) {
//Текущая цифра
z = n % 10;
cout << z <<endl;
//Уменьшение числа в 10 раз
n = n / 10;
//Подсчет кол-ва цифр
k++;
}
cout << "v chisle " << k << " cifr";
return 0;
}
19.6. Наибольший общий делитель двух чисел
Пример: для чисел 42 и 24 наибольший общий делитель равен 6.Существуют несколько алгоритмов нахождения НОД. С одним из них вы знакомились на уроках математики. Нужно разложить каждое из чисел на простые множители, выбрать общие и перемножить.
Рассмотрим другой алгоритм, который называется алгоритм Евклида.
Алгоритм Евклида — алгоритм для нахождения наибольшего общего делителя двух целых чисел. Алгоритм назван в честь древнегреческого математика Евклида (III в. до н. э.), который впервые описал его в книгах «Начала». Это один из старейших численных алгоритмов, используемых в наше время.
Евклид использовал данный алгоритм не только для чисел, но и для геометрических величин: длин, площадей, объемов. В XIX в. алгоритм был обобщен на другие математические объекты. Сегодня алгоритм Евклида используется при шифровании данных.
2. Если получается 0, то числа равны друг другу и это значение является НОД.
3. Если результат вычитания не равен 0, то большее число заменяем на разность большего и меньшего.
4. Переходим к пункту 1. (Рассмотрите пример 19.11.)
Этапы выполнения задания
II. Результат: наибольшее количество общих друзей.
III. Алгоритм решения задачи.
1. Ввод чисел a, b.
2. Поскольку значки нужно делить без остатка, то ответом на задачу может быть только общий делитель чисел a и b. Среди всех делителей нужно найти наибольший.
3. Для решения задачи напишем программу вычисления НОД(a, b) по алгоритму Евклида. Пока числа a и b не равны, выполняем следующее:
1) cравниваем два числа;
2) если a > b, заменяем a на разность a – b, иначе заменяем b на разность b – a.
4. Вывод результата. Вывести можно как значение a, так и b (поскольку они равны).
IV. Описание переменных: a, b — int.
Программа:
using namespace std;
int main()
{
int a,b;
cout << "Znachki u Iry a = ";
cin >> a;
cout << "Znachki u Igorya b = ";
cin >> b;
while (a !=b) {
if (a>b)
a -= b;
else b -= a;
}
cout << "Druzey vsego = " << a;
return 0;
}
Запустить программу и ввести значения: а = 42, b = 24. Результат:
Пример 19.13*.
Написать программу вычисления НОД (x, y, z).
II. Результат: НОД (x, y, z).
III. Алгоритм решения задачи.
1. Ввод чисел x, y, z.
2. Используем то, что НОД (x, y, z) = НОД (НОД (x, y), z). То есть сначала вычислим d = НОД (x, y), а затем f = НОД (d, z).
3. Для вычисления НОД двух чисел составим функцию NOD (a, b). Команды функции NOD рассмотрены в примере 19.12.
4. Вывод результата.
IV. Описание переменных: x, y, z, d, f — int.
Программа:
Упражнения
№ 1. Выполните задания для примера 19.4.
2. Какие изменения нужно внести в программу, чтобы вывести все четные числа меньше введенного числа x?
3. Внесите изменения в программу так, чтобы выводились числа, кратные 3, 5; кратные введенному числу x.
4. Измените программу так, чтобы можно было вывести все числа последовательности, заданной формулой a(n) = n / (n2+1) (пример 19.1).
№ 2. Выполните задания для примера 19.5.
2. Какое максимальное значение x можно ввести?
3. Замените в программе тип integer на тип int64. Сколько чисел последовательности Фибоначчи можно найти теперь?
4. Измените программу так, чтобы она выводила значение числа Фибоначчи по введенному номеру.
№ 3. Выполните задания для примера 19.6.
2. Измените диапазон случайных чисел на [1, 1000] и проверьте, какое число получается в результате чаще других для тех же 20 элементов.
3. Измените программу так, чтобы вычислялось количество чисел, кратных введенному числу x.
4. Измените программу так, чтобы можно было посчитать количество чисел из промежутка [a; b], a и b вводятся.
№ 4. Напишите программу, которая будет выводить на экран элементы последовательности трибоначчи — первые элементы последовательности: 0, 0, 1, 1, 2, 4, 7, 13, 24, 44, 81, 149, ... . Каждый элемент, начиная с четвертого, равен сумме трех предыдущих: an = an – 1 + an – 2+ an – 2.
2. Для заданного x вывести элементы последовательности меньше x.
№ 5. Выполните задания для примера 19.7.
2. Выполните программу для m = 2000. Чему в ответе равна сумма? Почему? Какие изменения нужно внести в программу для получения результата? Найдите значение для m = 2000, m = 10 000.
№ 6. Найдите сумму первых m элементов последовательности. Число m вводится. Элементы последовательности задаются формулой .
1. На сколько большим должно быть значение m, чтобы программа выдала ответ, не соответствующий реальности? Почему так произошло?
3. Замените в решении задачи цикл for на цикл while. Найдите сумму для m = 20 000, m = 1 000 000.
№ 7. Выполните задание для примера 19.8. Измените форму вывода результата таким образом, чтобы результат выводился в виде a ^ n = S (например, для значений a = 2, n = 3 должно быть напечатано 2 ^ 3 = 8).
№ 8. Факториалом числа n называют произведение всех натуральных чисел, не превосходящих n. Обозначают факториал так: n! По определению факториал числа 0 равен 1. Напишите программу, которая вычислит значение факториала целого неотрицательного числа n. Для проверки можно использовать следующее: 0! = 1; 2! = 2; 5! = 120, 10! = 3 628 800.
№ 9. Выполните задание для примера 19.9. Замените в решении задачи цикл for на цикл while. В качестве условия в цикле while можно использовать следующее: x <= 3.
№ 10.Постройте таблицы значений для указанных функций.
1. y = x 2 – 5x – 3, x ∈ [–3, 3], вводится значение шага h.
№ 11. Выполните задания для примера 19.10.
2. Изменится ли результат работы программы, если вместо условия цикла n < 0 использовать условие n > 1?
3. Проверьте работу программы для n = 0. Почему получился такой результат? Что нужно изменить в программе для получения правильного результата?
#include <bits/stdc++.h>
using namespace std;
int main(){
int i,k,n,z;
cout << "Vvedite n = ";
cin >> n;
cout << "Vvedite i = ";
cin >> i;
k = 0;
while (n > 0) {
z = n % 10; //Текущая цифра
k++;
if (k == i)
cout << "V razryade " << i << " stoit cifra " << z << endl;
n = n / 10; //Уменьшение числа в 10 раз
}
if (i > k)
cout << "V chisle " << k << " cifr, v razryade " << i << " net cifr";
else
cout << "V chisle " << k << " cifr";
return 0;
}
№ 13. Дано натуральное число n. Определите, каких цифр в числе больше — четных или нечетных.
№ 14. Дано натуральное число n. Выведите номера разрядов, в которых стоят цифры, кратные 3, или сообщение, что таких цифр нет.
Если в числе четное количество цифр, то вывести соответствующее сообщение. Например, для числа 23 452 ответом будет 4, а для числа 56 — сообщение «В числе четное количество цифр».
№ 16. Число является палиндромом, если оно одинаково читается слева направо и справа налево. Напишите программу, которая по введенному натуральному числу определит, является оно палиндромом или нет. Примеры: 12321, 6776 — палиндромы, 12335 — нет.
Например, 153 = 13 + 53 + 33. Напишите программу, которая найдет:
1. Все трехзначные числа Армстронга.
2. Все четырехзначные числа Армстронга.
№ 18. В 1626 г. индейцы продали остров Манхэттен за 20 долларов. Если бы эти деньги были помещены в банк на текущий счет и ежегодный прирост составлял бы x %, какова была бы стоимость капитала в этом году? Напишите программу, которая ответит на данный вопрос.
№ 19. Имеются два сосуда. В первом находится C 1 л воды, а во втором C 2 л воды. Из первого сосуда переливают половину воды во второй, а затем из второго переливают половину воды в первый (одно переливание) и т. д. Напишите программу, которая определит, сколько воды окажется в каждом из сосудов после k переливаний.
№ 20. Дано натуральное число n. Написать программу, которая выведет все числа, взаимно простые c n, а также числа, которые меньше его.
1. Найти НОД четырех чисел.
2. Найти НОК (наименьшее общее кратное) двух чисел.
3. Вводятся числитель и знаменатель правильной дроби. Сократите дробь.
4*. Две правильные дроби заданы своими числителями и знаменателями. Найдите их сумму. Ответ выведите в виде смешанной дроби.
Комментариев нет:
Отправить комментарий