Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2013, 19:48   #1
Alexandr-
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 79
По умолчанию матрица

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

Подумал, что можно задать условие в виде: i=j и i>j (т.е на главную диагональ и выше записываем числа в массиве, ну а ниже главной диагонали по тому же принципу примерно). Программа не работает, мб идея не правильно реализуемая или стоит делать совсем иначе?(пытаюсь сделать максимально просто)

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
int main () {
    int i,j,n,*A,**B,count;
    printf ("vvedite razmer massiva\n");
    scanf ("%d",&count);
    srand(time(NULL));
     A = (int *)malloc(count * sizeof(int));
 B = (int **)malloc(n * sizeof(int*));
    n = (sqrt(8 * count + 1) - 1) / 2;
 
    for (i=0;i<count;i++) {
        A[i]=rand()%10;
        printf ("%d ",A[i]); }
 
 
    for (i=0;i<n;i++) {B[i]=(int *)malloc(sizeof(int)*n); printf ("\n");
    for (j=0;j<n;j++) { if (i=j && i>j) {printf ("%d",A[i]);} 
    printf ("%3d",B[i][j]); }}
 
free(A);
free(B);
    getch (); return 0; }
Alexandr- вне форума Ответить с цитированием
Старый 31.05.2013, 20:01   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Цитата:
Хочу создать симметричную матрицу которая хранится в одномерном массиве
A = (int *)malloc(count * sizeof(int)); - создали место под нее.
for (i=0;i<count;i++) A[i]=rand()%10; - заполнили значениями.

Все дальнейшие действия не относятся к созданию матрицы.
Что Вы пытаетесь сделать? Вывести "красиво" такую матрицу на экран?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 31.05.2013, 22:35   #3
Alexandr-
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 79
По умолчанию

Код:
for (i=0;i<n;i++) {B[i]=(int *)malloc(sizeof(int)*n); printf ("\n");
    for (j=0;j<n;j++) { } 
    printf ("%3d",B[i][j]); }}
Ну матрица создается так(выше), а чтобы в ней были нужные числа(из массива) нужно задать соответственное условие. По такой логике и думал, что можно сделать так...
Alexandr- вне форума Ответить с цитированием
Старый 01.06.2013, 15:17   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Вы пытаетесь получить из упакованной матрицы обычную. По-моему, самым простым способом (не самым эффективным) является написание функции, которая преобразует координаты из двухмерного массива в номер элемента в одномерном.
Кстати, учтите, что сравнение на равенство в Си это ==, а не =.
Просто Ваших условий маловато, чтобы правильно получить элемент из одномерного массива.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Матрица NxN -> текстовый файл -> Матрица NxN - найти max по диагоналям -> типизированный файл Лунатик13 Помощь студентам 1 20.02.2012 15:54
матрица nikepol Помощь студентам 2 16.12.2010 16:41
Матрица TigRon Помощь студентам 3 13.10.2010 00:48
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11