Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C] Esercizio di rotazione righe di una matrice

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    13

    [C] Esercizio di rotazione righe di una matrice

    Salve a tutti ragazzi vorrei un aiuto da voi per risolvere questo esercizio in c :
    ricevo in come parametro un puntatore ad un struct matrice:
    struct matrice {
    size_t rows, cols;
    double *data;
    };
    struct matrice *ruota_v(const struct matrix *m, int n)


    La funzione accetta come parametri un puntatore ad una matrice m e un int n e deve
    restituire un puntatore a una nuova matrice allocata dinamicamente che contiene la
    matrice ottenuta ruotando le righe di m verticalmente dall’alto verso il basso n
    volte, facendo ad ogni rotazione diventare l’ultima riga la prima. Una rotazione
    con n negativo è l’operazione inversa.
    Ad esempio ruotare la matrice
    ( 1 2 3 )
    ( 4 5 6 )
    ( 7 8 9 )
    di n=1 posizioni produce la matrice
    ( 7 8 9 )
    ( 1 2 3 )
    ( 4 5 6 )
    Ruotarla invece di di n=-1 posizioni produce la matrice
    ( 4 5 6 )
    ( 7 8 9 )
    ( 1 2 3 )
    Se il puntatore passato alla funzione è NULL la funzione ritorna NULL.
    Non ho proprio iea di come svolgerlo aiuti?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,694
    Quote Originariamente inviata da felx Visualizza il messaggio
    Non ho proprio iea di come svolgerlo aiuti?
    Per affrontare la discussione in modo costruttivo, spiega cosa non ti è chiaro dell'esercizio oppure prendine una parte e inizia a pensare a una possibile soluzione da proporre, eventualmente chiedendo supporto o informazioni su un ambito specifico.

    E' importante contestualizzare perché il forum non è un luogo in cui proporre esercizi e farli risolvere a terzi.

    Per questa e altre indicazioni, consulta il Regolamento di quest'area del forum.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    13
    Quote Originariamente inviata da alka Visualizza il messaggio
    Per affrontare la discussione in modo costruttivo, spiega cosa non ti è chiaro dell'esercizio oppure prendine una parte e inizia a pensare a una possibile soluzione da proporre, eventualmente chiedendo supporto o informazioni su un ambito specifico.

    E' importante contestualizzare perché il forum non è un luogo in cui proporre esercizi e farli risolvere a terzi.

    Per questa e altre indicazioni, consulta il Regolamento di quest'area del forum.

    Ciao!
    Hai perfettamente ragione. un abbozzo di ciò che ho fatto è questo
    codice:
    #include"matrix.h"
    
    struct matrix *rotate_v(const struct matrix *m, int n) {
        size_t r = m->rows, c = m->cols;
        double *ptemp = malloc(sizeof(double)*(m->cols));
        for (size_t i = 0; i < m->cols; i++) {
            ptemp[i] = m->data[m->cols*(n)+i];
    
        }
    }
    la difficoltà è appunto nel rotare la matrice. come faccio a farla rotare??
    ho pensato anche
    di "giocare" con l'indice che riceverei.Mi spiego una volta salvata la riga che andrei a rimpiazzare con il codice scritto li sopra potrei costruire il ciclo
    codice:
    for (size_t o=n-1;n>0;n--)
    (newmatrix+n+1)->data=(m+n)->data;
    in questo modo presumibilmente anderi a rotare tuttavia solo se l'indice è pari... Ora sono consapevole che mi sto complicando la vita, ma non ho altre idee inoltre con "n" negativo come faccio?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    13
    up

  5. #5
    Devi semplicemente copiare la colonna i nella colonna ((i+rotazione) modulo (numero delle colonne)).
    Se deve andare anche per numeri negativi l'operatore % non va bene come modulo quindi devi implementarne uno.

    Tipo:
    codice:
    int modulo(int numero, int modulo) {
    	return ((numero % modulo) + modulo) % modulo;
    }
    
    
    //-----------------------------------
    
     for(size_t i = 0; i < m->rows; i++) {
           for(size_t j = 0; j < m->rows; j++)
    		   *(ptemp + i*m->cols + j) = *(m->data + (modulo(i-n, r))*m->cols + j);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2018 vBulletin Solutions, Inc. All rights reserved.