Restanti Homework

Applicazione per il calcolo della media di tutti i numeri compresi tra due interi

Questa applicazione, sviluppata sia in C# che in VB.net, prevede l’inserimento in input di due interi, uno massimo ed uno minimo, e il calcolo della media di tutti gli interi compresi tra questi due, estremi inclusi. Vengono inoltre visualizzati separati gli interi pari e gli interi dispari generati. Il calcolo della media avviene attraverso l’algoritmo di Knuth.

Soluzione in C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CalcolaMediaC
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        int PrimInt;
        int UltInt;
        int conta;
        double media;

        private void Calcola_Click(object sender, EventArgs e)
        {
            media = 0;
            conta = 0;
            PrimInt = int.Parse(this.NumPri.Text);
            UltInt = int.Parse(this.NumUlt.Text);
            if (PrimInt > UltInt)
            {
                MessageBox.Show("Inserimento non valido", "Riprova");
            }
            else
            {
                String testoP = "";
                String testoD = "";
                while (PrimInt <= UltInt)
                {
                    conta += 1;
                    media = ((conta - 1) * media + PrimInt) / conta;
                    if (PrimInt % 2 == 0)
                    {
                        testoP = String.Concat(testoP, PrimInt.ToString(), "     ");
                    }
                    else
                    {
                        testoD = String.Concat(testoD, PrimInt.ToString(), "     ");
                    }

                    if (conta % 8 == 0)
                    {
                        testoP = testoP + "\n";
                        testoD = testoD + "\n";
                    }

                    PrimInt += 1;
                }
                LabNP.Text = testoP;
                LabND.Text = testoD;
                LabMedia.Text = media.ToString();
            }
        }
    }
}

Link all’applicazione in C#.

Soluzione in VB.net

Public Class Form1
    Dim PrimInt As Integer
    Dim UltInt As Integer
    Dim Conta As Integer
    Dim Media As Double


    Private Sub Inserimento(sender As Object, e As EventArgs) Handles Calcola.Click
        Media = 0
        Conta = 0
        PrimInt = Integer.Parse(Me.NumPri.Text)
        UltInt = Integer.Parse(Me.NumUlt.Text)
        If PrimInt > UltInt Then
            MessageBox.Show("Inserimento non valido", "Riprova")

        Else
            Dim testoP As String = ""
            Dim testoD As String = ""
            While PrimInt <= UltInt
                Conta += 1
                Media = ((Conta - 1) * Media + PrimInt) / Conta
                If PrimInt Mod 2 = 0 Then
                    testoP = testoP & String.Format("{0, -12}", PrimInt.ToString)
                Else
                    testoD = testoD & String.Format("{0, -12}", PrimInt.ToString)
                End If
                If Conta Mod 8 = 0 Then
                    testoP = testoP & vbCrLf
                    testoD = testoD & vbCrLf
                End If

                PrimInt += 1
            End While
            LabNP.Text = testoP
            LabND.Text = testoD
            LabMedia.Text = Media.ToString
        End If
    End Sub
    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
        Select Case keyData
            Case Keys.Enter
                Calcola.PerformClick()
        End Select
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

End Class

Link all’applicazione in VB.net.

Applicazione per il calcolo della media e della varianza di tutti i numeri interi compresi tra due interi

Soluzione in C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CalcolaVarianzaC
{
    public partial class Form1 : Form
    {
        int PrimInt;
        int UltInt;
        double MediaPar;
        double MediaDis;
        double VarianzaPar;
        double VarianzaDis;
        double Cov;

        public Form1()
        {
            InitializeComponent();
        }

        private void Calcola_Click(object sender, EventArgs e)
        {
            MediaPar = 0;
            MediaDis = 0;
            VarianzaPar = 0;
            VarianzaDis = 0;
            PrimInt = int.Parse(this.NumPri.Text);
            UltInt = int.Parse(this.NumUlt.Text);
            var InteriPar = new List<int>();
            var InteriDis = new List<int>();




            if (PrimInt > UltInt)
                MessageBox.Show("Inserimento non valido", "Riprova");
            else
            {
                for (int counter = PrimInt; counter <= UltInt; counter++)
                    if (counter % 2 == 0)
                        InteriPar.Add(counter);
                    else
                        InteriDis.Add(counter);
                string testoP = StringTesto(InteriPar);
                string testoD = StringTesto(InteriDis);
                MediaPar = CalcolaMedia(InteriPar);
                MediaDis = CalcolaMedia(InteriDis);
                VarianzaPar = CalcolaVar(InteriPar);
                VarianzaDis = CalcolaVar(InteriDis);

                if (InteriDis.Count == InteriPar.Count)
                {
                    Cov = CalcolaCov(InteriPar, InteriDis);
                    LabCov.Text = (Math.Round(Cov / InteriPar.Count, 2)).ToString();
                }
                else
                    LabCov.Text = "Impossibile";


                LabNP.Text = testoP;
                LabND.Text = testoD;
                LabMedia.Text = MediaPar.ToString();
                LabMedia2.Text = MediaDis.ToString();
                LabVar.Text = (Math.Round(VarianzaPar / (double)InteriPar.Count, 2)).ToString();
                LabVar2.Text = (Math.Round(VarianzaDis / (double)InteriDis.Count, 2)).ToString();
            }
        }

        public string StringTesto(List<int> Interi)
        {
            int Filler;
            int Conta = 0;
            string Testo = "";
            while (Conta < Interi.Count())
            {
                if (Interi[Conta] < 10)
                    Filler = 12;
                else if (Interi[Conta] < 100)
                    Filler = 11;
                else
                    Filler = 10;
                Testo = Testo + string.Format("{0, -" + Filler.ToString() + "}", Interi[Conta].ToString());
                if ((Conta + 1) % 4 == 0)
                    Testo = Testo + Environment.NewLine;
                Conta += 1;
            }

            return Testo;
        }

        public double CalcolaMedia(List<int> Interi)
        {
            int Conta = 0;
            double Media = 0;
            double MediaPred = 0;
            while (Conta < Interi.Count())
            {
                MediaPred = Media;
                Media = ((Conta) * Media + Interi[Conta]) / (Conta + 1);
                Conta += 1;
            }
            return Media;
        }

        public double CalcolaVar(List<int> Interi)
        {
            double Var = 0;
            int Conta = 0;
            double Media = 0;
            double MediaPred = 0;
            while (Conta < Interi.Count())
            {
                MediaPred = Media;
                Media = ((Conta) * Media + Interi[Conta]) / (Conta + 1);
                Var = Var + (Interi[Conta] - Media) * (Interi[Conta] - MediaPred);
                Conta += 1;
            }
            return Var;
        }

        public double CalcolaCov(List<int> Int1, List<int> Int2)
        {
            double Cov = 0;
            int Conta = 0;
            double Media1 = 0;
            double Media2 = 0;
            double MediaPred1 = 0;
            double MediaPred2 = 0;
            while (Conta < Int1.Count())
            {
                MediaPred1 = Media1;
                Media1 = ((Conta) * Media1 + Int1[Conta]) / (Conta + 1);

                MediaPred2 = Media2;
                Media2 = ((Conta) * Media2 + Int2[Conta]) / (Conta + 1);

                Cov = Cov + ((Int1[Conta] - Media1) * (Int2[Conta] - MediaPred2));

                Conta += 1;
            }
            return Cov;
        }

        private void label6_Click(object sender, EventArgs e)
        {

        }

        private void label9_Click(object sender, EventArgs e)
        {

        }
    }
}


Link all’applicazione in C#.

Soluzione in VB.net

Public Class Form1
    Dim PrimInt As Integer
    Dim UltInt As Integer
    Dim Conta As Integer
    Dim Media As Double
    Dim MediaPred As Double
    Dim Varianza As Double
    Dim Filler As Integer


    Private Sub Inserimento(sender As Object, e As EventArgs) Handles Calcola.Click
        Media = 0
        MediaPred = 0
        Conta = 0
        Varianza = 0
        PrimInt = Integer.Parse(Me.NumPri.Text)
        UltInt = Integer.Parse(Me.NumUlt.Text)
        Dim Interi = New List(Of Integer)




        If PrimInt > UltInt Then
            MessageBox.Show("Inserimento non valido", "Riprova")

        Else
            For counter As Integer = PrimInt To UltInt
                Interi.Add(counter)
            Next
            Dim testoP As String = ""
            Dim testoD As String = ""
            While Conta < Interi.Count()
                Conta += 1
                MediaPred = Media
                Media = ((Conta - 1) * Media + Interi(Conta - 1)) / Conta
                If Interi(Conta - 1) < 10 Then
                    Filler = 12
                ElseIf Interi(Conta - 1) < 100 Then
                    Filler = 11
                Else
                    Filler = 10
                End If
                If Interi(Conta - 1) Mod 2 = 0 Then

                    testoP = testoP & String.Format("{0, -" + Filler.ToString + "}", Interi(Conta - 1).ToString)
                Else
                    testoD = testoD & String.Format("{0, -" + Filler.ToString + "}", Interi(Conta - 1).ToString)
                End If
                If Conta Mod 8 = 0 Then
                    testoP = testoP & vbCrLf
                    testoD = testoD & vbCrLf
                End If
                Varianza = Varianza + (Interi(Conta - 1) - Media) * (Interi(Conta - 1) - MediaPred)
            End While
            LabNP.Text = testoP
            LabND.Text = testoD
            LabMedia.Text = Media.ToString
            LabVar.Text = (Math.Round(Varianza / Conta, 2)).ToString

        End If
    End Sub

    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
        Select Case keyData
            Case Keys.Enter
                Calcola.PerformClick()
        End Select
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

End Class

Link all’applicazione in VB.net.

Applicazione per il calcolo della media e della varianza rispettivamente di tutti i numeri pari e di tutti i dispari interi compresi tra due interi e della covarianza tra le due liste

Soluzione in C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CalcolaListeC
{
        public partial class Form1 : Form
    {
        int PrimInt;
        int UltInt;
        double MediaPar;
        double MediaDis;
        double VarianzaPar;
        double VarianzaDis;
        double Cov;

        public Form1()
        {
            InitializeComponent();
        }

        private void Calcola_Click(object sender, EventArgs e)
        {
            MediaPar = 0;
            MediaDis = 0;
            VarianzaPar = 0;
            VarianzaDis = 0;
            PrimInt = int.Parse(this.NumPri.Text);
            UltInt = int.Parse(this.NumUlt.Text);
            var InteriPar = new List<int>();
            var InteriDis = new List<int>();




            if (PrimInt > UltInt)
                MessageBox.Show("Inserimento non valido", "Riprova");
            else
            {
                for (int counter = PrimInt; counter <= UltInt; counter++)
                    if (counter % 2 == 0)
                        InteriPar.Add(counter);
                    else
                        InteriDis.Add(counter);
                string testoP = StringTesto(InteriPar);
                string testoD = StringTesto(InteriDis);
                MeidaPar = CalcolaMedia(InteriPar);
                MeidaDis = CalcolaMedia(InteriDis);
                VarianzaPar = CalcolaVarianzaC(InterPar);
                VarianzaDis = CalcolaVarianzaC(InterDis);

                if (InteriDis.Count == InteriPar.Count)
                {
                    Cov = CalcolaCov(InteriPar, InteriDis);
                    LabCov.Text = (Math.Round(Cov/InteriPar.Count,2)).ToString
                }
                else
                    LabCov.Text = "Impossibile";


                LabNP.Text = testoP;
                LabND.Text = testoD;
                LabMedia.Text = MediaPar.ToString();
                LabMedia2.Text = MediaDis.ToString();
                LabVar.Text = (Math.Round(VarianzaPar / (double)InteriPar.Count, 2)).ToString();
                LabVar2.Text = (Math.Round(VarianzaDis / (double)InteriDis.Count, 2)).ToString();
            }
        }

        public string StringTesto(List<int> Interi)
        {
            int Filler;
            int Conta = 0;
            string Testo = "";
            while (Conta < Interi.Count())
            {
                if (Interi[Conta] < 10)
                    Filler = 12;
                else if (Interi[Conta] < 100)
                    Filler = 11;
                else
                    Filler = 10;
                Testo = Testo + string.Format("{0, -" + Filler.ToString() + "}", Interi[Conta].ToString());
                if ((Conta + 1) % 4 == 0)
                    Testo = Testo + Environment.NewLine;
                Conta += 1;
            }

            return Testo;
        }

        public double CalcolaMedia(List<int> Interi)
        {
            int Conta = 0;
            double Media = 0;
            double MediaPred = 0;
            while (Conta < Interi.Count())
            {
                MediaPred = Media;
                Media = ((Conta) * Media + Interi[Conta]) / (Conta + 1);
                Conta += 1;
            }
            return Media;
        }

        public double CalcolaVar(List<int> Interi)
        {
            double Var = 0;
            int Conta = 0;
            double Media = 0;
            double MediaPred = 0;
            while (Conta < Interi.Count())
            {
                MediaPred = Media;
                Media = ((Conta) * Media + Interi[Conta]) / (Conta + 1);
                Var = Var + (Interi[Conta] - Media) * (Interi[Conta] - MediaPred);
                Conta += 1;
            }
            return Var;
        }

        public double CalcolaCov(List<int> Int1, List<int> Int2)
        {
            double Cov = 0;
            int Conta = 0;
            double Media1 = 0;
            double Media2 = 0;
            double MediaPred1 = 0;
            double MediaPred2 = 0;
            while (Conta < Int1.Count())
            {
                MediaPred1 = Media1;
                Media1 = ((Conta) * Media1 + Int1[Conta]) / (Conta + 1);

                MediaPred2 = Media2;
                Media2 = ((Conta) * Media2 + Int2[Conta]) / (Conta + 1);

                Cov = Cov + ((Int1[Conta] - Media1) * (Int2[Conta] - MediaPred2));

                Conta += 1;
            }
            return Cov;
        }
                    private void label6_Click(object sender, EventArgs e)
        {

        }

        private void label9_Click(object sender, EventArgs e)
        {

        }
}

Link all’applicazione in C#.

Soluzione in VB.net

Public Class Form1
    Dim PrimInt As Integer
    Dim UltInt As Integer
    Dim MediaPar As Double
    Dim MediaDis As Double
    Dim VarianzaPar As Double
    Dim VarianzaDis As Double
    Dim Cov As Double


    Private Sub Inserimento(sender As Object, e As EventArgs) Handles Calcola.Click
        MediaPar = 0
        MediaDis = 0
        VarianzaPar = 0
        VarianzaDis = 0
        PrimInt = Integer.Parse(Me.NumPri.Text)
        UltInt = Integer.Parse(Me.NumUlt.Text)
        Dim InteriPar = New List(Of Integer)
        Dim InteriDis = New List(Of Integer)

        If PrimInt > UltInt Or PrimInt < 0 Then
            MessageBox.Show("Inserimento non valido", "Riprova")

        Else
            For counter As Integer = PrimInt To UltInt
                If counter Mod 2 = 0 Then
                    InteriPar.Add(counter)
                Else
                    InteriDis.Add(counter)
                End If

            Next
            Dim testoP As String = StringTesto(InteriPar)
            Dim testoD As String = StringTesto(InteriDis)
            MediaPar = CalcolaMedia(InteriPar)
            MediaDis = CalcolaMedia(InteriDis)
            VarianzaPar = CalcolaVar(InteriPar)
            VarianzaDis = CalcolaVar(InteriDis)

            If InteriDis.Count = InteriPar.Count Then
                Cov = CalcolaCov(InteriPar, InteriDis)
                LabCov.Text = (Math.Round(Cov / InteriPar.Count, 2)).ToString
            Else
                LabCov.Text = "Impossibile"
            End If

            LabNP.Text = testoP
            LabND.Text = testoD
            LabMediaPari.Text = MediaPar.ToString
            LabMediaDis.Text = MediaDis.ToString
            LabVarPari.Text = (Math.Round(VarianzaPar / InteriPar.Count, 2)).ToString
            LabVarDis.Text = (Math.Round(VarianzaDis / InteriDis.Count, 2)).ToString

        End If
    End Sub

    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
        Select Case keyData
            Case Keys.Enter
                Calcola.PerformClick()
        End Select
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

    Public Function StringTesto(ByVal Interi As List(Of Integer)) As String

        Dim Filler As Integer
        Dim Conta As Integer = 0
        Dim Testo As String = ""
        While Conta < Interi.Count()
            If Interi(Conta) < 10 Then
                Filler = 12
            ElseIf Interi(Conta) < 100 Then
                Filler = 11
            Else
                Filler = 10
            End If
            Testo = Testo & String.Format("{0, -" + Filler.ToString + "}", Interi(Conta).ToString)
            If (Conta + 1) Mod 4 = 0 Then
                Testo = Testo & vbCrLf
            End If
            Conta += 1
        End While

        Return Testo

    End Function

    Public Function CalcolaMedia(ByVal Interi As List(Of Integer)) As Double
        Dim Conta As Integer = 0
        Dim Media As Double = 0
        Dim MediaPred As Double = 0
        While Conta < Interi.Count()
            MediaPred = Media
            Media = ((Conta) * Media + Interi(Conta)) / (Conta + 1)
            Conta += 1
        End While
        Return Media
    End Function

    Public Function CalcolaVar(ByVal Interi As List(Of Integer)) As Double
        Dim Var As Double = 0
        Dim Conta As Integer = 0
        Dim Media As Double = 0
        Dim MediaPred As Double = 0
        While Conta < Interi.Count()
            MediaPred = Media
            Media = ((Conta) * Media + Interi(Conta)) / (Conta + 1)
            Var = Var + (Interi(Conta) - Media) * (Interi(Conta) - MediaPred)
            Conta += 1
        End While
        Return Var

    End Function

    Public Function CalcolaCov(ByVal Int1 As List(Of Integer), ByVal Int2 As List(Of Integer)) As Double

        Dim Cov As Double = 0
        Dim Conta As Integer = 0
        Dim Media1 As Double = 0
        Dim Media2 As Double = 0
        Dim MediaPred1 As Double = 0
        Dim MediaPred2 As Double = 0
        While Conta < Int1.Count()
            MediaPred1 = Media1
            Media1 = ((Conta) * Media1 + Int1(Conta)) / (Conta + 1)

            MediaPred2 = Media2
            Media2 = ((Conta) * Media2 + Int2(Conta)) / (Conta + 1)

            Cov = Cov + ((Int1(Conta) - Media1) * (Int2(Conta) - MediaPred2))

            Conta += 1
        End While
        Return Cov

    End Function

End Class

Link all’applicazione in VB.net.

Lettura dei dati da un file .csv e calcolo delle frequenze

Soluzione in VB.net

Imports System.IO

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.RichTextBox1.Clear()

        Dim separator As String = Me.RichTextBox2.Text.ToString
        Dim dimensioni As Integer
        Try
            dimensioni = Integer.Parse(Me.RichTextBox3.Text)
        Catch ex As Exception
            Me.RichTextBox1.Text = "Il numero di dimensioni deve essere un intero tra 1 e 2!"
            Exit Sub
        End Try

        If dimensioni < 1 Or dimensioni > 2 Then
            Me.RichTextBox1.Text = "Il numero di dimensioni deve essere un intero tra 1 e 2!"
            Exit Sub
        End If

        Dim ofd As New OpenFileDialog

        ofd.ShowDialog()

        Me.RichTextBox1.Text = "Nome scelto " & ofd.FileName

        If dimensioni = 2 Then
            Dim sr As New StreamReader(ofd.FileName)

            Dim Y As New List(Of Double)
            Dim X As New List(Of Double)
            Me.RichTextBox1.AppendText(vbCrLf & "Y    X ")
            While Not sr.EndOfStream
                Dim RigaDati As String = sr.ReadLine()
                Dim Dati() As String = RigaDati.Split(separator.ToCharArray, StringSplitOptions.RemoveEmptyEntries)

                Y.Add(Convert.ToDouble(Dati(1)))
                X.Add(Convert.ToDouble(Dati(0)))

                Me.RichTextBox1.AppendText(vbCrLf & Convert.ToDouble(Dati(1)).ToString & Convert.ToDouble(Dati(0)).ToString)

            End While

            Dim beta As Double
            Dim alfa As Double

            beta = CalcolaCov(X, Y) / CalcolaVar(X)
            alfa = CalcolaMedia(Y) - beta * CalcolaMedia(X)

            Dim Y_hat As New List(Of Double)
            Dim Epsilon As New List(Of Double)

            For conta As Integer = 0 To (Y.Count - 1)
                Dim th = alfa + beta * X(conta)
                Y_hat.Add(th)
                Epsilon.Add(Y(conta) - th)
            Next

            Dim R2 As Double
            Dim Ess As Double
            Dim Rss As Double

            Ess = CalcolaVar(Epsilon)
            Rss = CalcolaVar(Y_hat)
            R2 = Rss / CalcolaVar(Y)


            Me.RichTextBox1.AppendText(vbCrLf & "I valori della regressione sono:" & vbCrLf & "Intercetta: " & alfa.ToString & vbCrLf &
                "Coefficiente angolare: " & beta.ToString & vbCrLf & "R2: " & R2.ToString & vbCrLf & "Ess: " & Ess.ToString & vbCrLf &
                "Rss: " & Rss.ToString)

            DisegnaGrafico(X, Y)
            Y.Sort()
            X.Sort()
            Dim DistY As New ContaFreq

            DistY.Fill(Y, Y(0), ((Y(Y.Count - 1) - Y(0)) / 10))

            Dim DistX As New ContaFreq

            DistX.Fill(X, X(0), ((X(X.Count - 1) - X(0)) / 10))

            Me.RichTextBox1.AppendText(vbCrLf & "Distribuzione X")
            Me.RichTextBox1.AppendText(DistX.Stampa())
            Me.RichTextBox1.AppendText(vbCrLf & "Distribuzione Y")
            Me.RichTextBox1.AppendText(DistY.Stampa())


        End If

    End Sub

    Public Function CalcolaMedia(ByVal Interi As List(Of Double)) As Double
        Dim Conta As Integer = 0
        Dim Media As Double = 0
        Dim MediaPred As Double = 0
        While Conta < Interi.Count()
            MediaPred = Media
            Media = ((Conta) * Media + Interi(Conta)) / (Conta + 1)
            Conta += 1
        End While
        Return Media
    End Function

    Public Function CalcolaVar(ByVal Interi As List(Of Double)) As Double
        Dim Var As Double = 0
        Dim Conta As Integer = 0
        Dim Media As Double = 0
        Dim MediaPred As Double = 0
        While Conta < Interi.Count()
            MediaPred = Media
            Media = ((Conta) * Media + Interi(Conta)) / (Conta + 1)
            Var = Var + (Interi(Conta) - Media) * (Interi(Conta) - MediaPred)
            Conta += 1
        End While
        Return Var

    End Function

    Public Function CalcolaCov(ByVal Int1 As List(Of Double), ByVal Int2 As List(Of Double)) As Double

        Dim Cov As Double = 0
        Dim Conta As Integer = 0
        Dim Media1 As Double = 0
        Dim Media2 As Double = 0
        Dim MediaPred1 As Double = 0
        Dim MediaPred2 As Double = 0
        While Conta < Int1.Count()
            MediaPred1 = Media1
            Media1 = ((Conta) * Media1 + Int1(Conta)) / (Conta + 1)

            MediaPred2 = Media2
            Media2 = ((Conta) * Media2 + Int2(Conta)) / (Conta + 1)

            Cov = Cov + ((Int1(Conta) - Media1) * (Int2(Conta) - MediaPred2))

            Conta += 1
        End While
        Return Cov

    End Function

    Private Sub DisegnaGrafico(X As List(Of Double), Y As List(Of Double))
        'Creazione Grafico

        Dim b As New Bitmap(Me.PictureBox1.Width, Me.PictureBox1.Height)

        Dim g As Graphics = Graphics.FromImage(b)

        g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
        g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
        g.InterpolationMode = Drawing2D.InterpolationMode.High

        Dim FinestraVirtuale As New Rectangle(10, 10, Me.PictureBox1.Width - 20, Me.PictureBox1.Height - 20)

        g.Clear(Color.White)

        g.DrawRectangle(Pens.Blue, FinestraVirtuale)

        Dim MinX As Double = 0
        Dim MinY As Double = 0
        Dim MaxX As Double = 3.607
        Dim MaxY As Double = 4.737



        For h As Integer = 0 To X.Count - 1

            Dim X_graf As Integer = xVirtuale(X(h), MinX, MaxX, FinestraVirtuale)
            Dim Y_graf As Integer = yVirtuale(Y(h), MinY, MaxY, FinestraVirtuale)

            g.FillEllipse(Brushes.OrangeRed, New Rectangle(X_graf, Y_graf, 5, 5))
        Next

        Me.PictureBox1.Image = b

    End Sub

    Private Function xVirtuale(p1 As Double, MinX As Double, MaxX As Double, FinestraVirtuale As Rectangle) As Integer
        Return CInt(FinestraVirtuale.Left + (FinestraVirtuale.Width * ((p1 - MinX) / (MaxX - MinX))))
    End Function

    Private Function yVirtuale(p1 As Double, MinY As Double, MaxY As Double, FinestraVirtuale As Rectangle) As Integer
        Return CInt(FinestraVirtuale.Top + (FinestraVirtuale.Height * (1 - ((p1 - MinY) / (MaxY - MinY)))))
    End Function


End Class

Prima applicazione semi interattiva

Soluzione in VB.net

Imports System.IO
Public Class Form1

    Public Loc_MD As Point
    Public Loc_Rett As Point
    Dim FinestraVirtuale As New Rectangle(10, 10, 200, 100)
    Dim b As New Bitmap(300, 200)
    Dim g As Graphics = Graphics.FromImage(b)
    Public drag As Boolean


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.RichTextBox1.Clear()

        Dim separator As String = Me.RichTextBox2.Text.ToString
        Dim dimensioni As Integer
        Try
            dimensioni = Integer.Parse(Me.RichTextBox3.Text)
        Catch ex As Exception
            Me.RichTextBox1.Text = "Il numero di dimensioni deve essere un intero tra 1 e 2!"
            Exit Sub
        End Try

        If dimensioni < 1 Or dimensioni > 2 Then
            Me.RichTextBox1.Text = "Il numero di dimensioni deve essere un intero tra 1 e 2!"
            Exit Sub
        End If

        Dim ofd As New OpenFileDialog

        ofd.ShowDialog()

        Me.RichTextBox1.Text = "Nome scelto " & ofd.FileName

        If dimensioni = 2 Then
            Dim sr As New StreamReader(ofd.FileName)

            Dim Y As New List(Of Double)
            Dim X As New List(Of Double)
            Me.RichTextBox1.AppendText(vbCrLf & "Y    X ")
            While Not sr.EndOfStream
                Dim RigaDati As String = sr.ReadLine()
                Dim Dati() As String = RigaDati.Split(separator.ToCharArray, StringSplitOptions.RemoveEmptyEntries)

                Y.Add(Convert.ToDouble(Dati(1)))
                X.Add(Convert.ToDouble(Dati(0)))

                Me.RichTextBox1.AppendText(vbCrLf & Convert.ToDouble(Dati(1)).ToString & Convert.ToDouble(Dati(0)).ToString)

            End While

            Dim beta As Double
            Dim alfa As Double

            beta = CalcolaCov(X, Y) / CalcolaVar(X)
            alfa = CalcolaMedia(Y) - beta * CalcolaMedia(X)

            Dim Y_hat As New List(Of Double)
            Dim Epsilon As New List(Of Double)

            For conta As Integer = 0 To (Y.Count - 1)
                Dim th = alfa + beta * X(conta)
                Y_hat.Add(th)
                Epsilon.Add(Y(conta) - th)
            Next

            Dim R2 As Double
            Dim Ess As Double
            Dim Rss As Double

            Ess = CalcolaVar(Epsilon)
            Rss = CalcolaVar(Y_hat)
            R2 = Rss / CalcolaVar(Y)


            Me.RichTextBox1.AppendText(vbCrLf & "I valori della regressione sono:" & vbCrLf & "Intercetta: " & alfa.ToString & vbCrLf &
                "Coefficiente angolare: " & beta.ToString & vbCrLf & "R2: " & R2.ToString & vbCrLf & "Ess: " & Ess.ToString & vbCrLf &
                "Rss: " & Rss.ToString)

            DisegnaGrafico(X, Y)
            Y.Sort()
            X.Sort()
            Dim DistY As New ContaFreq

            DistY.Fill(Y, Y(0), ((Y(Y.Count - 1) - Y(0)) / 10))

            Dim DistX As New ContaFreq

            DistX.Fill(X, X(0), ((X(X.Count - 1) - X(0)) / 10))

            Me.RichTextBox1.AppendText(vbCrLf & "Distribuzione X")
            Me.RichTextBox1.AppendText(DistX.Stampa())
            Me.RichTextBox1.AppendText(vbCrLf & "Distribuzione Y")
            Me.RichTextBox1.AppendText(DistY.Stampa())


        End If

    End Sub

    Public Function CalcolaMedia(ByVal Interi As List(Of Double)) As Double
        Dim Conta As Integer = 0
        Dim Media As Double = 0
        Dim MediaPred As Double = 0
        While Conta < Interi.Count()
            MediaPred = Media
            Media = ((Conta) * Media + Interi(Conta)) / (Conta + 1)
            Conta += 1
        End While
        Return Media
    End Function

    Public Function CalcolaVar(ByVal Interi As List(Of Double)) As Double
        Dim Var As Double = 0
        Dim Conta As Integer = 0
        Dim Media As Double = 0
        Dim MediaPred As Double = 0
        While Conta < Interi.Count()
            MediaPred = Media
            Media = ((Conta) * Media + Interi(Conta)) / (Conta + 1)
            Var = Var + (Interi(Conta) - Media) * (Interi(Conta) - MediaPred)
            Conta += 1
        End While
        Return Var

    End Function

    Public Function CalcolaCov(ByVal Int1 As List(Of Double), ByVal Int2 As List(Of Double)) As Double

        Dim Cov As Double = 0
        Dim Conta As Integer = 0
        Dim Media1 As Double = 0
        Dim Media2 As Double = 0
        Dim MediaPred1 As Double = 0
        Dim MediaPred2 As Double = 0
        While Conta < Int1.Count()
            MediaPred1 = Media1
            Media1 = ((Conta) * Media1 + Int1(Conta)) / (Conta + 1)

            MediaPred2 = Media2
            Media2 = ((Conta) * Media2 + Int2(Conta)) / (Conta + 1)

            Cov = Cov + ((Int1(Conta) - Media1) * (Int2(Conta) - MediaPred2))

            Conta += 1
        End While
        Return Cov

    End Function

    Private Sub DisegnaGrafico(X As List(Of Double), Y As List(Of Double))
        'Creazione Grafico


        g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
        g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
        g.InterpolationMode = Drawing2D.InterpolationMode.High

        g.Clear(Color.White)

        g.DrawRectangle(Pens.Blue, FinestraVirtuale)

        Dim MinX As Double = 0
        Dim MinY As Double = 0
        Dim MaxX As Double = 3.607
        Dim MaxY As Double = 4.737



        For h As Integer = 0 To X.Count - 1

            Dim X_graf As Integer = xVirtuale(X(h), MinX, MaxX, FinestraVirtuale)
            Dim Y_graf As Integer = yVirtuale(Y(h), MinY, MaxY, FinestraVirtuale)

            g.FillEllipse(Brushes.OrangeRed, New Rectangle(X_graf, Y_graf, 5, 5))
        Next

        Me.PictureBox1.Image = b

    End Sub

    Private Function xVirtuale(p1 As Double, MinX As Double, MaxX As Double, FinestraVirtuale As Rectangle) As Integer
        Return CInt(FinestraVirtuale.Left + (FinestraVirtuale.Width * ((p1 - MinX) / (MaxX - MinX))))
    End Function

    Private Function yVirtuale(p1 As Double, MinY As Double, MaxY As Double, FinestraVirtuale As Rectangle) As Integer
        Return CInt(FinestraVirtuale.Top + (FinestraVirtuale.Height * (1 - ((p1 - MinY) / (MaxY - MinY)))))
    End Function

    Private Sub PictureBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        Me.Loc_MD = e.Location

        Me.Loc_Rett = Me.FinestraVirtuale.Location

        Me.drag = False
    End Sub

    Private Sub PictureBox1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        If Not drag Then
            Dim deltaX As Integer = e.X - Loc_MD.X

            Dim deltaY As Integer = e.Y - Loc_MD.Y

            Me.FinestraVirtuale.Location = New Point(Loc_Rett.X + deltaX, Loc_Rett.Y + deltaY)
            g.Clear(Color.White)
            g.DrawRectangle(Pens.RoyalBlue, FinestraVirtuale)
            Me.PictureBox1.Image = b
        End If
    End Sub

    Private Sub PictureBox1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        Me.drag = True
    End Sub
End Class

Link all’applicazione in VB.net.

Calcolo regressione da file .csv

Soluzione in VB.net

Imports System.IO
Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.RichTextBox1.Clear()

        Dim separator As String = Me.RichTextBox2.Text.ToString

        Dim ofd As New OpenFileDialog

        ofd.ShowDialog()

        Me.RichTextBox1.Text = "Nome scelto " & ofd.FileName

        Dim sr As New StreamReader(ofd.FileName)

        Dim Y As New List(Of Double)
        Dim X As New List(Of Double)

        While Not sr.EndOfStream
            Dim RigaDati As String = sr.ReadLine()
            Dim Dati() As String = RigaDati.Split(separator)

            Y.Add(Convert.ToDouble(Dati(0)))
            X.Add(Convert.ToDouble(Dati(0)))

        End While

        Dim beta As Double
        Dim alfa As Double

        beta = CalcolaCov(X, Y) / CalcolaVar(X)
        alfa = CalcolaMedia(Y) - beta * CalcolaMedia(X)

        Dim Y_hat As New List(Of Double)
        Dim Epsilon As New List(Of Double)

        For conta As Integer = 0 To (Y.Count - 1)
            Dim th = alfa + beta * X(conta)
            Y_hat.Add(th)
            Epsilon.Add(Y(conta) - th)
        Next

        Dim R2 As Double
        Dim Ess As Double
        Dim Rss As Double

        Ess = CalcolaVar(Epsilon)
        Rss = CalcolaVar(Y_hat)
        R2 = Rss / CalcolaVar(Y)


        Me.RichTextBox1.AppendText(vbCrLf & "I valori della regressione sono:" & vbCrLf & "Intercetta: " & alfa.ToString & vbCrLf &
            "Coefficiente angolare: " & beta.ToString & vbCrLf & "R2: " & R2.ToString & vbCrLf & "Ess: " & Ess.ToString & vbCrLf &
            "Rss: " & Rss.ToString)

    End Sub

    Public Function CalcolaMedia(ByVal Interi As List(Of Double)) As Double
        Dim Conta As Integer = 0
        Dim Media As Double = 0
        Dim MediaPred As Double = 0
        While Conta < Interi.Count()
            MediaPred = Media
            Media = ((Conta) * Media + Interi(Conta)) / (Conta + 1)
            Conta += 1
        End While
        Return Media
    End Function

    Public Function CalcolaVar(ByVal Interi As List(Of Double)) As Double
        Dim Var As Double = 0
        Dim Conta As Integer = 0
        Dim Media As Double = 0
        Dim MediaPred As Double = 0
        While Conta < Interi.Count()
            MediaPred = Media
            Media = ((Conta) * Media + Interi(Conta)) / (Conta + 1)
            Var = Var + (Interi(Conta) - Media) * (Interi(Conta) - MediaPred)
            Conta += 1
        End While
        Return Var

    End Function

    Public Function CalcolaCov(ByVal Int1 As List(Of Double), ByVal Int2 As List(Of Double)) As Double

        Dim Cov As Double = 0
        Dim Conta As Integer = 0
        Dim Media1 As Double = 0
        Dim Media2 As Double = 0
        Dim MediaPred1 As Double = 0
        Dim MediaPred2 As Double = 0
        While Conta < Int1.Count()
            MediaPred1 = Media1
            Media1 = ((Conta) * Media1 + Int1(Conta)) / (Conta + 1)

            MediaPred2 = Media2
            Media2 = ((Conta) * Media2 + Int2(Conta)) / (Conta + 1)

            Cov = Cov + ((Int1(Conta) - Media1) * (Int2(Conta) - MediaPred2))

            Conta += 1
        End While
        Return Cov

    End Function
End Class
Loc_MD = e.Location

        Me.Loc_Rett = Me.FinestraVirtuale.Location

        Me.drag = False
    End Sub

    Private Sub PictureBox1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        If Not drag Then
            Dim deltaX As Integer = e.X - Loc_MD.X

            Dim deltaY As Integer = e.Y - Loc_MD.Y

            Me.FinestraVirtuale.Location = New Point(Loc_Rett.X + deltaX, Loc_Rett.Y + deltaY)
            g.Clear(Color.White)
            g.DrawRectangle(Pens.RoyalBlue, FinestraVirtuale)
            Me.PictureBox1.Image = b
        End If
    End Sub

    Private Sub PictureBox1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        Me.drag = True
    End Sub
End Class

Link all’applicazione in VB.net.

Generatore di numeri casuale

Soluzione in VB.net

Link all’applicazione in VB.net.

Generatore di Random Walk

Soluzione in VB.net

Link all’applicazione in VB.net.

Lascia un commento