Черный ящик( в информатике) - система, внутреннее устройство которой неизвестно. То есть, мы имеем общее представление о том, что делает эта система, какую информацию на вход нужно подать и то, что система должна вывести, при этом не знаем как она это делает(механизм работы данной системы неизвестен).
Примеры подобной системы:
Любые технические устройства для обычного человека являются тем самым "черным ящиком". Известно, для чего они предназначены, но как они выполняют свою функцию - неизвестно.
Для человека, который не является программистом, любая программа на компьютере - "черный ящик".
В программировании один из примеров черного ящика - вызов функции из библиотеки с неизвестным исходным кодом. Известно, как вызвать эту функцию, известен формат входных и выходных данных, а по какому алгоритму действует функция - неизвестно.
Это система скрытой реализации. Когда можно что-то подать на вход, и что-то получить на выход, но вот конкретно как преобразуются входящие данные в выходящие данные не известно. Вся техника по сути и есть черный ящик. Нажимаешь кнопочку на телевизоре - переключается канал, но как это происходит - не известно, если ты конечно не делал этот телевизор. Если надписи на кнопках будут на не понятном языке и инструкция на понятном языке отсутствует, то такой прибор будет классическим случаем черного ящика.
Надеюсь
[<EntryPoint>]
let main argv =
let rec ( ** ) x n =
match n < 1 with
| true -> 1
| false -> x * (x ** (n-1))
let rec sumDigits x =
match x with
| x when x < 10 -> (x, 1)
| x ->
let res = x / 10 |> sumDigits
((res |> fst) + (x % 10), (res |> snd) + 1)
let isArmstrong x =
let digitsInfo = sumDigits x
x = (fst digitsInfo) ** (snd digitsInfo)
let a = System.Console.ReadLine() |> System.Int32.Parse
let b = System.Console.ReadLine() |> System.Int32.Parse
let result = [a..b] |> List.filter (isArmstrong)
printf "Result: %A" result
System.Console.ReadKey true |> ignore
0