Pull to refresh

Visual C# for beginners. Лекция 6. Функции

Reading time 9 min
Views 4.8K

Всем привет!


Прошу простить за столько долгое отсутствие лекций видео-курса. Было несколько причин, по которым не было возможности записать, но теперь, думаю, что дальше видео буду записывать более-менее стабильно.

А теперь по теме


В этой лекции вы узнаете о функциях, параметрах функций, области видимости переменных и еще некоторых полезных вещах, которые, несомненно, очень пригодятся в дальнейшем. Лекция получилась еще длиннее, чем предыдущие, поэтому, начиная со следующей, буду разбивать на 2 части, потому что материала действительно очень много!

Ссылки на предыдущие лекции

Лекция 1. Введение
Лекция 2. Hello, World! и знакомство с Visual C# Express 2010
Лекция 3. Переменные и выражения
Лекция 4. Условия и циклы
Лекция 5. Преобразование типов. Перечисления, структуры, массивы

Ответы на предыдущее домашнее задание:

1. Какая из операций не может выполняться неявно:
в, г
bool в string
byte в float

2. Создайте на базе типа short код для перечисления color, содержащего 4 разных цвета. Может ли такое перечисление основываться на byte?
Ответ: Для создания перечисления можно использовать пример из 4 лекции. Можно использовать тип byte.

3. Будет ли компилироваться следующий код и почему?
string[] blab = new string[5]
string[5] = 5th string;

* This source code was highlighted with Source Code Highlighter.

Ответ: нет, так как значение должно присваиваться массиву (blab[5] = «5th string»), строковое значение должно быть в кавычках, а также индекс находится за пределами массива.

Приятного просмотра!


Также как дополнение — видео, которое решил не выкладывать в отдельный пост:
Visual C# for beginners — Code Upgrade #1


Исходники из лекций

Лабораторная работа №1. Поиск наибольшего элемента в массиве
    static int MaxValue(int[] intArray)
    {
      int maxVal = intArray[0];

      for(int i = 1; i < intArray.Length; i++)
      {
        if (intArray[i] > maxVal)
          maxVal = intArray[i];
      }
      return maxVal;
    }

    static void Main(string[] args)
    {
      int[] myArray = {1, 8, 3, 6, 2, 5, 9, 3, 0, 2};
      int maxVal = MaxValue(myArray);
      Console.WriteLine("The maximum value in myArray is {0}", maxVal);
    }


* This source code was highlighted with Source Code Highlighter.


Лабораторная работа №2. Использование массива параметров
    static int SumVals(params int[] vals)
    {
      int sum = 0;
      foreach (int val in vals)
      {
        sum += val;
      }
      return sum;
    }

    static void Main(string[] args)
    {
      int sum = SumVals(1, 5, 2, 9, 8);
      Console.WriteLine("Summed values = {0}", sum);
    }


* This source code was highlighted with Source Code Highlighter.


Лабораторная работа №3. Передача параметра по ссылке
    static void ShowDouble(ref int val)
    {
      val *= 2;
      Console.WriteLine("Doubled value is {0}", val);
    }

    static void Main(string[] args)
    {
      int myNumber = 5;
      Console.WriteLine("myNumber is {0}", myNumber);
      ShowDouble(ref myNumber);
      Console.WriteLine("myNumber is {0}", myNumber);
    }


* This source code was highlighted with Source Code Highlighter.


Лабораторная работа №4. Передача параметра по ссылке
    static void ShowDouble(ref int val)
    {
      val *= 2;
      Console.WriteLine("Doubled value is {0}", val);
    }

    static void Main(string[] args)
    {
      int myNumber = 5;
      Console.WriteLine("myNumber is {0}", myNumber);
      ShowDouble(ref myNumber);
      Console.WriteLine("myNumber is {0}", myNumber);
    }


* This source code was highlighted with Source Code Highlighter.


Лабораторная работа №5. Выходные параметры
  static int MaxValue(int[] intArray, out int maxIndex)
    {
      int maxVal = intArray[0];
      maxIndex = 0;
      for (int i = 1; i < intArray.Length; i++)
      {
        if (intArray[i] > maxVal)
        {
          maxVal = intArray[i];
          maxIndex = i;
        }
      }
      return maxVal;
    }

    static void Main(string[] args)
    {
      int[] myArray = {1, 8, 3, 6, 2, 5, 9, 3, 0, 2};
      int maxIndex;
      Console.WriteLine("Maximum value in myArray is {0}", MaxValue(myArray, out maxIndex));
      Console.WriteLine("First index with max value in element {0}", maxIndex + 1);
    }


* This source code was highlighted with Source Code Highlighter.


