ОЧЕНЬ Решить задачу: Решить задачу с использованием функции Concat Описать строковую константу k=‘Кабинет’ и строковую переменную pred. Ввести с клавиатуры название предмета (в нужном падеже). Получить в переменной res полное название кабинета.
Числа Фибоначчи определяются следующим образом: Для перехода от математической записи к записи, пригодной для алгоритмизации (и программирования), нужно представить число Фибоначчи в виде некоей функции F(n) и уже эту функцию программировать. Такое представление получить в данном случае очень просто.
Поскольку в функции присутствует определение её значения через обращение к ней же, мы можем говорить о рекурсивном определении функции. Рекурсия программируется либо непосредственно (это быстро, наглядно, но часто сопряжено с большими расходами вычислительных ресурсов), либо путем сведения к итерации (это существенно менее наглядно, может быть затруднено алгоритмически, но эффективно при выполнении). Поскольку в задании говорится о рекурсии, выбираем рекурсивный алгоритм.
1. Очень короткая реализация // PascalABC.NET 3.1, сборка 1250 от 28.05.2016 function Fib(n:integer):integer:=(n<2?1:Fib(n-1)+Fib(n-2));
begin Writeln(Fib(ReadInteger('n='))) end.
Тестовое решение n= 20 10946
2. Более традиционная реализация // PascalABC.NET 3.1, сборка 1250 от 28.05.2016 function Fib(n:integer):integer; begin if n<2 then Result:=1 else Result:=Fib(n-1)+Fib(n-2) end;
begin Writeln(Fib(ReadInteger('n='))) end.
3. Тупо-школьная реализация // PascalABC.NET 3.1, сборка 1250 от 28.05.2016 function Fib(n:integer):integer; begin if n<2 then Fib:=1 else Fib:=Fib(n-1)+Fib(n-2) end;
var n:integer; begin Write('n='); Read(n); Writeln(Fib(n)) end.
Как хорошо видно, по мере деградации уровня программирования программа становится длиннее, но ни в коем случае ни яснее, ни эффективнее.
Ваша небрежность при записи задания привела к необходимости составить решение для двух выражений. Соответственно, были найдены два корня.
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016 function f1(x:real):=sin(x*x)+cos(x*x)-10*x;
function f2(x:real):=1-10*x;
function Root(a,b,eps:real; f:real->real):real; begin var x,fx:real; var fa:=f(a); if abs(fa)<=eps then Result:=a else begin var fb:=f(b); if abs(fb)<=eps then Result:=b else if fa*fb>0 then Result:=0/0 else repeat x:=(a+b)/2; fx:=f(x); if abs(fx)<=eps then Result:=x else if fa*fx>0 then a:=x else b:=x; until abs(fx)<=eps end end;
begin var eps:=ReadReal('Введите точность решения:'); Writeln('r1=',Root(0,1,eps,f1)); Writeln('r2=',Root(0,1,eps,f2)) end.
Тестовое решение Введите точность решения: 1e-7 r1=0.10101518034935 r2=0.0999999940395355
Для перехода от математической записи к записи, пригодной для алгоритмизации (и программирования), нужно представить число Фибоначчи в виде некоей функции F(n) и уже эту функцию программировать. Такое представление получить в данном случае очень просто.
Поскольку в функции присутствует определение её значения через обращение к ней же, мы можем говорить о рекурсивном определении функции.
Рекурсия программируется либо непосредственно (это быстро, наглядно, но часто сопряжено с большими расходами вычислительных ресурсов), либо путем сведения к итерации (это существенно менее наглядно, может быть затруднено алгоритмически, но эффективно при выполнении). Поскольку в задании говорится о рекурсии, выбираем рекурсивный алгоритм.
1. Очень короткая реализация
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
function Fib(n:integer):integer:=(n<2?1:Fib(n-1)+Fib(n-2));
begin
Writeln(Fib(ReadInteger('n=')))
end.
Тестовое решение
n= 20
10946
2. Более традиционная реализация
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
function Fib(n:integer):integer;
begin
if n<2 then Result:=1
else Result:=Fib(n-1)+Fib(n-2)
end;
begin
Writeln(Fib(ReadInteger('n=')))
end.
3. Тупо-школьная реализация
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
function Fib(n:integer):integer;
begin
if n<2 then Fib:=1
else Fib:=Fib(n-1)+Fib(n-2)
end;
var
n:integer;
begin
Write('n='); Read(n);
Writeln(Fib(n))
end.
Как хорошо видно, по мере деградации уровня программирования программа становится длиннее, но ни в коем случае ни яснее, ни эффективнее.