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


Автор: Marisha 14.12.2007, 21:51
Дан одномерный массив, в котором записаны элементы верхнего треугольника квадратной матрицы, прочитанные по строкам.Составить массив из этих же элементов, но прочмтанных по столбцам(не восстанавливая матрицы). smile Забыла написать. на языке Си надо








помогите, пожалуйста!! smile 

Автор: Dov 14.12.2007, 23:59
А что такое
Цитата(Marisha @  14.12.2007,  20:51 Найти цитируемый пост)
элементы верхнего треугольника квадратной матрицы


Если есть, например, такая матрица:
Код

2 3 5 6 8 
6 5 4 1 2 
9 8 4 5 2 
3 2 5 4 7 


то как выглядит твой массив сейчас и как он должен выглядеть потом?  smile 

Автор: orthrus 15.12.2007, 09:24
Цитата(Dov @ 14.12.2007,  23:59)
Если есть, например, такая матрица:
Код

2 3 5 6 8 
6 5 4 1 2 
9 8 4 5 2 
3 2 5 4 7 


Это не квадратная матрица, а элементы верхнего треугольника это наверное элементы находящиеся выше главной диагонали.

Автор: zkv 15.12.2007, 11:38
Цитата(Marisha @  14.12.2007,  21:51 Найти цитируемый пост)
smile Забыла написать. на языке Си надо

Не забывайте больше.

Автор: Dov 15.12.2007, 15:52
Цитата(orthrus @  15.12.2007,  08:24 Найти цитируемый пост)
Это не квадратная матрица, а элементы верхнего треугольника это наверное элементы находящиеся выше главной диагонали.

Так что-ли?
Код

x 0 1 3 6 
x x 2 4 7
x x x 5 8 
x x x x 9
x x x x x 


Тогда вот:
Код
#include <stdio.h>

int main()
{
    int       src[] = {0,1,3,6, 2,4,7, 5,8, 9};
    const int len   = sizeof(src) / sizeof(src[0]);
    int       dst[len];   
    int       i, j, n, size, h, k, m = 0;
    char *    matr[] = {
                "x 0 1 3 6",
                "x x 2 4 7",
                "x x x 5 8",
                "x x x x 9",
                "x x x x x"
             };

    for(i = len, size = 0; i; i -= size++);

    puts("For matrix: ");
    for(i = 0; i < size; i++)
        printf("  %s\n", matr[i]);

    printf("\nSource:\n  ");
    for(i = 0; i < len; i++)
        printf("%d ", src[i]);
    
    for(i = 0, n = 1; i < size; n++, i++)
        for(j = 0, k = i, h = size - 2; j < n; k += h--, j++)
            dst[m++] = src[k];
        
    printf("\nResult:\n  ");
    for(i = 0; i < len; i++)
        printf("%d ", dst[i]);

    puts("");

    return 0;
}


Наверняка есть вариант лучше и проще, но что-то в бестолковку ничего путного не лезет.  smile 

Автор: Marisha 15.12.2007, 18:43
спасиб вам,  только надо включая главную диагональ...

Автор: Dov 15.12.2007, 20:08
Цитата(Marisha @  15.12.2007,  17:43 Найти цитируемый пост)
только надо включая главную диагональ...

Ну, так что за проблема? Добавь элементы главной диагонали в свой массив и всё. Вот так:
Код
int  src[] = {1,2,4,7,11,  3,5,8,12,  6,9,13,  10,14,  15};


И для наглядности измени выводимую матрицу:
Код

    char *    matr[] = {
                "1  2  4  7  11",
                "x  3  5  8  12",
                "x  x  6  9  13",
                "x  x  x 10  14",
                "x  x  x  x  15"
             };


И в цикле её вывода нужно исправить так: 
Код
i < size - 1




Автор: Marisha 16.12.2007, 23:55
Вообще спасибо большое, ты меня выручил очень-очень!!!!!!!!!!!!!!!!!!!!!!!!!!!!! smile  smile  smile 

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