Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [c] Спиральный вывод двумерного массива


Автор: DeathKnight 11.11.2008, 15:10
необходимо динамический рандомно заполняемый двухмерный массив вывести по спирали

у меня нет идей, как это реализовать..

Автор: THandle 11.11.2008, 15:57
DeathKnight, в недавнем конкурсе по Delphi было как раз такое задание. Посмотри решения: http://forum.vingrad.ru/index.php?showtopic=231619&view=findpost&p=1678005

Там на Delphi, о может сам сможешь перевести/кто то еще переведет. 

Автор: DeathKnight 11.11.2008, 21:08
я слаб в делфи, но спасибо, попробую разобраться

может кто помочь ещё?

Автор: THandle 11.11.2008, 22:05
DeathKnight, могу описать алгоритм своего решения... Могу попробовать написать на С++... Но на просто С врядли, не знаю я его вообще и чем он таким отличается. 

Автор: Dov 12.11.2008, 09:15
Код
#include < stdio.h >
#include < time.h >

int main()
{
    // запускаем генератор случайных чисел
    srand( ( unsigned ) time( NULL ) );    

    int **  matr, ROWS, COLS, count, i, j;
    int     rowBeg, rowEnd, colBeg, colEnd;

    // запрашиваем у пользователя размеры матрицы
    printf( "Введите количество   строк  матрицы: " );
    scanf( "%d", &ROWS );
    printf( "Введите количество столбцов матрицы: " );
    scanf( "%d", &COLS );

    // выделяем память для динамической матрицы
    matr = ( int ** ) malloc( ROWS * sizeof( int * ) );
    for( i = 0; i < ROWS; i++ )
        matr[i] = ( int * ) malloc( COLS * sizeof( int ) );

    printf( "\nДля матрицы :   %d  x  %d\n\n", ROWS, COLS );

    // Инициализируем матрицу случайными значениями в диапазоне 1 - 50
    for( i = 0; i < ROWS; i++ )
        for( j = 0; j < COLS; j++ )
            matr[i][j] = rand() % 50 + 1;

    // Вывод матрицы
    for( i = 0; i < ROWS; i++ )
    {
        for( j = 0; j < COLS; j++ )
            printf( "%3d", matr[i][j] );
        puts( "" );
    }

    // Вывод значений матрицы по спирали
    puts( "\n\n\tвывод значений по спирали:\n" );

    rowBeg = 0;
    rowEnd = ROWS - 1;
    colBeg = 0; 
    colEnd = COLS - 1;
    count  = ROWS * COLS;

    while( count )
    {
        for( i = colBeg; i <= colEnd && count; i++, count-- )
            printf( "%3d", matr[rowBeg][i] );
        rowBeg++;        
        for( i = rowBeg; i <= rowEnd && count; i++, count-- )
            printf( "%3d", matr[i][colEnd] );
        colEnd--;        
        for( i = colEnd; i >= colBeg && count; i--, count-- )
            printf( "%3d", matr[rowEnd][i] );
        rowEnd--;        
        for( i = rowEnd; i >= rowBeg && count; i--, count-- )
            printf( "%3d", matr[i][colBeg] );
        colBeg++;
    }
    puts( "" );

    // освобождаем память
    for( i = 0; i < ROWS; i++ )
        free( matr[i] );
    free( matr );

    return 0;
}

Автор: DeathKnight 12.11.2008, 13:12
спасибо, буду разбираться

Автор: DeathKnight 12.11.2008, 20:11
а как можно решить с помощью вектора?
и по раскручивающейся спирали?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)