function perf(n:integer):boolean; {заголовок функции}
var i,s:integer;
begin s:=0; {в s будем накапливать сумму}
for i:=1 to n div 2 do
if n mod i = 0 then s:=s+i;{ проверяем все числа от 1 до n div 2 если делитель то прибавляем к сумме}
perf:=s=n { возвращаем функции значение s=n то есть true если наша сумма равняется числу}
end;
Перевод из TurboPascal
program z18; {Напечатать все совершенные числа меньше m}
{ Справка: Совершенными называются числа сумма делителей включая 1,
которых равна самому числу, делители не должны быть
равны самому числу }
uses crt;
var i,j,k,m,sum:longint;
b:array[1..50]of longint;
begin
clrscr;
write('введите ограничение: ');readln(m);
i:=1;{write('1');}
while i<=m do
begin
sum:=0;k:=1;
for j:=1 to i-1 do if i mod j=0 then begin
b[k]:=j;inc(k);
end;
for j:=1 to k-1 do sum:=sum+b[j];
if i=sum then write(' ',i);inc(i);
end;
readln;
end.
-------------------------------------------------
program z45;
{ Найти двоичное представление для чётных совершенных чисел
вида 2 в степени (p-1) умножить на ((2 в степени p)-1) }
uses crt;
var ch,p,s,sum,i,j,f,m,g:longint;
procedure sistema(n:longint;var g:longint);
var t:array[1..10]of longint;k:longint;
begin
j:=0;k:=0;
while n>=1 do
begin
inc(k);inc(j);t[j]:=n mod 2;n:=n div 2;
end;
for j:=1 to k do g:=g*10+t[k+1-j];
end;
begin
clrscr;
write('ограничение: m=');readln(m);
p:=1;s:=2;
while p<=m do
begin
ch:=(s div 2)*(s-1);
if ch mod 2=0 then
begin sum:=0;
for j:=1 to ch-1 do if ch mod j=0 then sum:=sum+j;
if ch=sum then
begin sistema(ch,g);writeln(g); end;
end;
inc(p);s:=s*2;
end;
readln;
end.
uses - подключается модуль
crt; - модуль для отчистки экрана при каждом запуске программы
var - раздел для описания переменных
i,j,k,m,sum:longint; - переменные.
b:array[1..50]of longint; - массив.
begin - операторные скобки. Аналог { на С++
clrscr; - команда для отчистки экрана
write('введите ограничение: '); - выводит на экран текст в кавычках
readln(m); - читает введенную переменную с клавиатуры
i:=1; - переменной i присваивается значение 1
{write('1');} - коментарий
while i<=m do - цикл пока, почитай в какой-нить лит-ре, по-моему и в С есть аналог
begin
sum:=0;k:=1;
for j:=1 to i-1 do
if i mod j=0 then - условие if, в С++ имеется аналог
begin
b[k]:=j;
inc(k); - увеличивает переменную k на 1;
end;
for j:=1 to k-1 do sum:=sum+b[j]; - Цикл for, в с++ есть аналог
if i=sum then write(' ',i);inc(i);
end;
readln;
end.
Ну вобщем это все. Вторую если будет время позже опишу
uses - подключается модуль
crt; - модуль для отчистки экрана при каждом запуске программы
var - раздел для описания переменных
i,j,k,m,sum:longint; - переменные.
b:array[1..50]of longint; - массив.
begin - операторные скобки. Аналог { на С++
clrscr; - команда для отчистки экрана
write('введите ограничение: '); - выводит на экран текст в кавычках
readln(m); - читает введенную переменную с клавиатуры
i:=1; - переменной i присваивается значение 1
{write('1');} - коментарий
while i<=m do - цикл пока, почитай в какой-нить лит-ре, по-моему и в С есть аналог
begin
sum:=0;k:=1;
for j:=1 to i-1 do
if i mod j=0 then - условие if, в С++ имеется аналог
begin
b[k]:=j;
inc(k); - увеличивает переменную k на 1;
end;
for j:=1 to k-1 do sum:=sum+b[j]; - Цикл for, в с++ есть аналог
if i=sum then write(' ',i);inc(i);
end;
readln;
end. - конец операторных скобок. Аналог } на С++
Ну вобщем это все. Вторую если будет время позже опишу
Цитата: nevile
crt; - модуль для отчистки экрана при каждом запуске программы
только crt это не модуль для очистки экрана ))
я не помню как он точно называется. Но через в crt входит очистка экрана.
function perf(n:integer):boolean;
var i,s:integer;
begin s:=0;
for i:=1 to n div 2 do
if n mod i = 0 then s:=s+i;
perf:=s=n
end;
1-ая, и вторая строка это описание переменных. s присваивается 0.
А что означает for i:=1 to n div 2 do
if n mod i = 0 then s:=s+i;
perf:=s=n
Цитата: o1ps
а из данного кода
function perf(n:integer):boolean;
var i,s:integer;
begin s:=0;
for i:=1 to n div 2 do
if n mod i = 0 then s:=s+i;
perf:=s=n
end;
1-ая, и вторая строка это описание переменных. s присваивается 0.
А что означает for i:=1 to n div 2 do
if n mod i = 0 then s:=s+i;
perf:=s=n
function perf(n:integer):boolean;
var i,s:integer;
begin s:=0;
for i:=1 to n div 2 do
if n mod i = 0 then s:=s+i;
perf:=s=n
end;
1-ая, и вторая строка это описание переменных. s присваивается 0.
А что означает for i:=1 to n div 2 do
if n mod i = 0 then s:=s+i;
perf:=s=n
Код:
if n mod i = 0 then s:=s+i;
можно реализовать допустим на Фортране или C++?
Цитата: o1ps
а как данный код for i:=1 to n div 2 do
if n mod i = 0 then s:=s+i;
можно реализовать допустим на Фортране или C++?
if n mod i = 0 then s:=s+i;
можно реализовать допустим на Фортране или C++?
Код:
for(i = 1; i < n/2; i++)
if(n % i == 0)
s += i; [COLOR=green]//исправила[/COLOR]
if(n % i == 0)
s += i; [COLOR=green]//исправила[/COLOR]
[COLOR=red]читай пожалуйста правила форума и научись использовать теги code.[/COLOR]
[COLOR=red]также стоит читать книги, статьи по программированию. у нас на сайте и в интернете этого добра валом.[/COLOR]
Ольга там опечатка не s++ мы не инкрементируем а сумму копим
точно, перепутала i с 1, спасибо