Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: matrice per diagonali

  1. #1

    matrice per diagonali

    salve ragazzi vorrei scansionare una matrcie nxn per diagonali
    come fare???
    grazie anticipatamente per l'aiuto
    ps: martedì ho esame prestooooooo
    Il computer è spettacolarmente veloce, accurato e stupido.....L'uomo è spettacolarmente lento, inaccurato e intelligente.Insieme formano una potenza oltre l'immaginazione

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: matrice per diagonali

    Originariamente inviato da mattodijava
    salve ragazzi vorrei scansionare una matrcie nxn per diagonali
    come fare???
    Innanzitutto dovresti specificare e precisare cosa intendi! Poter "enumerare" i valori nelle diagonali? Quali diagonali? Tutte? In quale senso?

    Ma poi, comunque, quale è la difficoltà?? Nel senso che ... basta solo ragionare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    risposta

    dall'alto a sinistra verso il basso a destra....come si fa ??????
    ciò ragionato ma nn so come fare anche perchè è una matrice qudrata di stringhe e devo fare la concatenazione...
    ecco il verso della scansione;
    /
    /
    /
    /
    su per giù è questo il verso della scansione della matrice
    Il computer è spettacolarmente veloce, accurato e stupido.....L'uomo è spettacolarmente lento, inaccurato e intelligente.Insieme formano una potenza oltre l'immaginazione

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: risposta

    Originariamente inviato da mattodijava
    dall'alto a sinistra verso il basso a destra....come si fa ??????
    ciò ragionato ma nn so come fare anche perchè è una matrice qudrata di stringhe e devo fare la concatenazione...
    Quindi hai un String[][]. La dimensione della matrice la puoi facilmente determinare. Il numero di righe dalla lunghezza dell'array principale e il numero di colonne (supponengo e/o garantendo che sia davvero "rettangolare") dalla lunghezza della prima riga ovvero il primo sotto array.

    Fatto questo .... beh, basta solo ragionare sulla locazione delle celle! Prendiamo una matrice 3x4 in cui ho messo delle lettere giusto solo per esempio:
    codice:
    A B C D
    E F G H
    I L M N
    Descrivi la sequenza che vuoi ottenere!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    risposta

    quello che voglio ottenere è
    a
    eb
    ifc
    lgd
    mh
    n
    e devo fare la concatenazione di questi char e ritornare la stringa(questo lo so fare)
    cmq la matrice deve essere quadrata
    Il computer è spettacolarmente veloce, accurato e stupido.....L'uomo è spettacolarmente lento, inaccurato e intelligente.Insieme formano una potenza oltre l'immaginazione

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: risposta

    Originariamente inviato da mattodijava
    quello che voglio ottenere è
    a
    eb
    ifc
    lgd
    mh
    n
    e devo fare la concatenazione di questi char e ritornare la stringa(questo lo so fare)
    cmq la matrice deve essere quadrata
    Ok ... io facevo solo un esempio generale.

    Mettiamola quadrata:
    A B C
    D E F
    G H I

    Tu vuoi ottenere A D B G E C H F I. In pratica in diagonale verso alto/destra.
    Le diagonali partono dal lato A D G e poi dall'altro lato H I.

    Prendiamo l'inizio con A D G. Cosa ti viene in mente? Di fare un ciclo for per scansionare le righe. Per ogni riga parti dalla prima colonna e con un altro ciclo interno, ad ogni iterazione aumenti la colonna e diminuisci la riga .... finché possibile ovviamente (c'è da fare un test).
    Cosa molto simile per l'altro lato.

    Anzi ... si potrebbe trattare i due lati allo stesso modo. La riga fisica può andare da 0 a 2 (nel caso sopra) ma tu potresti farla andare fino a 4. Ovviamente non ci accedi subito ... se vedi che la riga supera il massimo, la differenza la sommi sulla colonna.
    Se arrivi alla riga 3 (che non esiste), in realtà devi partire dalla riga 2 e dalla colonna 1 (la seconda) cioè 3-2=1.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    ok perfetto ma in pratica?
    io già ero arrivato a questa soluzione
    for (int i=0; i<M.length; i++){
    for (int j=0; j<=i; j++){
    System.out.print(M[i-j][j]+" ");
    questo mi stampa fino alla più grande diagonale(quella centrale)
    poi dovrei fare altri due for per scansionare la matrice nell'altra parte
    ma come??
    non ci sto riuscendo
    tu come pensi si possa fare?
    Il computer è spettacolarmente veloce, accurato e stupido.....L'uomo è spettacolarmente lento, inaccurato e intelligente.Insieme formano una potenza oltre l'immaginazione

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    codice:
    public class Prova {
        public static void main(String[] args) {
            String[][] mat1 = {
                { "A", "B", "C" },
                { "D", "E", "F" },
                { "G", "H", "I" },
            };
    
            String[][] mat2 = {
                { "A", "B", "C", "D", "E" },
                { "F", "G", "H", "I", "L" },
                { "M", "N", "O", "P", "Q" },
            };
    
            stampaPerDiagonali(mat1);
            stampaPerDiagonali(mat2);
        }
    
        public static void stampaPerDiagonali(String[][] mat) {
            int numRighe = mat.length;
            int numColonne = mat[0].length;
    
            int righeTeoriche = numRighe + numColonne - 1;
    
            for (int rt = 0; rt < righeTeoriche; rt++) {
                int r, c;
    
                if (rt < numRighe) {
                    r = rt;
                    c = 0;
                } else {
                    r = numRighe - 1;
                    c = rt - numRighe + 1;
                }
    
                while (r >= 0 && c < numColonne) {
                    System.out.print(mat[r][c] + " ");
                    r--;
                    c++;
                }
            }
    
            System.out.println();
        }
    }
    E come vedi funziona per qualunque tipo di matrice .... quadrata o rettangolare che sia!


    P.S. E ho impiegato una manciata di minuti a scriverlo e provarlo ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9

    risposta

    grazieeeeeeeeeeeeeeeeeeeeeeeeeeee
    milleeeeeeeeeeeeeeeeeeeeeeeeeeeee
    Il computer è spettacolarmente veloce, accurato e stupido.....L'uomo è spettacolarmente lento, inaccurato e intelligente.Insieme formano una potenza oltre l'immaginazione

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: risposta

    Originariamente inviato da mattodijava
    grazieeeeeeeeeeeeeeeeeeeeeeeeeeee
    E certo .... te l'ho scritto io. Ora che hai visto il codice dimmi: era così difficile??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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