PDA

Visualizza la versione completa : [C] Invertire elementi in una matrice


francesco1985
13-04-2012, 23:36
ciao a tutti :) ho un problema,da premettere che sto muovendo i primi passi nella programmazione C, nn riesco a cambiare gli indici di un array. mi spiego

int ruota_pezzo(int array[3][3]){
int in ,jn;
int pezzo1[3][3];//creo un pezzo alternativo
for (in=0;in<3;in++){ //ciclo per le righe
for (jn=0;jn<3;jn++) //ciclo per le colonne
pezzo1[in][jn]=array[3][3]; // e lo rendo uguale al pezzo originale
}
for (jn=0;jn<3;jn++){ //ciclo con indici invertiti
for (in=0;in<3;in++)
array[3][3]=pezzo1[jn][in]; // e lo rendo uguale al pezzo originale
}
return array[jn][in];
}
voglio creare una function ke dato un array con un particolare ordine, mi dia un altro array con indici invertiti, proprio come se l array ruotasse.
posso postare anke il main se serve. grazie in anticipo a tutti

oregon
13-04-2012, 23:40
Non so cosa tu voglia dire con "cambiare indici" ma sicuramente quella funzione sbagliata.

Tanto per cominciare restituisce un elemento dell'array ... a che serve?

In secondo luogo, esegui dei cicli utilizzando sempre lo stesso elemento [3][3] dell'array ... a che serve?

P.S. Usa i tag CODE quando posti del codice.

francesco1985
14-04-2012, 12:48
hai presente il gioko del tetris? voglio fare una funzione ke dato un array (ke sarebbe il pezzo da girare)mi inverta gli indici in modo tale ke il PEZZO giri. L'array 3 3 il pezzo generico ke fa da parametro alla funzione (almeno quello ke voglio fare), per quanto riguarda il return, qui sono in alto mare, la funzione dovrebbe restituirmi l array girato.

francesco1985
16-04-2012, 12:48
void ruota_pezzo(){

int pezzo1[dimpezzo][dimpezzo];//creo un pezzo alternativo
for (indice_pezzoi=0;indice_pezzoi<dimpezzo;indice_pezzoi++){
for (indice_pezzoj=0;indice_pezzoj<dimpezzo;indice_pezzoj++)
pezzo1[indice_pezzoi][indice_pezzoj]=pezzo.array[indice_pezzoi][indice_pezzoj]; // e lo rendo uguale al pezzo originale
}
for (indice_pezzoi=0;indice_pezzoi<dimpezzo;indice_pezzoi++){
for (indice_pezzoj=0;indice_pezzoj<dimpezzo;indice_pezzoj++)
pezzo.array[indice_pezzoi][indice_pezzoj]=pezzo1[indice_pezzoj][indice_pezzoi];} // poi lo sostituisco con un pezzo i cui indici sono invertiti in questo modo ottengo


sono riuscito da solo a correggere il mio codice, ora per ho un altro problema. Quando attivo la function il pezzo gira, poi per quando la riattivo il pezzo mi ritorna nella posizione iniziale, invece voglio ke il pezzo faccia un ulteriore giro. come posso fare? un altra cosa ankora: il pezzo mi gira in senso orario, e se volessi fallo girare in senso antiorario? grazie in anticipo di tutto l aiuto ke potete darmi

Caiodark
16-04-2012, 13:17
Francesco, la tua funzione errata. Non stai ruotando la matrice, hai solo invertito le colonne con le righe. Se le inverti di nuovo ritorni alla matrice originale.

francesco1985
16-04-2012, 13:30
allora sono proprio in alto mare, xke nn capisco come fare a far ruotare la matrice

oregon
16-04-2012, 13:33
Originariamente inviato da francesco1985
allora sono proprio in alto mare, xke nn capisco come fare a far ruotare la matrice

Scusa, ma quali sono esattamente le operazioni che vuoi fare?

Ad esempio, una matrice 3 x 3 del tipo

1 2 3
4 5 6
7 8 9

come dovrebbe diventare?

torn24
16-04-2012, 13:37
Non capisco cosa intendi per far ruotare la matrice ,se puoi postare un esempio!
esempio:
matrice[3][3]

1 2 3 valori matrice[0][0] [0][1] [0][2]

4 5 6 valori matrice[1][0] [1][1] [1][2]

7 8 9 valori matrice[2][0] [2][1] [2][2]

come dovrebbero ruotare "diventare" ???

francesco1985
16-04-2012, 13:38
deve girare diventando cosi:

741
852
963

e se rikiamo ankora la function diventa:

987
654
321

rsdpzed
16-04-2012, 13:43
carino come algoritmo da implementare, ti do un aiuto. 5 il perno e tutt'intorno un "cercio" che gira in senso orario di due posizioni :)

Loading