Назад Домой! Дальше Ввод данных. Класс Math






Программа вводит вещественное число (угол - в градусах) с клавиатуры, вычисляет его синус и выводит на экран.
Результаты работы программы

Текст программы:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace my0_3Vvod
{
    class Program
    {
        static void Main(string[] args)
        {
            string ugol = "";  // строка, хранящая угол при вводе
            double ugolok = 0; // угол, синус которого будет вычислен
            Console.Write("Введите угол (град), получите его синус -> ");
            ugol = Console.ReadLine();
            ugolok = double.Parse(ugol)*Math.PI/180; // Получаю угол в радианах
            Console.WriteLine("Синус угла " + ugol + " равен "
                + Math.Sin(ugolok).ToString());
            Console.WriteLine("Для выхода - жми Enter");
            Console.ReadLine();
        }
    }
}
Как создавать такие проекты - см здесь.

Обсуждение программы

  1. Текст, расположенный правее // это комментарий т е пояснения
  2. Эта программа относится к так называемым линейным алгоритмам, т е её операторы выполняются по порядку, один за другим. Рассмотрим поочередно строки программы
  3. string ugol = ""; Это объявление переменной ugol типа string (строка, текст). В C# объявление переменных (и констант) можно ставить в любом месте программы, но ранее использования этой переменной. Здесь же переменной ugol присвоено начальное значение (пустая строка). Такое присвоение необязательно, переменная может получить значение далее в тексте программы.
  4. double ugolok = 0; Объявляется переменная ugolok типа double (вещественное число двойной точности). Она получает начальное значение нуль. Можно было бы применить тип float (вещественное число обычной точности), но я предпочитаю double, единственный недостаток которого - бОльший расход памяти.
  5. Console.Write("Введите угол (град), получите его синус -> "); Метод Write класса Console выводит на экран строку
  6. ugol = Console.ReadLine(); Это оператор присваивания. Сначала выполняется метод ReadLine класса Console. Он возвращает строку, введённую с клавиатуры. "Возвращает" нужно понимать так, что Console.ReadLine() имеет значение, которое можно использовать в качестве выражения. Оператор присваивания присваивает это значение переменной (типа string) ugol
  7. ugolok = double.Parse(ugol)*Math.PI/180; Это тоже оператор присваивания. Вначале вычисляется выражение, стоящее в правой части оператора. Метод Parse класса (типа данных) double преобразует строку ugol в вещественное число (если в строке записано правильное число). Это число умножается на пи (3.14159...). Значение пи возвращает свойство PI класса Math. Отметим, что этот класс содержит методы для вычисления многих функций (sin, cos, log и т д - см справочник). Далее результат делится на 180 и полученное значение присваивается переменной ugolok. Грамотному ёжику понятно, что если ugol содержит значение угла в градусах, то ugolok получится в радианах (аргументы тригонометрических функций должны быть в радианах )
  8. Console.WriteLine("Синус угла " + ugol + " равен " + Math.Sin(ugolok).ToString()); Метод WriteLine выводит на экран выражение (строкового типа), переданное ему в качестве параметра, т е в скобках. Подробнее: "Синус угла " и " равен " - это строковые литералы; ugol - строковая переменная; метод Sin естественно, возвращает синус (значение типа double) аргумента, т е угла ugolok; метод ToString (класса double !!, ибо значение синуса (и многих других функций класса Math) имеет тип double) возвращает строковое представление значения синуса. Далее знак + для строковых значений означает соединение ("склеивание") строк
  9. Два последних оператора обсуждались ранее

Здесь показано, как можно обойтись без переменной ugol

Как я доказал самому себе, что это возможно

  1. Рассмотрим подробнее double.Parse. Для этого выделяю double.Parse в тексте программы и нажимаю F1 (т е обращаюсь к справочной системе ). Далее выбираю ссылку double.Parse. Получаю статью "Double.Parse - метод". В ней выбираю (щелкаю ссылку) из перегруженных методов тот, который используется в программе, т е Parse(String). Получаю описание метода: public static double Parse(string s), из которого следует: 1) метод возвращает число типа double. 2) метод принимает один параметр (s) - выражение типа строка (string)
  2. Используя этот метод в виде: double.Parse(ugol) - мы передаём в качестве параметра переменную ugol. Переменная есть частный случай выражения. Если же мы передадим в качестве параметра Console.ReadLine(), то передадим значение (строкового типа), которое возвращает этот метод (функция). Функция - это другой частный случай выражения, так что такая замена: ugol на Console.ReadLine() должна нормально работать (так оно и есть)
  3. метод Parse есть у многих классов, представляющих типы данных. Этот метод преобразует строковое представление данных в бинарное.
  4. Обратное преобразование выполняет метод ToString, который есть у выражений (!), содержащих данные, например, Math.Sin(double.Parse(Console.ReadLine())*Math.PI/180).ToString() - возвращает строку, содержащий значение синуса. Ещё пример:
    Console.WriteLine((2.1 + Math.Pow(2,3)).ToString()); (выводит на экран: 10,1)
static void Main(string[] args)
        {   double ugolok = 0; // угол, синус которого будет вычислен
            Console.Write("Введите угол (град), получите его синус -> ");
            // Получаю угол в радианах:
            ugolok = double.Parse(Console.ReadLine())*Math.PI/180; 
            Console.WriteLine("Синус угла равен "
                + Math.Sin(ugolok).ToString());
            Console.WriteLine("Для выхода - жми Enter");
            Console.ReadLine();
        }

Здесь показано, как можно обойтись и без переменной ugolok

Рассуждаем аналогично предыдущему примеру.
Чтобы вычислить синус угла ugolok, нужно вызвать метод Math.Sin() и в качестве параметра передать ему значение угла. Посмотрим в справке описание этого метода:
public static double Sin(double a). То есть в качестве параметра нужно передать значение угла (тип double). Можно передать переменную ugolok, а можно передать double.Parse(Console.ReadLine())*Math.PI/180. Это одно и то же значение. Однако при удалении переменных программа становится менее наглядной, её работу труднее понять.
static void Main(string[] args)
        {   Console.Write("Введите угол (град), получите его синус -> ");
            Console.WriteLine("Синус угла равен "
            +Math.Sin(double.Parse(Console.ReadLine())*Math.PI/180).ToString());
            Console.WriteLine("Для выхода - жми Enter");
            Console.ReadLine();
        }
Rambler's Top100
Hosted by uCoz