Буду исходить из того что a, b и h - это double и a < b.
Сначала напишем функцию, вычисляющую значение рассматриваемой функции:
double y(double x) =>
x < 0 ? -4 :
x < 1 ? (x * x + 3 * x + 4) :
2;
Теперь одним LINQ выражением выведем на экран значения x и y для заданного диапазона x:
Enumerable
.Range(0, int.MaxValue)
.Select(i => a + h * i)
.TakeWhile(n => n <= b + 0E-10)
.ToList()
.ForEach(x => Console.WriteLine($"x = {x:0.000} y = {y(x):0.00}"));
<span>В уме малость сложновато, на бумаге - проще. Каждая цифра в 16-ричной системе - это тетрада (4 бита) . Записываем все цифры числа подряд в двоичной системе (0=0000,1=0001,...9=1001,A=1010,B=1011,...F=1111). А потом группируем полученную последовательность бит триадами, по 3 бита, начиная справа (с младших бит) . И записываем то, что получилось, 8-ричными цифрами (000=0,001=1,...111=7). Для обратного перевода все делаем наоборот - записываем битовые триады и группируем их в тетрады. </span>
Понятно, что 90 = Р и 93 = С - все четыре слова заканчиваются на эти буквы. Теперь смотрим: есть два слова, начинающиеся на одну букву: МАРС и МОРС. Ищем среди последовательностей две, которые тоже начинаются на одинаковый код. Это 80 84 90 93 и 80 05 90 93. Значит, 80 = М
Теперь ищем последовательности для МАРС и БАРС - у них совпадает вторая буква. Это 80 05 90 93 и 10 05 90 93, откуда имеем 05 = А и 10 = Б, а код 84 = О
Оставшаяся последовательность 87 62 90 93 для слова ПИРС даёт нам буквы 87 = П и 62 = И
Таким образом, СИРОП кодируется так:
93 62 90 84 87