Копирование вектора в матрицу
Нужно вектор v(размером n * n) скопировать в матрицу(n*n, то есть квадратную) и вывести на экран. Сделать это нужо с помощью указателей. Я не понимаю КАК сделать это копирование( Думал просто перебором присваивать значения или прсто сделать mat = &v и циклом вывести, но не вышло. Вот что есть на данный момент:
void vec_to_mat(int *v, int *mat, int n){
int i = 0, j = 0;
int *pv;
*pv = &v[0];
for(j; j < n; j++){
for(i; i < n; i++){
*mat[i][j] = pv[i + 1];
}
}
for(j; j < n; j++){
for(i; i < n; i++){
printf("%d", mat[i][j]);
printf("\n");
}
}
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Так устроит?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void fill(const int * v, int ** mat, int N)
{
int r = 0, c = 0;
for(int i = 0; i < N*N; ++i)
{
*(*(mat+r)+c++) = *(v+i);
if (c == N) { c = 0; ++r; }
}
}
int main()
{
const int N = 5;
int ** mat = malloc(sizeof(int*)*N);
for(int i = 0; i < N; ++i)
*(mat+i) = malloc(sizeof(int)*N);
int * v = malloc(sizeof(int)*N*N);
for(int i = 0; i < N*N; ++i)
*(v+i) = rand()%100;
for(int i = 0; i < N*N; ++i)
printf("%2d ",*(v+i));
puts("\n");
fill(v,mat,N);
for(int i = 0; i < N; ++i)
{
for(int j = 0; j < N; ++j)
printf("%2d ",*(*(mat + i)+j));
puts("");
}
}