Заднаие такое : создать абстрактный класс function с методом вычисления значения функции y=f(x) в заданной точке.
создать производные классы: line (y=ax+b), kub (y=ax2+bx+c), hyperbola ( ) со своими вычисления значения в заданной точке.
создать массив n функций и вывести полную информацию о значении данных функций в точке х. код у меня есть.
напишите комментарии к этому коду
abstract class function
{
protected abstract double func(double x);
public double count(double x)
{
return func(x);
}
}
class line : function
{
public readonly double a;
public readonly double b;
public line(double a, double b)
{
a = a;
b = b;
}
protected override double func(double x)
{
return a * x + b;
}
}
class kub : function
{
public readonly double a;
public readonly double b;
public readonly double c;
public kub(double a, double b, double c)
{
a = a;
b = b;
c = c;
}
protected override double func(double x)
{
return a * x * x + b * x + c;
}
}
class hyperbola : function
{
public readonly double a;
public hyperbola(double a)
{
a = a;
}
protected override double func(double x)
{
return a / x;
}
}
class program
{
static void main(string[] args)
{
function[] func = new function[3];
func[0] = new line(2, 3);
func[1] = new kub(2, 3, 4);
func[2] = new hyperbola(3);
double x = 3.6;
foreach (function f in func)
console.writeline("значение функции {0} для x = {1} равно {2}", f. x, f.count(x));
}
}
A=53₁₀,
B=653₈,
C=DA₁₆,
R=R₂
Эту задачу можно решать разными выбор зависит от умения решающего выполнять сложение в той или иной системе счисления. Но в любом варианте, сначала нужно представить А, В, С в какой-то одной системе счисления.
Посмотрим, как это будет выглядеть, если пользоваться привычной нам десятичной системой.
653₈ = 6·8²+5·8¹+3·8⁰ = 6·64+5·8+3 = 427
DA₁₆ = 13·16¹+10·16⁰ = 218
R₁₀ = 53+427+218 = 698
Переводим полученное число в двоичную систему, получая R₂:
698/2=349, остаток 0
349/2=174, остаток 1
174/2=87, остаток 0
87/2=43, остаток 1
43/2 =21, остаток 1
21/2=10, остаток 1
10/2=5, остаток 0
5/2=2, остаток 1
2/2=1, остаток 0
1/2=0, остаток 1
Выписываем остатки в обратном порядке: 1010111010.
Это и есть ответ.
А теперь допустим, что мы хорошо владеем восьмеричной системой счисления.
1) получим А₈
53/8=6, остаток 5
6/8=0, остаток 6
Выписываем остатки в обратном порядке: А₈=65
2) получим С₈, для чего перейдем сначала в двоичную систему
С₂=1101 1010 (просто заменяем каждую цифру четырьмя двоичными).
А теперь разобьем справа налево полученное значение по три разряда и каждую полученную триаду заменим восьмеричной цифрой.
11 011 010₂ = 332₈
3) Выполним сложение R₈=A₈+B₈+C₈
65 740
+653 +332
740 1272
Складывать в восьмеричной системе просто, если знать одну маленькую хитрость. 8 отличается от 10 на 2, поэтому и результат сложения в восьмеричной системе на 2 больше, чем в десятичной, если число превышает 7. Смотрим: 5+3=8, но это в десятичной, а в восьмеричной это на 2 больше, т.е. 10. Поэтому мы пишем 0 и +1 идет в следующий разряд. 6+5=11 и еще +1 от переноса, итого 12. Но в восьмеричной на 2 больше, т.е. 14. 4 пишем. +1 перенос. 6 и +1 от переноса - 7. Вот и получили 740.
4) Мы нашли R₈, переходим к R₂.
Заменяем каждую восьмеричную цифру тремя двоичными:
1272₈=1 010 111 010₂
Мы получили тот же ответ, что и в предыдущем расчета.
Так что - дело привычки. Второй вариант кажется "непосвященному" сложнее, но на самом деле в нем меньше арифметики и если нет под рукой калькулятора, то может оказаться и быстрее, и удобнее.
ответ: 1010111010
CLS
INPUT "n,m=", n, m
REDIM a(1 TO n, 1 TO m) AS INTEGER
imin = 1: jmin = 1: imax = 1: jmax = 1
RANDOMIZE TIMER
FOR i = 1 TO n
FOR j = 1 TO m
t = INT(51 * RND): a(i, j) = t
PRINT t;
IF a(imin, jmin) > t THEN
imin = i: jmin = j
END IF
IF a(imax, jmax) < t THEN
imax = i: jmax = j
END IF
NEXT j
PRINT
NEXT i
PRINT "Sum="; imin + jmin + imax + jmax
Тестовое решение
n,m=8,5
46 23 13 43 35
18 47 44 41 37
45 0 34 30 7
0 28 27 49 47
46 18 48 39 11
2 17 32 43 38
31 43 15 16 16
30 32 46 9 31
Sum= 13