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

Объяснить работу кода

21.02.2018, 20:55. Показов 1895. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int main()
{
int i, j;
for (i=2; i<6; i++)
{
for (j=2; j<=(i/j); j++)
if (!(i%j)) break;
if (j > (i/j)) cout << i << " - simple number\n";
}
return 0;
}
Мужики, объясните мне, пожалуйста, как понимать эту прогу? Всю голову сломал. не понимаю условное выражение для j. Почему оно такое? ну и if'ы тоже не догоняю. Вроде не дурак. Просто крыша уже едет.

Добавлено через 1 минуту
и еще. что случится если заменить cout << i на cout << j
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.02.2018, 20:55
Ответы с готовыми решениями:

Объяснить работу кода
Объясните что происходит в данном коде #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include&lt;cmath&gt; int _tmain(int argc, _TCHAR*...

Объяснить работу кода
Подскажите пожалуйста как работает этот код при F(9). На экран выводит 131159, но как это происходит? void F(int n) { if (n &gt;...

Просьба объяснить работу std::thread в двух коротких примерах кода
Доброго времени суток! Я использую std::thread чтобы поднять два разных потока. В первом случае всё работает хорошо. Во втором нет. ...

48
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
21.02.2018, 21:58  [ТС]
Студворк — интернет-сервис помощи студентам
хорошо. а когда j успевает значение принять для внешнего If'а, если мы внутренний цикл вообще в противном случае минуем???
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
21.02.2018, 22:00
Руслан92, Мы в тело цикла не заходим, но инициализация j = 2 выполняется, после условия не заходит в ТЕЛО! т.е. все что между {}
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
21.02.2018, 22:02  [ТС]
или к if'у первому подразумевается else?? типа if-else-if только без написанного if? Так что-ли?

Добавлено через 1 минуту
только без написанного else то есть....крыша уже едет
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
21.02.2018, 22:02
Руслан92, Начни с азов!
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
21.02.2018, 22:04  [ТС]
то есть if делится без остатка то break. в противном случае (else) переходим во внешний if и проверяем там истинность. так что ли?

Добавлено через 1 минуту
дак и так с азов начал))) изучаю Герберта Шиллдта базовый курс с++. Говорю, все понятно было и до, и после этой проги. А эта мне уже 2ую ночь спать спокойно не дает.
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
21.02.2018, 22:05
Руслан92, не нужно ни каких иначе, код так читать не грамотно. Читать нужно так, если условие верно то выполняем, если не верно, то не выполняем, а продолжаем выполнение кода со следующей команды
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
21.02.2018, 22:06  [ТС]
Я это позже осознаю. Великую силу чтения кода сквозь строки. Но мысль то моя верна или нет?
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
21.02.2018, 22:09
да, но иначе здесь излишне, его нет в коде, это как чтение технической литературы, не нужно допиливать свое, нужно читать буквально, слово в слово.

Не по теме:

Вот поэтому у нас и много потом проблем, что каждый читает не буквально, а по своему

1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
21.02.2018, 22:09  [ТС]
и чтоб уж совсем уяснить. Сначала проходит первая итерация первого цикла и к ней прогоняются все возможные итерации второго цикла (учитывая лимит, установленный условным выражением). Затем проходит вторая итерация первого цикла и к ней опять же применяются все возможные итерации второго цикла и т.д.?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
21.02.2018, 22:10
Лучший ответ Сообщение было отмечено Руслан92 как решение

Решение

Цитата Сообщение от Руслан92 Посмотреть сообщение
j, входящий в выражение последнего if'а получается из второго цикла?
не совсем
объявлена она раньше, значит видна всей функции
давай рассмотрим 3
тело первого цикла при i=3
C++
1
2
3
4
5
{
for (j=2; j<=(i/j); j++)
if (!(i%j)) break;
if (j > (i/j)) cout << i << " - simple number\n";
}
теперь по шагам
C++
1
2
3
4
5
6
for (j=2; // j присваивается 2
j<=(i/j);// проверка 2<=(3/2) 2<=1 ЛОЖЬ, выходим из цикла не заходя в тело
 j++) if (!(i%j)) break;// вот это не исполняется
 
if (j > (i/j)) //проверка 2>(3/2) 2>1 ИСТИНА
cout << i << " - simple number\n"; // выводим на экран
так понятней?
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
21.02.2018, 22:14  [ТС]
Я правда стараюсь научиться грамотно писать. Но ведь нельзя читать техническую литературу не понимая подтекста, в него вложенного. Как в физике - буквально называется ЭЛЕКТРИЧЕСКИЙ ЗАРЯД. Но прилагательное обычно опускают и говорят и пишут просто ЗАРЯД. И это верно. и грамотно. и лаконично. Но ведь этого нужно дойти, чтоб понимать что можно проигнорить ( итак понятно) а что нужно обязательно указать. Вот и я на пути познания.

