- •Уровни языков программирования
- •Язык c#
- •Переменные и константы
- •Числа без знака
- •Числа со знаком
- •Числа с плавающей точкой
- •Текстовые символы
- •Логический тип данных
- •Выражения и операторы с#
- •Составные операторы
- •Поразрядные операторы
- •Логические операторы
- •Операторы отношения
- •Приоритеты операторов
- •Работа с консолью
- •Преобразование типов
- •Оператор явного преобразования типов
- •Преобразование типов констант
- •Алгоритмизация и решение задач Понятие алгоритма
- •Словесное описание
- •Блок-схема
- •Описание Блоков
- •Псевдокод
- •Реализация алгоритмических конструкций в с# Следование
- •Ветвление
- •Ветвление и условный оператор
- •Вложенные условия
- •Применение логических операций
- •Цикл Пока
- •Цикл Делать-Пока
- •Цикл с параметром
- •Прерывание и возобновление цикла
- •Оператор goto
- •Особые виды циклов
- •Сложные типы данных – массивы чисел и символов Одномерные массивы
- •Использование оператора foreach
- •Типы задач обработки одномерных числовых массивов
- •Многомерные массивы
- •Типы задач обработки двумерных числовых массивов
- •Невыровненные (ступенчатые) массивы
- •Обработка массива символов
- •Работа с текстовыми строками
- •Базовые операции со строками
- •Методы типа string
- •Форматирование текстовых строк
- •Функции
- •Описание и использование функций
- •Возвращаемые значения
- •Передача параметров
- •Массивы параметров
- •Передача параметров по ссылке и по значению
- •Выходные параметры
- •Область действия переменных
- •Глобальные переменные
- •Область действия переменных и управляющие конструкции
- •Рекурсия
- •Структуры
- •Работа с текстовыми файлами
- •Работа с двоичными файлами
Область действия переменных
Возможно, при изучении способов передачи параметров функциям, не совсем понятно, зачем вообще нужно организовывать обмен данными между ними. Дело в том, что в С# доступ к переменным может осуществляться только из определенных участков кода. Принято говорить, что переменная имеет определенную область действия, внутри которой она является доступной.
Глобальные переменные
После изучения глобальных переменных может возникнуть вопрос, почему мы всегда не прибегаем к такому способу обмена данными с функциями. Действительно, существуют определенные ситуации, когда этот способ передачи данных оказывается более предпочтительным, однако имеется не меньшее (если не большее) число ситуаций, когда он менее удобен. Стоит ли применять глобальные переменные, зависит от способа использования каждой конкретной функции.
Проблема глобальных переменных заключается в том, что они, по большому счету, оказываются непригодными для функций "общего назначения", которые способны работать с любыми передаваемыми им данными и не ограничиваются данными, задаваемыми конкретной глобальной переменной.
Область действия переменных и управляющие конструкции
В предыдущем разделе утверждалось, что область действия переменных распространяется на блок кода, в котором они описаны, и на все блоки, непосредственно в него вложенные. Это также применимо и к другим типам блоков, например, к программным конструкциям, использующим ветвление и циклы.
В качестве заключительного замечания необходимо упомянуть о "наилучшей практике". Вообще говоря, лучше всего объявлять и инициализировать переменные перед теми блоками кода, в которых они используются. Исключением из этого правила могут быть переменные циклов, объявление которых является составной частью самого цикла. Например:
for(int i = 0; i < 10; i++)
{
. . .
}
Рекурсия
Иногда возникают ситуации, когда в теле функции необходимо вызвать экземпляр этой же функции. Такое явление называется рекурсией.
Использование рекурсии позволит вам в некоторых случаях избежать сложных циклов и проверок. Типичным примером использования рекурсии является функция нахождения факториала числа. Программа, использующая такую функцию, может выглядеть следующим образом:
using System;
namespace Factorial
{
class Program
{
static void Main(string[] args)
{
for (int i = 1; i < 10; i++)
{
Console.WriteLine("Факториал числа {0} = {1}",
i, Factorial(i));
}
Console.ReadLine();
}
static int Factorial(int x)
{
if(x == 1)
return 1;
else
return x * Factorial(x - 1);
}
}
}
Рассмотрим практический пример. Реализуем перечислимый тип orientation для указания направления на стороны света:
using System;
namespace Orientation
{
class Program
{
enum orientation : byte
{
north = 1,
south = 2,
east = 3,
west = 4
}
static void Main(string[] args)
{
orientation myDirection = orientation.north;
Console.WriteLine("myDirection = {0}", myDirection);
Console.ReadLine();
}
}
}
