Een woord proberen te maken

  • Onderwerp starter Onderwerp starter avo
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

avo

Gebruiker
Lid geworden
26 sep 2006
Berichten
35
Ik wil proberen een woord te laten vormen met een string array.
Alle afbabetische letters heb ik in een array gezet.
Code:
            string[] Alfabet = new string[] { "a", "b", "c", "d", "e", "f", "g", "h", 
                                              "i", "j", "k", "l", "m", "n", "o", "p", 
                                              "q", "r", "s", "t", "u", "v", "w", "x", 
                                              "y", "z"};
Hoe kan ik dit het beste doen.
ik was aan het denken voor dit in een While-lus te gieten, omdat het hetzelfde doet met cijfers. maar nu wil dat ik letters kunnen doen.

ik wil een woord laten vormen van maximaal 3 letters.
eerst moet hij gewoon alle latters in array weergeven en daarna moet bij puzzelen naar 2 letters.
voorbeeld: aa, ab, ac, ad, ae, ...... ba, bb, bc, bd, be, ......
en als hij bij zz is dat hij daarna 3 letters neemt.
Voorbeeld:
zz, aaa, aba, aca, ada, aea, ....... abb, abc, abd, abe, abf, .... als hij azz heeft dat hij dan van begin letter a een b maakt en dat hij terug zo verder gaat tot zzz.

Ik hoop dat dit zo'n beetje duidlijk is.

De code dat ik tothiertoe heb is dit.
Code:
        static void Main(string[] args)
        {
            string[] Alfabet = new string[26] { "a", "b", "c", "d", "e", "f", "g", "h", 
                                                "i", "j", "k", "l", "m", "n", "o", "p", 
                                                "q", "r", "s", "t", "u", "v", "w", "x", 
                                                "y", "z"};
            foreach (string a in Alfabet)
            {
                Console.WriteLine(a);
                Console.ReadLine();
            }
            foreach (string a in Alfabet)
            {
                Console.WriteLine("a" + a);
                Console.ReadLine();
            }
            foreach (string a in Alfabet)
            {
                Console.WriteLine("b" + a);
                Console.ReadLine();
            }
            foreach (string a in Alfabet)
            {
                Console.WriteLine("c" + a);
                Console.ReadLine();
            }
            foreach (string a in Alfabet)
            {
                Console.WriteLine("d" + a);
                Console.ReadLine();
            }
            foreach (string a in Alfabet)
            {
                Console.WriteLine("e" + a);
                Console.ReadLine();
            }
            foreach (string a in Alfabet)
            {
                Console.WriteLine("f" + a);
                Console.ReadLine();
            }
        }
Dit werkt wel maar het lijkt mij nogal stom om het zo te doen :p want dan zit ik over de 10000 programmeer lijnen.
 
Laatst bewerkt:
Vraag me niet hoe ik het zelf heb gemaakt, want nu ik er zo naar kijk snap ik er de balle niet meer van :D

1e paar regels:
cnFGE.png


Laatste paar regels:
qDr53.png


PHP:
        static void Main(string[] args)
        {
            string Letters = "abcdefghijklmnopqrstuvwxyz";

            bool eKeer = false;
            for (int i = 0; i < 26; i++)
            {
                for (int ii = 0; ii < 26; ii++)
                {
                    string OO = "";
                    OO += Convert.ToString(Letters[i]) + Convert.ToString(Letters[ii]);
                    string Ervoor = OO;
                    if (eKeer)
                    {
                        for (int a = 0; a < 26; a++)
                        {
                            OO += Convert.ToString(Letters[a]);
                            Console.WriteLine(OO);
                            OO = Ervoor;                            
                        }
                    }
                    else Console.WriteLine(OO);
                }
                System.Threading.Thread.Sleep(300);

                if (i == 25 && eKeer == false)
                {
                    i = 0;
                    eKeer = true;
                }
            }

            Console.Read();
        }


Enne, als je de letters één voor 1 wilt printen, gebruik dan deze code:

PHP:
            foreach (char c in Letters) Console.WriteLine("{0}", c);

Resultaat:

ReVxj.png
 
Laatst bewerkt:
Het ziet er wel heel ingewikkeld uit :p.
Ik heb er zowat commentaar bijgevoegt voor mij het wat te vergemakkelijken , maar met de variabele eKeer snap ik er nietveel van. of zit ik zowat fout ? :p

Code:
        static void Main(string[] args)
        {
            string Letters = "abcdefghijklmnopqrstuvwxyz";  // Waar alle letters inzitten.
         //  De 2 forlussen beginnen te tellen bij 2letters tesamen. 
            bool eKeer = false;        // De variabele eKeer is false
            for (int i = 0; i < 26; i++)      //  integer i  laten opstellen naar 26
            {
                for (int ii = 0; ii < 26; ii++)  //  integer ii  laten opstellen naar 26
                {
                    string OO = "";           // Variabele OO 
                    OO += Convert.ToString(Letters[i]) + Convert.ToString(Letters[ii]); // Zet alles om naar string versie. 
                    string Ervoor = OO;     // Maakt een nieuwe variabele met waarde van de Variabele OO
                    if (eKeer)    // als eKeer false is
                    {
                        for (int a = 0; a < 26; a++)
                        {
                            OO += Convert.ToString(Letters[a]);
                            Console.WriteLine(OO);
                            OO = Ervoor;
                        }
                    }
                    else Console.WriteLine(OO);  // als het goed is geeft het dit weer. en telt hij verder met letters.
                }
                System.Threading.Thread.Sleep(300);

                if (i == 25 && eKeer == false)  // Als een van de expressies waar oplevert.
                {
                    i = 0;
                    eKeer = true;
                }
            }
            Console.Read();
        }


