Показать сообщение отдельно
Старый 02.10.2012, 10:37   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Открыл старую тему и переместил вопрос туда. (Тема была закрыта, чтобы отвадить любителей подбрасывать свои задачки в чужие темы). Объясняю.
Булева функция Test(J) возвращает true, если аргумент (J) - простое число, и false в противном случае. Проверка проводится "в лоб": вычисляются остатки от деления J на все числа, начиная с J/2 и до 2, и если хоть один остаток оказывается нулевым, то проверка прерывается и функция получает значение false.
Дальше - всё просто: искомой сумме и стартовому номеру вводимого числа присваиваются начальные значения S=0 и i=0, дальше организуется цикл ввода Repeat..Until, прерывающийся при введении А=0, в котором проверяется, является ли номер вводимого числа простым. Если является, то булевой переменной-флажку q присваивается значение true, в противном случае - false. Простым считается номер либо меньший 4 (т.е. 1, 2 и 3), либо, если он больше 3, то прошедший тестирование с помощью функции Test(i). Если q=true, то выдается сообщение "prime position", т.е. номер очередного вводимого А - простое число, и это А прибавляется к сумме (на всякий случай там еще "отсекаются" отрицательные числа). Далее осталось только выдать полученную сумму на экран и остановить выполнение программы до нажатия клавиши "Enter", что делается оператором Readln. Вроде как и всё.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070