profnatale.files.wordpress.com€¦  · Web viewCStr (m(i, j)) Next j. Next . i. l = l + 1. Loop...

16
Traslazione matrice di N posti Data una matrice di ordine NxN, realizzare un proggetto Visual Basic che, a richiesta dell'utente, esegua la traslazione della matrice di N posti (N inserito da tastiera), verso destra, verso sinistra, verso l'alto e verso il basso. La schermata iniziale è di questo tipo. E' presente una FLEXGRID, un Command Button per avviare il programma, e altri 4 Command Button per traslare la matrice nelle 4 direzioni. E' inoltre presente una Listbox che è però facoltativa.

Transcript of profnatale.files.wordpress.com€¦  · Web viewCStr (m(i, j)) Next j. Next . i. l = l + 1. Loop...

Page 1: profnatale.files.wordpress.com€¦  · Web viewCStr (m(i, j)) Next j. Next . i. l = l + 1. Loop Until l = k. End Sub. Il lavoro svolto all'interno di questo . Command. Button è

Traslazione matrice di N postiData una matrice di ordine NxN, realizzare un proggetto Visual Basic che, a richiesta dell'utente, esegua la traslazione della matrice di N posti (N inserito da tastiera), verso destra, verso sinistra, verso l'alto e verso il basso.

La schermata iniziale è di questo tipo. E' presente una FLEXGRID, un Command Button per avviare il programma, e altri 4 Command Button per traslare la matrice nelle 4 direzioni. E' inoltre presente una Listbox che è però facoltativa.

Page 2: profnatale.files.wordpress.com€¦  · Web viewCStr (m(i, j)) Next j. Next . i. l = l + 1. Loop Until l = k. End Sub. Il lavoro svolto all'interno di questo . Command. Button è

⇩PRIMO COMMAND BUTTON

Dim m() As IntegerDim v() As IntegerDim n, k, q, l As Integer

Ho dichiarato le variabili che ho utilizzato all'interno di tutto il programma (n,k,q,l), la matrice (m) e il vettore (v). Di questi ultimi non ho specificato la grandezza, poichè dipenderà dalla variabile N. E' necessario che le variabili siano dichiarate fuori dalla procedura, quindi su GENERALE, poichè devono avere validità all'interno di tutto il programma, che è articolato in più Command Button.

Private Sub Command1_Click()n = Val(InputBox("inserisci ordine della matrice"))flexgrid.Rows = nflexgrid.Cols = nflexgrid.FixedRows = 0flexgrid.FixedCols = 0ReDim m(1 To n, 1 To n)ReDim v(1 To n)

Ho inserito la variabile N tramite un inputbox, da cui dipenderà l'ordine della matrice e la grandezza del vettore. Ho dimensionato la Flexgrid, facendo così in modo che il numero di righe e di colonne dipenda dalla variabile N (se N assume valore 8, il numero di righe e colonne sarà 8). Ho specificato che non devono essere presenti righe e colonne di intestazione. Ho infine ridimensionato la matrice (1 to N, 1 to N poichè gli indici sono 2, uno di riga e uno di colonna) e il vettore (1 to N, in quanto l'indice è uno solo).

For i = 1 To nFor j = 1 To nm(i, j) = Val(InputBox("inserisci elemento nella matrice"))flexgrid.Row = i - 1flexgrid.Col = j - 1flexgrid.Text = CStr(m(i, j))Next jNext i

Ho fatto partire i due cicli FOR, riempiendo così la matrice di numeri a mio piacimento; il numero di numeri dipende dalla variabile N. Ho visualizzato la matrice sulla FLEXGRID.

Dok = Val(InputBox("Inserisci numero dei posti da traslare"))If k >= n ThenMsgBox "errore"End IfLoop Until k < n

Page 3: profnatale.files.wordpress.com€¦  · Web viewCStr (m(i, j)) Next j. Next . i. l = l + 1. Loop Until l = k. End Sub. Il lavoro svolto all'interno di questo . Command. Button è

Con la struttura di ripetizione DO - LOOP UNTIL, ho inserito K imponendo un controllo: se infatti K assume un valore maggiore o uguale al valore assunto dalla variabile N, appare un messaggio di errore, e si dovrà reinserire il valore fino a che non venga soddisfatta la condizione.

End Sub

⇩ SECONDO COMMAND BUTTON (TRASLAZIONE VERSO DESTRA)

Private Sub Command2_Click()'VERSO DESTRA

l = 0Doq = 0

Ho inizializzato le variabili L e Q a zero: la variabile Q viene azzerata all'interno della struttura di ripetizione DO - LOOP UNTIL che girerà tante volte fino a che la variabile L non diventerà uguale a K, variabile che corrisponde al numero di traslazioni che viene compiuta nella matrice.

j = nFor i = 1 To nq = q + 1ReDim Preserve v(1 To q)v(q) = m(i, j)List1.AddItem v(q)Next i

Ho fissato il numero della colonna a N (j=N) e ho fatto partire il ciclo FOR in modo che vengano presi tutti gli elementi dell'ultima colonna; tutti questi elementi devono essere salvati poichè dovranno essere reinseriti nella parte più a sinistra della matrice. Per questo conservo questi elementi all'interno del vettore V. Occore ridimensionare il vettore ogni volta che vengono inseriti nuovi elementi ed è necessario includere la clausola PRESERVE per non perdere i dati contenuti nel vettore dopo che sono stati caricati. Visualizzo il vettore nella Listbox (List1).

