Как написать программу вычисляющую значение функции

В сегодняшнем уроке будет написана и рассмотрена программа, вычисляющая значение функции. Разработку будем вести на языке Си. Значение функции будет вычислять подпрограмма; с помощью неё мы решим типовую вычислительную задачу, которую удобно запрограммировать для вычисления на компьютере.

Изучение программирования на примерах многие авторы считают очень эффективным, и мы, в рассмотрении данного вопроса, поступим также. Поэтому решим типовую задачу.

Задание. Вычислить сумму:

Найти сумму, используя подпрограмму, вычисляющую значение функции

Перейдем к написанию программы, решающей данную задачу. Сначала подключим необходимые заголовочные файлы, функции которых понадобятся для вывода результата в консоль и для математических расчетов соответственно:

#include <stdio.h>

#include <math.h>

Затем, нам понадобится подпрограмма, вычисляющая значение функции f(x). Напишем её:

double f(double x)

{

    return 2 * pow(x, 3) + 7 * sqrt(x);

}

Функция f, после своего вызова, вернёт вызывающей программе значение типа double. Это число и будет результатом вычисления значения функции f(x): оно вычисляется в операторе return.

Перейдем к написанию функции main. Объявим целочисленную переменную x = 1, значение которой будем последовательно увеличивать до 10, чтобы вычислить сумму, необходимую для решения задачи.

Также объявим переменную типа double с именем result. В ней будет хранится результат вычисления суммы.

Теперь напишем цикл while, в котором будут производиться все вычисления.

while (x <= 10)

{

    result = result + f(x);

    x++;

}

Цикл будет выполняться до тех пор, пока значение переменной x не станет больше 10. На каждой итерации цикла вычисляется новое значение f(x) (с помощью подпрограммы f) и добавляется к переменной result. После этого переменная x инкрементируется (её значение увеличивается на единицу: x++).

Вычисления закончены, выведем результат на экран:

printf(«result is %fn», result);

Приведём полный листинг программы, вычисляющей значение функции, которая была написана в этом уроке:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#include <stdio.h>

#include <math.h>

double f(double x)

{

    return 2 * pow(x, 3) + 7 * sqrt(x);

}

int main()

{

    int x = 1;

    double result = 0;

    while (x <= 10)

    {

        result = result + f(x);

        x++;

    }

    printf(«result is %fn», result);

    return 0;

}

Последнее, что осталось — это протестировать работу программы. Запустим её (в Visual Studio для этого нажмите сочетание клавиш Ctrl + F5, чтобы консоль сразу после исполнения программы не закрылась).

Программа, вычисляющая значение функции. Демонстрация работы

В данном уроке была написана программа, вычисляющая значение функции. Чтобы скачать её исходник, нажмите на кнопку ниже. Спасибо за прочтение статьи!

Скачать исходник

Автор admin Просмотров 15.6к. Обновлено 26 сентября 2021

Дана следующая функция y=f(x):
y = 2x — 10, если x > 0
y = 0, если x = 0
y = 2 * |x| — 1, если x < 0

Требуется найти значение функции по переданному x.

  1. Получить с клавиатуры значение x.
  2. Если x больше 0, то вычислить выражение 2*x-10, результат присвоить переменной y.
    1. Иначе если x равен 0, то присвоить y значение 0.
      1. Иначе присвоить y результат выражения 2*|x|-1.
  3. Вывести значение y на экран.

Pascal

Язык Си

Python

КуМир

Basic-256

На занятии будет объяснен алгоритм работы с функциями на Паскале, рассмотрены стандартные функции. Будут разобраны примеры использования функций с параметрами и без параметров.

Арифметические функции (основные)

Функция Назначение Тип результата
abs (x) абсолютное значение аргумента совпадает с типом аргумента
sqr (x) квадрат аргумента совпадает с типом аргумента
sqrt (x) квадратный корень аргумента вещественный
cos (x) косинус аргумента вещественный
sin (x) синус аргумента вещественный
arctan (x) арктангенс аргумента вещественный
exp (x) ex вещественный
ln (x) натуральный логарифм вещественный
int (x) целая часть числа вещественный
frac (x) дробная часть числа вещественный

Функции преобразования типов

round (x) — округляет вещественное число до ближайшего целого.
trunc (x) — выдает целую часть вещественного числа, отбрасывая дробную.

Пользовательские функции Pascal

