Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите решить

86K
27 октября 2013 года
yupoli
4 / / 27.10.2013
Даны действительные числа a1, a2,..., an. Получить квадратную матрицу порядка n:
a1 a2 a3 an
a2 a3 an a1
a3 an a1 a2
an a1 a2 a3

помогите написать код
326
27 октября 2013 года
sadovoya
757 / / 19.11.2005
Циклический сдвиг в интервале. Алгоритмы STL. Пример.
86K
27 октября 2013 года
yupoli
4 / / 27.10.2013
Цитата: sadovoya
Циклический сдвиг в интервале. Алгоритмы STL. Пример.



а можно как- то иначе???

60K
27 октября 2013 года
Альберт Шайдуллин
13 / / 21.10.2012
а как иначе? в каждои строке идет сдвиг на один елемент
326
27 октября 2013 года
sadovoya
757 / / 19.11.2005
STL не надо бояться -- она друг, а не враг:) Кроме того она давно вошла в стандартную библиотеку, теперь ее нужно знать всем С++ программистам. Вот решение, не такое уж оно сложное. Достаточно почитать инфу по vector, rotate...

Код:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

int main() {

    double a[10]; //начальная последовательность
    double ar[10][10]; //матрица результатов

    //задаем числа начальной последовательности
    //(одновременно это начальная строка матрицы)
    for (int i = 0; i < 10; i++)
        a[i] = ar[0][i] = double(i);


    vector<double> v(a,a+10);  //вектор STL для обработки данных
    //сразу инициализируем его начальной последовательностью


    cout << "Initial data:" << endl;
    copy(v.begin(),v.end(),ostream_iterator<double>(cout, "; "));
    cout << endl << endl;

    //остальные строки матрицы:
    for (int i = 1; i < 10; i++) {
        rotate(v.begin(),v.begin()+1,v.end());
        copy(v.begin(),v.end(), ar[i]);
    }

    cout << "Result:" << endl;
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j<10; j++)
            cout << ar[i][j] << " ";
        cout << endl;
    }

    return 0;
}
Косметические доработки под Visual надеюсь осилите.

P.S. Советую самостоятельно потренироваться -- переделать в более красивое решение, совместив ротацию и копирование с помощью rotate_copy.
326
28 октября 2013 года
sadovoya
757 / / 19.11.2005
Без алгоритмов STL можно "в лоб" так, например:


Код:
#include <iostream>

using namespace std;

int main() {

    const double a[] = {0,1,2,3,4,5,6,7,8,9};
    const int k = sizeof(a)/sizeof(double);
    double aa[k][k];

    for (int i = 0; i < k; i++) {

        for (int j = i; j < k; j++)
            cout << (aa[i][j-i] = a[j]) << "  ";

        for (int j = 0; j < i; j++)
            cout << (aa[i][k-i+j] = a[j]) << "  ";

        cout << endl;
    }

    return 0;
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог