Member 14770192 Ответов: 2

Может ли кто-нибудь помочь мне исправить мой код на языке Си?


Здравствуйте я должен выполнить задание для C в котором говорится следующее:

Напишите программу, которая будет оценивать значение числа Пи из бесконечного ряда:

π=4/1-4/3+4/5-4/7+4/9-4/11+⋯

Программа попросит пользователя ввести целое число, а затем вычислить значение PI с учетом этого количества членов. Например, если пользователь вводит 4, то программа должна оценить PI, используя первые четыре члена последовательности, и вывести результат вычисления:

π=4/1-4/3+4/5-4/7≅2.895238

* Примечания: вам нужно только вывести окончательный результат с плавающей запятой. Также обратите внимание, что последовательность переключается от сложения и вычитания каждого члена. Также убедитесь, что ваша программа может обрабатывать случай 0.

Ваше решение должно включать функцию, которая возвращает расчетное значение PI и принимает в качестве входных данных количество терминов, используемых для вычисления PI

двойной estimatePI(инт термины);

Кроме того, я должен решить эту проблему с помощью оператора while.
С помощью, которую вы, ребята, дали мне, я составил программу, и я не получаю никаких ошибок, но всякий раз, когда я запускаю ее и ввожу разные целые числа, я всегда получаю 3.0000000000000000 в качестве своего ответа, если я не ввожу 0 в качестве целого числа. Не знаю, где в расчетах я напортачил.

Что я уже пробовал:

#include <stdio.h>
#include <stdlib.h>


    double estimatePI(int terms);

int main()
{
    int terms;


    printf("How many times would you like to calculate the value of PI by\n"
           "using the infinite series:   ");
    scanf("%d", &terms);

    printf("The value of pi = %1.16lf\n", estimatePI(terms));


    return 0;
}


    double estimatePI( int terms)
    {
        double PI = 0;
        double iterations = 1;
        int i;

        i = 1;
        while ( i <= ( terms * 2))
        {
            PI = PI + iterations * (4/i);
            iterations = -iterations;
            i += 2;
        }
    return PI;
    }

Patrice T

Теперь список ошибок.

Nelek

4/я все еще могу быть целочисленным делением. Возможно, вы захотите использовать 4.0/i, чтобы быть уверенным

Забудь это... Я только что прочитал, что это уже было сказано ниже.

2 Ответов

Рейтинг:
8

Patrice T

В дополнение к решению 1, я бы удалил

estimatePI = PI;

так как это не VB.
Это дает
    while ( i <= ( terms * 2))
    {
        PI = PI + iterations * (4/i);
        iterations = -iterations;
        i += 2;
        estimatePI = PI;
    }
return estimatePI;
}


[Обновление]
return ;

Перечитайте внимательно то, что было написано в первый раз.

[Обновление]
Между прочим, (4/i) это целочисленное деление, которое дает целочисленные значения.


Member 14770192

Вау, спасибо вам, ребята, за очень быстрые ответы, я очень ценю это. Я сделал то, что вы, ребята, предложили, и теперь это дает мне меньше ошибок, но я не уверен, что установить мое возвращение в функцию.

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Обновите свой код и список ошибок.

Member 14770192

Вау, это было действительно просто. Спасибо Вам за помощь.

Рейтинг:
2

Gerry Schmitz

Вы переопределяете значение своего параметра, определяя переменную с тем же именем.

double estimatePI( int terms)
{
double PI = 0;
double iterations = 1;
int i, terms;