Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2011, 12:23   #1
maxwel6064
Пользователь
 
Регистрация: 24.03.2011
Сообщений: 28
По умолчанию Функция

Доброго времени суток. Вновь понадобилась ваша помощь. Написал задачу, вроде по идее указал правильно, но пишет ошибку. В общем вот условие задачи: Вывести 5 простых чисел, меньшие введенного числа d.

И вот мой код:

Код HTML:
program Noname1;
   var i,ch,d:integer;
function delit(n:integer):integer;
   var i,kol:integer;
begin
 kol:=0;
 for i:=1 to n div 2 do
    if n mod i=0 then
       kol:=kol+1;
       delit:=kol;
  end;
 begin
   readln(ch);
   readln(d);
   i:=0;
      while i<=5 do
      d:=d-1;
      begin
 if delit(i)=ch then  begin
 i:=i+1;
 write(' ',i);

   end;
   end;
end.
Я вообще правильно размышляю в решении? Буду очень рад, если сможете поправить в моей задаче. Заранее огромное спасибо.
maxwel6064 вне форума Ответить с цитированием
Старый 05.11.2011, 13:00   #2
Alexan-Dwer
Форумчанин
 
Аватар для Alexan-Dwer
 
Регистрация: 20.04.2009
Сообщений: 136
По умолчанию

Если я Вас правильно понял, то вот та программа, о которой идет речь:

Код:
program Noname1;

var
i: Byte;
d: Integer;
begin
{ Запрашиваем число: }
Write('Input d: '); ReadLn(d);
{ Переход на новую строку: }
WriteLn;
{ Пояснение: }
Write('Result: ');

{ Цикл: }
for i:=1 to 5 do
begin
{ Уменьшаем число: }
d:=d-1;
{ Выводим ответ: }
Write(d);
{ Если цикл не закончен, добавим запятую к ответу: }
if i<5 then Write(', ');
end;

end.
Если что-то не так, говорите, я исправлю
Alexan-Dwer вне форума Ответить с цитированием
Старый 05.11.2011, 13:15   #3
Костя КС
Пользователь
 
Аватар для Костя КС
 
Регистрация: 22.01.2008
Сообщений: 78
По умолчанию

maxwel6064, я не везде смог понять ход Вашего решения. Для чего нужно нужна переменная ch?
И что именно Вы находите в функции delit? почему в ней цикл до n/2?

Я бы выполнил эту задачу вот так
Код:
program Noname1;
   var i,k,d:integer;
 
//функция проверяет простое число или нет  
function simple(n:integer):boolean;
   var i,kol:integer;
begin
kol:=0;
simple:=false;

for i :=1 to n-1 do
    if (n mod i)=0 then kol:=kol+1;
//если число делится нацело только один раз (на единицу) то оно простое
   if kol = 1 then simple := true;
  end;
  
 begin
   k := 0;
   readln(d);

      while (k<5)and(d>1) do
     begin

 if simple(d)=true then
   begin
    write(d,' ');
    k := k+1;
   end;
   
    d := d-1;
   end;
end.
Костя КС вне форума Ответить с цитированием
Старый 05.11.2011, 13:54   #4
maxwel6064
Пользователь
 
Регистрация: 24.03.2011
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Костя КС Посмотреть сообщение
maxwel6064, я не везде смог понять ход Вашего решения. Для чего нужно нужна переменная ch?
И что именно Вы находите в функции delit? почему в ней цикл до n/2?

Я бы выполнил эту задачу вот так
Код:
program Noname1;
   var i,k,d:integer;
 
//функция проверяет простое число или нет  
function simple(n:integer):boolean;
   var i,kol:integer;
begin
kol:=0;
simple:=false;

for i :=1 to n-1 do
    if (n mod i)=0 then kol:=kol+1;
//если число делится нацело только один раз (на единицу) то оно простое
   if kol = 1 then simple := true;
  end;
  
 begin
   k := 0;
   readln(d);

      while (k<5)and(d>1) do
     begin

 if simple(d)=true then
   begin
    write(d,' ');
    k := k+1;
   end;
   
    d := d-1;
   end;
end.
Ваш вариант больше всего подходит. Спасибо вам огромное!
maxwel6064 вне форума Ответить с цитированием
Старый 07.11.2011, 12:17   #5
Alexan-Dwer
Форумчанин
 
Аватар для Alexan-Dwer
 
Регистрация: 20.04.2009
Сообщений: 136
По умолчанию

maxwel6064, Не внимательно прочитал
Для пяти простых чисел:
Код:
program Noname1;

function Check(Value: Integer): Boolean;
var
i, n: Integer;
begin
Result:=False;
n:=Trunc(sqrt(Value));
{ Цикл от 2-х до корня из числа: }
for i:=2 to n do
{ Если число делится без остатка, значит, оно является составным: }
if (Value mod i) = 0 then Exit;
{ Иначе, оно простое: }
Result:=True;
end;

var
i: Byte;
d: Integer;
begin
{ Запрашиваем число: }
Write('Input d: '); ReadLn(d);

{ Переход на новую строку: }
WriteLn;

{ Проверяем введенное число: }
if d<11 then
{ Если оно меньше 11, то вывести пять простых нельзя: }
Write('Sorry, but this number (',d,') is not suitable.')
{ Иначе: }
else
  begin
{ Если числа должны начинаться с d-1, то раскомментируйте следующую строку: }
{ Dec(d); }

{ Пояснение: }
Write('Result: ');

{ Цикл: }
for i:=1 to 5 do
    begin
{ Ищем первое простое от числа d: }
while Check(d)=False do Dec(d);

{ Выводим ответ: }
Write(d);

{ Уменьшаем число: }
Dec(d);

{ Если цикл не закончен, добавим запятую к ответу: }
if i<5 then Write(', ');
    end;
  end;

end.
Alexan-Dwer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция if jasul Помощь студентам 7 29.09.2011 12:23
функция if IRMA230 Microsoft Office Excel 12 02.06.2010 22:43
функция gets U-S Общие вопросы C/C++ 6 14.11.2009 13:49
функция Lemo Помощь студентам 7 24.10.2008 12:54
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50