Я пытаюсь использовать функцию 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 и т.д.. .
Поместите определения a и b внутрь цикла. Их нужно пересчитывать для каждого нового значения x.
В более общем смысле "двойное b = Math.Cos(a);" не означает "когда я спрашиваю, что такое b, рассчитайте косинус a", это означает "вычислите косинус aв настоящее время, и когда я спрошу, что такое b, скажите мне число, которое вы вычислили".
Прочитайте каждое утверждение со словом «немедленно» перед ним. Таким образом, «double x = a + b + c» означает «немедленно сохранить в переменной x типа double значение a + b + c». Очевидно, вы делаете это вверху, но никогда больше после строки x += .1, где вы «немедленно добавляете к x значение 0,1». Вы должны пересчитать a и b, прежде чем они будут иметь желаемое значение.
Я вижу, что вы говорите. Спасибо.
Разве ваш цикл не производит 21 итерацию?
Да, Джон, технически так, поскольку включены 0 и 20.
Вы прошли цикл в отладчике и проверили x, Math.Cos(x) и b?





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));
}
}
it only remembers the value of cos at x = 0Потому что вы больше никогда не вычисляете его после инициализацииb.