Лабораторная работа №6. Область видимости переменных
    static string myString;

    static void Write()
    {
      string myString = "String defined in Write()";
      Console.WriteLine("Now in Write()");
      Console.WriteLine("Local string myString = {0}", myString);
      Console.WriteLine("Global string myString = {0}", Program.myString);
    }

    static void Main(string[] args)
    {
      string myString = "String defined in Main()";
      Program.myString = "Global string";
      Write();
      Console.WriteLine("\nNow in Main()");
      Console.WriteLine("Local string = {0}", myString);
      Console.WriteLine("Global string myString = {0}", Program.myString);
    }


* This source code was highlighted with Source Code Highlighter.


Лабораторная работа №7. Аргументы командной строки
    static void Main(string[] args)
    {
      Console.WriteLine("{0} command line arguments were specified:", args.Length);
      foreach (string arg in args)
      {
        Console.WriteLine(arg);
        Console.ReadKey();
      }
    }


* This source code was highlighted with Source Code Highlighter.


Лабораторная работа №8. Использование функций в структурах
    struct customerName
    {
      public string firstName, lastName;
      public string Name()
      {
        return firstName + " " + lastName;
      }
    }

    static void Main(string[] args)
    {
      customerName myCustomer;
      myCustomer.firstName = "John";
      myCustomer.lastName = "Franklin";
      Console.WriteLine(myCustomer.Name());
    }


* This source code was highlighted with Source Code Highlighter.


Лабораторная работа №9. Перегрузка функций
    static int MaxValue(int[] intArray)
    {
      int maxVal = intArray[0];

      for (int i = 1; i < intArray.Length; i++)
      {
        if (intArray[i] > maxVal)
          maxVal = intArray[i];
      }
      return maxVal;
    }

    static double MaxValue(double[] doubleArray)
    {
      double maxVal = doubleArray[0];

      for (int i = 1; i < doubleArray.Length; i++)
      {
        if (doubleArray[i] > maxVal)
          maxVal = doubleArray[i];
      }
      return maxVal;
    }

    static void Main(string[] args)
    {
      int[] myIntArray = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 };
      double[] myDoubleArray = { 1.3, 8.6, 3.8, 6.1, 2.6, 5.8, 9.6, 3.4, 0.3, 2.1 };
      int intVal = MaxValue(myIntArray);
      double doubleVal = MaxValue(myDoubleArray);
      Console.WriteLine("The maximum value in myIntArray is {0}", intVal);
      Console.WriteLine("The maximum value in myDoubleArray is {0}", doubleVal);
    }


* This source code was highlighted with Source Code Highlighter.


Лабораторная работа №10. Делегаты
    delegate double ProcessDelegate(double param1, double param2);
    static double Multiply(double param1, double param2)
    {
      return param1 * param2;
    }
    static double Divide(double param1, double param2)
    {
      return param1/param2;
    }

    static void Main(string[] args)
    {
      ProcessDelegate process;
      Console.WriteLine("Enter 2 numbers separated with comma:");
      string input = Console.ReadLine();
      int commaPos = input.IndexOf(',');
      double param1 = Convert.ToDouble(input.Substring(0, commaPos));
      double param2 = Convert.ToDouble(input.Substring(commaPos + 1, input.Length - commaPos - 1));
      Console.WriteLine("Enter M to multiply or D to divide:");
      input = Console.ReadLine();
      process = input == "M" ? new ProcessDelegate(Multiply) : new ProcessDelegate(Divide);
      Console.WriteLine("Result: {0}", process(param1, param2));
    }


* This source code was highlighted with Source Code Highlighter.


Упражнения для самостоятельной работы

1. Две приведенных ниже функции содержат ошибки. Назовите их
    static bool Write()
    {
      Console.WriteLine("Text output from function.");
    }
    static void myFunction(string label, params int[] args, bool showLabel)
    {
      if (showLabel)
        Console.WriteLine(label);
      foreach (int i in args)
      {
        Console.WriteLine("{0}", i);
      }
    }


* This source code was highlighted with Source Code Highlighter.


2. Напишите приложение, использующее два аргумента командной строки для помещения значений, соответственно, в строку и целочисленную переменную, а затем отражающее эти значения на экране.

3. Измените структуру так, чтобы она включала функцию, возвращающую общую цену заказа:
    struct order
    {
      public string itemName;
      public int unitCount;
      public double unitCost;
    }


* This source code was highlighted with Source Code Highlighter.


Спасибо за внимание! Подписывайтесь на мой канал Vimeo и официальную страницу ВКонтакте, чтобы первыми узнать о выходе нового видео.
Tags:
Hubs:
+2
Comments 2
Comments Comments 2

Articles