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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2013, 14:58   #1
Aleksandr litvinch
Пользователь
 
Регистрация: 08.10.2013
Сообщений: 19
По умолчанию как сделать циклы while и repeat

нужно написать программу в Pascal двумя циклами while и repeat которая выводит простые числа от 1 до n

c циклом for я сделал

Код:
uses crt;
var n,k,i,t:integer;
begin
clrscr;
write('вводим   n= ');
readln (n);
for i:=2 to (n+5) do {во внешнем цикле поочереди берем цифры от 2 до  n+5}

   begin
   t:=0;{t-это количество делителей }
   for k:=2 to (n+5) do
       if i mod k=0 then t:=t+1; {а во внутреннем делим эту цифру на все числа от 2 до нее самой }
   if t=1 then write(i:10); {и если число имеет только один делитель ,то оно простое }
    end;
end.

Последний раз редактировалось Stilet; 13.10.2013 в 16:59.
Aleksandr litvinch вне форума Ответить с цитированием
Старый 13.10.2013, 15:15   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

1. Нет необходимости проверять делимость на числа, которые больше корня самого числа.
Если число делится, то оно представимо в форме: n = m * k;
Увеличивая m, уменьшаем k. В крайнем случае получим - n = m * m.
2. Аналогом цикла for, построенного на While будет такой цикл:
Код:
i := 2;
m := round(sgrt(n);
while (i <= m) do begin
...
i := i + 1;
end;
3. Аналог цикла for, построенный на Repeat, будет цикл:
Код:
i := 2;
m := round(sgrt(n);
repeat
...
i := i + 1;
until (i > m);
Где-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 13.10.2013, 15:31   #3
Aleksandr litvinch
Пользователь
 
Регистрация: 08.10.2013
Сообщений: 19
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
1. Нет необходимости проверять делимость на числа, которые больше корня самого числа.
Если число делится, то оно представимо в форме: n = m * k;
Увеличивая m, уменьшаем k. В крайнем случае получим - n = m * m.
2. Аналогом цикла for, построенного на While будет такой цикл:
Код:
i := 2;
m := round(sgrt(n);
while (i <= m) do begin
...
i := i + 1;
end;
3. Аналог цикла for, построенный на Repeat, будет цикл:
Код:
i := 2;
m := round(sgrt(n);
repeat
...
i := i + 1;
until (i > m);
Где-то так, ...



я не очень понял что писать на месте троеточий .... замечание по поводу цикла с for я понял , но так же писать больше нужно
Aleksandr litvinch вне форума Ответить с цитированием
Старый 13.10.2013, 15:33   #4
grominfo
Форумчанин
 
Аватар для grominfo
 
Регистрация: 30.05.2011
Сообщений: 651
По умолчанию

Код:
i := i + 1;
Можно заменить на

Код:
inc(i);
Преподы любят, когда код оптимизирован

Код:
я не очень понял что писать на месте троеточий .... замечание по поводу цикла с for я понял , но так же писать больше нужно
На месте троеточий может быть любой ваш дополнительный код, или не быть его вообще
Создание, программирование и сопровождение сайтов любой сложности.
Изготовление программ на заказ.
Список услуг и портфолио на сайте www.andreygrom.ru

Последний раз редактировалось Stilet; 13.10.2013 в 16:59.
grominfo вне форума Ответить с цитированием
Старый 13.10.2013, 15:45   #5
Aleksandr litvinch
Пользователь
 
Регистрация: 08.10.2013
Сообщений: 19
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
1. Нет необходимости проверять делимость на числа, которые больше корня самого числа.
Если число делится, то оно представимо в форме: n = m * k;
Увеличивая m, уменьшаем k. В крайнем случае получим - n = m * m.
2. Аналогом цикла for, построенного на While будет такой цикл:
Код:
i := 2;
m := round(sgrt(n);
while (i <= m) do begin
...
i := i + 1;
end;
3. Аналог цикла for, построенный на Repeat, будет цикл:
Код:
i := 2;
m := round(sgrt(n);
repeat
...
i := i + 1;
until (i > m);
Где-то так, ...



но ведь если я напишу m:=round (sqrt(n)) а потом сделаю цикл от i до m , мне найдет простые числа до корня этого числа , а нужно так что именно до числа которое вводиться
Aleksandr litvinch вне форума Ответить с цитированием
Старый 13.10.2013, 16:47   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Во-первых, цикл for i:=2 to (n+5) do уже ищет простые числа не от 1 до n, а от 2 до n+5. Во-вторых, m := round(sqrt(n)) нужен для того, чтобы не проверять лишние делители, так как проверяемое число не может делиться на число, большее корня из проверяемого числа.

Спасибо, Poma][a. Поправил у себя
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 13.10.2013 в 18:12.
BDA на форуме Ответить с цитированием
Старый 13.10.2013, 18:00   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

И в-третьих везде нужно писать sqrt, а не sgrt
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
циклы while и repeat Seferus Паскаль, Turbo Pascal, PascalABC.NET 1 06.10.2011 18:58
задачи на циклы Repeat While For Kot007 Паскаль, Turbo Pascal, PascalABC.NET 2 19.05.2011 22:03
циклы с операторами For, While, Repeat baltser Помощь студентам 1 03.06.2010 06:59
циклы while...do и repeat...until. deniks Паскаль, Turbo Pascal, PascalABC.NET 6 07.12.2008 15:58