DOMANDA Diagonale principale matrice tridimensionale

Pubblicità

xjokerx

Utente Attivo
Messaggi
161
Reazioni
8
Punteggio
49
Salve a tutti, vi scrivo perché ho difficoltà con il seguente problema assegnatomi dal professore di programmazione:

[Esercizio 1] Scrivere un metodo che prenda in input un parametro formale array A di interi di dimensione k × n × n ed un double w, e restituisca il valore di verit`a true se esiste almeno una sezione di A nella prima dimensione nella quale la media tra il valore minimo ed il valore massimo della diagonale principale sia minore o uguale a w.

il linguaggio è il C++, non riesco a capire bene cosa sta a significare diagonale principale, come faccio a trovarla essendo un array tridimensionale? il k indica le righe, la n indica le colonne e poi la terza dimensione. Qualcuno sa aiutarmi?
 
La tua matrice puoi immaginarla come un palazzo a pianta quadrata di k piani.
Quando nell'esercizio si parla di sezione di A, si riferisce ad un piano n x n appunto.
Quindi se ho capito bene, si riferisce alle diagonali del piano, ovvero di un quadrato bidimensionale n x n.
 
Ok, quindi sostanzialmente dovrei lavorare sulla sezione n x n, ignorando la k? O devo controllare da k=0 a salire dato che dice se esiste almeno una sezione? Scusa, purtroppo ho saltato qualche lezione all’università e nonostante il libro che uso, alcune cose mi sono poco chiare..
 
Come dici tu, il testo cita "almeno una sezione" quindi le devi controllare tutte finché non ne trovi una che soddisfi le richieste, allora ti fermi e ritorni true. In ogni caso k non lo puoi ignorare, una sezione k da controllare la dovresti comunque scegliere.
 
Vedila cosi'.
Hai una matrice matrice[K][N][N] che e' in pratica un vettore lungo K di matrici quadrate di dimensioni N.
Devi quindi fare un ciclo sul primo elemento (da 0 a K-1), perogni ciclo calcoli il minimo e massimo della diagonale principale, quindi la loro media. Se la media e' inferiori o uguale al valore prefissato, esci dal ciclo esterno con valore TRUE.

Non e' molto difficile. Comincia con un ciclo che stampa gli elementi della diagonale principale dato un valore qualsiasi del primo indice K. Quando sei sicuro che stampa i valori giusti, modificalo per ottenere massimo e minimo. Quando hai il risultato, calcola ma media. Adesso devi solo costruire il ciclo piu' esterno.

Puoi scrivere il programma usando due metodi, quello principale (come richiesto dall'esercizio) e uno che dato l'indice per la dimensione K calcola la media del massimo e minimo della diagonale principale, tipo
double MinMaxMedia(int matrice[K][N][N], int indiceK)
dove ovviamente K e N sono definiti come costanti, e indiceK deve essere compreso tra 0 e K-1

A questo punto hai quasi finito, il corpo del metodo richiesto e' semplicemente:


C:
int k;
bool retVal = false;

for(k = 0; k < K; k++)
{
    if (MinMaxMedia(matrice[K][N][N], k) <= w)
    {
        retval = true;
        break;
    }
}

lascio a te a "riempire gli spazi bianchi" :) considera il codice che ho scritto come una semplice traccia.
 
Pubblicità
Pubblicità
Indietro
Top