Задача
Требуется написать программу, вычисляющую значение какой-либо функции у = f(x). Допустим, такой:
у = x – 2, если x > 0,
y = 0, если x = 0,
y = |x|, если x < 0.
Решение
При определении значений подобных функций переменная y вычисляется по-разному (по разным формулам) в зависимости от значения x.
Такие задачи решаются с конструкции условного оператора if - else. Поскольку в данном случае мы имеем три условия (x > 0, x = 0 и x < 0), то потребуется использование еще вложенной конструкции if - else, т. к. в языке Pascal нет оператора множественного ветвления (оператор case в данном случае не подходит).
В языке программирования Паскаль (да и в других тоже) желательно вложенные конструкции if - else помещать во внешнюю ветку else, а не if. Так проще не запутаться.
Таким образом, алгоритм вычисления значения функции может быть таким:
Если x > 0, то у = x - 2
Иначе (ниже идет вложенная конструкция)
Если x = 0, то y = 0
Иначе y = |x|.
В последнем пункте можно опустить оператор if с проверкой, что x < 0, так как если ход выполнения программы дошел до этого пункта, то x уже другим быть и не может (варианты, когда он больше или равен нулю, уже были исключены).
Для определения модуля (абсолютного значения) переменной можно использовать встроенную функцию abs() языка Pascal. В данном случае можно обойтись и без нее: поскольку уже известно, что x отрицателен, то, чтобы получить положительное число (модуль), нужно его умножить на -1.
Поделитесь своими знаниями, ответьте на вопрос:
В результате выполнения представленного алгоритма переменные А и С примут значения ответ: A= , C= .
n, k, i, imax, j: integer;
a: array[1..100]of integer;
begin
randomize;
n := random(30) + 10;
for i := 1 to n do
begin
a[i] := Random(30);
write(a[i], ' ');
end;
writeln();
{сортировочка}
for i := 1 to n - 1 do
begin
imax := i;
for j := i + 1 to n do
if a[j] > a[imax] then
imax := j;
k := a[i];
a[i] := a[imax];
a[imax] := k;
end;
for i := 1 to n do
write(a[i], ' ');
k := 0;
for i := 2 to n - 1 do
if (a[i] <> a[i - 1]) and (a[i] <> a[i + 1]) then
k := k + 1;
if a[1] <> a[2] then k := k + 1;
if a[n] <> a[n - 1] then k := k + 1;
writeln();
writeln('No doubles - ', k);
end.