В массиве H(n) хранятся значения высот некоторого профиля местности - C#
Формулировка задачи:
Подскажите как решить?
В массиве H(n) хранятся значения высот неко¬торого профиля местности (ее вертикального сечения) с постоянным шагом по горизонтали. Найти области (номера точек измерения высоты), невидимые для наблюдателя, находящегося в точке h1.
Решение задачи: «В массиве H(n) хранятся значения высот некоторого профиля местности»
textual
Листинг программы
using System; using System.Collections.Generic; namespace invisiblePoints { class Programm { public static void Main( ) { Console.WriteLine("Введите значения профиля местности"); // Создаем список значений высот List<double> heightValues = new List<double>(); // Создаем переменную, в которую будем считывать значения string heightValue; // Бесконечный цикл while( true ) { // Если введена непустая строка // Пытаемся преобразовать ее в число типа double методом "Parse()" класса "Double" if ((heightValue = Console.ReadLine()) != "") { heightValues.Add(Double.Parse(heightValue)); } // Если строка пустая выходим из цикла else { break; } } if (heightValues.Count < 2) { Console.WriteLine("Вы ввели менее 2 значений, что недопустимо."); Console.WriteLine("Программа будет закрыта по нажатии ENTER."); Console.ReadLine(); return; } // Ищем номера невидимых точек заносим их значения в список List<int> invisiblePointsNumbers = findInvisiblePointsNumbers( heightValues ); // Выводим его на экран Console.WriteLine( "Номера невидимых точек" ); foreach (var element in invisiblePointsNumbers) { Console.Write(element); } Console.WriteLine(); // Ждем пока кто - нибудь нажмет "Enter" Console.ReadLine(); } // Функция для поиска невидимых точек private static List<int> findInvisiblePointsNumbers(List<double> inputHeightValues) { // Вычисляем параметры первоначальной "Прямой видимости" a, b double a = (inputHeightValues[1] - inputHeightValues[0]) / 1; double b = inputHeightValues[0]; // Создаем список номеров невидимых точек List<int> invisiblePointsNumbers = new List<int>(); // На каждой итерации или заносим очередную точку в невидимые или пересчитываем уравнение "ax+b" for (int pointNum = 2; pointNum < inputHeightValues.Count; pointNum++) { if (inputHeightValues[pointNum] < a * pointNum + b) { invisiblePointsNumbers.Add( pointNum + 1 ); // +1 для того чтобы счет шел от 1. } else { a = (inputHeightValues[pointNum] - inputHeightValues[0]) / pointNum; } } return invisiblePointsNumbers; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д