Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 11

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

17.10.2017, 00:31. Показов 2675. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru