Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    14

    [C] matrici righe e colonne invertite

    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

  2. #2
    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)

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Questo è l'algoritmo nel caso di una matrice quadrata, che calcola la trasposta sopra la matrice stessa:
    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;
       }
    }
    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: )

    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

  4. #4
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    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

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    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

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    14
    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

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    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:
    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;
    }
    Per leggere una matrice per righe, basta invertire gl indici nelle righe in grassetto.

    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    14
    Ciao e grazie!!!

    Quando provo ad eseguirlo mi esce....senza darmi il risultato...

    Ciao ciao

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 © 2024 vBulletin Solutions, Inc. All rights reserved.