Объектно-ориентированное программирование в C#
Дополнительные материалы к занятию можно скачать здесь.
Упражнение 7.1. Создание простого класса
Создаем новое консольное приложение C#. Называем проект practice_3_1.
Наберите в окне кода следующую программу:
using System; class goods { public string ProductName; public DateTime ExpireDate; public double Price; } class Example { static void Main() { goods Product = new goods(); Product.ProductName = "Хлеб Изобилие"; Product.ExpireDate = new DateTime(2011, 5, 1, 8, 30, 52); Product.Price = 43.54; string str; str = "Товар: " + Product.ProductName + "\nСрок годности: " + Product.ExpireDate + "\nЦена: " + Product.Price + " рубля"; Console.WriteLine(str); Console.WriteLine("Нажмите любую кнопку!"); Console.ReadKey(); } }
Получаем следующий результат:
Упражнение 7.2. Создание двух экземпляров одного класса
Создаем новое консольное приложение C#. Называем проект practice_3_2.
Наберите в окне кода следующую программу:
using System; class goods { public string ProductName; public DateTime ExpireDate; public double Price; } class Example { static void Main() { goods Bread = new goods(); Bread.ProductName = "Хлеб Изобилие"; Bread.ExpireDate = new DateTime(2011, 5, 1, 8, 30, 52); Bread.Price = 43.54; goods Milk = new goods(); Milk.ProductName = "Молоко"; Milk.ExpireDate = new DateTime(2011, 5, 5, 6, 30, 52); Milk.Price = 35.6; string str; str = "Товар: " + Bread.ProductName + "\nСрок годности: " + Bread.ExpireDate + "\nЦена: " + Bread.Price + " рубля"; str += "\nТовар: " + Milk.ProductName + "\nСрок годности: " + Milk.ExpireDate + "\nЦена: " + Milk.Price + " рубля"; Console.WriteLine(str); Console.WriteLine("Нажмите любую кнопку!"); Console.ReadKey(); } }
Получаем следующий результат:
Упражнение 7.3. Знакомство с методами класса
Создаем новое консольное приложение C#. Называем проект practice_3_3.
Наберите в окне кода следующую программу:
using System; class shape { public double Length(double r) { double l; l = 2 * Math.PI * r; return l; } public double Area(double r) { double s; s = Math.PI * Math.Pow(r, 2); return s; } } class Example { static void Main() { shape figure = new shape(); double a; a = 10; double l, s; l = figure.Length(a); s = figure.Area(a); string str; str = "Радиус равен " + a; str += "\nДлина окружности равна " + l; str += "\nПлощадь круга равна " + s; Console.WriteLine(str); Console.WriteLine("Нажмите любую кнопку!"); Console.ReadKey(); } }Листинг .
Получаем следующий результат:
Упражнение 7.4. Знакомство с методами класса (продолжение)
Создаем новое консольное приложение C#. Называем проект practice_3_4.
Наберите в окне кода следующую программу:
using System; class shape { public double r; public double SphereArea() { double s; s = 4 * Math.PI * Math.Pow(r, 2); return s; } public double SphereVolume() { double v; v = 4 * Math.PI * Math.Pow(r, 3) / 3; return v; } } class Example { static void Main() { shape figure = new shape(); double a; a = 10; figure.r = a; double v, s; s = figure.SphereArea(); v = figure.SphereVolume(); string str; str = "Радиус равен " + a; str += "\nПлощадь сферы равна " + s; str += "\nОбъем шара равен " + v; Console.WriteLine(str); Console.WriteLine("Нажмите любую кнопку!"); Console.ReadKey(); } }Листинг .
Получаем следующий результат:
Упражнение 7.5. Нахождение широты, долготы и высоты спутника ГЛОНАСС исходя из его геоцентрических координат
Даны следующие геоцентрические координаты спутника:
![x = 2616905,988\\y = 5135967,188\\z = 3003938,098](/sites/default/files/tex_cache/48e78653e3a08c96b6e129f1182c8483.png)
![R_0=6373637,00\,м](/sites/default/files/tex_cache/3f341400072becd27aedd0ad86062b1d.png)
Геоцентрические координаты связаны с широтой и долготой следующими соотношениями:
![x=r\cos(\varphi)\cos(\lambda),\;y=r\cos(\varphi)\sin(\lambda),\;z=r\sin(\lambda)\\r=\sqrt{x^2+y^2+z^2},\;\tg(\lambda)=\frac yx,\;\tg(\varphi)=z/\sqrt{x^2+y^2}](/sites/default/files/tex_cache/badde655a65e11a8493d70229f6cace7.png)
Найдем радиус-вектор , соединяющий объект с центром масс Земли:
![r=\sqrt{2616905.988^2+5135967.188^2+3003938.098^2}=6500000,00\,м](/sites/default/files/tex_cache/b4d95c2a2c2a396b35ddbcfcf52c470d.png)
Широта
Долгота
Для нахождения высоты над уровнем моря мы вычтем радиус Земли
из радиус-вектора
:
![h= r- R_0=6500000,00-6373637,00=126363,00\,м.](/sites/default/files/tex_cache/4d9f12f65e658c8b4ea64fe30919daaf.png)
Создаем новое консольное приложение C#. Называем проект practice_3_5.
Наберите в окне кода следующую программу:
using System; class Satellite { public double x; public double y; public double z; double R0 = 6373637.00; //Радиус Земли public double Height() { double h; h = Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2) + Math.Pow(z, 2)) - R0; return h; } public double Latitude() { double phi; phi = Math.Atan(z / Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2))) * 180 / Math.PI; return phi; } public double Longitude() { double lambda; lambda = Math.Atan(y / x) * 180 / Math.PI; return lambda; } } class Example { static void Main() { double x, y, z; x = 2616905.988; y = 5135967.188; z = 3003938.098; Satellite GLONASS = new Satellite(); GLONASS.x = x; GLONASS.y = y; GLONASS.z = z; double h, phi, lambda; h = GLONASS.Height(); phi = GLONASS.Latitude(); lambda = GLONASS.Longitude(); string str; str = "Высота над уровнем моря: " + h + " метра" + "\nГеографическая широта: " + phi + " градуса" + "\nГеографическая долгота " + lambda + " градуса"; Console.WriteLine(str); Console.WriteLine("Нажмите любую кнопку!"); Console.ReadKey(); } }Листинг .
Получаем следующий результат:
Задание: Преобразование декартовых координат {x,y,z} в геодезические {H,L,B}
Связь между геодезическими параметрами точки пространства и декартовыми координатами
можно определить следующим образом:
![x=(N+H)\cos B\cos L,\;y=(N+H)\cos B\sin L,\;z=[(1-e^2)N+H]\sin B,](/sites/default/files/tex_cache/61184509f7bd135101a3117c278ccc7a.png)
где:
-
- радиус кривизны в точке местной вертикали
,
-
эксцентриситет эллипсоида,
-
- параметр сжатия эллипсоида.
Для преобразования координат мы воспользуемся алгоритмом, описанном в ГОСТ Р 51794-2001 (…Методы преобразований координат определяемых точек), внеся в него небольшие изменения.
Алгоритм предполагает следующую последовательность действий:
- Вычислить вспомогательную величину
по формуле
- Проанализировать значение
следующим образом:
- а) если
, то
- б) если
, то
при этом
- а) если
- Проанализировать значение
:
- а) если
, то
- б) во всех других случаях вычисления выполняют следующим образом:
Найти вспомогательную величину
по следующей формуле:
Геодезическая широта B находится следующим образом:
- а) если
Итак, мы имеем следующие исходные данные:
![x = 2616905,988\\y = 5135967,188\\z = 3003938,098](/sites/default/files/tex_cache/48e78653e3a08c96b6e129f1182c8483.png)
- Вычислим вспомогательную величину
:
- Так, как
, то пункт 2a пропускаем. Переходим к пункту 2б.
Найдем геодезическую долготу:
Так как
Найдем значение геодезической долготы в градусах:и
, то
.
- Проанализируем значение
. Так как
, то пункт 3а пропускаем и переходим к пункту 3б. Найдем вспомогательную величину
:
Найдем геодезическую широту:
Переведем радианы в градусы:Найдем геодезическую высоту:
Разработать соответствующую программу