Функция в Паскале — это подпрограмма, которая в отличие от процедуры всегда возвращает какое-либо значение. Для этого в теле функции её имени присваивается вычисленное значение — результат, который она возвращает.

  • Функция – это подпрограмма, результатом работы которой является определенное значение.
  • Функции используются для:
    • выполнения одинаковых расчетов в различных местах программы;
    • для создания общедоступных библиотек функций.
  • Синтаксис:
  • заголовок начинается служебным словом function
  • 1

  • описание формальных параметров (тех, значения которых передаются из основной программы в функцию):
  • формальные параметры в паскале

  • параметры-переменные — параметры, значения которых становятся доступны и в основной программе (возвращаются в программу)
  • параметры-переменные в паскале

  • тип возвращаемого функцией результата описывается в конце заголовка функции через двоеточие:
  • тип функции

  • Вызывается функция в теле основной программы, только если ее имя фигурирует в каком-либо выражении. В отличие от процедуры, которая вызывается отдельно.
  • Внутри функции можно объявлять и использовать локальные переменные:
  • локальные переменные в функции

  • значение, которое является результатом, записывается в переменную, имя которой совпадает с названием функции; объявлять ее НЕ НАДО:
  • результат функции

Рассмотрим синтаксис:

var;{объявление глобальных переменных}
 
function название (параметры): тип результата;
var; {объявление локальных переменных}
begin{тело функции}
название:=результат; {результат вычислений всегда присваивается функции}
end;
 
begin{тело основной программы}
end.

Пример: написать функцию, которая вычисляет наибольшее из заданных двух значений

Решение:

пример функции в паскале

Вызов функции:
вызов функции в паскале


PascalABC.NET:

Правила описания функции:

1. Мы должны написать тип значения, которое возвращает функция.
2. Переменная Result хранит результат функции.

function f(x: real): real;
begin
  Result := x * x + 1;
end;

Вызов функции стоит в выражении:

// основная программа
begin
 var x := 5;
 var r := Sqrt(x) + f(x);
end.

Задача function 0. Написать функцию, которая вычисляет наибольшее из заданных трех значений. Функция с тремя параметрами.

✍ Пример результата:

Введите три числа:
4 1 6
наибольшее = 6

Пример: Написать функцию на Паскале, которая складывает два любых числа

✍ Пример результата:

первое число:
2
второе число:
5
сумма = 7

Функция суммы двух чисел на паскале

✍ Решение:

1
2
3
4
5
6
7
8
9
10
11
12
var x,y:integer;
function f(a,b:integer):integer;
begin
  f:= a+b;
end;
begin
 writeln('первое число:');
 readln(x);
 writeln('второе число:');
 readln(y);
 writeln('сумма= ',f(x,y));
end.

В рассмотренном примере использования функции в Паскале: функция f имеет два целочисленных параметра — a и b. Через двоеточие в заголовке функции (строка 2) указано, что значение, вычисляемое функцией, будет тоже целочисленным. В теле функции вычисляемая сумма присваивается имени функции. А в основной программе вызов функции осуществляется в качестве параметра оператора writeln.

Таким образом, главное отличие функции от процедуры — это то, что функция производит какие-либо вычисления и выдает в программу результат в виде значения, в то время как процедура чаще всего выполняет какие-либо действия с результатом, например, выводит его на экран (функция этого делать не может).

Задача function 1. При помощи функции найти среднее арифметическое двух чисел (функция с двумя параметрами).

✍ Пример результата:

Введите два числа:
4 7
среднее арифметическое = 5,5

Пример: Составить программу с функцией для вычисления факториала числа.

Показать решение:

Pascal PascalABC.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var x:integer;
function fact(a:integer):integer;
var i: integer;
begin
  if a<=1 then begin 
        fact:=1;exit;
  end;
  result:=2;
  for i:=3 to a do
     result:=result*i;
  fact:=result;
end;
begin
 writeln('число:');
 readln(x);
 writeln(fact(x));
end.
1
2
3
4
5
6
7
8
9
10
function Fact(n: integer): integer;
begin
  Result := 1;
  for var i:=1 to n do
    Result *= i
end;
begin
 var x:= readInteger('число:');
 println(x,'! = ',fact(x));
end.

В рассмотренном примере функция имеет один параметр — a. Вычисляемое функцией значение имеет целочисленный тип, это указывается в заголовке функции (строка 2). В теле функции в цикле for вычисляется факториал числа. Результат вычисления присваивается имени функции (строка 9). В теле программы для вывода результата функции она вызывается в операторе writeln (строка 14), который и выводит результат на экран.


PascalABC.NET:

Короткое определение функции:

function Sq(x: real) := x * x + 1;
 
begin
  var x := 10;
  var r := Sq(x) + Sq(2)
end.

Короткая запись

Если тело функции состоит только из одного оператора, PascalABC.NET позволяет использовать при описании сокращенный синтаксис, без ключевых слов begin и end:

1
2
3
4
5
6
##
function SumXY(x,y: real) := x + y;
// основная программа
begin
  Print (SumXY(9,2)); //11
end;

Задача function 2. Составить функцию, которая определяет сумму всех чисел от 1 до N и привести пример ее использования. N — параметр функции.

Пример:

Введите число:
100
сумма = 5050

Задача function 3. Составить функцию, которая определяет, сколько зерен попросил положить на N-ую клетку изобретатель шахмат (на 1-ую – 1 зерно, на 2-ую – 2 зерна (в два раза больше предыдущего результата), на 3-ю – 4 зерна, на 4-ю – 8 зерен…). N — параметр функции.

Пример:

Введите номер клетки:
28
На 28-ой клетке 134217728 зерен.

Задача function 4. Описать функцию IsDigit(A), которая возвращает истину, если целое число A представляет цифру (то есть A лежит в диапазоне 0–9). В основной программе вывести значение этой функции для N (N ≥ 0) данных чисел.

  
Пример:

Введите N:
3
Введите число:
2 >>> true
Введите число:
34 >>> false
Введите число:
4 >>> true

Задача function 5. Вычисление степени числа с помощью функции на языке Паскаль.

 
Пример:

Введите число:
3
Введите степень числа:
2
Результат 3^2 = 9

Задача function 6. Описать функцию Calc(A, B, Operation) вещественного типа, выполняющую над ненулевыми вещественными числами A и B одну из арифметических операций и возвращающую ее результат. Вид операции определяется целым параметром Operation: 1 — вычитание, 2 — умножение, 3 — деление, остальные значения — сложение. С помощью Calc выполнить для данных A и B операции, определяемые данными целыми N1, N2, N3.

  
Пример:

Введите два числа:
5  7
Введите номер операции (1 — вычитание, 2 — умножение, 3 — деление, остальные значения — сложение):
2
Результат 5*7 = 35

* Из задачника М. Э. Абрамян (Proc22)

Самостоятельная работа

1 вариант: Описать функцию CircleS(R) вещественного типа, находящую площадь круга радиуса R (R — вещественное). С помощью этой функции найти площади трех кругов с данными радиусами. Площадь круга радиуса R вычисляется по формуле S=π∗R2. В качестве значения Пи использовать 3.14.

* Из задачника М. Э. Абрамян (Proc18)

Пример:

Введите радиус:
5.2
Площадь круга = 16,328‬
___
Введите радиус:
6.3
Площадь круга = 19,782‬‬
___
Введите радиус:
7.1
Площадь круга = 22,294

2 вариант: Описать функцию TriangleP(a, h), находящую периметр равнобедренного треугольника по его основанию a и высоте h, проведенной к основанию (a и h — вещественные). С помощью этой функции найти периметры трех треугольников, для которых даны основания и высоты (периметр = сумме длин всех сторон). Для нахождения боковой стороны b треугольника использовать теорему Пифагора: b2=(a/2)2+h2.

* Из задачника М. Э. Абрамян (Proc20)

Пример:

Введите основание треугольника:
6
Введите высоту треугольника:
5
Периметр треугольника = 17,83095 
___
Введите основание треугольника:
...
Введите высоту треугольника:
...
Периметр треугольника = ... 
___
Введите основание треугольника:
...
Введите высоту треугольника:
...
Периметр треугольника = ... 

Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:

проверь себя

Условие задачи: Требуется написать программу, вычисляющую значение функции у = f(x).

Сложность: легкая.

Для того чтобы нам решить подобную задачу нужно будет воспользоваться обычным условием if else.

К примеру нам надо решить вот такую систему функции :

у = x – 2, если x > 0,
y = 0, если x = 0,
y = |x|, если x < 0.

Тут нам надо найти у в зависимости от x , т.е. у нас будет две переменные : под ответ и под значение.

Давайте создадим каркас

#include <iostream> // подключаем библиотеку ввода и вывода

using
namespace
std;
// используем именное пространство std

int
main()
{

setlocale
(LC_ALL,
"Rus"
);
// включаем русский язык

int
x , y;
}

Для начала попросим пользователя ввести число , то есть x :

cout <<
"Введите число x : "
; cin >> x;

Ну и дальше в зависимости от x мы должны написать условие :

if
(x > 0) {

y = x - 2;

cout <<
"y = x -2 = "
<< y << endl;
}
else
{

if
(x == 0) {

y = 0 ;

cout <<
"y = "
<< y << endl;

}

else
{

y =
abs
(x);

cout <<
"y = |x| = "
<< x << endl;

}
}

Довольной простое условие , когда пользователь ввел число, оно подставляется сначала в первое, x > 0 если оно не выполняется , т.е. наше число x меньше 0 , то оно уже подставляется в другое условие и так далее.

Весь код задачи

#include <iostream> // подключаем библиотеку ввода и вывода

using
namespace
std;
// используем именное пространство std

int
main()
{

setlocale
(LC_ALL,
"Rus"
);
// включаем русский язык

int
x , y;


cout <<
"Введите число x : "
; cin >> x;

if
(x > 0) {

y = x - 2;

cout <<
"y = x -2 = "
<< y << endl;

}

else
{

if
(x == 0) {

y = 0 ;

cout <<
"y = "
<< y << endl;

}

else
{

y =
abs
(x);

cout <<
"y = |x| = "
<< y << endl;

}

}

system
(
"PAUSE"
);
// чтобы программа не закрывалась

return
0 ;
// возвращаем функции main() ноль
}

Предыдущая

ПрограммированиеЗадачи по С++. Среднее арифметическое в трех рядах

Следующая

ПрограммированиеЗадачи по C++. Выбор правильного ответа.

Lari76

0 / 0 / 0

Регистрация: 10.10.2022

Сообщений: 63

1

Вычисления значения функций

11.10.2022, 16:00. Показов 2485. Ответов 53

Метки нет (Все метки)


Здравствуйте, помогите разобраться проблемой.
1.Нужно написать программу вычисляющие значение функций:
(x / ln(x))*(-x/cos(x)), если x < -6;
x*3*x+cos(x)/lg(x), если -6 <=x<1;
cos(x)/x^3, если 1<=x<4;
cos(2*x)*68+lg(x)/x^3, если 4<=x.
2.Вычислить значение функций на интервале [-8,6] с шагом 0.1
Я написала следующее

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
program Firtlab;
uses crt,math;
var x,y:real;
 k:integer;
 begin
        clrscr;
        x:=-8;
        k:=0;
        while x<=6 do
        begin
        if x<-6 then writeln ('x=', y:0:1,' y= not defined ')
        else if x<1 then
        begin
        y:=cos(x);
        writeln('x=',x:0:1,'y=',y:6:3)
        end
        else if x<4 then
        begin
        if x<=0 then writeln('x=',x:0:1,' y= not defined')
        else
        begin
        y:=cos(x)/sqr(x);
        writeln('x=',x:0:1,'y=',y:6:3);
        end
        end
        else
        begin
        y:=cos(2*x)*68+ln(x)/sqr(3);
        writeln('x=',x:0:1,' y=not defined ',y:6:3)
        end;
        x:=x+0.1;
        inc(k);
        if k mod 20=0 then
        begin
        write('Press Enter');
        readln
        end;
        end;
        readln
        end.

И программа мне выдает вот это
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
x=0.0 y= not defined
Press Enter

Помогите разобраться в чем дело.Оно не так должно работать.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32464 / 20955 / 8108

Регистрация: 22.10.2011

Сообщений: 36,224

Записей в блоге: 7

11.10.2022, 16:51

2

Цитата
Сообщение от Lari76
Посмотреть сообщение

Помогите разобраться в чем дело

В том, что в 11-ой строке выводится не X, как должно было быть, а Y. Смотрите внимательнее на переменные, которые выводятся.



0



0 / 0 / 0

Регистрация: 10.10.2022

Сообщений: 63

11.10.2022, 17:37

 [ТС]

3

Я как поняла нужно записать в 11 столбике y<-6, а не х<-6?



0



volvo

Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32464 / 20955 / 8108

Регистрация: 22.10.2011

Сообщений: 36,224

Записей в блоге: 7

11.10.2022, 17:39

4

Лучший ответ Сообщение было отмечено Lari76 как решение

Решение

Pascal
11
if x<-6 then writeln ('x=', X:0:1 { <=== Вот это нужно написать, X, а не Y },' y= not defined ')

, тогда будут выводиться значения X, для которых Y не определен.



0



0 / 0 / 0

Регистрация: 10.10.2022

Сообщений: 63

11.10.2022, 17:46

 [ТС]

5

Поняла, спасибо что указали на ошибку.



