Option Explicit
Sub Main
	Dim nClasse
	Dim nGaranzia
	Dim k,j
	Dim sNumeri
	Dim idComb
	Dim nInizio,nFine
	Dim idValoreDaAna
	Dim sValoreUsato
	Dim CombTot
	Dim nMese 
	Dim nAnaTot
	
	nMese =Int(InputBox("Mese da 1 a 12" ,,1))
	ReDim aCombMigliori(100,4)
	nClasse = ScegliClasse
	nGaranzia = ScegliGaranzia
	idValoreDaAna = ScegliValoreDaAnalizzare(sValoreUsato)
	nInizio = EstrazioneIni
	nFine = EstrazioneFin
	
	nAnaTot = 0
	For k = nInizio To nFine	
		If Month( DataEstrazioneDL(k,,,"/")) = nMese Then
			Call ImpostaEstrazioneDL (k,True)
			nAnaTot = nAnaTot +1
		Else
			Call ImpostaEstrazioneDL (k,False)
		End If
	Next
	
	If nClasse > 0 And nGaranzia > 0 And nGaranzia <= nClasse And idValoreDaAna > 0 And nMese >0 And nMese <= 12 Then
		Call Messaggio("Sviluppo combinazioni di classe " & nClasse)
		CombTot = InitSviluppaComb(nClasse)
		Call Messaggio("Statistica combinazioni in corso ")
		ReDim aCol(nClasse)
		Do While GetCombSviluppo(aCol) = True
			Call AnalisiComb(aCol,nGaranzia,aCombMigliori,nInizio,nFine,idValoreDaAna)
			k = k + 1
			If k Mod 20 = 0 Then
				Call Messaggio("Statistica combinazioni in corso " & k & " di " & CombTot)
				Call AvanzamentoElab(1,CombTot,k)
				If ScriptInterrotto Then Exit Do
			End If
		Loop
		Call Messaggio("")
		ReDim aTitoli(4)
		aTitoli(1) = "Combinazione"
		aTitoli(2) = "Frequenza"
		aTitoli(3) = "Ritardo"
		aTitoli(4) = "RitardoMax"
		Call Scrivi("Combinazioni di classe " & nClasse & " analizzate per punti " & nGaranzia)
		Call Scrivi("La seguente lista mostra le prime 100 combinazioni in base al valore di " & sValoreUsato)
		Call Scrivi("Range analizzato " & GetInfoEstrazioneDL(nInizio) & " fino a " & GetInfoEstrazioneDL(nFine))
		'Call Scrivi("Estrazioni analizzate totali : " &(nFine + 1) - nInizio)
		Call Scrivi("Mese analizzato              : " & nMese)
		Call Scrivi("Estrazioni analizzate totali : " & nAnaTot)
		
		Call Scrivi
		Call InitTabella(aTitoli)
		For k = 1 To UBound(aCombMigliori)
			ReDim ADati(4)
			ADati(1) = aCombMigliori(k,4)
			ADati(2) = aCombMigliori(k,1)
			ADati(3) = aCombMigliori(k,2)
			ADati(4) = aCombMigliori(k,3)
			Call AddRigaTabella(ADati)
		Next
		Call CreaTabella
	Else
		MsgBox "Selezionare la classe di sviluppo e la garanzia , " & _
		"si ricorda che la garanzia non puo essere maggiore della classe di sviluppo " & _
		"e che bisogna scegliere quale valore statistico considerare per " & _
		"alimentare la lista delle prime 100 Combinazioni "
	End If
End Sub
Sub AnalisiComb(aNum,Garanzia,aCombMig,nInizio,nFine,idValoreDaAna)
	Dim k,j
	Dim Rit
	Dim RitMax
	Dim Freq
	Dim Valore
	Call StatisticaFormazioneDL(aNum,Garanzia,Rit,RitMax,0,Freq,nInizio,nFine)
	Select Case idValoreDaAna
	Case 1
		Valore = Freq
	Case 2
		Valore = Rit
	Case 3
		Valore = RitMax
	End Select
	For k = 1 To UBound(aCombMig)
		If Valore >= aCombMig(k,0) Then
			For j = UBound(aCombMig) To(k + 1) Step - 1
				aCombMig(j,0) = aCombMig(j - 1,0)
				aCombMig(j,1) = aCombMig(j - 1,1)
				aCombMig(j,2) = aCombMig(j - 1,2)
				aCombMig(j,3) = aCombMig(j - 1,3)
				aCombMig(j,4) = aCombMig(j - 1,4)
			Next
			aCombMig(k,0) = Valore
			aCombMig(k,1) = Freq
			aCombMig(k,2) = Rit
			aCombMig(k,3) = RitMax
			aCombMig(k,4) = StringaNumeri(aNum)
			Exit For
		End If
	Next
End Sub
Function InitSviluppaComb(Classe)
	Dim k
	ReDim aNum(90)
	For k = 1 To 90
		aNum(k) = k
	Next
	InitSviluppaComb = InitSviluppoIntegrale(aNum,Classe)
End Function
Function ScegliClasse()
	ReDim aVoci(4)
	aVoci(0) = "Estratto"
	aVoci(1) = "Ambo"
	aVoci(2) = "Terno"
	aVoci(3) = "Quaterna"
	aVoci(4) = "Cinquina"
	ScegliClasse = ScegliOpzioneMenu(aVoci,2,"Secegli tipo combinazione") + 1
End Function
Function ScegliGaranzia()
	ReDim aVoci(4)
	aVoci(0) = "Estratto"
	aVoci(1) = "Ambo"
	aVoci(2) = "Terno"
	aVoci(3) = "Quaterna"
	aVoci(4) = "Cinquina"
	ScegliGaranzia = ScegliOpzioneMenu(aVoci,2,"Secegli garanzia") + 1
End Function
Function ScegliValoreDaAnalizzare(sValore)
	ReDim aVoci(2)
	Dim i
	aVoci(0) = "Frequenza"
	aVoci(1) = "Ritardo"
	aVoci(2) = "Ritardo massimo"
	i = ScegliOpzioneMenu(aVoci,0,"Quale valore considerare per l'ordinamento ? ")
	sValore = aVoci(i)
	ScegliValoreDaAnalizzare = i + 1
End Function