IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Нахождение простого числа.
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Я начинающий в этом деле , изучаю паскаль вторую неделю - но не могу разобратся с блоксхемой для данной задачи.

Задача:
Ввести число B ( обязательно не простое число ) . Найти ближайшее простое число к числу B (например B=9 то ближайшее должно получится 11 , а если 20 то ближайшее 23 ).

Впринципе понятно что надо писать программу при использовании циклов .И при использовании ( while и repeat ). Если кому то не лень повозится с новичком , то обьясните пожалуйсто.

Сообщение отредактировано: urbAn -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


как ты видишь алгоритм поиска? можешь расписать по пунктам?
типа так:
1) ввели число В
2) ...
3) ...
ну или хотя бы словами - какие циклы, какие условия выхода из них, зачем они нужны...
без привязки к паскалю... по сути - что перебирать будешь


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
например B=9 то ближайшее должно получится 11


а почему например не 7 ?

Цитата
а если 20 то ближайшее 23


а по моему 19 blink.gif



--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Цитата(klem4 @ 30.09.2007 17:58) *

а почему например не 7 ?



а по моему 19 blink.gif


Честно говоря так было в задании написано.

По поводу блок схемы:
1) Вводим число N ( ну в данном случае 9 )
2) Впринципе также надо вводить делитель K или не вводить чтобы он уже был , но это помоему не столь важно.
3) N делим на K если остаток 0 то к N прибавляем 1 и опять делим
4) В случае если есть остатоу - например 9:2 =4 (1) то к делителю прибавляем 1

Только тут зацикленность получается - и я не совсем понимаю как вылезти из этого...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


blink.gif
Цитата
3) N делим на K если остаток 0 то к N прибавляем 1 и опять делим

допустим, мы ищем ближайшее к 20 простое число
ввели k=5
делится.
21 на 5 не делится... прибавляем 1. 21 на 5 не делится. 6 - не делится, 7 - делится...
почему, кстати, прибавляем, а не отнимаем?

мой тебе совет: поищи по форуму, как проверить, является ли число простым. и разберись с этим для начала...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Что такое простое число я знаю - в школе я учился . Оно делится на 1 или на само себя и всё.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Цитата(urbAn @ 1.10.2007 15:16) *
Что такое простое число я знаю - в школе я учился . Оно делится на 1 или на само себя и всё.
я думаю имелось ввиду как в прграмме проверить...


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


unsure.gif да - видимо я не совсем понял.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Мужской

Репутация: -  0  +


Наверно уже не нужно, но я кажется знаю, что urbAn имеет в виду.


program Prog;

{ Проверка составного числа: Check. }
function Check( B : Integer ) : Boolean;
var
I : Integer;
begin
Check := TRUE;
for I := 2 to Trunc(Sqrt(B)) do
if (B mod I) = 0 then
Exit;
Check := FALSE
end; { Check }

var
B, I, X : Integer;
begin
Write('Введите число: ');
ReadLn(B);
if B < 2 then
begin
Write('ОШИБКА: ',B,' < 2!');
Exit
end;
if not Check(B) then
begin
Write('ОШИБКА: ',B,' - простое число!');
Exit
end;
{ === Решение задачи === }
X := 0;
for I := B + 1 to MAXINT do
if not Check(I) then { Найдено простое число! }
begin
X := I;
Break
end;
if X <> 0 then
Write('Ближайшее простое число после ',B,' равно ',X,'.')
else { X = 0! }
Write('Число не найдено.')
end.



Зачем я это написал?
Эта программа является "примером", показывающим зачем нужны подпрограммы:
Цитата
Когда в разных частях программы выполняются несколько одинаковых действий
(они решают одну и ту же задачу с возможно разными исходними данными и результатом),
такие действия лучше выделить в подпрограмму.

Для начинающих...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата
Зачем я это написал?
Вот именно, непонятно... У автора вроде о подпрограммах - ни слова, хотя о циклах было (причем, заметь, было о циклах While/Repeat, ты же пользуешься For-ом...).

Это первое... Второе - извини меня, но с точки зрения usability программа никакая - ты же везде используешь not Check, так зачем, спрашивается, ты сделал функцию проверки составного числа, и используешь ее для проверки, является ли число простым? Процессор слишком мощный? Или ты думаешь, что раз пишешь пример "для начинающих", то "и так сойдет"? Не сойдет... Если ты привык писать программы неверно, то пиши... А вот учить других (тем более, начинающих) - не надо... И не начинай мне сейчас приводить ассемблерные листинги, "доказывающие" что-то... Неинтересно оно мне. Когда меня будет интересовать экономия 10 процессорных тактов не программу из 50000 строк кода - я буду писать на ассемблере. Здесь - раздел "Паскаль". И программа, которая написана (по твоим же словам) для начинающего, должна быть ему интуитивно понятна, вот мне непонятно почему нельзя было воспользоваться IsPrime, и обойтись без NOT.

Если можно более чем в одном месте программы избавиться от not-а, то это надо сделать (перечитай свою же цитату).
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Мужской

Репутация: -  0  +


Впринципе понятно что надо писать программу при использовании циклов - это не задание,
а размышление решающего задачу, я надеюсь.

Про NOT - согласен, пометять местами TRUE и FALSE и NOT не нужен. IsPrime не крал.
Удивительно, но текст совпал один в один.

Про процессор/assembler не согласен - добавление/удаление NOT не влияет на скорость результирующего кода.

А почему вообще можно здесь использовать отрицание? (Функция Check проверяет не любые числа!)
Потому, что первый условный оператор "удаляет" из множества целых чисел те из них,
которые не являются ни простыми, ни составными(1, 0 и на всякий случай все отрицательные числа).
Поэтому далее число B может быть или простым или составным.
По-моему, хорошо когда есть над чем хоть немного подумать, а не сразу CtrlC-CtrlV-Print-преподаватель.

И for - самый главный ЦИКЛ для начинающих. Он напрямую связан с понятием последовательности
(вообще с нумерацией чего-либо). Я так думаю.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 22:13
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name