0



Lari76

0 / 0 / 0

Регистрация: 10.10.2022

Сообщений: 63

04.11.2022, 13:33

 [ТС]

6

Здравствуйте, помогите разобраться с кодом.

Я написала следующее:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
program Firtlab;
uses crt,math;
var x,y:real;
 k:integer;
 begin
        clrscr;
        x:=-8;
        k:=0;
        while x<=6 do
        begin
        if x<-6 then writeln ('x=', x:0:1,' y= No defined ')
        else if x<1 then
        begin
        y:=cos(x);
        writeln('x=',x:0:1,'y=',y:6:3)
        end
        else if x<4 then
        begin
        if x<=0 then writeln('x=',x:0:1,' y= No defined ')
        else
        begin
        y:=cos(x)/sqr(x);
        writeln('x=',x:0:1,'y=',y:6:3);
        end
        end
        else
        begin
        y:=cos(2*x)*68+ln(x)/sqr(3);
        writeln('x=',x:0:1,' y= ',y:6:3)
        end;
        x:=x+0.1;
        inc(k);
        if k mod 20=0 then
        begin
        write('Press Enter');
        readln
        end;
        end;
        readln
        end.

Но у меня получился не тот результат:

Кликните здесь для просмотра всего текста

x=-8.0 y= No defined
x=-7.9 y= No defined
x=-7.8 y= No defined
x=-7.7 y= No defined
x=-7.6 y= No defined
x=-7.5 y= No defined
x=-7.4 y= No defined
x=-7.3 y= No defined
x=-7.2 y= No defined
x=-7.1 y= No defined
x=-7.0 y= No defined
x=-6.9 y= No defined
x=-6.8 y= No defined
x=-6.7 y= No defined
x=-6.6 y= No defined
x=-6.5 y= No defined
x=-6.4 y= No defined
x=-6.3 y= No defined
x=-6.2 y= No defined
x=-6.1 y= No defined
Press Enter
x=-6.0 y= No defined
x=-5.9y= 0.927
x=-5.8y= 0.886
x=-5.7y= 0.835
x=-5.6y= 0.776
x=-5.5y= 0.709
x=-5.4y= 0.635
x=-5.3y= 0.554
x=-5.2y= 0.469
x=-5.1y= 0.378
x=-5.0y= 0.284
x=-4.9y= 0.187
x=-4.8y= 0.087
x=-4.7y=-0.012
x=-4.6y=-0.112
x=-4.5y=-0.211
x=-4.4y=-0.307
x=-4.3y=-0.401
x=-4.2y=-0.490
x=-4.1y=-0.575
Press Enter
x=-4.0y=-0.654
x=-3.9y=-0.726
x=-3.8y=-0.791
x=-3.7y=-0.848
x=-3.6y=-0.897
x=-3.5y=-0.936
x=-3.4y=-0.967
x=-3.3y=-0.987
x=-3.2y=-0.998
x=-3.1y=-0.999
x=-3.0y=-0.990
x=-2.9y=-0.971
x=-2.8y=-0.942
x=-2.7y=-0.904
x=-2.6y=-0.857
x=-2.5y=-0.801
x=-2.4y=-0.737
x=-2.3y=-0.666
x=-2.2y=-0.589
x=-2.1y=-0.505
Press Enter
x=-2.0y=-0.416
x=-1.9y=-0.323
x=-1.8y=-0.227
x=-1.7y=-0.129
x=-1.6y=-0.029
x=-1.5y= 0.071
x=-1.4y= 0.170
x=-1.3y= 0.267
x=-1.2y= 0.362
x=-1.1y= 0.454
x=-1.0y= 0.540
x=-0.9y= 0.622
x=-0.8y= 0.697
x=-0.7y= 0.765
x=-0.6y= 0.825
x=-0.5y= 0.878
x=-0.4y= 0.921
x=-0.3y= 0.955
x=-0.2y= 0.980
x=-0.1y= 0.995
Press Enter
x=-0.0y= 1.000
x=0.1y= 0.995
x=0.2y= 0.980
x=0.3y= 0.955
x=0.4y= 0.921
x=0.5y= 0.878
x=0.6y= 0.825
x=0.7y= 0.765
x=0.8y= 0.697
x=0.9y= 0.622
x=1.0y= 0.540
x=1.1y= 0.375
x=1.2y= 0.252
x=1.3y= 0.158
x=1.4y= 0.087
x=1.5y= 0.031
x=1.6y=-0.011
x=1.7y=-0.045
x=1.8y=-0.070
x=1.9y=-0.090
Press Enter
x=2.0y=-0.104
x=2.1y=-0.114
x=2.2y=-0.122
x=2.3y=-0.126
x=2.4y=-0.128
x=2.5y=-0.128
x=2.6y=-0.127
x=2.7y=-0.124
x=2.8y=-0.120
x=2.9y=-0.115
x=3.0y=-0.110
x=3.1y=-0.104
x=3.2y=-0.097
x=3.3y=-0.091
x=3.4y=-0.084
x=3.5y=-0.076
x=3.6y=-0.069
x=3.7y=-0.062
x=3.8y=-0.055
x=3.9y=-0.048
Press Enter
x=4.0y=-0.041
x=4.1 y= -22.906
x=4.2 y= -35.152
x=4.3 y= -45.991
x=4.4 y= -54.990
x=4.5 y= -61.790
x=4.6 y= -66.120
x=4.7 y= -67.807
x=4.8 y= -66.784
x=4.9 y= -63.092
x=5.0 y= -56.878
x=5.1 y= -48.389
x=5.2 y= -37.964
x=5.3 y= -26.018
x=5.4 y= -13.027
x=5.5 y= 0.490
x=5.6 y= 13.996
x=5.7 y= 26.951
x=5.8 y= 38.839
x=5.9 y= 49.187
Press Enter
x=6.0 y= 57.581

