Code korter?

Status
Niet open voor verdere reacties.

famlam

Gebruiker
Lid geworden
15 okt 2008
Berichten
416
Code:
If uitkomst >= 1000 Then
            If Radio1.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 10)
            If Radio2.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 10)
            If Radio1.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 9)
            If Radio2.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 23)
            If Radio1.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 23)
            If Radio2.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 9)
            If Radio1.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 10)
            If Radio2.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 10)
        ElseIf uitkomst >= 100 Then
            If Radio1.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 11)
            If Radio2.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 11)
            If Radio1.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 10)
            If Radio2.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 24)
            If Radio1.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 24)
            If Radio2.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 10)
            If Radio1.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 11)
            If Radio2.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 11)
        ElseIf uitkomst >= 10 Then
            If Radio1.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 12)
            If Radio2.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 12)
            If Radio1.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 11)
            If Radio2.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 25)
            If Radio1.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 25)
            If Radio2.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 11)
            If Radio1.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 12)
            If Radio2.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 12)
        Else
            If Radio1.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 13)
            If Radio2.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 13)
            If Radio1.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 12)
            If Radio2.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = False Then uitkomst = Math.Round(uitkomst, 26)
            If Radio1.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 26)
            If Radio2.Checked = True And CheckBox1.Checked = False And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 12)
            If Radio1.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 13)
            If Radio2.Checked = True And CheckBox1.Checked = True And CheckBox2.Checked = True Then uitkomst = Math.Round(uitkomst, 13)
        End If

Deze code (die eigenlijk nog veel langer is, het begint eigenlijk met
If uitkomst >= 1000000000 Then...
en dan steeds korter, dit is dus eigenlijk alleen het eind van de code.

Hoe kan ik dit korter schrijven?
Ik vermoed wel dat dit kan omdat:
  • Het gedeelte 'if uitkomst >= x' volgens een logaritme kleiner wordt
  • De tegenovergestelde* uitkomsten precies gelijk zijn
Maar ik zou absoluut niet weten hoe. Maar deze code is zo heel groot en onoverzichtelijk, dus daarom vraag ik aan jullie of jullie misschien een oplossing weten.


*met tegenovergestelde bedoel ik:
als radio1.checked en CB1.checked en CB2.checked alledrie true zijn, en de uitkomst wordt dan afgerond op X, dan wordt radio2.checked (true) en CB1.c (false) en CB2.c (false) ook afgerond op X
*Misschien iets dat helpt: als radio1.checked true is dan is radio2.checked altijd false en andersom.
 
Code:
int GetResult(const unsigned int n)
{
	unsigned int start(1000000000), c(0);

	bool radio1, radio2, checkbox1, checkbox2; // gewoon als voorbeeld

	while(start > 0)
	{
		if(n >= start)
		{
			if(radio1)
			{
				if((!checkbox1 && !checkbox2) || (checkbox1 && checkbox2))
					return 0; // return math.round(n, c+4);
				if(checkbox1 && !checkbox2)
					return 0; // return math.round(n, c+3)
				if(!checkbox1 && checkbox2)
					return 0; // return math.round(n, c+17)
			}
			// nu de rest voor wanneer radio2.checked = true
		}		
		start /= 10;
		c++;						    
	}

	return -1;
}


Het bovenstaande zou volgens mij moeten werken. (ik weet het, voorbeeld is in een andere taal, maar heb geen zin om het om te zetten, en het gaat om het idee);

(overigens heb ik dit gebaseerd op de huidige waardes/code; weet niet welke waardes je hiervoor toevoegde...)

edit: code kan zelfs nog korter, aangezien je niet speciaal een tweede controle stuk voor 'radio2' hoeft te schrijven. (niet goed genoeg gekeken :o)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan