Другие языки программирования и технологии
Чётные и нечётные числа
Как в с++ записать можно такое 1/2+1*3/2*4+1*3*5/2*4*6 +..и т д пока истинно условие. то есть с каждым шагом в числителе добавляется очередной нечетный множитель а в знаменателе очередной четный множитель и всё это суммируется с предыдущими шагами.
С++ плохо знаю, напишу примерно, а алгоритм такой
S = 0;
a = 1;
i = 1;
do while a > 0 // цикл до тех пор, пока прибавляемая дробь не станет равна машинному нулю
{
a = a*i/(i+1); // очередная дробь. Числитель умножается на нечетное, знаменатель на четное.
S += a; // сумма дробей
i += 2; // шаг равен 2
}
printf (S)
return 0
Мы умножаем числа до тех пор, пока очередная дробь не превратится в машинный 0, после чего складывать нули становится бессмысленно. Но это происходит очень медленно. На дроби 15/16,
то есть (1*3*...*15)/(2*4*...*16) число становится меньше 0,2; на дроби 63/64 меньше 0,1, и т. д.
S = 0;
a = 1;
i = 1;
do while a > 0 // цикл до тех пор, пока прибавляемая дробь не станет равна машинному нулю
{
a = a*i/(i+1); // очередная дробь. Числитель умножается на нечетное, знаменатель на четное.
S += a; // сумма дробей
i += 2; // шаг равен 2
}
printf (S)
return 0
Мы умножаем числа до тех пор, пока очередная дробь не превратится в машинный 0, после чего складывать нули становится бессмысленно. Но это происходит очень медленно. На дроби 15/16,
то есть (1*3*...*15)/(2*4*...*16) число становится меньше 0,2; на дроби 63/64 меньше 0,1, и т. д.
Константин Тебеньков
А это разве не получиться 1/2+3/4+5/6... если S += a?
x := 1.0 / 2
Sum := x
ЦИКЛ i := 3 шагом 2 до (условие)
x := x * i / (i + 1)
Sum := Sum + x
КОНЕЦ ЦИКЛА
Sum := x
ЦИКЛ i := 3 шагом 2 до (условие)
x := x * i / (i + 1)
Sum := Sum + x
КОНЕЦ ЦИКЛА
Для нечётных чисел есть формула:
O = 2*k + 1 (k -натуральные числа)
Для чётных чисел:
E = 2*k
Но так как тут очередной множитель основан на предыдущем, то часть, которая будет использоваться далее надо сохранять и передавать между итерациями
Вот как-то так:
double tmp = 1;
double S = 0;
int i = 0;
while(tmp>1e-12) // до определённой величины, иначе будет вечный цикл
{
tmp = tmp * (2*i+1) / (2*(i+1)); // очередной член получаем, добавляя число в числитель и знаменатель
S += tmp;
i++;
}
//
//i=0: tmp = 1*(1)/(2)
//i=1: tmp = 1*(1)*(3)/((2)*(4))
// и т. д.
O = 2*k + 1 (k -натуральные числа)
Для чётных чисел:
E = 2*k
Но так как тут очередной множитель основан на предыдущем, то часть, которая будет использоваться далее надо сохранять и передавать между итерациями
Вот как-то так:
double tmp = 1;
double S = 0;
int i = 0;
while(tmp>1e-12) // до определённой величины, иначе будет вечный цикл
{
tmp = tmp * (2*i+1) / (2*(i+1)); // очередной член получаем, добавляя число в числитель и знаменатель
S += tmp;
i++;
}
//
//i=0: tmp = 1*(1)/(2)
//i=1: tmp = 1*(1)*(3)/((2)*(4))
// и т. д.
Похожие вопросы
- 1. Найти все совершенные числа2. Определить во введенном числе кол-во нечетных чисел и среднее арифметическое четных.
- Файл F генерируется из случайных чисел, размерность которой указывает пользователь. Найти сумму четных и нечетных.
- Вводится целое положительное число. Определить количество чётных и нечётных цифр в числе в Си++
- помогите решить задачу. Упорядочить элементы, стоящие на четных местах по невозрастанию, а на нечетных – по неубыванию.
- Вводится последовательность чисел. Посчитать в ней количество четных чисел, стоящих на четных местах.
- Дано 4х число. Найти наименьшую нечетную цифру в числовой записи данного числа. Если вводим 0,то выводится 0.Что не так?
- Из массива JJ(100) в массив NN(100) перенести числа(элементы массива): сначала нечетные, а затем четные.
- как вывести на экран из массива чисел минимальное число, стоящие на нечетных позициях?
- Помогите решить на ПАСКАЛЕ!Увеличить четные числа массива размера N,на исходное значение первого четного числа.
- Сформировать файл из действительных чисел. Найти: наибольшее из значений модулей компонентов с четными номерами. С++