Симметричная матрица

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Alexandr-
Сообщения: 1
Зарегистрирован: 01 июн 2013, 10:13

Язык СИ.
Нужно создать симметричную матрицу которая хранится в одномерном массиве, где построчно записаны элементы, стоящие не ниже главной диагонали. Т.е к примеру:
массив: 1 2 3 4 5 6
матрица:
1 2 3
2 4 5
3 5 6

Просто создание одномерного массива ниже. Может кто помочь с созданием такой матрицы? Проблема в том, что я совсем не понимаю, как из массива ее создать... Заранее спасибо если кто решит помочь.

Код: Выделить всё

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
int main () {
    int i,j,*A,count;
    printf ("vvedite razmer massiva\n");
    scanf ("%d",&count);
    srand(time(NULL));
     A = (int *)malloc(count * sizeof(int));
    for (i=0;i<count;i++) {
        A[i]=rand()%10;
        printf ("%d ",A[i]); }
free(A);
    getch (); return 0; }
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Если размер матрицы N, то следующий вложенный цикл обойдёт всё её элементы, расположенные не ниже главной диагонали:

Код: Выделить всё

for (i = 0; i < N; ++i)
   for (j = i; j < N; ++j)
Внутри цикла нужно заполнять сразу два элемента матрицы M[j] и M[j] одним и тем же значением из массива A. Переменную-индекс элемента массива A, из котого мы будем брать данные для заполнения матрицы, проще всего определить вне цикла и инициализировать нулём, а в цикле, сразу после успешного заполнения двух симметричных элементов матрицы, инкрементировать.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить