Цикл for с задействованным математическим выражением

Я пытаюсь использовать функцию Math.Cos() в С# для печати диапазона значений от 0 до 2pi, увеличиваясь на .1pi, поэтому 20 итераций. Проблема в том, что я не могу изменить значение x во время выполнения цикла for.

    public void Cos()
    {
        double x = 0;
        double a = Math.PI * x;
        double b = Math.Cos(a);

        for (int i = 0; i < 21; i++)
        {

            Console.WriteLine("Cos({0})pi = {1}", x, b);
            x += .1;

        }
    }

Когда я вывожу результаты на консоль, она запоминает только значение cos при x = 0. Поэтому я просто получаю 1, 20 раз в результате для Cos(.1)pi, Cos(.2)pi и т.д.. .

it only remembers the value of cos at x = 0 Потому что вы больше никогда не вычисляете его после инициализации b.
tkausl 31.01.2019 02:27

Поместите определения a и b внутрь цикла. Их нужно пересчитывать для каждого нового значения x.

Blorgbeard 31.01.2019 02:27

В более общем смысле "двойное b = Math.Cos(a);" не означает "когда я спрашиваю, что такое b, рассчитайте косинус a", это означает "вычислите косинус aв настоящее время, и когда я спрошу, что такое b, скажите мне число, которое вы вычислили".

Blorgbeard 31.01.2019 02:29

Прочитайте каждое утверждение со словом «немедленно» перед ним. Таким образом, «double x = a + b + c» означает «немедленно сохранить в переменной x типа double значение a + b + c». Очевидно, вы делаете это вверху, но никогда больше после строки x += .1, где вы «немедленно добавляете к x значение 0,1». Вы должны пересчитать a и b, прежде чем они будут иметь желаемое значение.

Warty 31.01.2019 02:30

Я вижу, что вы говорите. Спасибо.

pijoborde 31.01.2019 02:36

Разве ваш цикл не производит 21 итерацию?

Llama 31.01.2019 02:47

Да, Джон, технически так, поскольку включены 0 и 20.

pijoborde 31.01.2019 02:48

Вы прошли цикл в отладчике и проверили x, Math.Cos(x) и b?

HABO 31.01.2019 03:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

I am trying to utilize the Math.Cos() function in c# to print a range of of values from 0 to 2PI increasing by .1PI

Это похоже на работу для цикла for, где мы начинаем со значения 0 и увеличиваем на .1 * PI на каждой итерации, пока не достигнем 2 * PI.

Поскольку цикл for имеет часть инициализатора, часть условия и часть увеличения, это идеальная конструкция. Нет необходимости в дополнительной переменной, которая увеличивается от 0 до 20 — мы можем использовать цикл for для увеличения x и проверки условия выхода!

public static void Cos()
{
    for (double x = 0; x <= Math.PI * 2; x += Math.PI * .1)
    {
        Console.WriteLine("Cos({0})PI = {1}", x, Math.Cos(x));
    }
}

Другие вопросы по теме