45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
1

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

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

Author24 — интернет-сервис помощи студентам
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2018, 20:55
Ответы с готовыми решениями:

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

Объяснить работу кода
Подскажите пожалуйста как работает этот код при F(9). На экран выводит 131159, но как это...

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

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

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

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

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

Не по теме:

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

1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
21.02.2018, 22:09  [ТС] 29
и чтоб уж совсем уяснить. Сначала проходит первая итерация первого цикла и к ней прогоняются все возможные итерации второго цикла (учитывая лимит, установленный условным выражением). Затем проходит вторая итерация первого цикла и к ней опять же применяются все возможные итерации второго цикла и т.д.?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,516
21.02.2018, 22:10 30
Лучший ответ Сообщение было отмечено Руслан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  [ТС] 31
Я правда стараюсь научиться грамотно писать. Но ведь нельзя читать техническую литературу не понимая подтекста, в него вложенного. Как в физике - буквально называется ЭЛЕКТРИЧЕСКИЙ ЗАРЯД. Но прилагательное обычно опускают и говорят и пишут просто ЗАРЯД. И это верно. и грамотно. и лаконично. Но ведь этого нужно дойти, чтоб понимать что можно проигнорить ( итак понятно) а что нужно обязательно указать. Вот и я на пути познания.

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

Добавлено через 21 секунду
обязательно щас попробую...на бумаге)
0
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
21.02.2018, 22:18 35
Цитата Сообщение от Руслан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  [ТС] 36
так...дошел до 11...снова не понимаю. Напиши, пожалуйста для 11 как будет. ( в том форме, которая стала мне ужасно понятна)

Добавлено через 1 минуту
согласен. Верная мысль.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,516
21.02.2018, 22:20 37
Цитата Сообщение от Руслан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  [ТС] 38
И с этим согласен. так и мне гораздо понятней.

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

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

Добавлено через 2 минуты
оно минует выхода в тело только при J = 4. а j мы можем до какого предела перебирать? пока не выйдем на ЛОЖЬ?
0
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
21.02.2018, 22:33 39
Цитата Сообщение от Руслан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  [ТС] 40
а j мы можем до какого предела перебирать? пока не выйдем на ЛОЖЬ?
0
21.02.2018, 22:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2018, 22:34
Помогаю со студенческими работами здесь

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

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

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

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

Объяснить работу программы
Во введенном слове подсчитать количество различных пар букв. Например, в слове babacabacd 5...

Объяснить работу программы
Здравствуйте. Такая задача была: Нашёл на форуме подходящую рабочую программу, но не могу...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru