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

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

17.10.2017, 00:31. Показов 2655. Ответов 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
1615 / 1181 / 552
Регистрация: 08.01.2012
Сообщений: 4,558
17.10.2017, 00:39
х-судя по всему предел а, вот на скольких n к нему подберемся , while (a > x)
0
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 11
17.10.2017, 00:44  [ТС]
По сути да, х - это предел, но, если написать такое условие, то все равно не получается того, что хочется
Миниатюры
Итерационный цикл  
0
1615 / 1181 / 552
Регистрация: 08.01.2012
Сообщений: 4,558
17.10.2017, 00:49
???
0
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 11
17.10.2017, 00:50  [ТС]
Ну, я переписал условие while так, как Вы посоветовали. Теперь оно выдает вот такой результат
0
1615 / 1181 / 552
Регистрация: 08.01.2012
Сообщений: 4,558
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
1615 / 1181 / 552
Регистрация: 08.01.2012
Сообщений: 4,558
17.10.2017, 01:08
....... нет слов, в у 6-ка сторона и радиус как?
0
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 11
17.10.2017, 01:13  [ТС]
Цитата Сообщение от MansMI Посмотреть сообщение
6-ка сторона и радиус как?
Что?
0
1615 / 1181 / 552
Регистрация: 08.01.2012
Сообщений: 4,558
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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru