Необходимо перевести программу с Pascal ABC на free pascal
Формулировка задачи:
var a, factorial:longint;
const c:array [0..1] of char= ('0','1');
var res:string;
d:0..1;
k, n, i:byte;
begin
assign(input, 'input.txt');
assign(output, 'output.txt');
reset(input);
rewrite(output);
readln(n);
factorial := 1;
for i:=2 to n do
factorial := factorial * i;
a:=factorial;
res:='';
k:=0;
while a<>0 do
begin
d:=a mod 2;
if d=0 then k:=k+1;
res:=c[d]+res;
a:=a div 2;
end;
write(k);
readln
end.Решение задачи: «Необходимо перевести программу с Pascal ABC на free pascal»
textual
Листинг программы
var f: Longint; n, k: Byte; begin ReadLn(n); f:=2; while (n >= f) do begin Inc(k, n div f); f := f*2; end; WriteLn(k); end.
Объяснение кода листинга программы
- Объявлены три переменные:
f,n,kтипа Longint, Byte, Byte соответственно. - Переменная
nинициализируется значением, которое считывается из стандартного ввода с помощью процедуры ReadLn. - Переменная
fинициализируется значением 2. - Запускается цикл while, который выполняется до тех пор, пока значение переменной
nбольше значения переменнойf. - Внутри цикла переменная
kувеличивается на значение переменнойn, деленное на значение переменнойf. - Значение переменной
fувеличивается вдвое. - По завершении цикла выводится значение переменной
kс помощью процедуры WriteLn.