1) исходное данное - целое трёхзначное число x. выполните для x = 125 следующий алгоритм. a: =x div 100 b: =x mod 100 div 10 c: =x mod 10 s: =a b с. чем является результат s этого алгоритма? не могли бы объяснить как делать это ?
1) a:=x div 100 (в переменную а присваивается переменная x деленная на 100 без остатка, по другому a= x/100 без остатка, a=125/100= 1.25 b ,и берем только 1, a=1 ) 2) b:=x mod 100 div 10 (в переменную b присваивается переменная x деленная на 100 b и берется остаток, а потом число которое получилось делиться на 10 и берется только целая часть,b = 125/100=1,25 берем только 25, 25/10=2,5 берем целую часть то есть 2, b=2 ) 3) c:=x mod 10 (в переменную с присваивается переменная x деленная на 10, по другому с= x/10 без остатка, с=125/10= 12,5 b ,и берем только 5, с = 5) 4) s:=a *b*с=1*2*5=10
Задача, аналогичная той, которую публиковали вчера. Только цикл 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.
Первый условно назовем "я - компьютер". Вы превращаетесь в Исполнителя и с железной тупостью выполняете алгоритм - инструкцию за инструкцией, каждый раз выписывая на бумаге результат. Если у Вас много времени и Вы, как и компьютер, не делаете ошибок, то рано или поздно нужный результат будет получен.
Второй назовем "я - человек". Вы напрягаете свой мозг и определяете, что именно делает алгоритм, после чего проводите нужные вычисления. В этом варианте обычно к результату приходят быстрее.
Попробуем второй путь.
Вначале полагаем, что 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
2) b:=x mod 100 div 10 (в переменную b присваивается переменная x деленная на 100 b и берется остаток, а потом число которое получилось делиться на 10 и берется только целая часть,b = 125/100=1,25 берем только 25, 25/10=2,5 берем целую часть то есть 2, b=2 )
3) c:=x mod 10 (в переменную с присваивается переменная x деленная на 10, по другому с= x/10 без остатка, с=125/10= 12,5 b ,и берем только 5, с = 5)
4) s:=a *b*с=1*2*5=10