Che senso ha la
void pre_insert(struct list **ptrptr, float vec[M]) {
}
vuota??
vec[i]
non rappresenta il vettore ma un solo elemento del vettore e non puoi passarlo ad una funzione in questo modo
Quindi per la chiamata devi scrivere
pre_insert(ptrptr, vec);
Poi in
void from_mat(float mat[M][N], float vec[M], struct list **ptrptr) {
a che serve il primo parametro se mat è globale? Quindi basta
void from_mat(float vec[M], struct list **ptrptr) {
Infine, nella pre_insert, di nuovo, cosa è vec[ i ] per te? E' solamente un valore (e con un indice che non ha senso), certamente NON rappresenta tutta la colonna. Quindi NON è corretto. COSA vuoi fare nella pre_insert?
Hai ancora parecchie difficoltà nel passaggio dei parametri alle funzioni e nella comprensione della differenza tra vettori e i suoi elementi.
Dovresti rivedere questi argomenti teoricamente perché, altrimenti, non riuscirai facilmente ad arrivare a soluzione dell'esercizio. Non ci arriverai sicuramente per tentativi, ma solo capendo i concetti che stanno alla base.
Per essere chiari, mostra un piccolo esempio di come dovrebbe essere una lista di due nodi con un vettore di 3 elementi (valori a caso).
Per come è la struttura, in ogni nodo ci metti UN solo valore float.