Ciao a tutti,
dovrei scrivere un programma che dopo avermi creato una matrice, la gira, cioè mi inverte la posizione delle righe e delle colonne....
se qualcuno me lo riuscisse a fare lo ringrazierei tantissimo....
Grazie a tutti.
Ciao ciao
Ciao a tutti,
dovrei scrivere un programma che dopo avermi creato una matrice, la gira, cioè mi inverte la posizione delle righe e delle colonne....
se qualcuno me lo riuscisse a fare lo ringrazierei tantissimo....
Grazie a tutti.
Ciao ciao
Vuoi dire la matrice inversa?
In realtà non so se la sintassi sia giusta, ma dovresti risolvere il
tuo problema con due cicli for annidati:
For i = 0 to n do
For j = 0 to m do
inversa[i, j] = matrice[j, i]
dove n è il numero di righe di "matrice" e m quello di colonne.
Ovviamente "inversa" avrà m righe ed n colonne!
Dimmi se va.
Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
Ma il calabrone non lo sa e perciò continua a volare. (Igor Sikorsky)
Chi beve solo acqua ha un segreto da nascondere (Charles Baudelaire)
Questo è l'algoritmo nel caso di una matrice quadrata, che calcola la trasposta sopra la matrice stessa:
Nota che il secondo for, quello interno, ha come valore iniziale, il valore corrente dell'indice del for esterno: infatti si deve percorrere tutta la matrice SOLO nella metà al di sopra (o al di sotto) della diagonale principale, in quanto, quelli opposti sono simmetrici e vengono, appunto, scambiati. Se la si percorre su tutta la matrice si effettuano 2 scambi per ciascun valore, ritornando ad avere la matrice di partenza (che bello, eh? :gren: )codice:for (i=0; i<ORDINE; i++) { for(j=i; j<ORDINE; j++) { temp = matrice[i][j]; matrice[i][j] = matrice[j][i]; matrice[j][i] = temp; } }
Ovviamente, per poter calcolare la trasposta di una matrice è necessario che questa sia QUADRATA, quindi il numero di righe deve esere uguale al numero di colonne (identificato, nel codice, dalla variabile ORDINE).
PS: la matrice inversa è una cosa diversa e, sinceramente, non ricordo come si calcola, ma ricordo perfettamente che calcolarla è computazionalmente gravoso...
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Originariamente inviato da LeleFT
Nota che il secondo for, quello interno, ha come valore iniziale, il valore corrente dell'indice del for esterno: infatti si deve percorrere tutta la matrice SOLO nella metà al di sopra (o al di sotto) della diagonale principale, in quanto, quelli opposti sono simmetrici e vengono, appunto, scambiati.
TOGOOOO
Live fast. Troll hard.
Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
Team Lead @Gameloft Barcelona
Originariamente inviato da infinitejustice
TOGOOOO
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Ciao,
ma il programma intero come verrebbe???
Come si può leggere una matrice per colonne, leggendo una colonna in un senso e una nell'altro?
Nnsono molto pratico....
Grazie a tutti!!!
Ciao ciao
Cosa vuol dire leggere una colonna in un senso e una in un altro?
Comunque, questo piccolo programma legge per colonne dall'utente una matrice 3x3, la stampa, ne calcola la trasposta e la stampa:
Per leggere una matrice per righe, basta invertire gl indici nelle righe in grassetto.codice:#include <stdio.h> static int ORDINE = 3; int main() { int matrice[ORDINE][ORDINE]; int i, j, temp; /* Leggo i valori della matrice, colonna per colonna */ for(i=0; i<ORDINE; i++) { for (j=0; j<ORDINE; j++) { printf("Introdurre il valore di indice (%d, %d): ", j, i); scanf("%d", &matrice[j][i]); printf("\n"); } } /* Stampo la matrice a video */ printf("Ecco la matrice da te inserita:\n\n"); for (i=0; i<ORDINE; i++) { printf("RIGA %d: ", i); for(j=0; j<ORDINE; j++) { printf("%d ", matrice[i][j]); } printf("\n"); } /* Traspongo la matrice */ for (i=0; i<ORDINE; i++) { for(j=i; j<ORDINE; j++) { temp = matrice[i][j]; matrice[i][j] = matrice[j][i]; matrice[j][i] = temp; } } /* Stampo la nuova matrice (trasposta) a video */ printf("\n\n La matrice trasposta:\n\n"); for (i=0; i<ORDINE; i++) { printf("RIGA %d: ", i); for(j=0; j<ORDINE; j++) { printf("%d ", matrice[i][j]); } printf("\n"); } return 0; }
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Ciao e grazie!!!
Quando provo ad eseguirlo mi esce....senza darmi il risultato...
Ciao ciao