Maar ik heb het simpeler gemaakt maar ik heb gebruik gemaakt van u voorbeeld CaptainBri :p.
PHP:
        static void Main(string[] args)
        {
            string Letters = "abcdefghijklmnopqrstuvwxyz";  // Waar alle letters inzitten.
            foreach (char Woord in Letters)  
            {
                Console.WriteLine(Woord);
                Console.ReadLine();
            }

            for (int i = 0; i < 26; i++)
            {
                for (int ii = 0; ii < 26; ii++)
                {
                    string Woorden = "";
                    Woorden += Convert.ToString(Letters[i] + Convert.ToString(Letters[ii]));
                    Console.WriteLine(Woorden);
                    Console.ReadLine();
                }
            } 

            for (int i = 0; i < 26; i++)
            {
                for (int ii = 0; ii < 26; ii++)
                {
                    for (int iii = 0; iii < 26; iii++)
                    {
                        string Woorden = "";
                        Woorden += Convert.ToString(Letters[i] + Convert.ToString(Letters[ii]) + Convert.ToString(Letters[iii]));
                        Console.WriteLine(Woorden);
                        Console.ReadLine();
                    }
                }
            }
            Console.Read();
        }


Dankuwel voor mij te helpen ;) .
Vriendelijke groetjes :D
 
Laatst bewerkt:
Zo kan het inderdaad ook, ongeveer hetzelfde. Hier is de uitleg:

PHP:
static void Main(string[] args)
        {
            //String met letters, deze functioneert eigenlijk als een array met characters (tekens).
            string Letters = "abcdefghijklmnopqrstuvwxyz";

            //Voor elke character in de string met letters, schrijf 'm naar de console.
            foreach (char c in Letters) Console.WriteLine("{0}", c);

            //Even pauzeren voordat je verder gaat.
            Console.Read();

            /* Een boolean maken die op TRUE word gezet wanneer de for-loops de volgende rij hebben geschreven:
             * aa/ab/ac/ad/ae/af/ag etc (rij met 2 letters) */
            bool EersteTweeRijenGehad = false;
            
            //Elke letter van het alfabet langsgaan,
            for (int i = 0; i < 26; i++)
            {
                //En er hier bij de 2e for-loop nog 1 aan vast plakken.
                for (int ii = 0; ii < 26; ii++)
                {
                    string OmWegTeSchrijven = "";
                    //Eerste 2 Letters in de string stoppen die naar het scherm geschreven word.
                    OmWegTeSchrijven += Convert.ToString(Letters[i]) + Convert.ToString(Letters[ii]);
                    //Een string aanmaken die vasthoud wat er in de weg te schrijven string staat, om later weer te herstellen.
                    string Ervoor = OmWegTeSchrijven;

                    //Als de 1e twee rijen weggeschreven zijn (zie het stukje van boolean op true boven de for-loop),
                    if (EersteTweeRijenGehad)
                    {
                        //Een nieuwe for-loop doen, die er steeds een letter van het alfabet achter plakt, tot dat alle 26 letters geweest zijn.
                        for (int a = 0; a < 26; a++)
                        {
                            //Aanplakken van nieuwe letter.
                            OmWegTeSchrijven += Convert.ToString(Letters[a]);
                            //Wegschrijven.
                            Console.WriteLine(OmWegTeSchrijven);
                            //En de string die weggeschreven word 'resetten' naar wat er vóór de for-loop in stond.
                            OmWegTeSchrijven = Ervoor;                            
                        }
                    }
                        //Als de 1e twee rijen nog niet weggeschreven zijn, doet hij dit hier en gaat verder met de for-loop.
                    else Console.WriteLine(OmWegTeSchrijven);
                }
                //Even pauzeren na elke letter in het alfabet. (alleen de 1e letter in de string, dus (26 x 2 = 52 stoppen) keer)
                Console.Read();

                //Kijken of hij al eens door de for-loop heen is gegaan en de 1e twee letters allemaal al heeft weggeschreven.
                //Zoja, dan de for-loop resetten zodat hij er nog eens door heen kan loopen, en de boolean op true zetten
                //Dat aangeeft dat de 1e twee rijen al weggeschreven zijn.
                if (i == 25 && EersteTweeRijenGehad == false)
                {
                    i = 0;
                    EersteTweeRijenGehad = true;
                }
            }

            //Pauze voor sluiten.
            Console.Read();
        }

Succes ermee :thumb:
 
Het is veel eenvoudiger om het alfabet als het 26-tallig getallenstelsel te zien. Op die manier hoef je alleen de functie om van het 10-tallig getallenstelsel naar het 26-tallig getallenstelsel te gaan te implementeren:

[cpp]
unsigned int i = 0;
unsigned int length = (unsigned int)std::pow((double)ALPHABET_LENGTH, (double)LENGTH); // 26^LENGTH

while (++i <= length) {
Base26 b26 = Base10ToBase26(i);
// print b26
};
[/cpp]
 
Dat is wel intressand en heel handig natuurlijk.
Je hebt een klein stuk voorbeeld code geven, Maar hoe kan ik dit dan best vervolledigen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan