ГПОУ «Ленинск-Кузнецкий политехнический техникум»
Основы алгоритмизации
и программирования
Функции и процедуры
Преподаватель Щеглова Алена Александровна
Теоретическое занятие
для студентов II курса
Ленинск-Кузнецкий, 2023
Основные понятия
С# — объектно-ориентированный язык, поэтому написанная на нем программа представляет собой совокупность взаимодействующих между собой классов.
Общая структура программы
using System;
namespace HelloApp
{
class Program
{
static void Main( string [] args)
{
}
}
}
Директива using System разрешает использовать имена стандартных классов из пространства имен System
Ключевое слово namespace создает для проекта собственное пространство имен, названное по умолчанию ConsoleApplication1.
Функция Мain является главной функцией приложения и точкой входа программы – точнее она является методом класса Program
Общая структура программы
using System;
namespace HelloApp
{
class Program
{
static void Main( string [] args)
{
}
}
}
Функция в С# может быть объявлена только в рамках класса
Функции и процедуры
Функция - подпрограмма.
Программа - это решение прикладной задачи
Функция – это решение в рамках программы.
Функция позволяет уменьшить размер программы за счет того, что не нужно повторно писать какой-то фрагмент кода, достаточно вызвать объявленную функцию.
Функции, которые не возвращают значение, называют процедурами
Функции в С# называют методами.
s ) return f; else return s; } " width="640"
Структура
Первая строка в объявлении функции называется заголовком
[модификатор доступа] [тип возвращаемого значения] [имя функции] ([аргументы]) { // тело функции }
public int max(int f, int s)
{
if ( f s )
return f;
else
return s;
}
Структура
Модификатор доступа (области видимости) может быть
- private —ограниченный доступ к методу только из содержащего его класса или структуры
- public — доступ из любого фрагмента кода в рамках приложения
Задание
Назовите открытые и закрытые методы
private double A()
{ }
public int B()
{ }
public string Stepen(int a, int b)
{ }
Структура
[тип возвращаемого значения]
- Т ип возвращаемого значения используется для указания типа возвращаемого значения
- Если функция, возвращает целое число, то нужно указать тип int
- Если функция не возвращает никакого значения, то для этого используется ключевое слово void (ghjwtlehf)
public void max(int f, int s)
{
}
public int max(int f, int s)
{
}
Структура
[имя функции]
- Имя функции должно отражать суть метода.
Структура
([аргументы])
- Аргументы – это данные, которые необходимы для выполнения функции.
- Аргументы записываются в формате
- [тип] [идентификатор]
- Если аргументов несколько, они отделяются запятой. Аргументы могут отсутствовать.
public void max()
{
}
public void max(int f)
{
}
public int max(int f, int s)
{
}
Задание
Метод A, В и С являются закрытыми или открытыми процедурами или функцией?
Назовите параметры
Назовите имена методов
Назовите типы возвращаемых значений
private void A()
{}
public int B()
{}
public double Stepen(int a, int b)
{
double r;
r = ( double )Math.Pow(a, b);
return (r);
}
Тело функции Stepen
Задание
public bool StartService(string serviceName)
Назовите:
- модификатор доступа,
- тип возвращаемого значения,
- идентификатор (имя),
- параметр (аргумент).
Функция Main
Функция Main является главной функцией приложения и точкой входа программы
static void Main(string[] args)
{ }
static - cтатическое поле, свойства относятся ко всему классу/ всей структуре, для обращения к подобным членам необяза-тельно создавать экземпляр класса / структуры
Вызов
int res = new Foo().S1(1,2);
int res = Foo.S2(10, 20);
class Foo {
public int S1(int a, int b)
{ return a + b; }
public static int S2(int a, int b)
{ return a + b; }
}
Функция Main
static void Main(string[] args)
{
private void A() {}
public int B() {}
public double Stepen(int a, int b)
{
double r;
r = ( double) Math.Pow(a, b);
return (r); }
}
Найти ошибки, объяснить их, исправить
static void Main(string[] args)
{ }
private void A() {}
public int B() {}
ошибка
private void A() {
public int B() {} }
ошибка
Проверка
Задание
Назовите имя метода
Это процедура или функция?
Что выполняет тело метода?
Какие параметры содержит метод?
public void SayHello()
{
Console.WriteLine("Hello");
}
Различия функции от процедуры
int Factorial()
{ return 1;}
В функции в качестве типа возвращаемого значения вместо void используется любой другой тип. В данном случае тип int.
В функциях обязательно должен использоваться оператор return, после которого ставится возвращаемое значение.
Оператор return возвращает значение и производит выход из метода.
Возвращаемое значение должно иметь тот же тип, что значится в определении функции, т.к. функция возвращает значение типа int, после оператора return стоит число 1 - которое неявно является объектом типа int.
Различия функции от процедуры
string Hello()
{ return "Hell to World"; }
Назовите:
Возвращаемый тип
Функция это или процедура?
Какое значение возвращает оператор return?
return
После оператора return можно указывать выражения, которые возвращают результат вычисления.
static int GetSum()
{ int x = 2;
int y = 3;
return x + y; }
Между возвращаемым типом метода и возвращаемым значением после оператора return должно быть соответствие/ Найти ошибку
static string GetHello()
{ Console.WriteLine("Hello");}
static int GetSum()
{ int x = 2;
int y = 3;
return "5";
22) { return; } else { Console.WriteLine("Hello"); }} Оператор return используется и в процедурах, для того чтобы произвести выход из метода в зависимости от условий 2) static string GetHello() { return "Hello"; Console.WriteLine("After return");//эта строка никогда не выполнится, почему? } " width="640"
return
1)
static void SayHello()
{ int hour = 23;
if(hour 22)
{ return; }
else
{ Console.WriteLine("Hello"); }}
Оператор return используется и в процедурах, для того чтобы произвести выход из метода в зависимости от условий
2)
static string GetHello()
{
return "Hello";
Console.WriteLine("After return");//эта строка никогда не выполнится, почему?
}
ГПОУ «Ленинск-Кузнецкий политехнический техникум»
Основы алгоритмизации
и программирования
Вызов функций и процедур
Преподаватель Щеглова Алена Александровна
Теоретическое занятие
для студентов II курса
Ленинск-Кузнецкий, 2023
Передача значений по параметрам
Для функции
Тип Имя_переменной1=
= new Имя_класса().Имя_метода(Имя_переменной2);
или
new Имя_класса().Имя_метода(Имя_переменной2);
Имя_переменной1 – это имя переменной, которая вызывает метод для получения значения из него, при заданном параметре (Имя_переменной2)
Имя_переменной2 – значение переменной передается в метод.
При передаче аргументов параметрам по значению параметр метода получает не саму переменную, а ее копию и работает с этой копией
Передача значений по параметрам
public int T1(int n)
{ n++;
Console.WriteLine($"Число в методе Т: {n}");
return n; }
static void Main(string[] args)
{ int number = 5;
Console.WriteLine($"Число в методе Т: {number}");
int res = new Program().T1(number);
Console.WriteLine($"Число в методе Т: {number}");
}
При вызове метод T1 получает копию переменной number и увеличивает значение этой копии.
Передача значений по параметрам
Метод
[модификатор доступа] [тип возвращаемого значения] [имя функции] (ref тип параметр1, ref тип параметр2, … )
Вызов
Тип Имя_переменной1=
= new Имя_класса().Имя_метода(ref Имя_переменной2, ref Имя_переменной3, …);
Имя_переменной1 – это имя переменной, которая вызывает метод для получения значения из него, при заданном параметре (Имя_переменной2, Имя_переменной3, …)
Имя_переменной2 – значение переменной передается в метод.
При передаче значений параметрам по ссылке метод получает адрес переменной в памяти. Если в методе изменяется значение параметра, передаваемого по ссылке, то изменяется и значение переменной, которая передается на его место
Передача значений по параметрам
public int T1(ref int n, ref int a)
{
n++;
Console.WriteLine($"Число в методе Т: {n}");
return n;
}
static void Main(string[] args)
{
int number = 5;
Console.WriteLine($"Число в методе Т: {number}");
int res = new Program().T1(ref number, ref number);
Console.WriteLine($"Число в методе Т: {number}");
}
Выходные параметры
Вместо оператора return для возвращения значений используется out
Метод
[модификатор доступа] [тип возвращаемого значения] [имя функции] (тип параметр1, out тип параметр2)
Вызов
new Имя_класса().Имя_метода(Имя_переменной2, out Имя_переменной3);
Выходные параметры
public void T1(int x, int y, out int result)
{
result = x+y;
}
static void Main(string[] args)
{
int number1;
new Program().T1( 1, 5, out number1);
Console.WriteLine(number1); }
// результат 6
Выходные параметры
out позволяет вернуть из метода не одно значение, а несколько
public void T1(int x, int y, out int result, out int proizv)
{
result = x + y;
proizv = x * y;
}
static void Main(string[] args)
{
int sum;
int pr;
new Program().T1(1, 5, out sum, out pr);
Console.WriteLine(sum+ " "+ pr);
}
// 6 5
Выходные параметры
если неизвестен тип значений, которые будут присвоены параметрам, то можно для их определения использовать оператор var
public void T1(int x, int y, out int result)
{
result = x + y;
}
static void Main(string[] args)
{
new Program().T1(1, 5, out var sum);
Console.WriteLine(sum);
}
Входные параметры
Модификатор in указывает, что данный параметр будет передаваться в метод по ссылке, внутри метода его значение параметра нельзя будет изменить.
public void T1(in int x,in int y, out int result)
{
result = x + y;
}
static void Main(string[] args)
{
new Program().T1(1, 5, out var sum);
Console.WriteLine(sum);
}
Задание
void Sum(int x, int y)
{
int result = x + y;
Console.WriteLine($"{x} + {y} = {result}");
}
Sum(10, 15);
void Sum(int x, int y)
{ Console.WriteLine($"{x} + {y} = { x + y }");}
int a = 10, b = 15, c = 6;
Sum(a, b);
Sum(3, c);
Sum(14, 4 + c);
void Sum(int x, int y)
{ Console.WriteLine($"{x} + {y} = { x + y }");}
int a,
int b = 15;
Sum(a, b); // ! Ошибка
При вызове методов значения для параметров можно передавать не по порядку
Именованные параметры
void PrintPerson(string name, int age = 1)
{ Console.WriteLine($"Name: {name} Age: {age}"); }
Вызов
PrintPerson("Tom", age: 37);
PrintPerson(age:41, name: "Bob");
PrintPerson(name:"Sam");}