Inserire colonna matrice in una lista

di il
32 risposte

32 Risposte - Pagina 2

  • Re: Inserire colonna matrice in una lista

    Un vettore non si dichiara cosi'?
    
    tipo nome_variabile[dimensione];
    
  • Re: Inserire colonna matrice in una lista

    E nella struct è così?
  • Re: Inserire colonna matrice in una lista

    Hai ragione, mi confondo, allora vec cosa mi rappresenta nella pre_insert?
    un generico?
  • Re: Inserire colonna matrice in una lista

    Ma perché queste domande senza senso?

    Modifichi la struct o no?
  • Re: Inserire colonna matrice in una lista

    
    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,
  • Re: Inserire colonna matrice in una lista

    Ma dimensione cosa è?
  • Re: Inserire colonna matrice in una lista

    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
  • Re: Inserire colonna matrice in una lista

    Quindi devi scrivere vec[M]
    Perché hai scritto vec[dimensione] ?
  • Re: Inserire colonna matrice in una lista

    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
  • Re: Inserire colonna matrice in una lista

    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.
  • Re: Inserire colonna matrice in una lista

    Non saprei proprio come impostarlo con quel puntatore prima
    
    for (i = 0; i < M; i++) {
    		(*ptrptr)->vec[i] = vec[i];
    };
    	
  • Re: Inserire colonna matrice in una lista

    Mi pare giusto ... le parentesi { } non sono necessarie
  • Re: Inserire colonna matrice in una lista

    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);
    	}
    }
    
  • Re: Inserire colonna matrice in una lista

    ...considerando ... e la domanda qual è?
  • Re: Inserire colonna matrice in una lista

    
    #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