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


Автор: GreyMad 7.1.2007, 17:37
Задача:
Задано количество строк и столбцов матрицы. 
Заполнить матрицу целыми числами следующим образом: крайние элементы (по периметру) должны содержать значение 1, элементы по периметру оставшейся матрицы - 2 и т.д.

Буду очень признателен, если поможете решить мне эту задачу. smile 

Автор: Dov 7.1.2007, 22:58
Так, што ли?  smile  
Код
#include <stdio.h>

#define ROWS 15
#define COLS 15

int main()
{
    int matr[ROWS][COLS];
    int k, i, j, iBeg, iEnd, jBeg, jEnd, value = 1;

    iBeg  = jBeg  = 0;
    iEnd  = ROWS;
    jEnd  = COLS;

    for(k = 0; k < ROWS / 2 + 1; iBeg++, iEnd--, jBeg++, jEnd--, value++, k++)
        for(i = iBeg; i < iEnd; i++)
            for(j = jBeg; j < jEnd; j++)
                matr[i][j] = value;

    for(i = 0; i < ROWS; i++)
    {
        for(j = 0; j < COLS; j++)
            printf("%2d", matr[i][j]);
        puts("");
    }

    printf("\nPress any key to quit...\n");
    getch();

    return 0;
}

Автор: GreyMad 8.1.2007, 13:24
Dov,  да, спасибо. smile 
А можно, кстати, как-нить сделать, чтобы сначала самому количество строк и столбцов вводить?
И еще: что означает  "puts("")"?  smile 

Автор: Dov 8.1.2007, 14:23
Цитата(GreyMad @  8.1.2007,  12:24 Найти цитируемый пост)
А можно, кстати, как-нить сделать, чтобы сначала самому количество строк и столбцов вводить?

Конечно, можно. Нет ничего невозможного для человека... с интеллектом...  smile  Весь вопрос в том, как ты это хочешь сделать. Используя динамический массив или статический.  smile 

Цитата(GreyMad @  8.1.2007,  12:24 Найти цитируемый пост)
что означает  "puts("")"?  

Это вывод пустой строки с одновременным переходом на новую, всё равно, что printf("\n");.



Автор: GreyMad 8.1.2007, 14:41
Цитата(Dov @ 8.1.2007,  14:23)
Цитата(GreyMad @  8.1.2007,  12:24 Найти цитируемый пост)
А можно, кстати, как-нить сделать, чтобы сначала самому количество строк и столбцов вводить?

Конечно, можно. Нет ничего невозможного для человека... с интеллектом...  smile  Весь вопрос в том, как ты это хочешь сделать. Используя динамический массив или статический.  smile 


Эээ. Я даже и не знаю. smile  Как по-проще так и хочу)))

Я себе это так представляю: 
программа говорит: "введите размерность массива (кол-во строк и столбцов)". Вводим 2 числа, и она выводит матрицу этого размера с единицами по периметру и т.д. smile 

Автор: Dov 8.1.2007, 17:30
Цитата(GreyMad @  8.1.2007,  13:41 Найти цитируемый пост)
Эээ. Я даже и не знаю.   Как по-проще так и хочу)))

GreyMad, хорошо, тогда давай так.  Скажи, какой максимальный размер массива ты предполагаешь использовать, т.е. сколько строк и столбцов? Иначе, получается так - пойди туда, не знаю куда...  smile 

Автор: GreyMad 8.1.2007, 19:03
я думаю 20х20 максимум, больше не надо

Автор: apook 8.1.2007, 19:21
даже и переделывать ниче не надо
две строки добавить да и все щас вспомню какие! Ааа
Код

введите количество рядов не больше 20
введите количество столбцов не больше 20

Автор: Dov 8.1.2007, 20:02
Цитата(apook @  8.1.2007,  18:21 Найти цитируемый пост)
даже и переделывать ниче не надо

Практически совсем чуток.
Код
#include <stdio.h>

#define ROWS 21
#define COLS 21

int main()
{
    int matr[ROWS][COLS];
    int k, i, j, iBeg, iEnd, jBeg, jEnd, rows, cols, value;

    printf("Vvedite kol-vo strok(1...21)   : ");
    scanf("%d", &rows);
    if(rows > ROWS)
        rows = ROWS;
    printf("Vvedite kol-vo stolbcov(1...21): ");
    scanf("%d", &cols);
    if(cols > COLS)
        cols = COLS;

    iBeg  = jBeg  = 0;
    iEnd  = rows;
    jEnd  = cols;
    value = 1;

    for(k = 0; k < rows / 2 + 1; iBeg++, iEnd--, jBeg++, jEnd--, value++, k++)
        for(i = iBeg; i < iEnd; i++)
            for(j = jBeg; j < jEnd; j++)
                matr[i][j] = value;

    for(i = 0; i < rows; i++)
    {
        for(j = 0; j < cols; j++)
            printf("%3d", matr[i][j]);
        puts("");
    }

    printf("\nPress any key to quit...\n");
    getch();

    return 0;
}


Автор: GreyMad 8.1.2007, 21:58
Dov,  спасибо огромное! smile  smile 

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