В массиве 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;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы