[C++] Esercizio

Bastion1
Salve a tutti! Ho ricevuto per compito di creare un programma che faccia la cosa seguente:
Il programma chiede di dargli un numero ed esso crerà una tabella... faccio un esempio che mi è anche più facile da spiegare: se ad esempio scrivo nel programma 5 esso crerà una tabella di 5 righe e 5 colonne e in ogni riga ci saranno 5 numeri iniziando da 1 fino a 25. Se invece scrivessi 6 allora esso crerà una tabella di 6 righe e 6 colonne e in ogni riga ci saranno 6 numeri iniziando da 1 fino a 36.
In generale i numeri si dispongono partendo da 1 posto a sinistra in basso fino a $ (n)^(2) $ .
Esempio con n=3 :

$ {: ( 7 , 8 , 9 ),( 4 , 5 , 6 ),( 1 , 2 , 3 ) :} $

Io non so da dove iniziare perché di programmazione non ne capisco niente e mi interessa poco sinceramente siccome studio ingegneria industriale. Lo so che prima o poi dovrò imparare a farli sti esercizi se voglio passare l'esame ma lo chiedo a voi questa volta perché il compito mi porta punti.

Molte grazie a chi mi vorrà aiutare!

Risposte
vict85
Non ti scrivo il codice, ma più che altro come ragionarci sopra...

Se partissi dal punto in alto a sinistra sarebbe ovviamente più semplice, qui in pratica hai invertito le righe di quello in cui parte in alto a sinistra.

Se tu partissi dal punto in alto a sinistra che numero ci sarebbe nella posizione \(\displaystyle (i,j) \)? Devi strare solo attento che nel c++ gli array partono da \(\displaystyle 0 \).

Nel punto \(\displaystyle (0,j) \), come è comprensibile ci sarebbe il numero \(\displaystyle j+1\), andando alla riga \(\displaystyle 1 \) avresti in \(\displaystyle (1,j) \) il numero \(\displaystyle n+j+1\), nella \(\displaystyle 2 \) il numero \(\displaystyle 2n+j+1 \) e così via. Quindi in \(\displaystyle (i.j) \) avresti il numero \(\displaystyle i\times n + j + 1 \).

Nel tuo problema però tu parti in basso a sinistra e non in alto a sinistra. Ma di fatto hai solo scambiato la riga \(\displaystyle i \) con la riga \(\displaystyle n-i-1 \). Non ti resta quindi di fare le dovute modifiche a ciò che ti ho scritto sopra.


P.S: Nella pratica la costruzione di una matrice per fare una cosa del genere sarebbe poco pratica, soprattutto per numeri molto grandi: l'allocazione della memoria e il suo accesso successivo sarebbe probabilmente più lento di calcolarsi volta per volta il numero collegato al punto \(\displaystyle (i,j) \). Soprattutto se successivamente non si vorrà accedere alla matrice in modo "sequenziale". Anche perché spesso cose di questo tipo sono usate per descrivere il modo in cui una matrice è memorizzata all'interno di un array monodimensionale. In questo caso salvare questa matrice eliminerebbe i vantaggi che ci sono nell'usare un array monodimensionale.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.