CC++Qt « Возведение в степень в С++

Народ, подскажите пожалуйста, как в С++ возведение в степень реализовать? Нужно двумерный массив получить, членами которого по "периметру"являются возведенное в степень от 0 до 10 число х.
Матрица должна получится вида:


Задачу решил следующим образом:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .cpp.geshi_code {font-family:monospace;} .cpp.geshi_code .imp {font-weight: bold; color: red;} .cpp.geshi_code .kw1 {color: #0000ff;} .cpp.geshi_code .kw2 {color: #0000ff;} .cpp.geshi_code .kw3 {color: #0000dd;} .cpp.geshi_code .kw4 {color: #0000ff;} .cpp.geshi_code .co1 {color: #666666;} .cpp.geshi_code .co2 {color: #339900;} .cpp.geshi_code .coMULTI {color: #ff0000; font-style: italic;} .cpp.geshi_code .es0 {color: #000099; font-weight: bold;} .cpp.geshi_code .es1 {color: #000099; font-weight: bold;} .cpp.geshi_code .es2 {color: #660099; font-weight: bold;} .cpp.geshi_code .es3 {color: #660099; font-weight: bold;} .cpp.geshi_code .es4 {color: #660099; font-weight: bold;} .cpp.geshi_code .es5 {color: #006699; font-weight: bold;} .cpp.geshi_code .br0 {color: #008000;} .cpp.geshi_code .sy0 {color: #008000;} .cpp.geshi_code .sy1 {color: #000080;} .cpp.geshi_code .sy2 {color: #000040;} .cpp.geshi_code .sy3 {color: #000040;} .cpp.geshi_code .sy4 {color: #008080;} .cpp.geshi_code .st0 {color: #FF0000;} .cpp.geshi_code .nu0 {color: #0000dd;} .cpp.geshi_code .nu6 {color: #208080;} .cpp.geshi_code .nu8 {color: #208080;} .cpp.geshi_code .nu12 {color: #208080;} .cpp.geshi_code .nu16 {color:#800080;} .cpp.geshi_code .nu17 {color:#800080;} .cpp.geshi_code .nu18 {color:#800080;} .cpp.geshi_code .nu19 {color:#800080;} .cpp.geshi_code .me1 {color: #007788;} .cpp.geshi_code .me2 {color: #007788;} .cpp.geshi_code span.xtra { display:block; }

#include<iostream.h>
#include<math.h>
int main()
{
    cout << "Eta programma stroit matrix deistvitelnux chiseln"
         << "na osnove vvedennogo parametra Xn"
         << "Vvedite znachenie parametra X:";
    float X;
    cin >> X;
    float mtrx[10][10];
    int j=0, i=0, q=0;
    while(q<=9&&i<=9)
    {
        mtrx[i][j]=pow(X,(0+q));
        i++;
        q++;
    }
    i=0, q=0;
    while(q<=9&&j<=9)
    {
        mtrx[i][j]=pow(X,(0+q));
        j++;
        q++;
    }
    j=9, q=9, i=0;
    while(q>=0&&i<=9)
    {
        mtrx[i][j]=pow(X,(0+q));
        q--;
        i++;
    }
    q=9,i=9,j=0;
    while(q>=0&&j<=9)
    {
        mtrx[i][j]=pow(X,(0+q));
        q--;
        j++;
    }
    for(j=1;j<=8;j++)
    {
        i=1;
        while(i<=8)
        {
            mtrx[i][j]=0;
            i++;
        }
    }
    for(j=0;j<=9;j++)
    {
        i=0;
        while(i<=9)
        {
            cout<<" "<<mtrx[i][j];
            i++;
        }
        cout<<"n";
    }
}

 

1 ответов


Когда прочтете это, уточните - в выше приведенном массиве кроме 'краевых' столбцов и строк, все остальные имеют значения 0???
Если так, то единственное, что Вам нужно - это функция pow() из стандартной библиотеки(загаловочный файл "cmath").
Решение выглядит примерно так:


#include <iostream>
#include <cmath>
using namespace std;

//создаем квадратный массив размером 10х10 и инициализируем нулями
double arr[10][10] = { 0 };

//допустим у нас уже есть переменная х, с некоторым нужным значением
double x = ...;

//нам необходимо обработать только 'краевые' столбцы/строки
//начинаем с первой строки
for(int ix = 0; ix < 10; ix++)
{
   //первый индекс 0, посклоьку на данном этапе обрабатываем только первую строку(индексация массивом
   //начинается с нуля)
   arr[0][ix] = pow(x, (double)ix);

   //чтобы не терять времени, банально копируем элементы первой строки соответствующим элементам
   //первого столбца
   arr[ix][0] = arr[0][ix];
}

//после этих действии нам надо получить последную строку и последний столбец, которые
//являются 'обратным' к первым. То есть нам достаточно просто копировать первую строку
//в последнюю в обратном порядке(то же самое со столбцами).
int jx = 9;
for(int ix = 0; ix < 10; ix++)
{
   //в цикле используется то же имя счетчика, что и в первом, если Ваша среда разработки -
   //Visual C++ 6, то после выхода из цикла переменная счетчика не ликвидируется - будьте внимательны.
   arr[9][jx] = arr[0][ix]; //строка
   arr[jx][9] = arr[ix][0];
}
 

Это в том случае, если я правильно понял вопрос, но если что-то не так, просто уточните задачу!


double* matrix(double x)
{
 static double mtrx[10][10];
 double* ptr = &mtrx[0][0];
 for(int n = 0; n < 100; ++n) *(ptr++) = 0.0;
 mtrx[0][0] = mtrx[9][9] = 1.0;
 for(int n = 1; n < 10; ++n) {
  mtrx[9 - n][9] = mtrx[9][9 - n] = mtrx[0][n] = mtrx[n][0] = mtrx[n - 1][0] * x;
 }
 return &mrtx[0][0];
}
 
и никаких степеней

Помогите пожалуйста, число возвести в степень в программе QT

#include<windows.h>                                                //Системный заголовок файла
#include<iostream>

using namespace std;                                               //Использовать стандартное пространство имен

int main()
{
    system("title Програмирование Работа 1 - Задание № 2.1.4 ");   //Вывести сообщение в заголовок консоли с помощь системной команды title

    //руссификация консоли
    SetConsoleOutputCP(1251);                                      //Установить кодовую таблицу для окна консоли
    system("color f1");                                            //Задание свойств консоли (цветовая схема)

    system("echo ДЕЙСВТИЕ ВЫПОЛНЯЕМЫЕ ПРОГРАММОЙ ");               //Вывести сообщение с помощью команды есрщ косольного режима Windows
    system("echo . ");
    system("echo Представленную формулу  x^y должны ввестись значения для X и Y: ");
    system("echo . ");


    double x(0),y(0);                                              //2 Входных переменных X и Y
    double otvet(0);                                             //Вывод результата решении формулы
    double pow (0);

    //ВВОД ВХОДНЫХ ДАННЫХ
    cout<<"Пожалуйсто ведите значение для X => ";
    cin>>x;

    cout<<"Пожалуйсто ведите значение для Y  => ";
    cin>>y;

    //ФОРМУЛА ДЛЯ ВЫЧИСЛЕНИЯ
    otvet= pow(x,y);

    //ВЫВОД РЕЗУЛЬТАТА
    system("echo ....................................................... ");
    system("echo ВЫЧИСЛЕНИЕ: ");

    cout<<"Результат решение  "<<x<<"^"<<y<<" = " <<otvet<<endl<<endl;


    system("pause");                                               //Держать консоль на экране до нажатия на любою клавишу
    return 0;                                                      //Вернуть управленеи в ОС и возвратить код норального завершения

}

Уже все давно реализовано. http://www.cplusplus.com/reference/clibrary/cmath/pow/


Делаешь цикл первый элемент единица, а каждый следующий х умножить на предыдущий элемент массива.