0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 11

Итерационный цикл

17.10.2017, 00:31. Показов 2709. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решить задачу, организовав итерационный цикл.
Вычислить длину окружности с точностью x как предел последовательности периметров вписанных правильных многоугольников с удваивающимся числом сторон n (начать с n=6). Для вычисления длины стороны использовать формулу удвоения стороны угольника. x вводится с клавиатуры. Проверить программу при x=10^-3, 10^-4.

Вот то, что я пытался сделать, и то, что выводит программа. Очевидно, что я делаю тут что-то не так. Объясните, пожалуйста, как должен быть организован цикл и какие начальные условия должны быть для него. Заранее спасибо!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <math.h>
 
using namespace std;
 
void main() {
    long double x, r, a, b, p, realP;
    const long double pi = 3.14159;
    cout << "Input accuracy: ";
    cin >> x;
    cout << "Input radius: ";
    cin >> r;
    a = (2 * r)/sqrt(3);
    b = 100;
    int n = 6;
    realP = 2 * pi * r;
    cout << "Real perimeter is " << realP << '\n';
 
    while ((x < b) & (a > 0))
    {
        cout << "n= " << n << '\t';
        cout << "a= " << a <<"\t";
        p = n*a;
        a = sqrt(2 * r*r - r*sqrt(4 * r*r - a*a));
        n*=2;
        b = fabs(p - realP);
        cout << "p= " << p << '\t';
        cout << "b= " << b << '\t' << '\n';
    }
    cout << '\n' << "p= " << p << '\n';
    system("pause");
}
Миниатюры
Итерационный цикл   Итерационный цикл  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.10.2017, 00:31
Ответы с готовыми решениями:

Итерационный цикл
Задано действ. число Х и последовательность a1,a2,.....,an. an=x/sqrtx*(n+2) найти сумму последовательности a1+a2+a3+....+ak, k&gt;10...

Итерационный цикл...
Всем привет... помогите пожалуйста решить задачку, а то суть совсем не понимаю... Решить задачу, организовав итерационный цикл с...

Рекуррентная формула и итерационный цикл
Написать программу, которая вычисляет частичную сумму ряда \sum_{k=1}^{besk}\ln \left(\left( k\times k\pm 3\right)\div k\times k \right)...

12
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
17.10.2017, 00:39
х-судя по всему предел а, вот на скольких n к нему подберемся , while (a > x)
0
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 11
17.10.2017, 00:44  [ТС]
По сути да, х - это предел, но, если написать такое условие, то все равно не получается того, что хочется
Миниатюры
Итерационный цикл  
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
17.10.2017, 00:49
???
0
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 11
17.10.2017, 00:50  [ТС]
Ну, я переписал условие while так, как Вы посоветовали. Теперь оно выдает вот такой результат
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
17.10.2017, 00:58
а что ожидается? или 2https://www.cyberforum.ru/cgi-bin/latex.cgi?\piR отменили, не совпадает?
0
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 11
17.10.2017, 01:02  [ТС]
Да, получается не совпадение. Я в начале программы вывожу то, что должно быть на самом деле по формуле 2*Pi*R
Результат программы выводится снизу и не совпадает с ожидаемым исходом

Добавлено через 1 минуту
Вот, я дописал комментарии к коду. Может, это прояснит то, что я хочу сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <math.h>
 
using namespace std;
 
void main() {
    long double x, r, a, b, p, realP;
    const long double pi = 3.14159;
    cout << "Input accuracy: ";
    cin >> x; //Вводим точность (предел)
    cout << "Input radius: ";
    cin >> r; //Вводим радиус
    int n = 6;
    a = (2 * r)/sqrt(3); //По формуле вычисляем сторону правильного шестиугольника
    b = 100; //Вводим произвольное значение >x, чтобы войти в цикл
    realP = 2 * pi * r; //Высчитываем действительный периметр окружности
    cout << "Real perimeter is " << realP << '\n';
 
    while ((a > x) && (x < b))
    {
        cout << "n= " << n << '\t';  
        cout << "a= " << a <<"\t";
        p = n*a; //Cчитаем периметр. В первой итерации всегда правильно посчитается периметр шестиугольника
        n*=2; //Удваиваем число сторон
        b = fabs(p - realP); //Находим абсолютную величину разницы между фактически посчитаным программой периметром и реальным значением периметра
        a = sqrt(2 * r*r - r*sqrt(4 * r*r - a*a)); // Применяем формулу удвоения стороны n-угольника
        cout << "p= " << p << '\t';
        cout << "b= " << b << '\t' << '\n';
    }
    cout << '\n' << "p= " << p << '\n'; //Выводим окончательный результат работы программы
    system("pause");
}
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
17.10.2017, 01:08
....... нет слов, в у 6-ка сторона и радиус как?
0
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 11
17.10.2017, 01:13  [ТС]
Цитата Сообщение от MansMI Посмотреть сообщение
6-ка сторона и радиус как?
Что?
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
17.10.2017, 01:15
Лучший ответ Сообщение было отмечено hazirliver как решение

Решение

циркуля видеть не приходилось? стартовая а==r
1
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 11
17.10.2017, 01:18  [ТС]
Оооо. Действительно работает, если изначально задать a==r. Но, видимо, циркуля видеть не приходилось, потому что до сих пор не понимаю, почему именно так. Впрочем это уже другая история...
Спасибо большое за помощь!
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
17.10.2017, 01:33
Наверно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#define _USE_MATH_DEFINES 1
#include <math.h>
 
using namespace std;
 
void main() {
    double x, r, a, b, p, realP;
    const double pi = M_PI;
    cout << "Input accuracy: ";
    cin >> x;
    cout << "Input radius: ";
    cin >> r;
    a = r;          // а никак не  a = (2 * r)/sqrt(3); - сторона вписанного 6-угольника равна радиусу описанной окружности
    b = 100;
    int n = 6;
    realP = 2 * pi * r;
    cout << "Real perimeter is " << realP << '\n';
    p = n*a;
 
    double step_p = x;
 
    while (step_p >= x)
    {
        a = sqrt(2 * r*r - r*sqrt(4 * r*r - a*a));
        n*=2;
        cout << "n= " << n << '\t';
        cout << "a= " << a <<"\t";
        step_p = -p;
        p = n*a;
        step_p += p;
        cout << "step_p= " << step_p <<"\t";
 
        b = fabs(p - realP);
        cout << "p= " << p << '\t';
        cout << "b= " << b << '\n';
    }
    cout << '\n' << "p= " << p << '\n';
    cout << '\n' << "pi= " << (p/(2*r)) << '\n';
 
    system("pause");
}
Добавлено через 2 минуты
Цитата Сообщение от hazirliver Посмотреть сообщение
потому что до сих пор не понимаю, почему именно так
нарисуй внешний контур гайки и соедини все её углы с центром. Подумай, к какому типу относятся полученные треугольники
1
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 11
17.10.2017, 01:35  [ТС]
Да, все, я понял. Спасибо большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.10.2017, 01:35
Помогаю со студенческими работами здесь

Итерационный метод
Помогите найти ошибку в алгоритме. Ошибка в итоге выливается том что при подсчёте невязки, она не уменьшается, а увеличивается. Матрицу 4x4...

Реализовать итерационный алгоритм
Реализовать итерационный алгоритм вычисления суммы сходящегося ряда функции пи/4=1-1/3+1/5-1/7+1/9.... Вычисления проводить до тех пор,...

Итерационный алгоритм. Прикладные задачи математики!
e^x=1+x/1!+x^2/2!+...x^n/n!+... помогите решить!и построить!

Итерационный метод удаления бинарного дерева
Есть бинарное дерево поиска нужно создать итерационный метод удаления дерева. Вот есть функция удаления дерева но при удалении происходит...

Максимальное по модулю собственное значение матрицы. Итерационный метод
Есть матрица 3х3, нужно найти максимальное по модулю собственное значение матрицы с помощью итерационного алгоритма. Смотрел по поиску - не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru