Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 297

Раздел: C++
/ вопрос открыт /

Приветствую, уважаемые эксперты!
Вот такой вот вопрос. Есть код из Кернигана и Ричи.

Я так понимаю base число, которое мы возводим в степень, а n степень в которое возводится, но я не понимаю как происходит операция умножения.
Допустим первая степень 0.
i=1; i<0 ++i, так как условие вхождение в цикл не выполняется, то и умножение не происходит, но почему тогда он безошибочно возвращает 1?
А если i=1, то 1=1, то цикл работает, то 2*1=2. Тут вопросов нет.
А если i=2, то 2=2, то 2*1=2, а должно ведь быть 4. Объясните, пожалуйста, что я недопонимаю в этом коде.

Приложение:
  1. #include <stdio.h>
  2.  
  3. int power(int m, int n);
  4.  
  5. main()
  6. {
  7. int i;
  8.  
  9. for(i=0; i<10; ++i)
  10. printf("%d %d %d\n", i, power(2,i), power(-3,i));
  11. return 0;
  12. }
  13. int power(int base, int n)
  14. {
  15. int i,p;
  16.  
  17. p=1;
  18. for(i=1; i<=n; ++i)
  19. p=p*base;
  20. return p;
  21. }


angel12013 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: angel12013 (статус: Посетитель)
Вопрос отправлен: 28 октября 2012, 15:44
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 16 ноября 2012, 06:46; участников в обсуждении: 3.
Толяныч

Толяныч (статус: 4-ый класс), 28 октября 2012, 16:27 [#1]:

А что тут может быть непонятного ? Число в нулевой степени = 1 по определению, цикл при этом не выполняется, а начальное присваивание производится до цикла. А в остальном -- результат, изначально равный 1, умножается на base n раз, что тоже соответствует определению целой степени.
angel12013

angel12013 (статус: Посетитель), 28 октября 2012, 16:35 [#2]:

То есть если нужно произвести операцию умножения в p=p*base два раза, то результат умножения складывается и присваивается p?
angel12013

angel12013 (статус: Посетитель), 28 октября 2012, 16:41 [#3]:

Да, все верно. Простите за глупый вопрос. Все встало на свои места.
Если цикл работает два раза.
1.p=1*2=2
2.p=2*2=4
Я просто новичок и голова пока в этом направлении слаба развита, но я наверстаю упущенное. Еще раз спасибо.
Толяныч

Толяныч (статус: 4-ый класс), 29 октября 2012, 17:07 [#4]:

Когда нам в далеком 75-м препод начал читать Алгол-60, то написал на доске а := а + 1 и сказал : "Имейте в виду, это не уравнение, потому что была бы бессмыслица 0 = 1, а ОПЕРАТОР ПРИСВАИВАНИЯ. Выполняется полностью вычисление правой части и только после этого результат присваивается переменной в левой части" . До сих пор помню :-) Судя по вопросу, ТС еще не совсем тверд в понимании этого. Поскольку это С, то старинное ( в т.ч. паскалевское ) := заменено обычным = , но суть от этого не поменялась.
Ученый

Ученый (статус: 8-ой класс), 16 ноября 2012, 06:46 [#5]:

интересно только одно, а почему не использовать готовую функцию pow из , или еще не отпало ребяческое желание написать все самому?))

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:47
Выполнено за 0.03 сек.