Модуль: C#.cПодпрограммы: процедуры и функции - 1


11. Изменяющиеся аргументы

☰ Теория

Задача
Составить процедуру, которая меняет местами значения двух переменных.

Особенность данной задачи заключается в том, что нам надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей программе.

Попробуем написать процедуру таким образом:
static void Swap (int a, int b)   // при таком описании параметров процедуры, 
{                                 // будет происходить копирование значений аргументов (x и y)
     int c;                       // переменные a и b - самостоятельные переменные, не связанные с x и y  
     c = a; a = b; b = c;
}
static void Main()
{
     int x = 1, y = 2;
     Swap (x, y);         //значения переменных x и y (аргументы) копируются в параметры a и b, x = 1, y = 2   
}                                       
Если запустить данную программу, то можно увидеть, что значения переменных x и y не изменилось. Для того чтобы параметры изменяли значения аргументов, необходимо использовать передачу данных по ссылке. Для этого перед названием типа данных в заголовке подпрограммы необходимо написать ref.
void Swap ( ref int a, ref int b )  // теперь переменные a и b получают адреса переменных x и y в памяти
{
      int c; 
      c = a; a = b; b = c;
}
static void Main() 
{ 
    int x = 1, y = 2; 
    Swap (ref x, ref y); 

Применение: если вы передаете аргумент по ссылке, то при вызове процедуры на этом месте может стоять только имя переменной (НЕ число и НЕ арифметическое выражение).

Нельзя вызвать процедуру таким образом:
Swap(x, 4);
Swap(5+x, y);

Составить процедуру, которая меняет местами значения двух переменных. Найдите и исправьте ошибки в данной процедуре.
 
Пример
Входные данные Выходные данные
1 1
2
2
1

Вставьте недостающие фрагменты кода
C#
1
using System;      
2
class Program      
3
{       
4
5
    {      
6
        int c;      
7
        c = a; a = b; b = c;      
8
    }      
9


                                                   
10
    static void Main()      
11
    {      
12
        int x = Convert.ToInt32(Console.ReadLine());      
13
        int y = Convert.ToInt32(Console.ReadLine());      
14
15
        Console.WriteLine(x);      
16
        Console.WriteLine(y);      
17
    }      
18
}      
19


                                                   
20