Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2009, 23:35   #1
Nvidia
Чертёнок
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 13
По умолчанию Инкремент и декремент в циклах

Видела частично тело функции:
здесь используется инкрементирование счётчика цикла.
int namb;
for(namb=1;namb<=10;namb++)
По сути это кусочек из проги Вычисления кубов переменных,где прога выдаст все значения кубов переменных от 1 до 10
А вот в другом месте было наоборот декрементирование счётчика цикла.Где прога подсчитывает факториал числа,введённого пользователем.
Часть тела функции:
cin>>namb;
for (int j=namb;j>0;j--)
fact*=J
Если я правильно понимаю,то инкремент/декремент - это увеличение/уменьшение наеденицу операнда переменных....Тогда поточнее,что такое операнд,не могу найти..
Если в первом случае понятнее(если правильно поняла),то это сначала подсчитывается переменная 1,потом 2(+1)и так далее пошли переменные считать все ....
А во втором примере где там уменьшение операнда переменных... ??? Если тот же факториал написано,что например Факториал числа 5 равен 1*2*3*4*5! так где ж здесь декрементирование???
Помогите пожалуйста,начинающей... А то в институте всё делала всё методом научного тыка,а хочется до конца понять....

Последний раз редактировалось Nvidia; 16.10.2009 в 23:37.
Nvidia вне форума Ответить с цитированием
Старый 16.10.2009, 23:48   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от Nvidia
Тогда поточнее,что такое операнд,не могу найти..
http://ru.wikipedia.org/wiki/%D0%9E%...B0%D0%BD%D0%B4
Arigato вне форума Ответить с цитированием
Старый 17.10.2009, 00:03   #3
Nvidia
Чертёнок
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 13
По умолчанию

Так всё таки,как связаны между собой факториал и декремент?
Nvidia вне форума Ответить с цитированием
Старый 17.10.2009, 00:10   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Так, что факториал можно считать не как 1*2*3*4*5, а как 5*4*3*2*1
netrino вне форума Ответить с цитированием
Старый 17.10.2009, 00:13   #5
Nvidia
Чертёнок
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Так, что факториал можно считать не как 1*2*3*4*5, а как 5*4*3*2*1
То есть это и имеется в виду речь о декременте? если я правильно поняла.( в такой форме можно понять,а в обратной форме - мне кажется,что это уже инкремент)
Потому что нам тоже в институте давали например факториал 5 именно как 5*4*3*2*1.. А в книге написано иначе.... И бог с ним.. Опечатки могут быть везде.... На то и есть форумы...
Nvidia вне форума Ответить с цитированием
Старый 17.10.2009, 00:28   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Инкремент - увеличение значения операнда на единицу. Операндом выступает переменная. Операнд, простым языком - то, с чем работает некая операция. То есть инкремент работает с некой переменной. Декремент - уменьшение значения операнда на единицу. 1*2*3*4*...*n - это не инкремент, это следствие этого кода:
Код:
for (int j=namb;j>0;j--)
    fact*=J;
Цикл выполняет некий участок кода множество раз, при этом для цикла for обычно задаётся счётчик(сколько раз этот цикл будет выполнятся). В вышеприведённом цикле счётчиком есть переменная j, которая изначально равна введённому namb. За каждый проход значение переменной j будет уменьшаться на единицу. Таким образом, например, при numb=5 будет происходить следующее:
Код:
первая итерация(проход):
j = 5; fact ранее был инициализирован единицей. 
fact *= j <=> fact = fact * j; => fact = 1*5 = 5;
Вторая итерация:
j-- => j = 4;
fact *= j <=> fact = fact * j; => fact = 5 * 4 = 20;
Третья итерация:
j-- => j = 3;
fact *= j <=> fact = fact * j; => fact = 20 * 3 = 60;
Четвёртая итерация:
j-- => j = 2;
fact *= j <=> fact = fact * j; => fact = 60 * 2 = 120;
Пятая итерация:
j-- => j = 1;
fact *= j <=> fact = fact * j; => fact = 120 * 1 = 120;
Шестая итерация не выполняется, ведь перед каждым проходом выполняется проверка, стоит ли выполнять далее? Для первых пяти условие выполняется(j > 0), но на шестой итерации оно становится равным нулю, потому она не выполняется и мы выходим из цикла. Таким образом получаем в переменной fact значение 120, что и есть 5!.

Последний раз редактировалось netrino; 17.10.2009 в 00:35.
netrino вне форума Ответить с цитированием
Старый 17.10.2009, 00:43   #7
Nvidia
Чертёнок
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Инкремент - увеличение значения операнда на единицу. Операндом выступает переменная. Операнд, простым языком - то, с чем работает некая операция. То есть инкремент работает с некой переменной. Декремент - уменьшение значения операнда на единицу. 1*2*3*4*...*n - это не инкремент, это следствие этого кода:
Код:
for (int j=namb;j>0;j--)
    fact*=J;
Цикл выполняет некий участок кода множество раз, при этом для цикла for обычно задаётся счётчик(сколько раз этот цикл будет выполнятся). В вышеприведённом цикле счётчиком есть переменная j, которая изначально равна введённому namb. За каждый проход значение переменной j будет уменьшаться на единицу. Таким образом, например, при numb=5 будет происходить следующее:
Код:
первая итерация(проход):
j = 5; fact ранее был инициализирован единицей. 
fact *= j <=> fact = fact * j; => fact = 1*5 = 5;
Вторая итерация:
j-- => j = 4;
fact *= j <=> fact = fact * j; => fact = 5 * 4 = 20;
Третья итерация:
j-- => j = 3;
fact *= j <=> fact = fact * j; => fact = 20 * 3 = 60;
Четвёртая итерация:
j-- => j = 2;
fact *= j <=> fact = fact * j; => fact = 60 * 2 = 120;
Пятая итерация:
j-- => j = 1;
fact *= j <=> fact = fact * j; => fact = 120 * 1 = 120;
Шестая итерация не выполняется, ведь перед каждым проходом выполняется проверка, стоит ли выполнять далее? Для первых пяти условие выполняется(j > 0), но на шестой итерации оно становится равным нулю, потому она не выполняется и мы выходим из цикла. Таким образом получаем в переменной fact значение 120, что и есть 5!.
Спасибо! теперь поняла!
Простите дурочку,но я ещё только учусь...
Nvidia вне форума Ответить с цитированием
Старый 17.10.2009, 00:45   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Все мы когда-то учились
netrino вне форума Ответить с цитированием
Старый 17.10.2009, 11:54   #9
Nvidia
Чертёнок
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Все мы когда-то учились
Не спорю,только чаще всего где не спросишь,так выставляют дурочкой.Ну правильно,они то спецы,а мы.... Вот и посмотрю на ваш форум...Нет ли у вас хамов?Надеюсь что нет
А то уже на множестве городских форумов что не спросишь - всё переворачивают вверх дном! Что уже сил никаких нет....
Nvidia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
глюк в циклах Rio309 Общие вопросы Delphi 4 05.10.2009 15:44
Инкремент и дикремент Golovastik Общие вопросы C/C++ 3 16.07.2009 13:39
вопрос о циклах alexsamurai Microsoft Office Excel 9 10.01.2009 13:25
for z:=1 to 5 do Смотрю watch показывает декремент ... dx+ Общие вопросы Delphi 3 24.05.2008 17:47