Помогите, пожалуйста, написать программу на с++

Помогите, пожалуйста, написать программу на с++

Помогите написать программу которая вычисляет значение а (n- возведение в степень).
Число а и число n вводит пользователь . (Использовать pow запрещено).

Если использовать pow запрещено, значит нужно придумать что-то свое.
Допустим, для целых чисел это может выглядеть так:

#include <iostream>

int fPower(int num, int power);

int main()
{
    int number, power;

    std::cout << "Enter a number: ";

    std::cin >> number;

    std::cout << "Enter its power: ";

    std::cin >> power;

    std::cout << number << " in power " << power << " = " << fPower(number, power);

    return 0;
}

int fPower(int num, int power)
{
    int temp = 1;

    for (int i = 0; i < power; i++) {
        temp *= num;
    }

    return temp;
}

beginner, а если показатель степени отрицательный?

А шаблонную функцию для возведения в степень написать слабО? ;)

#include<iostream>
#include <string>
using namespace std;
int main()
{   
    setlocale(0, "");
    double a, b, d;
    int n, i;
    cout << "Введите число:" << endl;
    cin >> a;
    b = a;
    d = a;
    cout << "Введите степень:" << endl;
    cin >> n;
    if (n>0)
    {
        for (i=1; i<n; i++)
        {
            a = d * b;
            d = a;
        }
    }
    else if(n < 0)
    {
        a = 1;
        for (i = 0; i > n; i = i - 1)
        { 
            a = a / b;
        }
    } 
    else if (n == 0)
     {
        a = 1;
     }
     cout << a << endl;
     return 0;
}

Фтьiкай, объясните, пожалуйста, зачем для натуральных и вещественных чисел, которые нужно возвести в целую отрицательную или положительную степень, нужна шаблонная функция ;)

Фтьiкай, думаю, что это можно организовать без шаблона.

#include <iostream>
#include <cstdlib>

double fPower(double num, int power);

int main()
{
    double number;
    int power;

    std::cout << "Enter a number: ";

    std::cin >> number;

    std::cout << "Enter its power: ";

    std::cin >> power;

    std::cout << number << " in power " << power << " = " << fPower(number, power);

    return 0;
}

double fPower(double num, int power)
{
    double answer = 1;

    if (0 == num && power < 0) {
        std::cout << "Incorrect input.\n";

        exit(EXIT_FAILURE);
    }

    if (power < 0) {

        for (int i = 0; i < -power; i++) {
            answer *= num;
        }

        return (1 / answer);
    }
    else {
        for (int i = 0; i < power; i++) {
            answer *= num;
        }

        return answer;
    }
}

beginner, Ну тогда:

 #include<iostream>
#include <string>
using namespace std;
int main()
{
    double a, b, d;
    int n, i;
        cout << "Введите число:" << endl;
    cin >> a;
    b = a;
    d = a;
        cout << "Введите степень:" << endl;
    cin >> n;
    if (n>0)
    {
        for (i=1; i<n; i++)
        {
            a = d * b;
            d = a;
        }
    }
    else if(n < 0)
    {
        if ( a != 0)
        {
        a = 1;
        for (i = 0; i > n; i = i - 1)
        { 
            a = a / b;
        }
        }
        else 
        {
        a = 0;
        } 
    }
    else if (n == 0)
     {
        a = 1;
     }
     cout << a << endl;
     return 0;
}

Vova_vb, значение 0 в -1 степени не может быть 0, т.к. значение выражения 0 ^ -1 вычисляется по формуле 1 / 0 ^ 1, а единицу на нуль делить нельзя.

beginner, после предложения написать шаблонную функцию смйлик стоит. Это была в общем-то шутка ;) Хотя в результате ты таки поменял тип аргумента и тип возвращаемого значения твоей функции.

Второй вариант fPower() выглядит гораздо лучше первого. Только как-то нехорошо выглядит поведение функции при возведении 0 в отрицательную степень. Так сразу «А-а-ах!!!» и всему приложению пи..., в смысле, exit(EXIT_FAILURE). Программе надо все-таки оставить шанс на обработку ошибочной ситуации.

Кстати, а ты уверен, что тип второго аргумента твоей функции должен быть int? Может быть все-таки double? А?

Кстати, а ты уверен, что тип второго аргумента твоей функции должен
быть int? Может быть все-таки double? А?

:))) Фтьiкай, я же функцию писал для натуральных и вещественных чисел, которые нужно возвести в целую отрицательную или положительную степень.

А вот если тип аргумента pow сделать double, то здесь впору писать шаблонную функцию ;)))

beginner, мне кажется, что Фтьiкай намекает на то, что показатель степени может быть не только целым, но и рациональным ))

Шаблонную функцию опять-таки делать совершенно необязательно, поскольку при вызове функции с целым аргументом (вторым) он будет неявно преобразован к double.

PS. Кстати, очень показательный пример, как нечёткая постановка исходной задачи приводит к тяжёлым последствиям. Как мне кажется, исходная задача подразумевала тривиальное решение и должна была звучать как «возведение целого числа в натуральную степень».

Как мне кажется, исходная задача подразумевала тривиальное решение

Ну в общем-то, да ;)

Зато тривиальная задачка породила неслабую «разминку для мозгов». И пока что до финала еще далеко.

PS. Ладно, ладно... про комплексные числа я уже грузить не буду )) Тут хотя бы с рациональными до конца разобраться.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.