Исправить ошибку Помогите исправить ошибку в программе Вот задание: Разработать программу...

0 голосов
41 просмотров

Исправить ошибку
Помогите исправить ошибку в программе

Вот задание: Разработать программу поиска и печати всех чисел-близнецов, принадлежащих заданному диапазону [N,M ].

Вот программа:

program yyy;
function prost(var x:integer):boolean;
var
k,i:integer;
t:boolean;

begin
t:=true;
k:=0;
for i:=1 to x do
begin
if x mod i=0
then k:=k+1;
end;
if k=2 then t:=true
else t:=false;
prost:=t
end;

var
n,m,i:integer;
begin
writeln('1');
readln(n);
writeln('2');
readln(m);
for i:=n to m-1 do
begin
if prost(i) and prost(i+2)
then writeln(i , (i+2));
end;
end.


Информатика (81 баллов) | 41 просмотров
0

Вы передаете параметр в функцию по ссылке. Уберите var перед x:integer в ее описании

0

Исправьте в функции prost for i:=2 to round(sqrt(x)) do begin if (x mod i=0) then begin k:=k+1; break; end; end; if k=0 then t:=true else t:=false; prost:=t

0

В основной программе: var n,m,i,j:integer; begin write('1: '); readln(n); write('2: '); readln(m); for i:=n to m-1 do begin j:=i+2; if prost(i) and prost(j) then writeln(i,' ',(i+2)); end; end.

0

Заголовок функции не изменяется: function prost(var x:integer):boolean;

Дан 1 ответ
0 голосов
Правильный ответ

Основную ошибку Вам уже указали. Можно программу немного сократить:
program yyy; 
function prost(x:integer):boolean; 
var k,i:integer; 
begin 
k:=0; 
for i:=2 to trunc(sqrt(x)) do
  if x mod i = 0 then k:=k+1; 
prost:=k=0
end; 

var n,m,i:integer; 
begin 
write('n='); readln(n); 
write('m='); readln(m); 
for i:=n to m-2 do
 if prost(i) and prost(i+2)
  then writeln(i,'  ', (i+2)); 
end.

Пример:
n=1
m=150
1  3
3  5
5  7
11  13
17  19
29  31
41  43
59  61
71  73
101  103
107  109
137  139

(194k баллов)