Problema diagonale principale matrice tridimensionale

  • Nuovo server! Potrebbero esserci ancora piccoli problemi legati alle disponibilità dei servizi del Forum. Scopri di più

xjokerx

Utente Attivo
111
2
Hardware Utente
CPU
Intel Core I5-3570k 3.40Ghz + Hyper 412s
Scheda Madre
Asrock Z77 Extreme 4
Hard Disk
WD Black 1 TB 7200rpm
RAM
Kingston 8 Gb 1600
Scheda Video
Sapphire r9 280 3gb
Scheda Audio
Integrato
Alimentatore
Corsair CX600M
Case
Cooler Master HAF 912 Plus
Sistema Operativo
Windows 7 ultimate 64-bit
#1
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?
 
#2
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.
 

xjokerx

Utente Attivo
111
2
Hardware Utente
CPU
Intel Core I5-3570k 3.40Ghz + Hyper 412s
Scheda Madre
Asrock Z77 Extreme 4
Hard Disk
WD Black 1 TB 7200rpm
RAM
Kingston 8 Gb 1600
Scheda Video
Sapphire r9 280 3gb
Scheda Audio
Integrato
Alimentatore
Corsair CX600M
Case
Cooler Master HAF 912 Plus
Sistema Operativo
Windows 7 ultimate 64-bit
#3
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..
 

alemian95

Nuovo Utente
54
6
Hardware Utente
CPU
Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
Hard Disk
HGST HTS541010A9E680 - 1000 GB
RAM
8GB SK Hynix 1600MHz
Scheda Video
NVIDIA GeForce GTX 950M
Scheda Audio
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
Sistema Operativo
Windows 10 Home 64 bit
#4
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.
 
Mi Piace: xjokerx

Andretti60

Utente Attivo
2,725
1,786
Hardware Utente
#5
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.
 
Mi Piace: xjokerx

Discussioni Simili