For j = n - 1 To 1 Step -1For i = 1 To nm(i, j + 1) = m(i, j)Next iNext j

A partire dalla penultima colonna fino ad arrivare alla prima (usando lo STEP -1 poichè si lavora nel senso contrario), si spostano tutti i valori nella colonna subito più a destra.

Page 4: profnatale.files.wordpress.com€¦  · Web viewCStr (m(i, j)) Next j. Next . i. l = l + 1. Loop Until l = k. End Sub. Il lavoro svolto all'interno di questo . Command. Button è

j = 1For i = 1 To nm(i, j) = v(i)Next i

Nella prima colonna vado a reinserire i valori che erano presenti nell'ultima colonna: fisso la colonna a 1 (j=1) e riposiziono gli elementi che avevo spostato nel vettore.

For i = 1 To nFor j = 1 To nflexgrid.Row = i - 1flexgrid.Col = j - 1flexgrid.Text = CStr(m(i, j))Next jNext i

visualizzo la matrice creata nella FLEXGRID.

l = l + 1Loop Until l = k

Il seguente lavoro verrà effettuato in base al valore di K; se a K abbiamo dato valore 2, il ciclo si ripeterà per due volte in modo tale che i posti traslati sono due.

End Sub

Page 10: profnatale.files.wordpress.com€¦  · Web viewCStr (m(i, j)) Next j. Next . i. l = l + 1. Loop Until l = k. End Sub. Il lavoro svolto all'interno di questo . Command. Button è

⇩Private Sub Command3_Click()'VERSO SINISTRA

l = 0Doq = 0

j = 1For i = 1 To nq = q + 1ReDim Preserve v(1 To q)v(q) = m(i, j)List1.AddItem v(q)Next i

For j = 2 To nFor i = 1 To n

Page 11: profnatale.files.wordpress.com€¦  · Web viewCStr (m(i, j)) Next j. Next . i. l = l + 1. Loop Until l = k. End Sub. Il lavoro svolto all'interno di questo . Command. Button è

m(i, j - 1) = m(i, j)Next iNext j

j = nFor i = 1 To nm(i, j) = v(i)Next i

For i = 1 To nFor j = 1 To nflexgrid.Row = i - 1flexgrid.Col = j - 1flexgrid.Text = CStr(m(i, j))Next jNext i

l = l + 1Loop Until l = k

End Sub

Il lavoro svolto all'interno di questo Command Button è lo stesso di quello precendente: le uniche differenze sono che la colonna da spostare all'interno del vettore è la prima, che verrà poi spostata nell'ultima colonna. Inoltre gli elementi vengono spostati verso sinistra e non verso destra.

Page 12: profnatale.files.wordpress.com€¦  · Web viewCStr (m(i, j)) Next j. Next . i. l = l + 1. Loop Until l = k. End Sub. Il lavoro svolto all'interno di questo . Command. Button è

⇩Private Sub Command4_Click()'VERSO L'ALTO

l = 0

Doq = 0

i = 1For j = 1 To nq = q + 1ReDim Preserve v(1 To q)v(q) = m(i, j)List1.AddItem v(q)Next j

Poichè la traslazione è verso l'alto, andremo a copiare nel vettore V tutto il contenuto della prima riga.

For i = 2 To nFor j = 1 To nm(i - 1, j) = m(i, j)Next jNext i

Sposto tutti gli elementi delle colonne in una riga sopra.

i = nFor j = 1 To nm(i, j) = v(j)Next j

Inserisco il contenuto del vettore nell'ultima colonna.

For i = 1 To nFor j = 1 To nflexgrid.Row = i - 1flexgrid.Col = j - 1flexgrid.Text = CStr(m(i, j))Next jNext iVisualizzo tutto sulla FLEXGRID.

Page 13: profnatale.files.wordpress.com€¦  · Web viewCStr (m(i, j)) Next j. Next . i. l = l + 1. Loop Until l = k. End Sub. Il lavoro svolto all'interno di questo . Command. Button è

l = l + 1Loop Until l = k

Ripeto fino a che la variabile L diventi uguale alla variabile K.

End Sub

Private Sub Command5_Click()'VERSO IL BASSO

l = 0Doq = 0

i = nFor j = 1 To nq = q + 1

Page 14: profnatale.files.wordpress.com€¦  · Web viewCStr (m(i, j)) Next j. Next . i. l = l + 1. Loop Until l = k. End Sub. Il lavoro svolto all'interno di questo . Command. Button è

ReDim Preserve v(1 To q)v(q) = m(i, j)List1.AddItem v(q)Next j

For i = n - 1 To 1 Step -1For j = 1 To nm(i + 1, j) = m(i, j)Next jNext i

i = 1For j = 1 To nm(i, j) = v(j)Next j

For i = 1 To nFor j = 1 To nflexgrid.Row = i - 1flexgrid.Col = j - 1flexgrid.Text = CStr(m(i, j))Next jNext i

l = l + 1Loop Until l = kEnd Sub

Il lavoro svolto all'interno di questo Command Button è lo stesso di quello precendente: le uniche differenze sono che la riga da spostare all'interno del vettore è la l'ultima, che verrà poi spostata nella prima riga. Inoltre gli elementi vengono spostati dall'alto verso il basso e non viceversa.