Program fofgogjoj; var n:integer; a,s:real; begin repeat Writeln('Введите вещественное число a'); Read(a); until a>1; s:=0; n:=1; while s<a-1/n do begin s:=s+1/n; Write(n:4); n:=n+1; end; Writeln; Writeln('s=',s:0:4); end.
Сначала немного теории. Тут у нас импликация(если..то...), комбинированная с конъюнкцией(и). Таблица истинности импликации(стрелочки): 0 0 1 0 1 1 1 0 0 1 1 1 Общее правило: если a<=b, тогда правда Таблица истинности конъюнкции(/\): 0 0 0 0 1 0 1 0 0 1 1 1 Общее правило: если есть одна ложь-всё ложь Теперь о примере: Просто подставляем вместо x варианты. Так как между двумя скобочками с Если... То... стоит И, нам нужен вариант, где оба Если... То... являются правдой. Рассмотрим подробно 1 вариант: 21<25 - это правда 21<23 - это правда Таким образом, в первых скобочках правда, это доказывает таблица истинности, приведённая выше. 21<22 - это правда 21>21 - это ложь В этих скобочках-ложь. А так как ложь и правда в И являются ложью, нам не подходит данный вариант 2 вариант-верный ответ, т.к.: 22<25 - это правда 22<23 - это правда В первых скобочках правда 22<22 - это ложь 22>21 - это правда И в этих скобках правда. Как можно убедится, снова взглянув в таблицу истинности для конъюнкции, всё выражение является правдой. 3 и 4 посмотрите сами и убедитесь что это ложь.
var
n:integer;
a,s:real;
begin
repeat
Writeln('Введите вещественное число a');
Read(a);
until a>1;
s:=0;
n:=1;
while s<a-1/n do
begin
s:=s+1/n;
Write(n:4);
n:=n+1;
end;
Writeln;
Writeln('s=',s:0:4);
end.
Не советую печатать число большее 10 xD