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();
}
}
}
}
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)
{
}
}
}
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)
{
}
}
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



