Требуется написать программу, вычисляющую значение какой-либо функции у = 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.
var x, y: integer; begin write ('x = '); readln (x); if x > 0 then y := x - 2 else if x = 0 then y := 0 else y := abs(x); writeln ('y = ', y); end.
сорр
Поделитесь своими знаниями, ответьте на вопрос:
Объясните дан целочисленный массив с количеством элементов n. выведете на печать те его элементы. индексы которых являются степенями двойки.var a: array[1..100] of integer; i, n: integer; begin write('введите n: '); readln(n); for i: =1 to n do begin a[i]: =random(11)-5; write(a[i]: 3); end; writeln; writeln('элементы у которых индексы являются степенями 2-ки'); i: =1; while i begin i: =i*2; if i< =n then write(a[i]: 3); end; readln; end.
Відповідь:
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void randarr(int *A,const int size){
for(int i = 0; i < size; i++){
A[i] = rand() % 201 - 100;
}
}
void printarr(int *A,const int size){
for(int i = 0; i < size; i++){
cout << A[i] << " ";
}
}
float expression(int *A,int size){
float sum = 0;
int counter = 0;
for(int i = 0; i < size; i++){
if(A[i] > 0){
sum += A[i];
counter++;
}
}
sum /= counter;
return sum;
}
const int size = 10;
int main(){
srand(time(NULL));
setlocale(LC_ALL , "Ukrainian");
int A[size];
randarr(A,size);
printarr(A,size);
cout << "\nСереднє арифметичне додатнiх чисел = " << expression(A,size) << endl;
return 0;
}