Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 02.11.2016
Сообщений: 10

Применение цикла if для определения простых чисел. If внутри цикла for

07.11.2016, 10:21. Показов 2899. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, подскажите пожалуйста, в чем тут дело. С кодом все хорошо, все работает, просто я пытаюсь докопаться до сути и почему-то не "обмозговывается". Недавно начал учить с++, учу по книге Лафоре. Работаю в codeblock. И так вот код и далее вопрос: (сначала приведу два примера а сам вопрос будет в третьем примере)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
#include <stdlib.h> // для exit()
#include<process.h> // для exit()
 
int main()
{
    setlocale(0,"Rus");
    unsigned long n, j;
    cout << "Введите число:  ";
    cin >> n;                  
    for(j=2; j<= n/2; j++)     
    if(n%j == 0) 
    {
        cout << "Число не простое: делися на " << j << endl; //число не простое, делится на 2(пример с 6-кой)
        exit(0);
    }
    cout << "Число является простым\n";
    return 0;
    }
Давайте я сначала приведу пример работы программы в моём виденье.
1) Скажем пользователь вводит цифру 3(n), то вот как действует по алгоритму.Цикл for (j=2, j<=3/2, j=2,5). Далее if (3 % 2.5) = 0.5. Получается, что остаток if не равно 0, ибо в остатке 5 десятых, следовательно число является простым, что нам и покажет программа.

2) Скажем пользователь вводит число 6(n), то вот как действует по алгоритму. Цикл for (j=2, j<=6/2, j=4). Далее if
(6 % 4) = 2. Получается, что остаток if равен 0(2.0 же), следовательно число не является простым и делится на 2, что нам в итоге и выдаст программа. (насколько я понял, эту двойку программа взяла из значения j=2 которое в цикле for еще фигурирует, или не так это?)
3) Вот и основной вопрос, так же основанный на примере. Берем в этот раз число 9. Знаем изначально,что оно не простое и делится на 3. И так: пользователь вводит число 9(n), то вот как действует по алгоритму. Цикл for (j=2, j<= 9/2, j = 5,5). Получается, что остаток if равен 3,5, что не равно 0, И ПО ЛОГИКЕ число является простым(хотя конечно же 9 не является простым и делится на 3 и программа результат так и выдает), НО почему же тут получается 3.5 а система как-то игнорирует это, то что остаток не 0... Если проще, то я запутался. Каким образом тут происходит алгоритм расчета то человеческим языком? Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.11.2016, 10:21
Ответы с готовыми решениями:

Вывести ряд простых чисел с использованием вложенного цикла
Помогите написать программу вывода ряда простых чисел с использованием двойного цикла(цикл в цикле)

вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле цикла
вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле...

Применение цикла внутри функции
Помогите новичку. С помощью for пытаюсь перебрать столбцы в массиве, первый столбец отрабатывает как надо, после чего выдает ошибку:...

5
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
07.11.2016, 10:45
Лучший ответ Сообщение было отмечено Foror10111 как решение

Решение

Цитата Сообщение от Foror10111 Посмотреть сообщение
подскажите пожалуйста, в чем тут дело
Вот в чём:
Цитата Сообщение от Foror10111 Посмотреть сообщение
учу по книге Лафоре
Добавлено через 2 минуты
Foror10111, индекс j в цикле у Вас целого типа и число n тоже целого типа, а значит 3/2 == 1, а не 2.5 (повторяем тему деление целых чисел в C++).

Добавлено через 2 минуты
Foror10111, и Вы неправильно понимаете работу цикла for.

Добавлено через 7 минут
Foror10111, как это работает:
C++
1
2
3
4
for ( statement1; statement2; statement4 )
{
    statement3;
}
  1. перед входом в цикл выполняется statement1 (как правило, это инициализация счётчика)
  2. проверяется условие statement2 (результат выражения statement2 приводится к типу bool)
  3. если условие истинно, входим в цикл, иначе - выход из цикла
  4. выполняется тело цикла (в нашем случае - инструкция statement3)
  5. выполняется инструкция statement4 (как правило, инкремент1 счётчика)
  6. возврат к шагу №2

_____________________
1инкремент - увеличение на единицу
1
0 / 0 / 0
Регистрация: 02.11.2016
Сообщений: 10
07.11.2016, 10:45  [ТС]
Цитата Сообщение от gru74ik Посмотреть сообщение
Вот в чём:


