コード例 #1
0
        public void Run()
        {
            TestPointer t = new TestPointer();

            t.RunTestPointer();
            //Wskaźniki i bufory o ustalonym rozmiarze mogą zostać użyte tylko w kontekście słowa kluczowego „unsafe”



            int x = 10;
            int y = 100;

            Console.WriteLine("x={0}; y={0}", x, y);

            unsafe {
                swap(&x, &y);
            }

            Console.WriteLine("x={0}; y={0}", x, y);


            fixedIntBuffer b = new fixedIntBuffer();

            for (int i = 0; i < 1024; i++)
            {
                unsafe {
                    *(b._buffer + i) = 1024 - i;
                }
            }


            for (int i = 0; i < 1024; i++)
            {
                unsafe {
                    Console.WriteLine(*(b._buffer + i));
                }
            }
        }
コード例 #2
0
        static void Main(string[] args)
        {
            void Fun1(in int i)
            {
                int a = 10;

                //i = a;
                Console.WriteLine("Nie ma możliwości zmiany danej wejściowej");
            }

            void Fun2(out int i)
            {
                int a = 11;

                i = a;
            }

            void Fun3(ref int i)
            {
                int a = 12;

                i = a;
            }

            void Fun4(int i)
            {
                int a = 13;

                i = a;
            }

            void Cwiczenie_1d(in string s)
            {
                Console.WriteLine("Wywołano funkcję z modyfikatorem in!");
            }

            /*void Cwiczenie_1d(out string s)
             * {
             *  Console.WriteLine("Wywołano funkcję z modyfikatorem out!");
             * }*/

            void Fun5(Point p)
            {
                Point p1 = new Point(10, 10);

                p.x = p1.x;
                p.y = p1.x;
            }

            void Fun6(ref Point p)
            {
                Point p1 = new Point(20, 20);

                p.x = p1.x;
                p.y = p1.x;
            }

            bool powtorka = true;

            while (powtorka)
            {
                Console.WriteLine("Podaj numer cwiczenia");
                string cwiczenie = Console.ReadLine();
                if (cwiczenie == "1")
                {
                    int x = 1;
                    Console.WriteLine("Zmienna int x=1");
                    Console.WriteLine("Przekazanie x do fun1");
                    Fun1(in x);
                    Console.WriteLine("Wartosc po przekazaniu: " + x.ToString());
                    Console.WriteLine("Przekazanie x do fun2");
                    Fun2(out x);
                    Console.WriteLine("Wartosc po przekazaniu: " + x.ToString());
                    Console.WriteLine("Przekazanie x do fun3");
                    Fun3(ref x);
                    Console.WriteLine("Wartosc po przekazaniu: " + x.ToString());
                    Console.WriteLine("Przekazanie x do fun4");
                    Fun4(x);
                    Console.WriteLine("Wartosc po przekazaniu: " + x.ToString());

                    short y = 1;
                    Console.WriteLine("");
                    Console.WriteLine("Zmienna int y=1");
                    Console.WriteLine("Przekazanie y do fun1");
                    Fun1(y);
                    Console.WriteLine("Wartosc po przekazaniu: " + y.ToString());
                    Console.WriteLine("Przekazanie y do fun2");
                    //Fun2(out y);
                    Console.WriteLine("Nie ma możliwości przekazanie zmiennej typu short z modyfikatorem out");
                    Console.WriteLine("Przekazanie y do fun3");
                    //Fun3(ref y);
                    Console.WriteLine("Nie ma możliwości przekazanie zmiennej typu short z modyfikatorem ref");
                    Console.WriteLine("Przekazanie y do fun4");
                    Fun4(y);
                    Console.WriteLine("Wartosc po przekazaniu: " + y.ToString());

                    Console.WriteLine("Nie ma możliwości zdefiniowania dwóch funkcji o tej samej nazwie różniących się jedynie modyfikatorem in i out.");

                    Point p = new Point(1, 1);
                    Console.WriteLine("");
                    Console.WriteLine("Utworzono obiekt Point o x=1 y=1");
                    Console.WriteLine("Przekazanie p do fun5");
                    Fun5(p);
                    Console.WriteLine("Wartosci po przekazaniu: x=" + p.x.ToString() + " y=" + p.y.ToString());
                    Console.WriteLine("Przekazanie p do fun6");
                    Fun6(ref p);
                    Console.WriteLine("Wartosci po przekazaniu: x=" + p.x.ToString() + " y=" + p.y.ToString());
                    Console.WriteLine("Przypisanie do obiektu p wskaźnika null.");
                    p = null;
                    Console.WriteLine("Przekazanie p do fun5");
                    //Fun5(p);
                    Console.WriteLine("Nie można przekazać zmiennej ze wskaźnikiem null do Fun5 - program generuje wyjątek");
                    Console.WriteLine("Przekazanie p do fun6");
                    //Fun6(ref p);
                    Console.WriteLine("Nie można przekazać zmiennej ze wskaźnikiem null do Fun5 - program generuje wyjątek");
                }
                if (cwiczenie == "2")
                {
                    TestPointer.Cwiczenie2();
                    Console.WriteLine("Po usunieciu unsafe nie ma mozliwosci skorzystania z modyfikatora fixed \n");

                    Console.WriteLine("Zadeklarowano zmienne int a=5 i int b=10 oraz przekazano je do funkcji swap.");
                    int a = 5;
                    int b = 10;
                    unsafe
                    {
                        Swap(&a, &b);
                    }

                    Console.WriteLine("Wartosci po wywolaniu funkcji swap: a=" + a.ToString() + " b=" + b.ToString());

                    Console.WriteLine("Alokacja bufora pamięci typu int");

                    unsafe
                    {
                        int   lBufor = 1024;
                        int[] bufor  = new int[lBufor];
                        fixed(int *pBufor = bufor)
                        {
                            for (int i = 0; i < lBufor; i++)
                            {
                                *(pBufor + i) = i;
                            }

                            Console.WriteLine("Zawartosc bufora: ");
                            for (int i = 0; i < lBufor; i++)
                            {
                                Console.Write(*(pBufor + i) + " ");
                            }
                        }
                    }
                }
                if (cwiczenie == "3")
                {
                    bool     cw3 = true;
                    string[] tab = new string[10];
                    while (cw3)
                    {
                        Console.WriteLine("Podaj znak do tablicy (Podanie 'N' wychodzi z programu)");
                        string ciag = Console.ReadLine();
                        if (ciag == "N")
                        {
                            cw3 = false;
                            break;
                        }
                        for (int i = 9; i >= 0; i--)
                        {
                            if (i == 0)
                            {
                                tab[i] = ciag;
                            }
                            else
                            {
                                tab[i] = tab[i - 1];
                            }
                        }
                        for (int i = 0; i < 10; i++)
                        {
                            Console.WriteLine("Element w tablicy: " + i + " ma wartość: " + tab[i]);
                        }
                    }
                }
                if (cwiczenie == "4")
                {
                    int[] tab = new int[5];
                    for (int i = 0; i < 5; i++)
                    {
                        try
                        {
                            Console.WriteLine("Podaj " + (i + 1).ToString() + " liczbę");
                            tab[i] = int.Parse(Console.ReadLine());
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("Nastąpił wyjątek: " + e);
                        }
                    }
                    Console.WriteLine("Liczby w odwrotnej kolejności: ");
                    for (int i = 4; i >= 0; i--)
                    {
                        Console.WriteLine(tab[i]);
                    }
                }

                if (cwiczenie == "5")
                {
                    int[] tab = new int[5];
                    for (int i = 0; i < 5; i++)
                    {
                        try
                        {
                            Console.WriteLine("Podaj " + (i + 1).ToString() + " liczbę");
                            tab[i] = int.Parse(Console.ReadLine());
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("Nastąpił wyjątek: " + e);
                        }
                    }
                    Console.WriteLine("Liczby w odwrotnej kolejności: ");
                    int count = 0;
                    for (int i = 0; i < 4; i++)
                    {
                        for (int j = i + 1; j < tab.Length; j++)
                        {
                            if (tab[i] == tab[j])
                            {
                                count++;
                                break;
                            }
                        }
                    }
                    Console.WriteLine("Liczba powtarzających się liczb: " + count);
                }

                if (cwiczenie == "6")
                {
                    int[,] tab1 = new int[5, 5];
                    int[,] tab2 = new int[5, 5];
                    int[,] suma = new int[5, 5];

                    Random rand = new Random();

                    for (int i = 0; i < 5; i++)
                    {
                        for (int j = 0; j < 5; j++)
                        {
                            tab1[i, j] = rand.Next(100);
                            tab2[i, j] = rand.Next(100);
                            suma[i, j] = tab1[i, j] + tab2[i, j];
                        }
                    }

                    Console.WriteLine("Wartosci pierwszej tablicy: ");
                    string ciag;
                    for (int i = 0; i < 5; i++)
                    {
                        ciag = null;
                        for (int j = 0; j < 5; j++)
                        {
                            if (j == 0)
                            {
                                ciag = tab1[i, j].ToString();
                            }
                            else
                            {
                                ciag = ciag + " " + tab1[i, j].ToString();
                            }
                        }
                        Console.WriteLine(ciag);
                    }

                    Console.WriteLine("Wartosci drugiej tablicy: ");
                    for (int i = 0; i < 5; i++)
                    {
                        ciag = null;
                        for (int j = 0; j < 5; j++)
                        {
                            if (j == 0)
                            {
                                ciag = tab2[i, j].ToString();
                            }
                            else
                            {
                                ciag = ciag + " " + tab2[i, j].ToString();
                            }
                        }
                        Console.WriteLine(ciag);
                    }

                    Console.WriteLine("Suma tablic: ");
                    for (int i = 0; i < 5; i++)
                    {
                        ciag = null;
                        for (int j = 0; j < 5; j++)
                        {
                            if (j == 0)
                            {
                                ciag = suma[i, j].ToString();
                            }
                            else
                            {
                                ciag = ciag + " " + suma[i, j].ToString();
                            }
                        }
                        Console.WriteLine(ciag);
                    }

                    Console.WriteLine("Własności talbicy wynikowej: ");
                    Console.WriteLine("Wartosc Length: " + suma.Length);
                    Console.WriteLine("Wartosc LongLength: " + suma.LongLength);
                    Console.WriteLine("Wartosc Rank: " + suma.Rank);
                }

                if (cwiczenie == "7")
                {
                    int[,] arr = new int[3, 3];
                    arr[0, 0]  = 1;
                    arr[0, 1]  = 0;
                    arr[0, 2]  = -1;
                    arr[1, 0]  = 0;
                    arr[1, 1]  = 0;
                    arr[1, 2]  = 1;
                    arr[2, 0]  = -1;
                    arr[2, 1]  = -1;
                    arr[2, 2]  = 0;

                    int wyznacznik = (arr[0, 0] * arr[1, 1] * arr[2, 2]) + (arr[0, 1] * arr[1, 2] * arr[2, 0]) + (arr[0, 2] * arr[1, 0] * arr[2, 1]) - (arr[0, 2] * arr[1, 1] * arr[2, 0]) - (arr[0, 1] * arr[1, 0] * arr[2, 2]) - (arr[0, 0] * arr[1, 2] * arr[2, 1]);

                    Console.WriteLine("Wyznacznik podanej macierzy wynosi: " + wyznacznik);
                }

                if (cwiczenie == "8")
                {
                    int[][] tab1 = new int[5][];
                    tab1[0] = new int[3];
                    tab1[1] = new int[6];
                    tab1[2] = new int[4];
                    tab1[3] = new int[5];
                    tab1[4] = new int[3];

                    tab1[0][0] = 1;
                    tab1[0][1] = 2;
                    tab1[0][2] = 3;
                    tab1[1][0] = 4;
                    tab1[1][1] = 5;
                    tab1[1][2] = 6;
                    tab1[1][3] = 7;
                    tab1[1][4] = 8;
                    tab1[1][5] = 9;
                    tab1[2][0] = 10;
                    tab1[2][1] = 11;
                    tab1[2][2] = 12;
                    tab1[2][3] = 13;
                    tab1[3][0] = 14;
                    tab1[3][1] = 15;
                    tab1[3][2] = 16;
                    tab1[3][3] = 17;
                    tab1[3][4] = 18;
                    tab1[4][0] = 19;
                    tab1[4][1] = 20;
                    tab1[4][2] = 21;

                    Console.WriteLine("Tablica schodkowa, pierwszy sposób inicjalizacji:");

                    foreach (var tab in tab1)
                    {
                        string wypisz = "";
                        foreach (var t in tab)
                        {
                            wypisz = wypisz + t.ToString() + " ";
                        }
                        Console.WriteLine(wypisz);
                    }

                    int[][] tab2 = new int[5][];
                    tab2[0] = new int[] { 1, 2, 3 };
                    tab2[1] = new int[] { 3, 5, 6, 7, 8, 9 };
                    tab2[2] = new int[] { 10, 11, 12, 13 };;
                    tab2[3] = new int[] { 14, 15, 16, 17, 18 };
                    tab2[4] = new int[] { 19, 20, 21 };


                    Console.WriteLine("Tablica schodkowa, drugi sposób inicjalizacji:");

                    foreach (var tab in tab2)
                    {
                        string wypisz = "";
                        foreach (var t in tab)
                        {
                            wypisz = wypisz + t.ToString() + " ";
                        }
                        Console.WriteLine(wypisz);
                    }
                }

                Console.WriteLine("Powtórzyć program? [T/N]");
                string pytanie = Console.ReadLine();
                if (pytanie == "N" || pytanie == "n")
                {
                    powtorka = false;
                }
            }
        }