questo è il file.h
- Codice:
#include <stdio.h>
#include <stdlib.h>
struct matrix{
size_t rows, cols;
double *data;
};
#if !defined MATRIX_H
#define MATRIX_H
extern struct matrix *matrix_flip_v(const struct matrix *m);
#endif
il main.c è:
- Codice:
#include "matrix.h"
int main(void){
double data[] = {
1, 2, 3, 4, 5, 6, 7, 8, 9
};
struct matrix m = { 3, 3, data };
struct matrix *f = matrix_flip_v(&m);
return 0;
}
questo è il file.c:
- Codice:
#include "matrix.h"
struct matrix *matrix_flip_v(const struct matrix *m){
if (m == NULL){
return NULL;
}
struct matrix *mflip = malloc(sizeof(struct matrix)); //alloco lo spazio per la struct matrice
mflip->cols = m->cols; //copio colonne
mflip->rows = m->rows; //copio righe
mflip->data = malloc(mflip->cols*mflip->rows*sizeof(double)); //alloco lo spazio per gli elementi della matrice
for (unsigned int r = 0; r < m->rows; r++){
for (unsigned int c = 0; c < m->cols; c++){
int index = (r*m->cols) + c;
int ind = (r*m->cols) + (m->cols - c - 1);
mflip->data[ind] = m->data[index];
}
}
return mflip;
}
Però non capisco cosa fa nei due cicli for..
cioè questo passaggio:
- Codice:
int index = (r*m->cols) + c;
int ind = (r*m->cols) + (m->cols - c - 1);
mflip->data[ind] = m->data[index];
a me sembra di capire che invece di ottenere la matrice dovuta si ottenga questa matrice $((3,2,1),(6,5,4),(9,8,7))$
Perchè index calcola le posizioni dove si trovano gli elementi della matrice iniziale, poi ind calcola le posizioni della nuova matrice in cui vanno a finire gli elementi. Qualcuno mi potrebbe spiegare il ragionamento che sbaglio? ho l'impressione di non riuscire a capire il significato di quelle due righe di codice