Pascal Выполнить табулирование функции y = cos(x + a) на отрезке [1, 10] c шагом h=1. А вводится пользователем клавиатуры.

Ответы

Ответ дал: KnowsUser1
1

Ответ:

// --- PascalABC.NET 3.6.3 ---

begin

 var y: (real, real) -> real := (x, a) -> cos(x+a);

 var a := ReadInteger('Enter "a": ');

 PartitionPoints(1,10, 9).Tabulate(x -> y(x, a)).Println;

end.


BobbyFresnel: В PascalABC.NET лямбды умеют захватывтаь внешние переменные. Поэтому нет нужды описывать функциональную переменную y. Можно сразу написать Tabulate(x -> Cos(x + a))
BobbyFresnel: Также, в отличии от Питоно, допускаются многострочные лямбды. Обычно это лямбда-процедуры с телом begin ... end
KnowsUser1: Про многострочные лямбды знаю, а на счёт выноса функции y = cos(x + a) в отдельную функц. переменную, сделал так, потому что в задании написано именно про вычисление функции y, а не cos(x+a). Хотя в целом, вы конечно правы, и в этой переменной особой необходимости нет.
BobbyFresnel: А как написать надо было? Протабулировать ВЫРАЖЕНИЕ cos(x+A) ?
BobbyFresnel: Ну да не суть. Знаете - и отлично)
Ответ дал: LRSM
0

PascalABC.NET

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

  • procedure Tabulate(a,b,h:real; f:real->real; k:byte:=2; sp:byte:=3);
  • begin
  • var w := Seq(a, a+Trunc((b-a)/h)*h).Max(x->x.ToString.Length)+k+1;
  • Writeln(' x'.PadLeft(w), ' '*sp, 'y');
  • repeat Writeln(a:w:k, ' '*sp, f(a):0:k); a+=h until a>b
  • end;
  • begin
  • var a := ReadInteger('Введите a:');
  • Tabulate(1, 10, 1, x->Cos(x+a))
  • end.

Пример работы:

Приложения:
Вас заинтересует