Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

distance

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
// создать двумерный массив
template <typename T>
T** allocate_2d_matrix(int N1, int N2)
{
    T** p = new T*[N1];
    for (int i=0; i<N2; i++)
        p[i] = new T[N2];
    return (p);
}
 
// освободить память, распределенную для массива
template <typename T>
void destroy_matrix(T** p, int N1, int N2)
{
    for (int i=0; i<N2; i++)
        delete [] p[i];
    delete [] p;
}
 
 
// заполнить массив случайными числами
template <typename T>
void fill(T** p, int N1, int N2)
{
    for (int i=0; i<N1; i++)
    for (int j=0; j<N2; j++)
        p[i][j] = rand();
}
 
 
// сумма строки
template <typename T>
T sum_row(T** p, int N1, int N2, int row)
{
    assert(row < N1);
    return (std::accumulate(p[row], p[row] + N2, 0));
}
 
// сумма столбца
template <typename T>
T sum_col(T** p, int N1, int N2, int col)
{
    assert(col < N2);    
    // может, и возможно как-то через std, но что-то сходу никак не придумать..
    int sum = 0;
    for (int i=0; i<N1; i++)
        sum += p[i][col];
    return (sum);
}
 
// проверка на магический квадрат
template <typename T>
bool is_magic(T** p, int N1, int N2)
{
    int sum_base = sum_row(p, N1, N2, 0);    // сумма с которой сравниваем все остальные суммы
    // сравнение сумм по строкам
    for (int i=1; i<N1; i++)
    {
        if (sum_base != sum_row(p, N1, N2, i))
            return (false);
    }
    // сравнение сумм по столбцам
    for (int i=1; i<N2; i++)
    {
        if (sum_base != sum_col(p, N1, N2, i))
            return (false);
    }
    // суммы по диагоналям
    int sum_diag1 = 0;
    int sum_diag2 = 0;
    for (int i=0; i<N1; i++)
    for (int j=0; j<N2; j++)
    {
        sum_diag1 += p[i][j];
        sum_diag2 += p[i][N2-j-1];
    }
 
    return  
        (sum_base == sum_diag1) &&
        (sum_base == sum_diag2);
}
 
void test_matrix()
{
    const int N = 2;
    int** p = allocate_2d_matrix<int>(N, N);
    fill(p, N, N);
    
    std::cout << is_magic(p, N, N) << std::endl;
 
    destroy_matrix(p, N, N);
}

Всего записей: 878 | Зарегистр. 28-03-2004 | Отправлено: 18:18 25-05-2007
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru