![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Мне надо было написать код функции проверки числа на простоту. Вот написал:
Код:
function IsSimp(i:integer):boolean;
var
j:integer;
begin
for j := 2 to i - 1 do
begin
if (i mod j)=0 then
begin
IsSimp:=true;
end;
end;
IsSimp:=false;
end; Код:
var
chis:integer;
begin
chis:=4;
if IsSimp(chis)=true then
begin
writeln('Prostoe');
end;
readln;
end. |
|
#2
|
||||
|
||||
|
во первых твоя функция криво считает. простое число - это число которое делиться на себя и на единицу. вот функция которая правильно считает:
Код:
function IsSimp(i:integer):boolean;
var
j:integer;
begin
for j := 2 to i do
if ((i mod j)=0) then result:=true
else result:=false;
end; |
|
#3
|
||||
|
||||
|
Функция не прекращает работу до последнего end или exit
поэтому надо И ничего страшного в этой мере нет. Наоборот, Вы не прокручиваете весь цикл ( который можно проверять не до самого числа а до его квадратного корня ) и экономите время. В Delphi 2010 можно записать Exit(True); Тоже не обратил внимания. Надо наоборот Код:
function IsSimp(i:integer):boolean;
var
j:integer;
begin
for j := 2 to Trunc(Sqrt(i)) + 1 do
if ((i mod j)=0) then
begin
result:=false; // делиться значит не простое
exit;
end;
result:=true;
end;Последний раз редактировалось s0Creator, 12.02.2010 в 12:33. |
|
#4
|
|||
|
|||
|
Большое спасибо, насчет того что работает до последнего end я то же экспериментальным путем понял, просто решил уточнить) Да правильно насчет квадратного корня, еще раз спасибо
|
|
#5
|
|||
|
|||
|
Есть выражение еще короче: Result:= ((i mod j)=0);
|