Добавлено через 2 минуты
намного!!! вот теперь вообще огонь!
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
21.02.2018, 22:15
Цитата Сообщение от Руслан92 Посмотреть сообщение
и чтоб уж совсем уяснить. Сначала проходит первая итерация первого цикла и к ней прогоняются все возможные итерации второго цикла (учитывая лимит, установленный условным выражением). Затем проходит вторая итерация первого цикла и к ней опять же применяются все возможные итерации второго цикла и т.д.?
Да, верно
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
21.02.2018, 22:16
Цитата Сообщение от Руслан92 Посмотреть сообщение
намного!!!
теперь попробуй другие числа(другие итерации первого цикла)
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
21.02.2018, 22:16  [ТС]
Мда....это сильно. я бы никогда не додумался ТАК искать простые числа..

Добавлено через 21 секунду
обязательно щас попробую...на бумаге)
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
21.02.2018, 22:18
Цитата Сообщение от Руслан92 Посмотреть сообщение
Но ведь нельзя читать техническую литературу не понимая подтекста,
Но и придумывать свое не надо, смотри:
выражение
C++
1
2
if(a > b) //делаем то-то
//делаем второе
Не равносильно:
C++
1
2
if(a > b) //делаем то-то
else //делаем второе
т.к. во втором случае, второе будет выполнено, только когда выражение ложно, а в первом случае вторая строка выполнится всегда. Так что нельзя рассматривать первый вариант как иначе
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
21.02.2018, 22:20  [ТС]
так...дошел до 11...снова не понимаю. Напиши, пожалуйста для 11 как будет. ( в том форме, которая стала мне ужасно понятна)

Добавлено через 1 минуту
согласен. Верная мысль.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
21.02.2018, 22:20
Цитата Сообщение от Руслан92 Посмотреть сообщение
C++
1
if (!(i%j)) break;
вот это, на мой взгляд, правильней писать вот так
C++
1
2
if ((i%j)==0)
        break;
негоже смешивать логические и арифметические сущности
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
21.02.2018, 22:28  [ТС]
И с этим согласен. так и мне гораздо понятней.

Добавлено через 3 минуты
так...дошел до 11...снова не понимаю. Напиши, пожалуйста для 11 как будет. ( в том форме, которая стала мне ужасно понятна)

Добавлено через 1 минуту
для 11 выполняется цикл и выходим в тело. там мы break не получаем. и каким образом мы попадаем в то, что 11 - простое число?

Добавлено через 2 минуты
оно минует выхода в тело только при J = 4. а j мы можем до какого предела перебирать? пока не выйдем на ЛОЖЬ?
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
21.02.2018, 22:33
Цитата Сообщение от Руслан92 Посмотреть сообщение
для 11 выполняется цикл и выходим в тело. там мы break не получаем. и каким образом мы попадаем в то, что 11 - простое число?
Т.к. ни когда не выполнится строчка: if ((i%j)==0) break;

Добавлено через 4 минуты
C++
1
2
3
if (j > (i/j)) //проверка 2>(11/2) 2>5 Ложь
if (j > (i/j)) //проверка 3>(11/3) 3>3 Ложь
if (j > (i/j)) //проверка 4>(11/4) 4>2 Истина
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
21.02.2018, 22:34  [ТС]
а j мы можем до какого предела перебирать? пока не выйдем на ЛОЖЬ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.02.2018, 22:34
Помогаю со студенческими работами здесь

Замена двойных пробелов из входного файла на одиночный пробел и запись в выходной файл (объяснить работу кода)
Здравствуйте, нашла код программы, которая заменяет в файле Input.txt двойные пробелы в исходном файле на одиночные пробелы и выводит это...

Объяснить работу
Что здесь значит if(i&gt;5... И что делает конкретно i и что означает #define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; ...

Объяснить работу функции
Может кто объяснить работу функции void zagalovok() { Node *t; head=new Node(); t=head; int V; ...

Объяснить работу конструктора
простите за тупое название темы Добрый вечер, возникла проблема в изучении деструкторов целом проблема не самое в деструкторов, а в...

Объяснить работу Memcpy
Доброго времени суток! Можете пояснить работу memcpy под C++? Что-то у меня определённо работает не так. Например такой код: ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
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 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru