В файле А.dat дано натуральное n и массив целых чисел длины n. B файл B.dat выписать все элементы массива X, индексы которых являются простыми числами. Распознование простого числа оформить в виде подпрограммы.
Очень надо решить эту задачу))) ПлиЗ
Добавлено через 2 мин.
вот что я попытался сделать, но тут есть ошибки в самой программе, а исправить незнаю как
program Kurs;
procedure nat(i:integer;var k:integer);
var n,s:integer;
begin
s:=0;
for n:=1 to i-1 do
if i mod n = 0 then s:=s+1;
if s=0 then k:=i; end;
var f:text;
a:array[1..10] of integer;
c:array[1..10] of integer;
n,i,j,k:integer;
begin
assign(f,'a.dat');
reset(f);
read(f,n);
for i:=1 to n do
read(f,a[i]);
for i:=1 to n do
write(f,a[i]);
for j:=1 to 10 do
for i:=1 to n do begin
nat(i,k);
c[j]:=a[k];
end;
writeln;
for j:=1 to 10 do
write(c[j]);
close(f);
assign(f,'b.res');
rewrite(f);
writeln;
for j:=1 to n do
write((f,c[j]);
Close(f);
end.
все молчю
М | He!!, приведи название темы в соответствие с Правилами - или она будет закрыта. |
procedure nat(i:integer;var k:integer);
var n,s:integer;
begin
s:=0;
for n:=1 to i-1 do
if i mod n = 0 then s:=s+1;
if s=0 then k:=i;
end;
program Kurs;
var f:text;
a:array[1..10] of integer;
c:array[1..10] of integer;
n,i,j,k:integer;
begin
assign(f,'a.dat');
reset(f);
read(f,n);
for i:=1 to n do
read(f,a[i]);
for i:=1 to n do
write(f,a[i]);
for j:=1 to 10 do
for i:=1 to n do begin
nat(i,k);
c[j]:=a[k];
end;
writeln;
for j:=1 to 10 do
write(c[j]);
close(f);
assign(f,'b.res');
rewrite(f);
writeln;
for j:=1 to n do
write(f,c[j]);
end.
Ответ Unconnected скрыт.
Будет открыт после исправления названия.
все перелазил, не нашел как изменить имя темы. Извините, что заголовок темы не информативный, но решение задачи действительно нужно.
Название темы успешно отредактировано)
спасибо
Вот работающая программа. Извини, твою править было долго и не очень осмысленно - ошибки как в программировании, так и в идее.
Если непонятно, спрашивай.
function IsPrime(n: integer): boolean;
var
i,k: integer;
b: boolean;
begin
b:=(i>1);
i:=2;
k:=Trunc(Sqrt(n));
while (i<=k) and b do begin
b:=(n mod i>0);
Inc(i)
end;
IsPrime:=b
end;
var
f,g: text;
n,i,a: integer;
begin
assign(f,'a.dat');
reset(f);
ReadLn(f,n);
assign(g,'b.dat');
ReWrite(g);
for i:=1 to n do begin
read(f,a);
if IsPrime(i) then WriteLn(g,a)
end;
Close(f);
Close(g)
end.
begin
end.
function IsPrime(n: integer): boolean;
var
i,k: integer;
b: boolean;
begin
b:=(i>1); { <--- !!! }
i:=2;
k:=Trunc(Sqrt(n));
while (i<=k) and b do begin
b:=(n mod i>0);
Inc(i)
end;
IsPrime:=b
end;
Функцию совсем не понимаю, какая там идея? И что как там вообще?
Вот, привел некоторые комментарии. Попробуй разобраться. Если все же не получится - говори.
function IsPrime(n: integer): boolean; { IsPrime = ЯвляетсяПростым (с английского) }
var
i,k: integer;
b: boolean; { будет true, пока (и если) не обнаружится, что число составное }
begin
b:=(n>1); { инициализация b, заодно отсечение числа 1, которое не простое, равно true, если n>1 }
i:=2; { инициализация счетчика цикла }
k:=Trunc(Sqrt(n)); { верхний предел цикла - квадратный корень из числа. Дальше проверять нет смысла }
while (i<=k) and b do begin { цикл до верхнего предела или пока не поделится нацело }
b:=(n mod i>0); { true, если число НЕ делится нацело на i (то есть остаток есть) }
Inc(i) { увеличиваем параметр цикла }
end;
IsPrime:=b { Присваиваем возвращаемый результат }
end;
я разобрался в программе, но проверяя число три, оно у меня не получается простым. k получается равным 1, а
i=2,тоесть у нас i<k, значит цикл ниразу не выполняется
Добавлено через 5 мин.
b:=(i>1);
b:=(n>1);
И еще вопрос, например берем число 27. k=5, тогда от2 до 5 значение b=true, b=false, b=true, b=true. И чего программа делает с этими значениями, как мен кажется она просто их заменяет старый на новый по ходу выполнения цикла. По идее она должна их перемножить что бы ответ был false. Можно уточнить еще этот момент, почему он именно перемножает?
while (i<=k) and b do begin
ММММ, точно))) я все понял, спасибо за внимание. очень благодарен