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

Ваш аккаунт

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

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

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

программа работает наоборот, а надо как на рисунке помогите найти ошибку

76K
19 декабря 2011 года
misik
4 / / 19.12.2011
#include <iostream>
#include <iomanip>

using namespace std;
int main()
{
//Кол-во строк и столбцов
int n, m;

//Матрица
int** mtrx;

int l, c;

//Получаем от пользователя кол-во строк и столбцов
cout << "N: ";
cin >> n;

cout << "M: ";
cin >> m;

//Выделяем память для элементов массива
mtrx = new int*[n];
for (int i = 0; i < n; i++)
mtrx = new int[m];

//Виток спирали
l = 0;

//Значение текужего элемента
c = 81;

//Обрабатываем отдельные случаи: матрица-строка и матрица-столбец
if (n == 81)
for (int i = 1; i < m; i++)
mtrx[0] = i + 1;
else if (m == 81)
for (int i = 0; i < n; i++)
mtrx[0] = i + 1;
else
//Если матрица не является матрицей-строкой или матрицей-столбцом
while (c <= m * n)
{
//Верхняя часть витка спирали
for (int i = 81; (i > m - l) && (c <= m * n); i++)
mtrx[l] = c++;

//Правая часть
for (int i = l - 1; (i > n - l) && (c <= m * n); i++)
mtrx[m - l - 1] = c++;

//Нижняя часть
for (int i = m - l - 2; (i >= l) && (c <= m * n); i--)
mtrx[n - l - 1] = c++;

//Правая часть
for (int i = n - l - 2; (i > l) && (c <= m * n); i--)
mtrx[l] = c++;

//Переходим на следующий виток
l++;
}

//Выводим матрицу
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << setw(5) << mtrx[j];

cout << endl;
}

system("PAUSE");

return 0;
}
14
19 декабря 2011 года
Phodopus
3.3K / / 19.06.2008
Оформите код
А как вы это делали? Где цикл вращения?
76K
19 декабря 2011 года
misik
4 / / 19.12.2011
вот с этим я запуталась
20K
20 декабря 2011 года
sem2711
124 / / 23.09.2009
Вариант, предложенный ТС показался мне несколько запутанным. Да и не работала программа ни наоборот, ни как-то еще... Могу предложить свой вариант:
Код:
#include <iostream>
#include <iomanip>

using namespace std;

void fill_matrix(int value,     // Значение для следующего элемента матрицы.
        int iter,       // Порядковый номер итерации (вызова функции).
        int curr_row,   // Текущий ряд (строка).
        int curr_col,   // Текущая колонка (столбец).
        int rows,       // Количество рядов в матрице.
        int cols,       // Количество колонок в матрице.
        int** mtrx) {   // Матрица.
    // Получаем значение шага по горизонтали и вертикали
    // в зависимости от номера итерации: если четный, то
    // движемся вправо и вверх, если нечетный - то влево и вниз.
    int x_step = (iter % 2 == 0 ? 1 : -1);
    int y_step = (iter % 2 == 0 ? -1 : 1);

    // Цикл для заполнения элементов в текущем ряду (по горизонтали).
    for (int i = 0; i < iter; ++i) {
        curr_col += x_step;
        if (curr_col < 0 || curr_col >= cols) {
            return;
        }
        mtrx[curr_row][curr_col] = value++;
    }
   
    // Цикл для заполнения элементов в текущем столбце (по вертикали).
    for (int j = 0; j < iter; ++j) {
        curr_row += y_step;
        if (curr_row < 0 || curr_row >= rows) {
            return;
        }
        mtrx[curr_row][curr_col] = value++;
       
    }

    // Инкремент счетчика итераций.
    ++iter;

    // Рекурсивный вызов с текущими значениями.
    fill_matrix(value, iter, curr_row, curr_col, rows, cols, mtrx);
}

int main()
{
    //Матрица
    int** mtrx;

    //Получаем от пользователя кол-во строк и столбцов
    cout << "Number of rows: ";
    int rows;   // кол-во строк.
    cin >> rows;

    cout << "Number of columns: ";
    int cols;   // кол-во столбцов.
    cin >> cols;

    //Выделяем память для элементов массива.
    mtrx = new int* [rows];
    for (int i = 0; i < rows; ++i) {
        mtrx = new int[cols];
        for (int j = 0; j < cols; ++j) {
            mtrx[j] = 0;
        }
    }

    // Текущая позиция по вертикали.
    int curr_row = rows / 2;
    // Текущая позиция по горизонтали.
    int curr_col = cols / 2;

    // Заполнение матрицы.
    // Первый элемент заносим в матрицу явно.
    mtrx[curr_row][curr_col] = 1;
    fill_matrix(2, 1, curr_row, curr_col, rows, cols, mtrx);

    //Выводим матрицу
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            cout << setw(5) << mtrx[j];
        }
        cout << endl;
    }

    // Освобождаем выделенную память.
    for (int i = 0; i < rows; ++i) {
        delete [] mtrx;
    }
    delete [] mtrx;

    system("PAUSE");

    return 0;
}
76K
20 декабря 2011 года
misik
4 / / 19.12.2011
sem2711, спасибо вы мне очень помогли, попытаюсь разобраться что у меня не так было
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог