Страницы

Поиск по вопросам

понедельник, 29 октября 2018 г.

Не хочу использовать функцию for еще несколько раз!

static void Main() { double theta; //угол в радианах for (theta = 0.1; theta <= 1.0; theta = theta + 0.1) { Console.WriteLine("Синус угла {0} равен {1}", theta, Math.Round(Math.Sin(theta),2)); Console.WriteLine("Косинус угла {0} равен {1}", theta, Math.Round(Math.Cos(theta),2)); Console.WriteLine("Тангенс угла {0} равен {1}", theta, Math.Round(Math.Tan(theta),2)); } }
Здравствуйте, уважаемые. Сверху код вычисляет синус косинус и тангенс теты. На консоль выводится ответ такого типа (примерно):
Синус.... Косинус... Тангенс... Синус.... Косинус.... Тангенс.... ...........
А мне нужен ответ типа:
Синус.... Синус.... Синус.... ....... Косинус.... косинус.... Косинус.... ....... Тангенс.... Тангенс.... Тангенс.... .......
Я могу использовать еще два раза функцию for но мне кажется что это не правильно. Есть идеи как сделать это без нубских копирований? Думаю в языке есть методы чтобы использовать функцию несколько раз без лишней писанины! Но я не знаю! Буду рад любым ответам!


Ответ

Решение в лоб:
double theta; //угол в радианах for (int foo = 0; foo < 3; foo++) { for (theta = 0.1; theta <= 1.0; theta = theta + 0.1) { switch (foo) { case 0: Console.WriteLine("Синус угла {0} равен {1}", theta, Math.Round(Math.Sin(theta), 2)); break; case 1: Console.WriteLine("Косинус угла {0} равен {1}", theta, Math.Round(Math.Cos(theta), 2)); break; case 2: Console.WriteLine("Тангенс угла {0} равен {1}", theta, Math.Round(Math.Tan(theta), 2)); break; } } }

Вариация на тему лямбд:
Func, int> solve = (string funcName, Func func) => { for (double theta = 0.1; theta <= 1.0; theta = theta + 0.1) Console.WriteLine(String.Format("{0} угла {1} равен {2}", funcName, theta, Math.Round(func(theta), 2))); return 0; };
solve("Синус", Math.Sin); solve("Косинус", Math.Cos); solve("Тангенс", Math.Tan);

Комментариев нет:

Отправить комментарий