Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    13

    [C++] Matrice con diagonale in ordine crescente

    Salve, oggi stavo provando a fare un programma in c++ che mi dicesse se una matrice letta da input ha la diagonale principale in ordine crescente oppure no.

    codice:
    void diagonale_ord(int x[][3], int n)
    {
        int verif = 0;
        for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
        {
            if (i == j)
            {
                if (x[i][j] > x[i + 1][j + 1])
                    verif = 1;
            }
        }
        if (verif == 0)
            cout << "Diagonale ordinata" << endl;
        else
            cout << "Diagonale non ordinata" << endl;
    }

    So che non va bene perché mi dice che è ordinata anche se solo gli ultimi due elementi sulla diagonale sono in ordine mentre gli altri non lo sono.
    Però non capisco come evitare che vengano valutati solo gli ultimi due elementi
    Ultima modifica di Redix123; 28-05-2014 a 16:15

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao,
    per prima cosa non servono due cicli for, ma ne basta uno solo:

    codice:
    for(int i=0; i<n-1; i++)
    {
        /* l'elemento che ti interessa è x[i][i] */
    }

    Poi per la verifica puoi fare così:

    codice:
    int diagonale_ord(...)
    {
        for(...)
        {
            if(ordinamento_sbagliato)
                return 1;
        }
        return 0;
    }

    In questo modo esci dalla funzione non appena trovi due elementi che non sono in ordine. Se invece tutti gli elementi sono in ordine allora il ciclo for termina senza mai entrare nell'if e la funzione restituisce 0.


  3. #3
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    13
    grazie ora mi funziona alla grande

  4. #4
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Prego!


  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    A parte il fatto del singolo ciclo for, perché dici che non funziona? Con quali valori hai provato? Con quale main hai chiamato la funzione?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    13
    Beh in realtà il problema era che nei due cicli for mettevo i<n e j<n e non fino a n-1, poichè arrivando ad n confronterebbe anche l'ultimo valore con quello successivo che in realtà non c'è

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Veramente hai modificato poco fa il codice nel tuo primo post, infatti è indicato

    (Ultima modifica di Redix123; Oggi a 16:15)

    con <n perché quello che avevi postato e che avevo provato era

    for (int i = 0; i < n - 1; i++)

    ed era corretto ... Non capisco anche se importa poco ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    13
    L'ho modificato per sottolineare il problema ma comunque non sapevo di averlo già risolto mettendo n-1 al posto di n, poiché mi è stato detto che il problema era un altro come infatti ho detto all'inizio:
    Quote Originariamente inviata da Redix123 Visualizza il messaggio

    So che non va bene perché mi dice che è ordinata anche se solo gli ultimi due elementi sulla diagonale sono in ordine mentre gli altri non lo sono.
    Però non capisco come evitare che vengano valutati solo gli ultimi due elementi

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.