Добавлено через 2 минуты
Foror10111, индекс j в цикле у Вас целого типа и число n тоже целого типа, а значит 3/2 == 1, а не 2.5.

Добавлено через 2 минуты
Foror10111, и Вы неправильно понимаете работу цикла for.

Добавлено через 7 минут
Foror10111, как это работает:
C++
1
2
3
4
for ( statement1; statement2; statement4 )
{
    statement3;
}
  1. перед входом в цикл выполняется statement1
  2. проверяется условие statement2
  3. если условие истинно, входим в цикл, иначе - выход из цикла
  4. выполняется тело цикла (в нашем случае - инструкция statement3)
  5. выполняется инструкция statement4
  6. возврат к шагу №2
Буду разбираться тогда, спасибо. А не подскажете по какой книге лучше учить? Просто я сначала начал по "С++ за 21 день", потом начитался всяких тем, где советуют Лафоре ну и вот так и получилось. А по какой книге лучше тогда? Хотя наверное по форуму опять же статьи поискать на эту тему лучше будет..
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
07.11.2016, 10:50
Цитата Сообщение от Foror10111 Посмотреть сообщение
по какой книге лучше учить?
Вот сюда загляните.
1
0 / 0 / 0
Регистрация: 02.11.2016
Сообщений: 10
07.11.2016, 11:08  [ТС]
Цитата Сообщение от gru74ik Посмотреть сообщение
Вот сюда загляните.
Спасибо. Вот скачал Стивена Прата, буду читать его У Лафоре вроде тоже неплохо все описано, хотя я не могу судить конечно же. А почему Вы на его книгу так среагировали, если не секрет?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
07.11.2016, 13:14
Цитата Сообщение от Foror10111 Посмотреть сообщение
А почему Вы на его книгу так среагировали, если не секрет?
Есть мнение, что Лафоре - графоман. Он довольно вольно обращается с терминологией и в его книгах имеются рекомендации, говорящие либо о низком качестве редактуры книги, либо о низком качестве перевода, либо о низком уровне подготовки самого автора, как профессионала. В общем, тут на форуме неоднократно возникали к нему претензии, мне лень искать.
Чего не скажешь о Прате. К Прате, насколько я помню, была всего пара нареканий - за то, что иногда позволяет себе функции-члены называть в джавовском стиле "методами" и за упрощённые формулировки при объяснении взаимосвязи между указателями и массивами (неявный каст имени массива к указателю). Больше не припомню к нему нареканий.
В целом, Прата хорош. Подробно всё разжёвывает, много примеров, подача материала вполне себе на уровне, упражнения в конце каждой главы. В общем, для начинающего с нуля я бы рекомендовал именно Прату.
Сейчас читаю Липпмана, тоже хороший учебник, но если бы я с него начал, лично меня бы некоторые моменты точно в тупик поставили. Пробовал читать в самом начале Дейтелов, потом Шилдта - ощущение одно и то же: сперва неплохо, потом какой-то сумбур. А Прата зашёл на ура.

Добавлено через 7 минут
Цитата Сообщение от Foror10111 Посмотреть сообщение
Работаю в codeblock
Foror10111, обратите внимание вот на такой нюанс. Ну или даже так.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2016, 13:14
Помогаю со студенческими работами здесь

составить блок-схему алгоритмов для решения задач с использованием трех циклов цикла с постусловием, цикла с предусловием и цикла с параметрами
помогите составить блок-схему алгоритмов для решения задач с использованием трех циклов цикла с постусловием, цикла с предусловием и цикла...

Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла
при запуске в цикле while в строке x:=x div 10; выдает ошибку &quot;Нельзя изменять значение переменной цикла внутри этого цикла&quot;,...

Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла
при запуске в строке If i=k Then i:=i+1; выдает ошибку &quot;Нельзя изменять значение переменной цикла внутри этого цикла&quot;. Объясните...

Нельзя изменять значение переменной цикла внутри этого цикла
function factorial(x:integer):integer; begin var i,var1:integer; for i:=1 to x do begin var1:=1; var1:=var1*i; i:=i+1; end; ...

Почему не срабатывает изменение границы цикла, принятое внутри цикла?
Работает цикл for-Next V_Rod = UBound(Rod, 2) For j = 1 To V_Rod For k = 1 To UBound(BD, 2) ReDim...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru