JavascriptProva

Visualizzazione post con etichetta matrici. Mostra tutti i post
Visualizzazione post con etichetta matrici. Mostra tutti i post

domenica 29 ottobre 2017

VB.NET: giocando con le matrici per scomporre un numero nelle sue cifre.

Rispolvero il VB.
L'idea è raccogliere i numeri derivati dalla scomposizione di un numero in unità, decine, centinaia eccetera, in una matrice, per poi scriverli comodamente ognuno in una label.
Vediamo...

Per ridimensionare le matrici dinamiche in VB ho costruito questo codice:
If (matrice(0) <> Nothing) Then ReDim Preserve matrice(UBound(matrice) + 1)
che dovrebbe funzionare.
Ora metto dei numeri consecutivi da 1 a 10 in una matrice dinamica che inizia con lunghezza 1 (uBound = 0) e si allunga progressivamente a seconda della quantità di elementi che possiederà alla fine.

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim matrice(0) As Integer

        For n = 1 To 10
            If matrice(0) <> Nothing Then ReDim Preserve matrice(matrice.Length)
            matrice(UBound(matrice)) = n
        Next

        For n = 0 To UBound(matrice)
            Debug.Print(matrice(n))
        Next

    End Sub
End Class
1
2
3
4
5
6
7
8
9
10
Posso cambiare liberamente anche la quantità dei dati da immettere nella matrice:
Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim matrice(0) As Integer

        For n = 1 To 15
            If matrice(0) <> Nothing Then ReDim Preserve matrice(matrice.Length)
            matrice(UBound(matrice)) = n
        Next

        For n = 0 To UBound(matrice)
            Debug.Print(matrice(n))
        Next

    End Sub
End Class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Il codice dice che se la voce 0 non è pari a nulla la matrice va ridimensionata a un indice superiore di 1 all'ultimo indice già presente (e quindi uguale alla lunghezza della matrice), quindi il numero va scritto all'ultimo indice presente.
Molto semplice.

Ora posso scomporre il mio numero.
Ecco il codice che ho elaborato, che mi mette in una matrice le cifre di un numero, dopo aver eliminato l'eventuale virgola:
Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


        Dim numero As Double = 3453653
        Dim stringa As String = numero.ToString.Replace(",", "")
        numero = Convert.ToDouble(stringa)
        Debug.Print(numero)
        Dim quoziente As Integer
        Dim resto As Integer
        Dim matrice(0) As Double

        Do While numero > 0
            quoziente = numero \ 10
            resto = numero Mod 10
            If matrice(0) <> Nothing Then ReDim Preserve matrice(matrice.Length)
            matrice(UBound(matrice)) = resto
            numero = quoziente
        Loop

        For n = UBound(matrice) To 0 Step -1
            Debug.Print(matrice(n))
        Next
    End Sub
End Class
3453653
3
4
5
3
6
5
3
(la matrice va letta al contrario)

martedì 17 maggio 2016

Studio sulle matrici.

Studiando le trasformazioni della Matrix

matrix.setTranslate(0, 200);


E fin qui ci siamo.
Ora è inutile che metta un altro set.
Provo a vedere se riesco a fare prima la traslazione e poi la scalatura:
    matrix.setScale(0.5f, 0.5f);
    matrix.preTranslate(0, 200);
Faccio il calcolo della matrice "a mano":


Mi aspetto dunque un'immagine ridotta della metà e spostata in basso di 100. Vediamo cosa succede...



Sembrerebbe... combinare!
Ora invertiamo:
    matrix.setScale(0.5f, 0.5f);
    matrix.postTranslate(0, 200);




Mi aspetto dunque un'immagine ridotta della metà e spostata di 200.
Verifichiamo...



Credo che sia perfettamente riuscita!

venerdì 6 settembre 2013

Dichiarazione e definizione di una matrice, ripasso.

La dichiarazione di una matrice, con successiva definizione, sposta la matrice. Praticamente ne crea una nuova. La prova è in questo:
Public Class Form1
    Dim matrice() As Integer
    Dim copia() As Integer

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        copia = matrice
        MsgBox(copia Is matrice)
        matrice = New Integer() {1, 2, 3}
        MsgBox(copia Is matrice)

    End Sub
End Class
Dove la seconda MsgBox restituisce False, mentre la prima restituisce True.
Nel creare spazio per la matrice, precedentemente solo dichiarata ma non definita, il programma sposta la matrice in un nuovo spazio, perchè la matrice-spia chiamata copia(), che ho identificato con la matrice, non risulta più identica ad essa.

Viceversa, se la dichiarazione si accompagna a una definizione, specificando anche il numero di elementi di una matrice, il cambiamento dei valori di questi elementi non sposta la matrice, che rimane identica alla sua matrice-spia copia().
Public Class Form1
    Dim matrice(3) As Integer
    Dim copia(3) As Integer

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        copia = matrice
        MsgBox(copia Is matrice)
        matrice(0) = 1
        matrice(1) = 2
        matrice(2) = 3
        matrice(3) = 4
        MsgBox(copia Is matrice)
        MsgBox(matrice(3))
        MsgBox(copia(3))
    End Sub
End Class
ottenendo True, True, 4, 4. Il secondo True significa che la matrice è rimesta allocata nella stessa area di memoria in quanto le sue dimensioni non sono state toccate.