Inserire colonna matrice in una lista

di Anonimizzato28479 il
32 risposte

32 Risposte - Pagina 2

  • Un vettore non si dichiara cosi'?
    
    tipo nome_variabile[dimensione];
    
  • E nella struct è così?
  • Hai ragione, mi confondo, allora vec cosa mi rappresenta nella pre_insert?
    un generico?
  • Ma perché queste domande senza senso?

    Modifichi la struct o no?
  • 
    struct list {
           float vec[dimensione];
    	struct list* next_ptr;
    };
    void pre_insert(struct list **ptrptr, float vec) {
    		struct list* tmp_ptr;
    		tmp_ptr = *ptrptr;
    		*ptrptr = (struct list*)malloc(sizeof(struct list));
    		(*ptrptr)->
    		(*ptrptr)->next_ptr = tmp_ptr;
    }
    nella penultima riga non saprei proprio che mettere,
  • Ma dimensione cosa è?
  • Dimensione sarebbe il numero degli elementi contenuti nel vettore, nel caso del programma era il numero delle righe che io identificavo con M, per questo io dicevo vec[M].
    se avessi tre elementi come hai detto tu avrei messo vec[3] : vec[0]=2.3 , … ecc
  • Quindi devi scrivere vec[M]
    Perché hai scritto vec[dimensione] ?
  • oregon ha scritto:


    Non mi pare tu abbia modificato la struct (c'è sempre un singolo float nella struttura) e non puoi assegnare il vettore in quel modo (hai studiato i vettori? vec[M] è un elemento del vettore con indice sbagliato, non il vettore, te l'ho già detto)
    avevo capito da qui che era sbagliato v[M]
    
    struct list {
    	float vec[M];
    	struct list* next_ptr;
    };
    void pre_insert(struct list** ptrptr, float vec[M]) {
    	struct list* tmp_ptr;
    	tmp_ptr = *ptrptr;
    	*ptrptr = (struct list*)malloc(sizeof(struct list));
    	(*ptrptr)->vec[M] = vec[M];
    	(*ptrptr)->next_ptr = tmp_ptr;
    }
    pero' non capisco la penultima scrittura, non so se va bene
  • No quella è sbagliata. Come si copia un vettore in un altro? Se non conosci funzioni come la memcpy non puoi farlo in una linea, ti serve un ciclo for.
  • Non saprei proprio come impostarlo con quel puntatore prima
    
    for (i = 0; i < M; i++) {
    		(*ptrptr)->vec[i] = vec[i];
    };
    	
  • Mi pare giusto ... le parentesi { } non sono necessarie
  • Okay, grazie mille….
    quando richiamo la funzione nel main:
    
    from_mat(list, vec)
    
    considerando
    
    void from_mat(float vec[M], struct list **ptrptr) {
    	for(j = N-1; j >(-1); j=j-1){
    	    for (i = 0; i < M; i++){
    		   vec[i] = mat[i][j];
    		} 
    		pre_insert(ptrptr, vec);
    	}
    }
    
  • ...considerando ... e la domanda qual è?
  • 
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    
    
    #define M 4
    #define N 5
    
    struct list {
    	float vec[M];
    	struct list* next_ptr;
    };
    
    float mat[M][N];
    int i, k = 0;
    int j = N;
    
    
    void init(struct list **ptrptr);
    void pre_insert(struct list **ptrptr, float vec[M]);
    void from_mat(float vec[M], struct list **ptrptr);
    
    
    main() {
            struct list* list;
    	init(&list); 
    	float vec[M];
    	do {
    			 printf("\nInseriamo i valori nella matrice\n");
    			 for (j = (N-1); j > (-1); j = j - 1) {
    				 for (i = 0; i < M; i++) {
    					 printf("\nvalore matrice [%d] X [%d]\n", i, j);
    					 scanf("%f", &mat[i][j]);				 
    				 }
    			 }
    			 from_mat(list, vec);
    	}	 
     }
     
     void init(struct list **ptrptr) { 
    	*ptrptr = NULL; 
    }
     void pre_insert(struct list** ptrptr, float vec[M]) {
    	struct list* tmp_ptr;
    	tmp_ptr = *ptrptr;
    	*ptrptr = (struct list*)malloc(sizeof(struct list));
    	for (i = 0; i < M; i++) 
    	(*ptrptr)->vec[i] = vec[i];
    	(*ptrptr)->next_ptr = tmp_ptr;
    	printf("%f", vec[M]);
    }
    void from_mat(float vec[M], struct list **ptrptr) {
    	for(j = N-1; j >(-1); j=j-1){
    	    for (i = 0; i < M; i++){
    		   vec[i] = mat[i][j];
    		} 
    		pre_insert(ptrptr, vec);
    	}
    }
    

    Quando richiamo nel main la funzione from_mat, mi dice
    Avvisi:
    -'funzione': tipi non compatibili. Da 'list *' a 'float *'
    -'funzione': 'list **' differisce da 'float [2]' nei livelli di riferimento indiretto
    -'from_mat': tipi diversi tra il parametro 2 formale e quello effettivo

    Sbaglio sicuramente qualcosa nella chiamata, i termini sono tutti di tipo float

Devi accedere o registrarti per scrivere nel forum
32 risposte