#include <stdio.h>
#include <stdlib.h>
float **allocate_mem_m(int m, int n)
{
int i;
float **arr
= malloc(n
*sizeof(*arr
)); for(i=0;i<n;i++)
{
arr
[i
]=malloc(m
*sizeof(**arr
)); }
return arr;
}
void free_mem_m(int m, float **array) {
int i;
for (i = 0; i < m; i++) {
}
}
float **transpose(int m, int n, float Xy[]) {
int i,j;
float **result = allocate_mem_m(m,n);
for(i = 0; i < m; i++) {
for(j = 0; j < n; j++) {
result[i][j] = Xy[j*n+i];
}
}
return result;
}
int main(void) {
float Xy[3][3] = { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } };
float **transposed = transpose(3, 3, &Xy[0][0]);
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
printf("%f ", transposed
[i
][j
]); free_mem_m(3, transposed);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KICAgIAogICAgCmZsb2F0ICoqYWxsb2NhdGVfbWVtX20oaW50IG0sIGludCBuKQp7CmludCBpOwogZmxvYXQgKiphcnIgPSBtYWxsb2MobipzaXplb2YoKmFycikpOwogZm9yKGk9MDtpPG47aSsrKQogICB7CiAgICAgYXJyW2ldPW1hbGxvYyhtKnNpemVvZigqKmFycikpOwogICB9CiByZXR1cm4gYXJyOwp9IAoKdm9pZCBmcmVlX21lbV9tKGludCBtLCBmbG9hdCAqKmFycmF5KSB7CiAgaW50IGk7CiAgZm9yIChpID0gMDsgaSA8IG07IGkrKykgewogICAgZnJlZShhcnJheVtpXSk7CiAgfQogIGZyZWUoYXJyYXkpOwp9CgpmbG9hdCAqKnRyYW5zcG9zZShpbnQgbSwgaW50IG4sIGZsb2F0IFh5W10pIHsKICBpbnQgaSxqOwogIGZsb2F0ICoqcmVzdWx0ID0gYWxsb2NhdGVfbWVtX20obSxuKTsKICBmb3IoaSA9IDA7IGkgPCBtOyBpKyspIHsKICAgIGZvcihqID0gMDsgaiA8IG47IGorKykgewogICAgICByZXN1bHRbaV1bal0gPSBYeVtqKm4raV07CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKHZvaWQpIHsKICBmbG9hdCBYeVszXVszXSA9IHsgeyAwLCAxLCAyIH0sIHsgMywgNCwgNSB9LCB7IDYsIDcsIDggfSB9OwogIGZsb2F0ICoqdHJhbnNwb3NlZCA9IHRyYW5zcG9zZSgzLCAzLCAmWHlbMF1bMF0pOwogIGludCBpLCBqOwogIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCiAgICBmb3IgKGogPSAwOyBqIDwgMzsgaisrKQogICAgICBwcmludGYoIiVmICIsIHRyYW5zcG9zZWRbaV1bal0pOwogIHByaW50ZigiXG4iKTsKICBmcmVlX21lbV9tKDMsIHRyYW5zcG9zZWQpOwogIHJldHVybiAwOwp9Cgo=