Exemplo n.º 1
0
        static void RunIntro(string name, int num, bool isExpt2,
                             string rsrcPath = "resources")
        {
            DateTime  time1      = DateTime.Now;
            Stopwatch stopwatch1 = new Stopwatch();

            stopwatch1.Start();

            // basic datatypes
            bool isDone = false;
            int  numI = 0, arrLen = (int)ConstItems.ZERO, delayMsecs = 2500,
                 seedp     = time1.Millisecond;
            float timeDiff = 0.0f;
            char  ch       = '\0';

            // strings & arrays
            string greetStr, dateStr, greetPath = "greet.txt";

            char[] str1   = new char[64];
            int[]  numArr = { 9, 9, 0x9, 9 }; // {bin, oct, hex, dec}

            //composites
            UVar uVar1 = new UVar();
            //User user1 = new User() {Name = "World", Num = 0, TimeIn = time1};
            User   user1 = new User("World", 0, time1);
            var    tup1  = new Tuple <byte, short>((byte)Kind.INTSHORT, 100);
            Person pers;

            Random rnd = new Random(seedp);

            IO.TextWriter fOut  = Console.Out;
            TimeZone      tz1   = TimeZone.CurrentTimeZone;
            string        tzStr = tz1.IsDaylightSavingTime(time1) ? tz1.DaylightName
                : tz1.StandardName;

            arrLen = numArr.Length;

            for (int i = 0; arrLen > i; ++i) // foreach (int elem in numArr)
            {
                numI += numArr[i];           //     numI += elem;
            }
            Trace.Assert((numArr.Length * numArr[0]) == numI,
                         "arrLen * numArr[0] != numI");

            ch = Misc.DelayChar(delayMsecs);

            do
            {
                uVar1.kind = tup1.Item1;
                uVar1.val  = new UnionVal()
                {
                    sh = tup1.Item2
                };
                uVar1.kind = (byte)Kind.INTSHORT;
                uVar1.val  = new UnionVal()
                {
                    sh = -1
                };
                uVar1.kind = (byte)Kind.UINTLONG;
                uVar1.val  = new UnionVal()
                {
                    ul = 1UL
                };
                uVar1.kind = (byte)Kind.FLOAT;
                uVar1.val  = new UnionVal()
                {
                    f = 100.0f
                };
                uVar1.kind = (byte)Kind.DOUBLE;
                uVar1.val  = new UnionVal()
                {
                    d = 100.0d
                };
                uVar1.kind = (byte)Kind.DECIMAL;
                uVar1.val  = new UnionVal()
                {
                    m = 1000.0m
                };
                str1[0] = '\0';
                Trace.Assert(((byte)Kind.DECIMAL == uVar1.kind) &&
                             (1000.0m == uVar1.val.m),
                             "kind == Kind.DECIMAL && val == 1000.0m is false");
            } while (isDone);

            user1.Name = name;
            user1.Num  = 0 == num?rnd.Next(0, 17) + 2 : num;

            SysTextRegex.Regex re = new SysTextRegex.Regex(@"(?i)^quit$");
            SysTextRegex.Match m  = re.Match(name);
            Console.WriteLine("{0} match: {1} to {2}\n",
                              m.Success ? "Good" : "Does not", name, re);

            dateStr = user1.TimeIn.ToString("ddd MMM dd HH:mm:ss yyyy zzz");

            //greetStr = Misc.Greeting(greetPath, user1.Name);
            try {
                //greetStr = (new IO.StreamReader(rsrcPath + "/" + greetPath)).ReadToEnd().TrimEnd('\n', '\r') + user1.Name;
                greetStr = IO.File.ReadAllText(rsrcPath + "/" + greetPath).TrimEnd('\n', '\r') + user1.Name;
            } catch (Exception exc0) {
                Console.Error.WriteLine("(exc: {0}) Bad env var RSRC_PATH: {1}\n",
                                        exc0, rsrcPath);
                try {
                    greetStr = Util.GetFromResources(greetPath, assembly).TrimEnd('\n', '\r') + user1.Name;
                } catch (Exception exc1) {
                    throw;
                    Environment.Exit(1);
                }
            }
            Console.WriteLine("{0} {1}\n{2}!", dateStr, tzStr, greetStr);

            stopwatch1.Stop();
            timeDiff = stopwatch1.ElapsedMilliseconds;
            Console.WriteLine("(program {0}) Took {1:F1} seconds.", progName,
                              timeDiff * 1.0e-3);

            int[] ints = { 2, 1, 0, 4, 3 };
            var   lst  = new SysCollGen.List <int>(ints);

            if (isExpt2)
            {
                fOut.WriteLine("Expt(2.0, {0}) = {1}", user1.Num,
                               Classic.ExptLp(2.0f, user1.Num));

                var res = Util.MkString(lst);
                Console.Write("Reverse({0}): ", res);
                var lstTmp = Seqops.CopyOfLp <int>(lst);
                Seqops.ReverseLp <int>(lstTmp);
                res = Util.MkString(lstTmp);
                Console.WriteLine("{0}", res);

                res = Util.MkString(lst);
                Console.Write("{0}.Sort(): ", res);
                lst.Sort();
                res = Util.MkString(lst);
                Console.WriteLine("{0}", res);
            }
            else
            {
                fOut.WriteLine("Fact({0}) = {1}", user1.Num,
                               Classic.FactLp(user1.Num));

                int el  = 3;
                var res = Util.MkString(lst);
                int idx = Seqops.IndexOfLp <int>(el, lst);
                Console.WriteLine("IndexOf({0}, {1}): {2}", el, res, idx);

                int newVal = 50;
                Console.Write("{0}.Add({1}): ", res, newVal);
                lst.Add(newVal);
                res = Util.MkString(lst);
                Console.WriteLine("{0}", res);
            }
            Console.WriteLine(new string('-', 40));

            int nPascal = 5;

            int[][] arrPascal = Classic.PascalTriAdd(nPascal);
            Console.WriteLine("PascalTri(n: {0}): ", nPascal);
            Classic.PrintPascalTri(nPascal, arrPascal);
            Console.WriteLine(new string('-', 40));

            int ndisks = 4, lenHanoi = (int)Math.Pow(2.0f, ndisks) - 1;

            int[][] arrHanoi = ClassicPuzzles.Hanoi(1, 2, 3, ndisks);
            Console.WriteLine("Hanoi(src: 1, dest: 2, spare: 3, ndisks: {0}): ",
                              ndisks);
            for (int i = 0; lenHanoi > i; ++i)
            {
                Console.WriteLine("move #{0,-2}: move from {1} to {2}", i + 1,
                                  arrHanoi[i][0], arrHanoi[i][1]);
            }
            Console.WriteLine(new string('-', 40));

            int numqueens = 8, queensNdx = rnd.Next(0, 50);

            int[] arrNqueens = ClassicPuzzles.Nqueens(queensNdx, numqueens);

            Console.WriteLine("Nqueens(ndx: {0}, numqueens: {1}):",
                              queensNdx, numqueens);
            Console.Write("{");
            for (int r = 0; numqueens > r; ++r)
            {
                Console.Write("({0}, {1}), ", (char)('a' + r), arrNqueens[r]);
            }
            Console.WriteLine("}");

            for (int r = 0; numqueens > r; ++r, Console.WriteLine())
            {
                Console.Write("'{0}'", numqueens - 1 - r);
                for (int c = 0; numqueens > c; ++c)
                {
                    Console.Write("'{0}'",
                                  (numqueens - 1 - r) == arrNqueens[c] ? 'Q' : '.');
                }
            }
            Console.Write("' '");
            for (int c = 0; numqueens > c; ++c)
            {
                Console.Write("'{0}'", (char)('a' + c));
            }
            Console.WriteLine("\n");
            Console.WriteLine(new string('-', 40));

            //pers = new Person("John", 32);
            pers = new Person {
                Name = "I.M. Computer", Age = 32
            };

            Trace.Assert(pers.GetType() == typeof(Person),
                         "Debug Error: Type mismatch");
            Trace.Assert(pers is Object,
                         "Trace Error: Type inheritance mismatch");
            Console.WriteLine("{0}", pers.ToString());
            Console.Write("pers.Age = {0}: ", 33);
            pers.Age = 33;
            Console.WriteLine("{0}", pers.ToString());
            Console.WriteLine(new string('-', 40));
        }