Wiskundig iets

Status
Niet open voor verdere reacties.

Rubdos

Gebruiker
Lid geworden
22 feb 2008
Berichten
145
Voor een borduurmachine moet ik iets wegschrijven naar een dst bestand. Zo'n bestand bevat de coordinaten. Maar in Bytes.

Met volgende getallen:

+1
-1
+9
-9
+3
-3
+27
-27
+81
-81

Zou ik alle getallen moeten kunnen vormen die nodig zijn. Hoe kan ik (dmv C#) deze getallen gebruiken? Elk getal maximum 1 keer.

Dus:

Het is de bedoeling dat ik met deze getallen op te tellen (de getallen waar een true bij staat) er voor te zorgen dat ik getal x krijg.

Iemand?
 
C# ken ik niet, maar het zal wel zowat hetzelfde blijven.

Je kan bv. een struct maken
struct getal {
int gebruiken;
int waarde;
};

Dan definieer je een list of array met de nodige waarden erin en je zet de waarde van gebruiken op 0 als je ze niet nodig hebt of op 1 als je ze wel nodig hebt.
Daarna door de lijst lopen en alles waar gebruiken == 1 optellen.

Een tweede manier is twee arrays maken met zelfde lengte;
de eerste bevat de waarden en de tweede of je de getallen moet gebruiken.

dan iets als volgt om de waarde te berekenen:
int result=0;
for(i=0;i<max;i++)
{
if(tegebruiken == 1) { result = result + waarde;}
}
 
Zover was ik ook, het zit eigenlijk zo:

ik heb het getal 31:

Nu moet ik weten welke van die getallen (zie post 1) nodig zijn om dit te vormen. Andersom rekenen is makkelijker...

Tenzij iemand al een kant en klare afbeelding digitalizer naar Tajima dst kent, ga ik die dus zelf proberen te maken...
 
Je werkt met exponenten van 3, dus je moet hieruit ook af gaan leiden.

In jouw voorbeeld heb je 31.
Als je hier de 3log van neemt is dit 3.12 en nog een hoop cijfers achter de komma, maar het gaat om hetgeen voor de komma, dus in dit geval 3.
3 tot de macht 3 = 27, dat is dus het eerste getal.

We houden over 31-27 = 4.

Als je hier de 3log van neemt is dit 1.26 en nog een hoop cijfers achter de komma, maar het gaat om hetgeen voor de komma, dus in dit geval 1.
3 tot de macht 1 = 3, dat is dus het tweede getal.

We houden over 4 - 3 = 1

Als je hier de 3log van neemt is dit 0.00, het gaat om hetgeen voor de komma, dus in dit geval 0.
3 tot de macht 0 = 1, dat is dus het derde getal.

We houden over 1 - 1 = 0

Dus conclusie, 31 wordt 'geschreven' als 27 + 3 + 1

In code vertaald, waarbij ik een textBox1 heb waarin het in te voeren getal staat en een label1 heb die de uitkomst weergeeft:
Code:
            label1.Text = "";
            var iGetal = 0;
            if (int.TryParse(textBox1.Text,out iGetal))
            {
                while (iGetal>0)
                {
                    var deler = Math.Floor(System.Math.Log(iGetal,3));
                    var teller = Math.Pow(3,deler);
                    if (label1.Text != "")
                        label1.Text += " + ";
                    label1.Text += teller.ToString();
                    iGetal -= int.Parse(teller.ToString());
                }
            }
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan