[C++] Дана двумерная матрица... *DELETED*

vladi1

Сообщение удалил

otets-mihail

>дана двумерная матрица с рангом 8

а размерность?

vladi1

Размерность не нужна, ранг = 8, а размерность...ну пусть 10

Dazik

memset

vladi1

не фтыкнул...кроме того, что она чето там заполняет
напиши код с этим мемсетом(хотя бы эскиз, нобросок, точность не нужна, алгоритм нужын)
ЗЫ: Я мошт и рюхнул бы - но это луна для меня, не достану:)

a10063

дана двумерная матрица с рангом 8
каким образом дана? т.е. формат хочу

Dazik

memset не подойдет. Точнее подойдет только если матрица состоит из char'ов.
Тогда нужно где-то создать экземляр, заранее заполненный (например, вложенными циклами) единицами matrix1, а там где критична скорость инициализации делать memcpy( matrix2, matrix1, matrix_dim*matrix_dim*sizeof(element) )
matrix_dim - размерность матриц
element - тип элемента матриц
matrix2 - неинициализированная матрица

Dazik

Это если матрица задается непрерывным образом. Например, int matrix[matrix_dim][matrix_dim].

Olenenok

Ты ни в проганье не смыслишь, ни в математике. Матрица ранга 8 означает, что эта матрица имеет ровно 8 линейно-независимых строк (столбцов а так как у тебя все столбцы заполнены еденицами, то и ранг равен в точности 1!

Dazik

Ох. Тебе на ЛОР пора.
Извини.

artimon

В такой формулировке тебе никто ничего путного не скажет.
Во-первых, матрица заполненая единицами имеет ранг 1.
Во-вторых, матрицы бывают не только квадратные.
МОжет всё-таки имеется в виду матрица 8 на 8?

vladi1

не...матрица пох какая, ранг её равен 8, сама она мошт и 8*8, мошт 10*20
Заполнить 1-цами - не значит, что каждый эл-т 8*8 = 1, в том-то и задача

artimon

Как можно хоть чем-то заполнить матрицу неизвестного размера? Или он всё-таки дан (хотя бы в виде N*M)?

vladi1

пускай N*M, N,M>=8

artimon

Что-то типа того:
#include <stdlib.h>
#include <iostream.h>
int main {
double *a;
int i, j;
int N = 10;
int M = 15;
a = (double*)calloc(N*M, sizeof(double;
for(i=0;i<8;i++) {
a[M*i+i] = 1;
}
// Проверка
for(i=0;i<N;i++) {
for(j=0;j<M;j++) {
cout << a[i*M+j] << " ";
}
cout << "\n";
}
free(a);
return 0;
}

vladi1

Спасибо, линн! я токо не фтыкнул, этот код реализует алгоритм:
Из матрицы 10*15 выудить матрицу 8*8 с определком не раным нулю и все эл-ты изменить на '1'?
Или какой ты в свойм коде реализуешь алгоритм?

margadon

зачот
а остальное нулями не надо забивать?

artimon

Я просто создаю матрицу ранга 8.
Всё равно я не понял что такое "дана матрица ранга 8".

artimon

man calloc
Зачем делать то, что за тебя сделает компилятор

margadon

да он просто единичную матрицу нарисовал размера 8 на 8 в нулевой матрице большего размера

vladi1

>Всё равно я не понял что такое "дана матрица ранга 8".
Значит берёццо массив для матрицы 10 на 15 с рангом = 8, он дан
Я понял, что в нём надо найти строки-столбцы, которые и дают этот 8-й ранг и приравнять '1', на остальные эл-ты положить...

yolki

без вложенного цикла:

double x[10][10];
int i;
for(i=0;i<100;i++)
{
x[i/10][i%10]=(i>80)?0:!(i%9);
}

vladi1

всё, спасибо!
Спасибо
Оставить комментарий
Имя или ник:
Комментарий: