Text: |
ФІО = 4курсник
Запитання:Завдання до ООП:
1. Для заданого натурального числа n повертати результат "істина", якщо n! може бути записане у вигляді добутку трьої послідовних цілих чисел та "хибність" у супротивному випадку.
2. Для заданої дійсної матриці А розмірності m x n одержати A^T x A.
====================================
ANSWER ====================================
/*
1. Для заданого натурального числа n повертати результат "істина",
якщо n! може бути записане у вигляді добутку трьох послідовних цілих чисел та
"хибність" у супротивному випадку.
*/
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#include <iostream>
#include <conio.h>
#pragma argsused
using namespace std;
long long factorial(long long n)
{// метод рахує факторіал "n"
if (n == 0 || n == 1 ) return 1; // тут немає чого і разувати
if (n < 0 ) return -1 ;// помилка. Не рахуємо. Вилітаємо.
long long i = 1; // ітератор
long long result = 1; // аккумулятор
for ( ; i <= n ; i++)
{
result *= i; // аналог result = result * i;
}
return result;
}
bool check_f(long long n)
{
// n повертати результат "істина",
// якщо n! може бути записане у вигляді добутку трьох
// послідовних цілих чисел та "хибність" у супротивному випадку
// IMHO: дурацьке завдання якесь... БО, цей метод буде повертати результат TRUE для
// чисел 3 та 4. Для інших ні... це можна так і тупо вбити, посилаючись на такі розмірковування.
// Бо, факторіал n за означенням це сума добутків від 1 до n включно.
// тобто n! = 1 * 2 * 3 * 4 * ... * n;
/* Лінивий варіант рішення
return ( n == 3 || n == 4 ? true : false);
// аналог if (n == 3 || n == 4) return true; else false;
*/
// нелінивий варіант рішення
if (n < 3)
{ // якщо менше ніж 3 числа, то немає і чого перевіряти
return false;
}
// якщо більше, то спробуємо перевірити послідовність
long long f_result = factorial(n); // результуючий файкторіал цікавлячого числа, рахується один раз
for (long long i = 1 ; i <= n - 2 ; i++) // тут (n - 2), що б не залізли за межі цікавлячого
{// спробуємо перебрати
long long result = 1; // аккумулятор
for (long long j = i ; j < i + 3 ; j++)
{// в кожній ітій ітерації рахуємо добуток чисел i,i+1 та i+2
result *=j;
}
if (result == f_result)
{// ну нарешті, знайшли - вилітаємо
return true;
}
}
// нажаль не знайшли.... ойойой...
return false;
}
int main(int argc, char* argv[])
{
for (long long i = 1 ; i < 10 ; i++)
{
cout<<" f ( "<<i<<" ) = "<<factorial(i)<<" : "<<(check_f(i)?"true":"false")<<endl;
/* аналог
cout<<" f ( "<<i<<" ) = ";
if (check_f(i))
{
cout<<"true"<<endl;
}
else
{
cout<<"false"<<endl;
}
*/
}
cout<<endl<<endl;
long long n;
cout<<"Enter N : ";
cin>>n;
cout<<" f ( "<<n<<" ) = "<<factorial(n)<<" : "<<(check_f(n)?"true":"false")<<endl;
getch();
return 0;
}
//---------------------------------------------------------------------------
END of ANSWER ====================================
ANSWER ====================================
Що стосується другого завдання: легко відповість проф. Гугл
https://www.google.com.ua/search?client=opera&q=матрица+на+транспонированную+C%2B%2B&sourceid=opera&ie=UTF-8&oe=UTF-8#q=%D1%83%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B+%D0%BD%D0%B0+%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BF%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%83%D1%8E+c%2B%2B
Виправлення по мелочі і:
http://forum.developing.ru/showthread.php/24851-Перемножение-транспонирование-матриц
Gorbachenko Vasyl
END of ANSWER ====================================
|