Можете объяснить и показать где у меня в коде ошибка, или написать другой код под мою задачу.



0



ФедосеевПавел

Модератор

Эксперт по электронике

8286 / 4189 / 1597

Регистрация: 01.02.2015

Сообщений: 13,022

Записей в блоге: 3

04.11.2022, 18:22

7

А почему вы решили, что существует какой-то диапазон аргумента, на котором функция не определена?

И лучше разделить вычисления и вывод на экран, т.е.

Pascal
1
2
3
4
5
6
7
8
9
if x<-6 then
  y:=....
else if x<1 then
  y:=...
else if x<4 then
  y:=...
else
  y:=...;
writeln('x=',x:0:1,'y=',y:6:3);

так и код компактнее и форматирование вывода менять только в одном месте.

Добавлено через 8 минут
Да, есть диапазоны, для которых функция не определена:
(x / ln(x))*(-x/cos(x)), если x < -6; — т.к. логарифм отрицательного числа не определён
x*3*x+cos(x)/lg(x), если -6 <=x<1; — при x<=0 функция не определена по тем же причинам

Значит удобно сделать сначала проверку диапазона аргумента, а только потом вычисления.
Что-то подобное

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
if x<=0 then
  writeln('x=', x:0:1,' y= No defined ')
else begin
  if x<-6 then
    y:=....
  else if x<1 then
    y:=...
  else if x<4 then
    y:=...
  else
    y:=...;
  writeln('x=',x:0:1,'y=',y:6:3);
end;



0



Lari76

0 / 0 / 0

Регистрация: 10.10.2022

Сообщений: 63

04.11.2022, 22:43

 [ТС]

8

Я попробовала вашим способом составить код, но паскал пишет ошибку.
Можете если вам не трудно показать где?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
program Firtlab;
uses crt,math;
var x,y:integer;
  begin
 clrscr;
        x:=-8;
        y:=0;
        while x<=6 do
        begin
  if x<=6 then y:=(x/ln(x))*(-x/cos(x))
  else;
  if x<1
  then y:=x^3*x+cos(x)/lq(x);
  else;
  if x<4 then
    y:=cos(x)/x^3;
  else;
    y:=cos(2*x)*68+lq(x)/x^3;
  writeln('x=',x:0:1,'y=',y:6:3);
end;



0



Модератор

Эксперт Pascal/DelphiЭксперт NIX

7508 / 4375 / 2777

Регистрация: 22.11.2013

Сообщений: 12,528

Записей в блоге: 1

04.11.2022, 23:01

9

«;» перед и после «else» недопустимы.



0



0 / 0 / 0

Регистрация: 10.10.2022

Сообщений: 63

04.11.2022, 23:28

 [ТС]

10

У меня появились следующие ошибки, можете объяснить как их исправить?
(12,20) Error: incompatiple types: got «Extended» expected «SmallInt»
(15,13) Error: illegal qualifier
(15,13) Fatal: Syntax error, ; expected but ordinal const found



0



Модератор

Эксперт Pascal/DelphiЭксперт NIX

7508 / 4375 / 2777

Регистрация: 22.11.2013

Сообщений: 12,528

Записей в блоге: 1

05.11.2022, 00:02

11

Несовместимые типы: попытка присвоить действительный результат целой переменной.
^ — это не возведение в степень, а операция разыменования указателя.
Про «;» уже говорил.

Ещё lq() — неведомая зверушка.



0



0 / 0 / 0

Регистрация: 10.10.2022

Сообщений: 63

05.11.2022, 00:08

 [ТС]

12

Поняла, буду исправлять



0



Lari76

0 / 0 / 0

Регистрация: 10.10.2022

Сообщений: 63

05.11.2022, 21:32

 [ТС]

13

bormant,
У меня вновь проблема, программа как запускаю её, тут же закрывается. Можете в моем коде показать что не так. Паскаль причем показывает мне что нет никаких ошибок в коде.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program Firtlab;
uses crt,math;
var x:integer;
  y: real;
 begin
 clrscr;
        x:=-8;
        y:=0;
        while x<=6 do
  if x<=6
  then y:=(x/ln(x))*(-x/cos(x));
  if x<1
  then y:=exp(3*(ln(x)))*x+cos(x)/ln(x);
  if x<4 then
    y:=cos(x)/exp(3*(ln(x)))
 else
    y:=cos(2*x)*68+ln(x)/exp(3*(ln(x)));
  writeln('x=',x=0:1,'y=',y=6:3);
end.



0



bormant

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7508 / 4375 / 2777

Регистрация: 22.11.2013

Сообщений: 12,528

Записей в блоге: 1

05.11.2022, 21:42

14

Цитата
Сообщение от Lari76
Посмотреть сообщение

программа как запускаю её, тут же закрывается

Ну она ж закончилась, почему б ей и не закрыться по завершении?
Но если сделать так:

Pascal
19
20
  Write('Press Enter...'); ReadLn;
end.

то она любезно подождет с закрытием окна до нажатия вами клавиши Enter.



0



Модератор

Эксперт по электронике

8286 / 4189 / 1597

Регистрация: 01.02.2015

Сообщений: 13,022

Записей в блоге: 3

05.11.2022, 21:48

15

1. Вы не проверяете аргумент на принадлежность к области допустимых значений (ОДЗ). А, между тем, функция логарифма определена только для положительных (x>0) чисел.

2. Забыли поставить знак минус в первом if.

3. Т.к. возведение в куб — не сложная операция, то её можно реализовать простым умножением (x*x*x) вместо разложения в логарифм и экспоненту.

4. Десятичный логарифм просто вычислить по формуле пересчёта основания lg(x):=ln(x)/ln(10). Можно или сразу в формуле или реализовать функцией.



0



0 / 0 / 0

Регистрация: 10.10.2022

Сообщений: 63

05.11.2022, 22:21

 [ТС]

16

Цитата
Сообщение от ФедосеевПавел
Посмотреть сообщение

1. Вы не проверяете аргумент на принадлежность к области допустимых значений (ОДЗ). А, между тем, функция логарифма определена только для положительных (x>0) чисел.

Как это должно выгладить не покажите?



0



ФедосеевПавел

Модератор

Эксперт по электронике

8286 / 4189 / 1597

Регистрация: 01.02.2015

Сообщений: 13,022

Записей в блоге: 3

05.11.2022, 22:29

17

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
if x<=0 then
  writeln('x=', x:0:1,' y= No defined ')
else begin
  if x<-6 then
    y:=....
  else if x<1 then
    y:=...
  else if x<4 then
    y:=...
  else
    y:=...;
  writeln('x=',x:0:1,'y=',y:6:3);
end;

Строки 1-2 это и есть проверка ОДЗ



0



Lari76

0 / 0 / 0

Регистрация: 10.10.2022

Сообщений: 63

05.11.2022, 23:16

 [ТС]

18

Спасибо, но теперь появилась другая проблема, выдает это в ответе — x=FALSEy= no defined
Код такой —

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
program Firtlab;
uses crt,math;
var x:integer;
  y: real;
 begin
 Write('Press Enter');Readln;
 clrscr;
        x:=-8;
        y:=0;
        while x<=6 do
if x<=0 then
writeln('x=', x=0:1,'y= no defined')
else begin
 if x<=-6
  then y:=(x/cos(x))*(-x/cos(x));
  if x<1
  then y:=(x*x*x)*x+cos(x)/ln(x)/ln(10);
  if x<4 then
    y:=cos(x)/(x*x*x)
 else
    y:=cos(2*x)*68+ln(x)/ln(10)/(x*x*x);
  end;
  writeln('x=',x=0:1,'y=',y=6:3);
  end.

Где именно ошибка не пойму



0



Модератор

Эксперт по электронике

8286 / 4189 / 1597

Регистрация: 01.02.2015

Сообщений: 13,022

Записей в блоге: 3

05.11.2022, 23:24

19

Попробуйте выполнить в режиме пошаговой отладки с наблюдением за значениями переменных.

Добавлено через 1 минуту
строка 12
writeln(‘x=’, x=0:1,’y= no defined’)

Добавлено через 1 минуту
то же и в строке 23



0



Lari76

0 / 0 / 0

Регистрация: 10.10.2022

Сообщений: 63

05.11.2022, 23:26

 [ТС]

20

ФедосеевПавел,
Программа мне показало вот что —

Pascal
1
2
if x<=0 then
writeln('x=', x=0:1,'y= no defined')

на этом моменте код зависает, как его исправить скажите пожалуйста?



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

05.11.2022, 23:26

Помогаю со студенческими работами здесь

Дополните программу на языке Паскаль для вычисления значения функций
Здравствуйте!
Помогите, пожалуйста, решить задачу по информатике 8 класса для сына, т.к. я в этом…

Написать программу вычисления заданных функций. На экран вывести значения x, y, z в следующем виде:
Написать программу вычисления заданных функций. На экран вывести значения x, y, z в
следующем…

Составить программу вычисления N значений функций Y для X, изменяющегося от начального значения Х1 c шагом dx
Помогите пожалуйста решить

Составить программу вычисления N значений функций Y для X, изменяющегося от начального значения Х1 c шагом dx
помогите пожалуйста,заранее спасибо:)

Разработать программу для вычисления значения функций f1(x) и f2(x)
ПОМОГИТЕ СРОЧНО!!!Разработать программу для вычисления значения функций f1(x) и f2(x). Вычисления…

Написать программу вычисления значения функций на отрезке
Написать программу вычисления значения функций на отрезке с шагом n. Результат представить в виде…

Разработать программу для вычисления значения двух функций
Заранее извиняюсь если не в том разделе создал свою тему! Просмотрел форум, не нашел раздела…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

20

Напишите программу, вычисляющую значение функции у ={-1 при х<0

Информатика 8 класс Босова ФГОС

§ 3.4. Программирование разветвляющихся алгоритмов ГДЗ по Информатике 8 Класс


Напишите программу, вычисляющую значение функции:

Напишите программу, вычисляющую значение функции у ={-1 при х<0

Пример входных данных Пример выходных данных
-5 y= -1
0 у=0
5 у=1

Ответ

Var x,y: integer;
begin
readln(x);
if x<0 then y:=-1
 else if x=0 then y:=0 else y:=1;
writeln(‘y = ‘,y);
end.

Пример:
-5
y = -1


Перейти к содержанию

На чтение 2 мин Просмотров 53

Условие задачи : Требуется написать программу, вычисляющую значение функции у = f(x).

Сложность : легкая.

Для того чтобы нам решить подобную задачу нужно будет воспользоваться обычным условием if then else.

К примеру нам надо решить вот такую систему функции :

у = x – 2, если x > 0,
y = 0, если x = 0,
y = |x|, если x < 0.

Тут нам надо найти у в зависимости от x , т.е. у нас будет две переменные : под ответ и под значение.

Давайте создадим каркас :

uses
crt;
var

x, y:
integer
;

begin
end
.

Для начала попросим пользователя ввести число , то есть x :

write
(
‘x = ‘
); readln (x);

Ну и дальше в зависимости от x мы должны написать условие :

if
x >
0
then

y := x —
2
else

if
x =
0
then

y :=
0

else

y :=
abs
(x);

Довольной простое условие , когда пользователь ввел число, оно подставляется сначала в первое x > 0 если оно не выполняется , т.е. наше число x меньше 0 , то оно уже подставляется в другое условие и так далее.

Весь код задачи :

uses
crt;
var

x, y:
integer
;

begin

clrscr;

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);

readln;
end
.

Беликова Ирина

Учитель физики, информатики и вычислительной техники. Победитель конкурса лучших учителей Российской Федерации в рамках Приоритетного Национального Проекта «Образование».

Понравилась статья? Поделить с друзьями:
  • Как написать программу вычисления площади круга
  • Как написать программу вычисления наименьшего общего кратного
  • Как написать программу воспитания доу
  • Как написать программу вирус
  • Как написать программу браузер