Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kosean97
0 / 0 / 0
Регистрация: 20.08.2012
Сообщений: 5
#1

Программа возвода числа в степень - C++

20.08.2012, 12:56. Просмотров 1008. Ответов 10
Метки нет (Все метки)

Здравствуйте.
Помогите мне пожалуйста придать человеческий вид этой программе.
Мне кажется она какая то.. неаккуратная что ли..
Так же мне хотелось чтоб она работала с дробной степенью. Я даже функцию для этого написал.
Не судите меня строго, это одна из первых моих программ.
Заранее спасибо

Вот сама программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
 
int kva( int, int );
double okva( int, int );
 
int main( int argc, char *argv[] ) {
 
    int base, n, k;
    double res;
    
    do {
        printf("Введите число: ");
        scanf("%d", &base);
        printf("Введите степень: ");
        scanf("%d", &n);
    
        if( n>0 ) res=kva(base, n);
        else if(n==0) res=1.0;
        else if(n<0) res=okva(base, n);
        
        printf("Ответ: %.3lf\n", res);
        printf("Повторим? (1/0): ");
        scanf("%d", &k);
    } while( k==1 );
    
    printf("Окда");
    
    return 0;
}
 
int kva( int base, int n) {
 
    int i, p;
    
    p=1;
 
    for( i=0; i<n; i+=1 ) p=p*base;
    
    return p;
}
 
double okva( int base, int n) {
 
    int i;
    double p;
    
    p=1.0;
 
    for( i=0; n<i; n+=1 ) p=p/base;
    
    return p;
}
А вот функция
C++
1
2
3
4
5
6
7
8
9
10
11
12
double dkva( int base, int n1, int n2 ) {
    
    int i;
    double p;
    
    p=1.0;
    
    for( i=0; i<n1; i+=1 ) p=p*base;
    for( i=0; n2<i; n2-=1) p=p/base;
    
    return p;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
20.08.2012, 14:32     Программа возвода числа в степень #2
А чем вам функция pow() не угодила? http://www.cplusplus.com/reference/clibrary/cmath/pow/
kosean97
0 / 0 / 0
Регистрация: 20.08.2012
Сообщений: 5
20.08.2012, 14:38  [ТС]     Программа возвода числа в степень #3
Я хотел сам написать ее, для тренировки, только и всего
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2012, 14:39     Программа возвода числа в степень #4
Цитата Сообщение от kosean97 Посмотреть сообщение
Здравствуйте.
Помогите мне пожалуйста придать человеческий вид этой программе.
Мне кажется она какая то.. неаккуратная что ли..
Так же мне хотелось чтоб она работала с дробной степенью. Я даже функцию для этого написал.
Не судите меня строго, это одна из первых моих программ.
Заранее спасибо
- держи аккуратно и для любой степени
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cmath>
#include <iostream>
using namespace std;
 
double sqr(double val, double pwr)
{
    return exp(pwr*log(val));
}
 
int main()
{
    double a, n;
    int iContinue = 1;
    while(iContinue == 1)
    {
        cout<<"Calculation a^n\n";
        cout<<"a = ";cin>>a;
        cout<<"n = ";cin>>n;
        cout<<"a^n = "<<sqr(a, n)<<endl;
        cout<<"Enter 1 for continue\n";
        cin>>iContinue;
    }
    return 0;
}
Миниатюры
Программа возвода числа в степень  
kosean97
0 / 0 / 0
Регистрация: 20.08.2012
Сообщений: 5
20.08.2012, 14:45  [ТС]     Программа возвода числа в степень #5
Спасибо, осталось теперь немножко в этом разобраться)
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2012, 15:02     Программа возвода числа в степень #6
Цитата Сообщение от kosean97 Посмотреть сообщение
Спасибо, осталось теперь немножко в этом разобраться)
http://www.cyberforum.ru/cgi-bin/latex.cgi?b = {a}^{n} \Rightarrow ln(b) = n*ln(a)
http://www.cyberforum.ru/cgi-bin/latex.cgi?b = {e}^{ln(b)} \Rightarrow b = {e}^{n*ln(a)}
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
20.08.2012, 15:03     Программа возвода числа в степень #7

Не по теме:

Возведения же.


А что там разбиратся? Используется тождество http://www.cyberforum.ru/cgi-bin/latex.cgi?a^x = e^{x\ln a} (для http://www.cyberforum.ru/cgi-bin/latex.cgi?a \leq 0 не работает). Ну, точнее, работает, но сишная матбиблиотека не умеет комплекснозначные функции.
Blutonium
4 / 4 / 0
Регистрация: 29.05.2012
Сообщений: 275
20.08.2012, 17:18     Программа возвода числа в степень #8
kosean97, в какой среде вы пишите?
kosean97
0 / 0 / 0
Регистрация: 20.08.2012
Сообщений: 5
20.08.2012, 21:31  [ТС]     Программа возвода числа в степень #9
В основном с планшета работаю - DroidEdit (компилирую через C4Droid), а так Dev C++, а что?
nameless
Эксперт C++
314 / 296 / 14
Регистрация: 16.06.2009
Сообщений: 486
20.08.2012, 22:05     Программа возвода числа в степень #10
Если показатель степени - неотрицательный, то можно так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
int pow(int number, unsigned deg) {
   int p = number, result = 1;
   bool state = true;
   while (state) {
      if (deg & 1) {
         result *= p;
      }
      deg >>= 1;
      -deg & (~deg) ? p *= p : state = false;
   }
   return result;
}
 
int main() {
   std::cout << pow(2, 8) << std::endl;
}
http://liveworkspace.org/code/616d08...0e4e4aed9a13c4
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2012, 23:13     Программа возвода числа в степень
Еще ссылки по теме:

Огромная степень числа C++
C++ Программа для возведения числа в степень
C++ Возведение числа в степень и проверка числа на четность
C++ Возведение числа а в степень n
Программа не правильно возводит в степень C++

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

Или воспользуйтесь поиском по форуму:
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
20.08.2012, 23:13     Программа возвода числа в степень #11
Вот Вам для разнообразия бинарное возведение степени (О(log n)).программа оптимизирована - операции деления заменены битовыми.Думаю разберетесь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int binpow(int a,int n)
{
     int res=1;
     while(n)
      {
           if(n & 1)
                 res *=a;
            a *=a;
            n>>=1;
      }
      return res;
}
С дробной стпенью не раюотает.
Yandex
Объявления
20.08.2012, 23:13     Программа возвода числа в степень
Ответ Создать тему
Опции темы

Текущее время: 03:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru