Var ar:array[1..20] of integer; i:integer; begin; for i:=1 to 20 do begin; readln(ar[i]); if (ar[i]>20) or (ar[i]<1) then exit; if ar[i] mod 2=0 then writeln(sin(ar[i])) else writeln(cos(ar[i])); end; end.
mansur071199486
24.06.2022
Задача, аналогичная той, которую публиковали вчера. Только цикл repeat заменяем на while.
Сначала немного математики.
О модуле тут смысла нет говорить, поскольку все an - суть положительные величины на интервале (0;1).
uses Crt;
function ai(n:integer):real; var i:integer; p:real; begin p:=1; for i:=n+1 to 2*n do p:=p*i; ai:=1/p end;
var i:integer; eps,s,an:real; begin ClrScr; Write('eps='); Read(eps); s:=0; i:=1; an:=eps+1; while an>=eps do begin an:=ai(i); if an>=eps then begin s:=s+an; Inc(i) end end; Writeln('s=',s); ReadKey end.
Тестовые решения: eps=0.07 s= 5.8333333333E-01
eps=0.000001 s= 5.9229647667E-01
eps=1e-8 s= 5.9229653448E-01
Для контроля результата можно отметить, что сумма первых 1000 членов ряда равна приблизительно 5.922965365Е-01
Если раздражает наличие функции, можно и без нее: uses Crt;
var i,j:integer; eps,s,an,p:real; begin ClrScr; Write('eps='); Read(eps); s:=0; i:=1; an:=eps+1; while an>=eps do begin p:=1; for j:=i+1 to 2*i do p:=p*j; an:=1/p; if an>=eps then begin s:=s+an; Inc(i) end end; Writeln('s=',s); ReadKey end.
vovababkin1477
24.06.2022
Делать это несложно. Есть два
Первый условно назовем "я - компьютер". Вы превращаетесь в Исполнителя и с железной тупостью выполняете алгоритм - инструкцию за инструкцией, каждый раз выписывая на бумаге результат. Если у Вас много времени и Вы, как и компьютер, не делаете ошибок, то рано или поздно нужный результат будет получен.
Второй назовем "я - человек". Вы напрягаете свой мозг и определяете, что именно делает алгоритм, после чего проводите нужные вычисления. В этом варианте обычно к результату приходят быстрее.
Попробуем второй путь.
Вначале полагаем, что s=0, n=12. Далее следует цикл, в котором i последовательно принимает значения 1, 2, ... 10. s=s+"что-то" говорит нам о том, что в s накапливается некая сумма, для чего s предварительно обнулялось. А что именно накапливается? n-i. При проходах по циклу это будут значения n-1, n-2, ... n-10. У нас n=12, поэтому в s будет накапливаться сумма 11+10+9+...+2. Или, это удобнее записать как 2+3+4+...+9+10+11. Это сумма арифметической прогрессии из 10 членов и ее можно найти по формуле суммы арифметической прогрессии. Если лениво вспоминать формулу, можно просто сложить эти числа. А можно поступить, как поступил в свое время Гаусс: заметить, что 2+11=13, 3+10=13, 4+9=13 и таких пар 5. И найти результат 5×13=65. Такая вот победа мозга над рутиной))) ответ: 65
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
Вводится 20 чисел от 1 до 20. если число четное, то вывести его синус, если нечетное то косинус.
i:integer;
begin;
for i:=1 to 20 do
begin;
readln(ar[i]);
if (ar[i]>20) or (ar[i]<1) then exit;
if ar[i] mod 2=0 then writeln(sin(ar[i])) else writeln(cos(ar[i]));
end;
end.