[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Ввод данных. Класс Math
Neo Дата: Воскресенье, 16.02.2014, 22:04 | Сообщение 1
Программа вводит вещественное число (угол - в градусах) с клавиатуры, вычисляет его синус и выводит на экран.


Результаты работы программы

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

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();
         }
     }
}


Как создавать такие проекты - см здесь.

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

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


Здесь показано, как можно обойтись без переменной ugol
Как я доказал самому себе, что это возможно

  • Рассмотрим подробнее double.Parse. Для этого выделяю double.Parse в тексте программы и нажимаю F1 (т е обращаюсь к справочной системе ). Далее выбираю ссылку double.Parse. Получаю статью "Double.Parse - метод". В ней выбираю (щелкаю ссылку) из перегруженных методов тот, который используется в программе, т е Parse(String). Получаю описание метода: public static double Parse(string s), из которого следует: 1) метод возвращает число типа double. 2) метод принимает один параметр (s) - выражение типа строка (string)
  • Используя этот метод в виде: double.Parse(ugol) - мы передаём в качестве параметра переменную ugol. Переменная есть частный случай выражения. Если же мы передадим в качестве параметра Console.ReadLine(), то передадим значение (строкового типа), которое возвращает этот метод (функция). Функция - это другой частный случай выражения, так что такая замена: ugol на Console.ReadLine() должна нормально работать (так оно и есть)
  • метод Parse есть у многих классов, представляющих типы данных. Этот метод преобразует строковое представление данных в бинарное.
  • Обратное преобразование выполняет метод 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();
         }

Статус: Neo
  • Страница 1 из 1
  • 1
Поиск: