DOMANDA Diagonale principale matrice tridimensionale

xjokerx

Utente Attivo
161
8
CPU
Intel Core I5-3570k 3.40Ghz + Hyper 412s
Scheda Madre
Asrock Z77 Extreme 4
HDD
WD Black 1 TB 7200rpm
RAM
Kingston 8 Gb 1600
GPU
Sapphire r9 280 3gb
Audio
Integrato
PSU
Corsair CX600M
Case
Cooler Master HAF 912 Plus
OS
Windows 7 ultimate 64-bit
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?
 

IlPunto

Nuovo Utente
9
6
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
161
8
CPU
Intel Core I5-3570k 3.40Ghz + Hyper 412s
Scheda Madre
Asrock Z77 Extreme 4
HDD
WD Black 1 TB 7200rpm
RAM
Kingston 8 Gb 1600
GPU
Sapphire r9 280 3gb
Audio
Integrato
PSU
Corsair CX600M
Case
Cooler Master HAF 912 Plus
OS
Windows 7 ultimate 64-bit
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

Utente Attivo
1,173
370
CPU
13600K
Dissipatore
Thermalright Peerless Assassin 120 SE
Scheda Madre
MSI PRO Z790-P WIFI ATX
HDD
WD Black 1TB SN850X
RAM
Kingston Fury Renegade DDR5 Silver 32GB 6400MT/s CL32
GPU
Gigabyte RTX 4070 Ti GAMING OC 12G
Monitor
BenQ MOBIUZ EX3415R
PSU
Thermaltake Toughpower GF3 750W
Case
NZXT H5 Flow
Periferiche
Mouse: Logitech G403 - Tastiera: Durgod Taurus K320
Net
FTTC 100 mega
OS
Windows 11 Home 64 bit
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
Reazioni: xjokerx

Andretti60

Utente Èlite
6,440
5,091
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
Reazioni: xjokerx

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!