ОПЕРАТОРЫ ЯЗЫКА C#

Формат документа: pdf
Размер документа: 0.94 Мб




Прямая ссылка будет доступна
примерно через: 45 сек.



  • Сообщить о нарушении / Abuse
    Все документы на сайте взяты из открытых источников, которые размещаются пользователями. Приносим свои глубочайшие извинения, если Ваш документ был опубликован без Вашего на то согласия.

ОПЕРАТОРЫ ЯЗЫКА C#
Программ а на языке С# состоит из последоZl_evghklb операторо каждый из
которых определяет законченное описание некоторого дейстbybaZdZgqbается точкой с
запятой. Все операторы можно разделить на 4 группы: операторы следоZgby операторы
_lления, операторы цикла и операторы передачи упраe_gby.
Операторы следования
Операторы следоZgbyыполняются _kl_klенном порядке: начиная с перh]h^h
последнего. К операторам следования относятся: ujZ`_gb_bkhklZ\ghchi_jZlhj
Любое выражение , за_jrZxs__kylhqdhc с запятой, рассматриZ_lkydZdhi_jZlhj
uiheg_gb_ которого заключается uqbke_gb_f значения ujZ`_gby или uiheg_gb_f
законченного действия, например, uahом метода. Например:
++i; //оператор инкремента
x+= y; //оператор сложения с присZbанием
Con sole .WriteLine (x); //вызов метода
x=Math .Pow (a,b)+ a*b; //вычисление сложного ujZ`_gby
Составной оператор или блок представляет собой последоZl_evghklvhi_jZlhjh,
заключенных  фигурные скобки {}. Блок обладает собст_gghc областью видимости :
объяe_gg ые gmljb блока имена доступны только gmljb данного блока или блоко
eh`_gguo  него. Составные операторы применяются  случае, когда праbeZ языка
предусматриZxl наличие только одного оператора, а логика программы требует
нескольких операторо Наприм ер, тело цикла while должно состоять только из одного
оператора. Если заключить несколько операторо  фигурные скобки, то получится блок,
который будет рассматриZlvkydhfibeylhjhfdZd_^bguchi_jZlhj.
Операторы ветвления
Операторы _lления позheyxl изм енить порядок uiheg_gby операторо в
программе. К операторам ветe_gby относятся услоguc оператор if и оператор u[hjZ
switch.
Услоguchi_jZlhj if
Условный оператор if используется для раз_l\e_gbyijhp_kkZh[jZ[hldb^ZgguogZ
дZgZijZления. Он может иметь одну из форм: сокращенную или полную .
Форма сокращенного оператора if:
if (B) S;
где В – логическое ujZ`_gb_bklbgghklvdhlhjh]hijhеряется; S – оператор: простой
или составной.
При uiheg_gbbkhdjZs_gghcnhjfuhi_jZlhjZ if сначала uqbkey_ тся ujZ`_gb_
B, затем проh^blky анализ его результата: если B истинно, то uihegy_lky оператор S;
если B ложно, то оператор S пропускается. Таким образом, с помощью сокращенной формы
оператора if можно либо uihegblvhi_jZlhj6eb[hijhimklblv_]h
Фо рма полного оператора if :
if (B) S1; else S2;
где B – логическое ujZ`_gb_bklbgghklvdhlhjh]hijhеряется; S1, S2- оператор: простой
или составной.
При uiheg_gbb полной формы оператора if сначала uqbkey_lky значение
ujZ`_gby B, затем анализируется е го результат: если B истинно, то uihegy_lkyhi_jZlhj
S1, а оператор S2 пропускается; если B ложно, то uihegy_lky оператор S2, а S1 –

пропускается. Таким образом, с помощью полной формы оператора if можно u[jZlvh^gh
из двух альтернатиguo^_cklий проце сса обработки данных.
Рассмотрим несколько примероaZibkbmkeh\gh]hhi_jZlhjZ if:
if (a > 0) x=y; // Сокращенная форма c простым оператором
if (++i>0) { x=y; y=2* z;} // Сокращенная форма c составным оператором
if (a > 0 || b<0) x=y; else x=z; // Полна я форма с простым оператором
if (i!= j-1) { x= 0; y= 1;} else {x=1; y:=0;} // Полная форма с составными операторами
Операторы S1 и S2 могут также яeylvkyhi_jZlhjZfb if. Такие операторы называют
eh`_ggufbIjbwlhfdexq_ое слоh else сyau\Z_lkyk[eb жайшим предыдущим слоhf
if, которое еще не сyaZghgbkh^gbf else . Рассмотрим несколько примероZe]hjblfh с
использоZgb_fложенных услоguohi_jZlhjh\ :
Пример 1. Уровни
вложенности
Пример 2. Уровни
вложенности
if (A>B)
if (C>D) X=Y;
else X=Z;
els e X=R;
if (A>B) X=Y;
else if (C>D) X=Z;
else X=R;


Пример 3. Уровни
вложенности
Пример 4 Уровни
вложенности
if (A < B)
if (C < D) X =Y;
else X = Z;
else
if (E < F) X= R;
else X = Q;

if (A< B)
if (C < D)
if (E < F) X= Q;
else X = R;
else X= Z;
else X = Y;


Замечание . Т.к. оператор if допускает наличие только одного оператора дейстby то
можно записывать его без использования блока {}, например, так:
if (x < 0) y = 0; else y=1;
Однако пр едпочтительнее и wlhfkemqZ_klZить блок, начиная его с ноhckljhdbWlh
улучшает читабельность программы и значительно сокращает _jhylghklvhrb[dbijbнесении
последующих изменений. В нашем случае оператор if следует записать так:
if (x < 0)
{
y = 0;
}
else
{
y=1;
}
Далее будем придержиZlvky^Zggh]hijZ\beZg_lhevdh^eyhi_jZlhjZLIghb^ey^jm]bo
операторов.
Рассмотрим несколько примероbkihevahания оператора if.
Пример 1. Найдем наибольшее значение из двух вещественных чисел:

static void Main()
{
Console.Write("x= ");
double x = double.Parse(Console.ReadLine());
2 1 2 1 

1
2

2





 1 2 3




















Console.Write("y=");
double y = double.Parse(Console.ReadLine());
double max;
if (x > y )
{
max=x;
}
else
{
max=y;
}
Console.Wr iteLine("max= {0}", max);
}
Результат работы программы :
x y max
0 0 0
1 -1 1
-2 2 2
Задания .
1. Объясните , почему ^Zgghfijbf_j_g_lj_[m_lkybgbpbZebaZpbyi_j_f_gghcPDx .
2. Измените программу так, чтобы вычислялось наименьшее значение из двух
_s_kl\_gguoqbk_e.

Замечание . Выч ислить максимум из двух чисел можно с помощью метода Math.Max(x,y).
Пример 2. Найдем наибольшее значение из трех _s_klенных чисел:
static void Main()
{
Console.Write("x= ");
double x = double.Parse(Console.ReadLine());
Console.Write("y=");
double y = double.Parse(Console.ReadLine());
Console.Write("z=");
double z = double.Parse(Console.ReadLine());
double max;
if (x > y && x>z)
{
max=x;
}
else
{
if (y>z)
{
max=y;
}
else
{
max=z;
}
}
Console.WriteLine("max= {0}", max) ;
}
Результат работы программы :
x y z max
0 0 0 0

1 -1 2 2
-2 12 2 12
4 -1 -3 4

Задания .
1. Измените программу так, чтобы uqbkeyehkv наименьшее значение из трех
_s_kl\_gguoqbk_e.
2. Решите данную задачу используя метод Math .Min (x,y)
Оператор u[hjZVZLt ch
Оператор u[hjZ switch предназначен для раз_lления процесса вычислений по
нескольким напраe_gbyfNhjfZlhi_jZlhjZ:
switch ( <ujZ`_gb_!)
{
case <константное_ujZ`_gb_B!
[<оператор 1>]; <оператор перехода>;
case <константное_ujZ`_g ие_2>:
[<оператор 2>]; <оператор перехода>;
...
case <константное_ujZ`_gb__ n>:
[<оператор n>]; <оператор перехода>;
[default: <оператор>; ]
}
Замечание . Операторы, записанные  квадратных скобках, яeyxlky необязательными
элементам и  операторе switch . Если они отсутстmxl то могут отсутстhать и
соот_lklующие им операторы перехода.
Выражение, стоящее за ключеuf словом switch , должно иметь арифметический,
симhevguckljhdhый тип или тип указатель. Все константные ujZ`_gby^h лжны иметь
разные значения, но их тип должен соiZ^Zlvklbihfыражения, стоящего gmljbkdh[hd
switch или приh^blvky к нему. Ключеh_ слоh case и расположенное после него
константное ujZ`_gb_gZau\ZxllZd`_f_ldhc case .
Выполнение оператора начинается с uqbke_gby ujZ`_gby расположенного за
ключеuf слоhf switch . Полученный результат сраgbается с меткой case . Если
результат ujZ`_gby соот_lkl\m_l метке case , то uihegy_lky оператор, стоящий после
этой метки, за которым обязательно должен следоZl ь оператор перехода: break , goto и т.д.
В случае отсутстby оператора перехода компилятор u^Zkl сообщении об ошибке. При
использоZgbb оператора break происходит uoh^ из switch и упраe_gb_ передается
оператору, следующему за switch. Если же используется оператор goto , то упраe_gb_
передается оператору, помеченному меткой, стоящей после goto .
Замечания .
Оператор перехода goto лучше использоZlv для перехода по меткам gmljb switch , и не
использоZlv_]h^ey\uoh^Zbahi_jZlhjZ switch .
Для поur_gby прои зh^bl_evghklb рекомендуется размещать _lи, _jhylghklv
u[hjZdhlhjuoy\ey_lkygZb[hevr_c[eb`_dgZqZem< этом случае будет на u[hjlj_[m_fh]h
ZjbZglw будет тратиться меньше j_f_gb .
Пример . По заданному b^m арифметической операции (сложение, uqb тание,
умножение и деление) и двум операндам, u\_klbgZwdjZgj_amevlZl применения данной
операции к операндам.
static void Main()
{
Console.Write("OPER= ");

char oper=char.Parse(Console.ReadLine());
bool ok=true;
Console.Write("A= ");
double a=doub le.Parse(Console.ReadLine());
Console.Write("B= ");
double b=double.Parse(Console.ReadLine());
double res=0;
switch (oper)
{
case '+' :
res = a + b;
break; //1
case ' -' :
res = a - b;
break;
case '*' :
res = a * b;
break;
case ':' :
if (b != 0) //2
{
res = a / b;
break;
}
else
{
goto default;
}
default:
ok = false;
break;
}
if (ok)
{
Console.WriteLine("{0} {1} {2} = {3}", a, oper, b, r es);
}
else
{
Console.WriteLine("error");
}
}
Результат выполнения программы :
oper x y rez
+ 4 5 9
: 4 0 error
% 4 3 error

Задания .
1. Замените  строке 1 оператор break , на оператор goto case ' -' и посмотрите, что
произойдет, если dZq ест_hi_jZpbbвести +.
2. В услоghfhi_jZlhj_ if (см. строку 2) уберите _ldm else и посмотрите, что произойдет.
Дайте этому объяснение.
3. Решите поставленную задачу с использоZgb_fложенных операторо if.

Если необходимо, чтобы для разных меток в ыполнялось одно и то же дейстb_lh
метки перечисляются через дh_lhqb_GZijbf_j :
switch (oper)
{
case '+':
res = a + b;
break;
case ' -':
res = a - b;
break;
case '*':
res = a * b;
break ;
case ':' : case '/' : //перечисление мето к
if (b != 0)
{
res = a / b;
break;
}
else
{
goto default;
}
default:
ok = false;
break ;
}
Операторы цикла
Операторы цикла используются для организации многократно поlhjyxsboky
uqbke_gbc К операторам цикла от носятся: цикл с предуслоb_f while , цикл с
постуслоb_f do while , цикл с параметром for и цикл перебора foreach .
Цикл с предуслоb_f while
Оператор цикла while организует uiheg_gb_ одного оператора (простого или
составного) неиз_klgh_aZjZg__qbkehjZa. Формат цикла while :
while (B) S;
где B – выражение, истинность которого про_jy_lky mkehие завершения цикла); S – тело
цикла (простой или составной оператор).
Перед каждым uiheg_gb_fl_eZpbdeZZgZebabjm_lkyagZq_gb_ыражения В: если
оно истинно, то uihegy_lkyl_ehpbdeZbmijZление передается на поlhjgmxijh\_jdm
услоby В; если значение В ложно – цикл за_jrZ_lkybmijZление передается на оператор,
следующий за оператором S.
Если результат ujZ`_gby B окажется ложным при перhcijhерке, то тело цикла
не uihegblky ни разу. Отметим, что если gmljb цикла не будет оператора (или
операторо  в результате uiheg_gby которых услоb_ B на какой -то итерации станет
ложным, то произойдет зациклиZgb_ то есть неhafh`ghklv uoh^Z из цикла. Поэтому
gmljb тела должны находиться операторы, приh^ysb_ к изменению значения
ujZ`_gby B так, чтобы цикл мог корректно за_jrblvky.
В качестве иллюстрации uiheg_gbypbdeZ while рассмотрим программу uода на
экран целых чисел из интервала от 1 до n.
static v oid Main()

{
Console.Write("N= ");
int n=int.Parse(Console.ReadLine());
int i = 1;
while (i <= n) //пока i меньше или раghn
{
//выh^bfLgZwdjZgaZl_fmеличиZ_f_]hgZ1
Console.Write(" {0}", i++ );
}
}
Результаты ра боты программы:
n от_l
10 1 2 3 4 5 6 7 8 9 10

Задание . Измените программу так, чтобы:
1. числа uодились h[jZlghfihjy^d_;
2. uодились только нечетные числа.

Цикл с постуслоb_fGRZKLOe
Оператор цикла do whil e также организует uiheg_gb_h^gh]hhi_jZlhjZ ijhklh]h
или составного) неиз_klgh_ заранее число раз. Однако  отличие от цикла while услоb_
за_jr_gbypbdeZijhеряется после uiheg_gbyl_eZpbdeZNhjfZlpbdeZ do while :
do S while (B);
где В – uj ажение, истинность которого про_jy_lky mkehие за_jr_gbypbdeZ  S – тело
цикла (простой или составной оператор).
Сначала uihegy_lkyhi_jZlhj S, а затем анализируется значение ujZ`_gby В: если
оно истинно, то управление передается оператору S, если ло жно - цикл за_jrZ_lky и
упраe_gb_ передается на оператор, следующий за услоb_f B. Так как услоb_ В
про_jy_lkyihke_ыполнения тела цикла, то ex[hfkemqZ_l_ehpbdeZыполнится хотя
бы один раз.
В операторе do while , так же как и  операторе while , hafh`gZ ситуация
зациклиZgby случае, если услоb_ В k_]^Z[m^_lhklZаться истинным.
В качест_beexkljZpbbыполнения цикла do while рассмотрим программу uода
на экран целых чисел из интервала от 1 до n.
static void Main()
{
Console.Write("N = ");
int n=int.Parse(Console.ReadLine());
int i = 1;
do
Console.Write(" {0}", i++); //uодим i на экран, затем у_ebqbаем его на 1
while (i <= n); //пока i меньше или равно n
}
Задание . Измените программу так, чтобы:
1. числа uодились h[jZlghfihjy^d_;
2. uодились только четные числа.

Цикл с параметром for
Цикл с параметром имеет следующую структуру:
for ( <инициализация>; <ujZ`_gb_!fh^bnbdZpby! hi_jZlhj!;

Инициализация используется для объяe_gbybbebijb сh_gbygZqZevg ого значени я
_ebqbg е, используем ой  цикле  качест_ параметр а (счетчик а). Областью дейстby
переменн ой, объяe_gghc qZklbbgbpbZebaZpbbpbdeZyляется цикл и eh`_ggu_[ehdb
Инициализация uihegy_lkyh^bgjZa начале исполнения цикла .
Выражение определяет услоb_ выполнения цикла: если его результатом яey_lky
истина, цикл uihegy_lky Истинность ujZ`_gby про_jy_lky перед каждым
uiheg_gb_f тела цикла, таким образом, цикл с параметром реализо Zg как цикл с
предуслоb_f
Модификац ия uihegy_lky после каждой итерации цикла и служи т обычно для
изменения параметра цикла.
Оператор (простой или составной) представляет собой тело цикла.
Любая из частей оператора for (инициализация, ujZ`_gb_fh^bnbdZpbyhi_jZlhj
может отсутстh\Zlv, но точку с запя той, определяющую позицию пропускаемой части,
надо оставить.
static void Main()
{
Console.Write("N= ");
int n=int.Parse(Console.ReadLine());
for (int i=1; i<=n; i++)
{
Console .Write ("{0} ", i);
}
}
Задание . Измените программу так, чтобы:
1. решалась поставленная задача, а блок модификации оказался пустым;
2. числа uодились h[jZlghfihjy^d_;
3. uодились кZ^jZluqbk_e.

Вложенные циклы
Циклы могут быть простые или eh`_ggu_ djZlgu_pbdeu цикл е). Вложенными
могут быть циклы любых типо while , do while , for . Каждый gmlj_ggbcpbde^he`_g[ulv
полностью eh`_gо все g_rgb_pbdeuI_j_k_q_gbypbdeh не допускаются.
Рассмотрим пример использоZgby eh`_gguo цикло который позhebl uести
на экран числа следующим образом:
2 2 2 2 2
2 2 2 2 2
2 2 2 2 2
2 2 2 2 2
static void Main()
{
for (int i = 1; i <= 4; ++i)
{
for (int j=1; j<=5; ++ j)
{
Console .Write (”2 ” );
}
Console.WreLine();
}
}
Задания .
1. Измените программу так, чтобы таблица содержала n строк и m столбцо agZq_gbyQb
m одятся с клаbZlmju .

2. Измените программу так, чтобы на экран uодил ась прямоугольная таблица, dhlhjhc
n строк, m столбцо а каждый элемент та блицы раgyeky сумме номера строки и номера
столбца.
Операторы безуслоgh]hi_j_oh^w
В С# есть несколько операторо изменяющих естест_gguc порядок uiheg_gby
команд: оператор безуслоgh]hi_j_oh^Z goto , оператор uoh^Z break , оператор перехода к
следующ ей итерации цикла continue , оператор haрата из метода return и оператор
генерации исключения throw.
Оператор безуслоgh]hi_j_oh^w goto
Оператор безуслоgh]hi_j_oh^Z goto имеет формат:
goto <метка>;
В теле того же метода должна присутстhать роghh{ на конструкция b^Z:
<метка>: <оператор>;
Оператор goto передает упраe_gb_ оператору с меткой. Рассмотрим пример
использоZgbyhi_jZlhjZ goto :
static void Main()
{
float x;
label : Console.WriteLine("x="); //оператор, помеченный меткой
x = fl oat.Parse(Console.ReadLine());
if (x!=0)
{
Console.WriteLine("y({0})={1}", x, 1 / x );
}
else
{
Console.WriteLine("функция не определена");
goto label ; // передача упраe_gb_f_ld_
}
}
Следует учитыZlv что использоZgb_ оператора goto затр удняет чтение больших
по объему программ, поэтому использоZlvf_ldbgm`ghlhevdh крайних случаях.
Оператор uoh^ZEUHDk
Оператор break используется gmljb операторо цикла и оператора u[hjZ для
обеспечения перехода  точку программы, находящуюся непоср едст_ggh за оператором,
gmljbdhlhjh]hgZoh^blky break .
Мы уже применяли оператор break для uoh^Z из оператора switch , аналогичным
образом он может применяться для uoh^Zbahi_jZlhjh цикла.
Оператор перехода к следующей итерации цикла continue
Операт ор перехода к следующей итерации цикла continue пропускает k_hi_jZlhju
оставшиеся до конца тела цикла, и передает упраe_gb_ на начало следующей итерации
(поlhj_gb_l_eZpbdeZ JZkkfhljbfhi_jZlhj continue на примере.
static void Main ()
{
Con sole .WriteLine ("n=");
int n = int.Parse(Console.ReadLine());
for (int i = 1; i <= n; i++)

{
if (i % 2 == 0)
{
continue;
}
Console.Write(" {0} ", i);
}
}
Замечание . Операт ор return буд ет рассмотрен позже . Оператор throw jZfdZo^Zggh]h
модуля рассматриZ_lkyg_[m^_l.
Примеры решения практических задач
1. Для произhevguo значений аргументов uqbkeblv значение функции, заданной
следующим образом: . Если  неко торой точке uqbkeblv значение
функции окажется неhafh`ghlhы_klbgZwdjZgkhh[s_gb_nmgdpbyg_hij_^_e_gZ.
Указание по решению задачи. Данную задачу можно решить дmfykihkh[Zfb.
I способ. Заданная функция не определена lhfkemqZ_dh]^Z:
знамен атель перh]hkeZ]Z_fh]hjZен нулю

х=0

х=0
Или или или
подкоренное ujZ`_gb_торого слагаемого отрицательное х+1<0 х< -1
В остальных случаях функция определена.
using System;
namespace Example
{
class Program
{
static void Main()
{
Console.Write("x= ");
double x=double.Parse(Console.ReadLine());
if (x==0 || x< -1)
{
Console.WriteLine("Функция не определена");
}
else
{
double y=1/x+Math.Sqrt(x+1);
Console.WriteLine("y({0:f2})={1:f2}",x,y);
}
}
}
}
II способ. Заданная функция определена lhfkemqZ_dh]^Z:
знаменатель перh]hkeZ]Z_fh]hg_jZен нулю

х0

х0
И и и
подкоренное ujZ`_gb_торого слагаемого неотрицательно х+1 0 х-1
В остальных случаях функция не определена.
usi ng System;
namespace Example
{
class Program
{   1 1    x x x y

static void Main()
{
Console.Write("x= ");
double x=double.Parse(Console.ReadLine());
if (x!=0 && x>= -1)
{
double y=1/x+Math.Sqrt(x+1);
Console.WriteLine("y({0:f2})={1:f2}",x,y );
}
else
{
Console.WriteLine("Функция не определена");
}
}
}
}
Обе программы дадут нам следующий результат:
х Сообщение на экране
0 функция не определена
2,5 y(2,50)=2,27
-2 функция не определена
-1 y(-1,00)= -1,00

Задание . Изменить программу так, чтоб ы она uqbkeyeZ значение функции, заданной
следующим образом: .

2. Для произhevguo значений аргументов uqbkeblv значение функции, заданной
следующим образом:
Указания по решению задачи . Вся числоZy прямая О x разбивается на три
непересекающихся интерZeZ ( -; 0), [0; 1), [1; + ). На каждом интервале функция задается
сh_xетvxAZ^ZggZylhqdZ x может попасть только h^bgbamdZaZgguobgl_jалоQlh[u
определить, dZdhcbabgl_jалов попала точка, воспол ьзуемся следующим алгоритмом. Если x<0,
то x попадает i_jый интерZebnmgdpbxысчитыZ_fihi_jой ветви, после чего проверка
заканчиZ_lky?kebwlhmkehие ложно, то истинно услоb_ x≥0, и для того чтобы точка попала
hторой интервал достаточно , чтобы uihegyehkvmkeh\b_ x<1 . Если uihegy_lkywlhmkehие,
то точка x попадает во lhjhcbgl_jал, и мы определяем функцию по второй _lи, после чего
заканчиZ_f uqbke_gby В протиghf случае, точка может принадлежать только третьему
интерZem поэт ому дополнительная проверка не проh^blky а сразу вычисляем функцию по
третьей _lи. При_^_ggucZe]hjblffh`ghj_Zebahать с помощью eh`_gguohi_jZlhjh\ if.
using System;
namespace Example
{
class Program
{
static void Main()
{
Console .Write("x= ");
double x=double.Parse(Console.ReadLine());
double y; x x y 4 1
2
1
1
     





  
 
 

.1 при ,1 5
;1 0 при ,0
; 0 при , 1 x
) (
2
2 3
x x x
x
x
x y

if (x<0) //про_jy_fmkehие перhcетb
{
y=Math.Pow(Math.Pow(x,3)+1,2);
}
else
{
if (x<1) //про_jy_fmkehие второй _lи
{
y=0;
}
else
{
y=Math.Abs(x*x -5*x+1);
}
}
Console.WriteLine("y({0:f2})={1:f2}",x,y);
}
}
}
Результат работы программы:
х Сообщение на экране
-2 y(-2,00)=49,00
0 y(0,00)=0,00
1,5 y(1,50)=4,25

Задание . Изменить программу так, чтобы он а uqbkeyeZ значение функции , заданной
следующим образом: .

3. Дана точка на плоскости с координатами (х, у). Состаblv программу, которая u^Z_l
одно из сообщений «Да», «Нет», «На границе»  заbkbfhklb от того, лежит ли точка
gmlj и заштрихоZgghch[eZklbне заштрихованной области или на ее границе.
Указания по решению задачи . Всю плоскость можно разбить на три непересекающихся
множестZ точек: I1 – множестh точек, лежащих внутри области; I2 – множестh точек,
лежащих вне област и; I3 – множество точек, образующих границу области. Точка с
координатами (х, у) может принадлежать только одному из них. Поэтому про_jdm
принадлежности точки одному из указанных множест можно проводить по аналогии с
алгоритмом, приведенном ijbf_j_2 . Однако множестZ I1, I2, I3 значительно труднее описать
математически, чем интерZeu  примере 2. Поэтому для непосредственной про_jdb
u[bjZxlky те два множества, которые наиболее просто описать математически. Обычно
труднее k_]h описать точки границ ы области. Например, для рис. 1 3 множестZ задаются
следующим образом:
I1: x2 + y2 < 10 2; I2: x2 + y2 > 10 2; I3: x2 + y2 = 10 2.
Для рис. 14 множестZaZ^Zxlkyke_^mxsbfh[jZahf
I1: x< 10 и y< 5 ; I2: х > 10 или у> 5;
I3: ( x<=10 и у = 5) и ли ( x<=10 и у = -5) или ( у<5 и х = 10) или ( у<5 и х = -10).
Таким образом, для рис. 1 3 описание k_o множест раghkbevgh по сложности, а для рис. 14
описать множестh I3 значительно сложнее. Следует отметить, что для множестZ I 3
необходимо uihegyl ь про_jdmgZjZ\_gklо, что очень тяжело сделать для _s_kl\_gguoqbk_e
из-за ошибок, связанных с округлением. 




 
 
 

. х , x
х
y x
y
5 если 1
;5 3 если 0,
;3 если ,3.0
2
2

using System;
namespace Example
{
class Program
{
static void Main()
{
Console.Write("x= ");
double x=double.Parse(Console.R eadLine());
Console.Write("y= ");
double y=double.Parse(Console.ReadLine());
const int r=10;
if (x*x+y*y {
Console.WriteLine(" да ");
}
else
{
if (x*x+y*y>r*r)
{
Console.WriteLine(" нет ");
}
else
{
Console.WriteLine(" на границе ");
}
}
}
}
}

рис. 1 3




Результаты работы программы:
x y сообщение на экране
0 0 да
10 0 на границе
-12 13 нет

Замечание . Чтобы не вычислять дZ раза расстояние от заданной точки до начала
координат, можно ести промежуточную переменную, в которую записать значение этого
расстояния, а затем сравнить его с радиусом. Например, следующим образом:
const int r=10;
dou ble n=Math .Sqrt (x*x+y*y);
if (n {
Console.WriteLine(" да ");
}
else
{
if (n>r)
{
Console.WriteLine(" нет ");
}
else
{
Console.WriteLine(" на границе ");
}
}

Задание . Изменить программу так, чтобы обрабатыZeZkvke_^mxsZyh[eZklv:

using System;
namespace Example
{
class Program
{
static void Main()
{
Console.Write("x= ");
double x=double.Parse(Console.ReadLine());
Console.Write("y= ");
double y=double.Parse(Console.ReadLine());
const int sizeX=10;
cons t int sizeY=5;
if (Math.Abs(x) {
Console.WriteLine(" да ");
}
else
{
if (Math.Abs(x)>sizeX || Math.Abs(y)>sizeY)
{
Console.WriteLine(" нет ");
}
else
{
Console.WriteLine(" на границе ");
}
}
}
}
}
Результаты работы программы:
x y сообщение на экран е
0 0 да
10 5 на границе
-12 13 нет





рис. 14




Задание . Изменить программу так, чтобы обрабатыZeZkvke_^mxsZyh[eZklv


4. Написать программу, которая uодит на экран кZ^jZluсех четн ых чисел из диапазона
от А до В (А и В целые числа, при этом А В).

Указания по решению задачи. Из диапазона целых чисел от А до В необходимо u[jZlv
только четные числа. Напомним, что четными назыZxlky числа, которые делятся на дZ без
остатка. Кроме того , четные числа предстаeyxl собой упорядоченную последоZl_evghklv в
которой каждое число отличается от предыдущего на 2. Решить эту задачу можно с помощью
каждого оператора цикла.
using System ;

namespace Example
{
class Program
{
static void Main()
{
Console.Write("a= ");
int a=int.Parse(Console.ReadLine());
Console.Write("b= ");
int b=int.Parse(Console.ReadLine());
int i;
Console.Write("FOR: ");
a=(a%2==0)? a: a+1;
for (i=a; i<=b; i+=2)
{
Console.Write(" {0}", i*i);
}
Console.Write(" \nWHILE: ");
i=a;
while (i<=b)
{
Console.Write(" {0}", i*i);
i+=2;
}
Console.Write(" \nDO: ");
i=a;
do
{
Console.Write(" {0}", i*i);
i+=2;
}
while (i<= b);
}
}
}
Результаты работы программы:
a b сообщение на экране
-11 11 FOR : 100 64 36 16 4 0 4 16 36 64 100
WHILE : 100 64 36 16 4 0 4 16 36 64 100
DO : 100 64 36 16 4 0 4 16 36 64 100

Задание . Измените прог рамму так, чтобы она выводи ла на экран только нечетные числ а из
диапазона от А до В (А и В целые числа, при этом А В).

5. Постройте таблицу значений функции для х [a, b] с шагом
h.
using System;

namespace Example
{
class Program
{
static void Main()
{
Console.Write("a= ");
double a=double.Parse(Console.ReadLine());
Console.Write("b= ");
double b=double.Parse(Console.ReadLine());
Console.Write("h= ");
double h=double.Parse(Console.ReadLine());
double y;
int i=1 ;
Console.WriteLine("{0,3} {1,5} {1,5}","#","x", "f(x)");
for (double x=a; x<=b; x+=h, ++i)
{
if (x<0)
{
y=Math.Pow(Math.Pow(x,3)+1,2);
}
else
{
if (x<1)
{
y=0;
}
else
{
y=Math.Ab s(x*x -5*x+1);
}
}
Console.WriteLine("{0,3} {1,5:f2} {2,5:f2}",i,x,y);
}
}
}
}

Результат работы программы: # x f(x)
1 -1,00 0,00
2 -0,50 0,77
3 0,00 0,00
4 0,50 0,00
5 1,00 3,00
6 1,50 4,25
7 2,00 5,00
 





  
 
 

.1 при ,1 5
;1 0 при ,0
; 0 при , 1 x
) (
2
2 3
x x x
x
x
x y

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

6. Написать программу, которая по признаку геометрической фигуры (п – прямоугольник,
т – треугольник) , запрашиZ_l необходимые данные для расчетов и uодит на экран
периметр и площадь заданной фигуры.
using System;

namespace Example
{
class Program
{
static void Main()
{
Console.WriteLine(" В_^bl_ признак фигуры : п – прямоугольник ,
т – треугольник ");
char n=char.Parse(Console.ReadLine());
switch (n)
{
case ' п':
Console.WriteLine(" В_^bl_ стороны прямоугольника : ");
Console.Write("a= ");
double a=double.Parse(Console.ReadLine());
Console.Wri te("b= ");
double b=double.Parse(Console.ReadLine());
if (a>0 && b>0)
{
Console.WriteLine("p={0:f2} s={1:f2}",2*(a+b),a*b);
}
else
{
Console.WriteLine("Прямоугольник с заданными длинами сторон не
су щестm_l ;
}
break;
case 'т':
Console.WriteLine("В_^bl_klhjhgulj_m]hevgbdZ ;
Console.Write("a= ");
double a=double.Parse(Console.ReadLine());
Console.Write("b= ");
double b=double.Parse(Console.ReadLine());
Console.Write(" с= ");
double c=double.Parse(Console.ReadLine());
if (a+b>c && a+c>b && b+c>a)
{
double p=a+b+c;
double p2=p/2;
double s=Math.Sqrt(p2*(p2 -a)*(p2 -b)*(p2 -c));
Console.WriteLine("p={0:f2} s={1:f2}",p ,s);
}
else
{ 





  


.1 если 1
;1 и 0 если 1
;0 если 0,
2
x ,
x x , x
x
y

Console.WriteLine("Треугольник с заданными длинами сторон не
сущестm_l ;
}
break;
default:
Console.WriteLine("Вы не_jghmdZaZebijbagZdnb]mju ;
break;
}
}
}
Задание . Измен ить программу так, чтобы она могла uqbkeylv еще периметр и площадь
кZ^jZlZ.

7. Напечатать числа \b^_ke_^mxs_clZ[ebpu: 1
3
2 2
4 4
3 3 3
5 5 5
4 4 4 4
6 6 6 6

Указания по решению задачи. Исходную таблицу можно схемат ично разбить на четыре
группы строк:
1
3
2 2
4 4
3 3 3
5 5 5
4 4 4 4
6 6 6 6
В каждой группе д_ строки, для элементов которых uihegy_lky следующие праbeh в
перhc строчке i-группы напечатано число i, причем i раз, а h lhjhc стро чке i-группы
напечатано число i+2 i раз. Для решения постаe_gghc задачи можно использоZlv дZ
последоZl_evguo оператора for , eh`_gguo h g_rgbc по отношению к ним оператор for .
Внешний оператор следит за номером текущей группы i, перucложенный цикл i раз печатает
число i, lhjhcложенный цикл i раз печатает число i+2.
using System;
namespace Example
{
class Program
{
static void Main()
{
Console.Write("n= ");
byte n=byte.Parse(Console.ReadLine());
for (byte i=1 ; i<=n; ++i)
{
for (byte j=1; j<=i; ++j)
{
Console.Write("{0,4}",i);
}
Console.WriteLine();
for (byte j=1; j<=i; ++j)

{
Console.Write("{0,4}",i+2);
}
Console.WriteLine();
}
}
}
}
Задания для самостоятельной работы
I. Для пр оизhevguo значений аргументо uqbkeblv значение функции, заданной
следующим образом:
1. ; 2. ; 3. ;
4. ; 5. ; 6. ;
7. ; 8. ; 9. ;
10. ;

II. Дана точка на плоскости с координатами (х, у). Составить программу, которая
u^Z_lh^ghbakhh[s_gbc>ZG_lGZ]jZgbp_ заb симости от того, лежит
ли точка gmljb заштрихоZgghc области, g_ заштрихоZgghc области или на ее
границе. Области задаются графически следующим образом:

1.

2.

3.


4.


5.


6.

7.

8.

9.  2 1
1
x
y

 1
1
2  x y 1 2  x y 3 5 x y    1 ln   x y  2 4 ln x y   1 2 

x
x y 1 2
4 3
2  
 
x x
x y 8
3
3

x
y 2 ln   x y

10 .



III. Составить программу.
Замечан ие . При решении данных задач можно использоZlv как оператор switch , так и
eh`_ggu_hi_jZlhjuLIKой u[hjh[hkgmcl_.
1) Дан порядкоucghf_jf_kypZы_klbgZwdjZg_]hgZaание.
2) Дан номер масти m (1  m  4), определить назZgb_fZklbFZklbgmf_jmxlk я: «пики»
- 1, «трефы» - 2, «бубны» - 3, «червы» - 4.
3) Дан номер карты k (6  k  14), определить достоинстh карты. ДостоинстZ
определяются по следующему праbemlma - 14, «король» - 13, «дама» - 12, «валет» -
11, «десятка» - 10, …, «шестерка» - 6.
4) Дан номер масти m (1  m  4) и номер достоинстZ карты k (6  k  14). Определить
полное назZgb_khhlетствующей карты \b^_^ZfZibdr_kl_jdZ[m[_gbl^.
5) Дано расписание приемных часо jZqZ Вы_klb на экран приемные часы jZqZ в
заданный день неде ли (расписание придумать самостоятельно).
6) Проведен тест, оцениZ_fuc целочисленный баллах от нуля до ста. Вывести на экран
оценку тестируемого в заbkbfhklb от набранного количестZ балло от 90 до 100 –
«отлично», от 70 до 89 – «хорошо», от 50 до 69 – «удоe_lорительно», менее 50 –
«неудоe_lорительно».
7) Дан год. Вывести на экран назZgb_ жиhlgh]h симhebabjmxs_]h этот год по
hklhqghfmdZe_g^Zjx.
8) Дан hajZklq_ehека мужского пола ]h^Zo<u\_klbgZwdjZgозрастную категорию:
до года – «младенец», от года до 11 лет – «ребенок», от 12 до 15 лет – «подросток», от
16 до 25 лет – «юноша», от 26 до 70 лет – «мужчина», более 70 лет – «пожилой чело_d
9) Дан пол чело_dZf – мужчина, ж – женщина. Вывести на экран hafh`gu_fm`kdb_b
женские имена aZис имости от еденного пола.
10) Дан признак транспортного средстZD – аlhfh[bev – _ehkbi_^f – мотоцикл, с –
самолет, п – поезд. Вывести на экран максимальную скорость транспортного средстZ\
заbkbfhklbhl_^_ggh]hijbagZdZ.
IV. Вывести на экран:
Заме чание . При решении задачи можно использоZlvex[hcbahi_jZlhjh цикла while,
do while и for . Свой u[hjh[hkgmcl_
1) k_p_eu_qbkeZba^bZiZahgZhl:^h< : В), оканчиZxsb_kygZpbnjmO;
2) k_p_eu_qbkeZba^bZiZahgZhl:^h< : В), оканчиZxsb_kygZpbnj у Х или У;
3) k_ целые числа из диапазона от А до В (А В), оканчиZxsb_ky на любую четную
цифру;
4) только положительные целые числа из диапазона от А до В (А В);
5) k_p_eu_qbkeZba^bZiZahgZhl:^h<djZlgu_lj_f : В);

6) k_q_lgu_qbkeZba^bZiZahgZhl:^h В, кратные трем (А В);
7) только отрицательные четные числа из диапазона от А до В (А В);
8) k_^\moagZqgu_qbkeZ записи которых k_pbnjujZagu_;
9) k_lj_oagZqgu_qbkeZdhlhju_gZqbgZxlkybaZdZgqbаются на одну и ту же цифру;
10) k_lj_oagZqgu_qbkeZ котор ых хотя бы д_pbnjuih\lhjyxlky.
V. Вывести на экран числа следующим образом:
1) 5 5 5 5 5 5
5 5 5 5 5 5
5 5 5 5 5 5
5 5 5 5 5 5
2) 1 2 3 … 10
1 2 3 … 10
1 2 3 … 10
1 2 3 … 10
3) 1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
4) 6 6 6 6 6
7 7 7 7
8 8 8
9 9
10
5) 0 1 2 3 4
0 1 2 3
0 1 2
0 1
0
6) 4 3 2 1 0
3 2 1 0
2 1 0
1 0
0
7) 8
7
7 7
6 6
6 6 6
5 5 5
5 5 5 5
4 4 4 4
8) 1
6
2 2
7 7
3 3 3
8 8 8
4 4 4 4
9 9 9 9
9) 3
0
2 3
9 0
2 2 3
8 9 0
2 2 2 3
7 8 9 0
2 2 2 2 3
6 7 8 9 0
10) 2 2 2 2 2
3 4 5 6 7
2 2 2 2
2 3 4 5
2 2 2
1 2 3
2 2
0 1
2
-1
VI. Постройте таблицу значений функции y=f(x) для х [a, b] с шагом h.
1.

2.

3. 4. 







 
  



.0 если ,2.0
;90 0 если ,1.0 2.0
;90 если ,
) 1.0(
1
2
2
x x
. х x
. x
x
y 







   
 




.9 если 5 1
;9 3 если
5
1
;3 если sin
2 2
2
2
x , x x
x ,
x
x
х (x),
y 










a. x ,
a; x ,
a x
x-a
a; х ,
y
если 1
если
если 0 





 
  
 

20 если ,1.0
;20 10 если ,1.0 2.0
;10 если ,1.0
3
3
.. x x
. x . x
. х x
y

5. 6.

7. 8.

9. 10.







 
   
  

. 10 5 ,
10 5 0 если ,
;0 5 если ,
2
2
2
x если x ab
; x) (x b a
x x b a
y  
 
  






  
   

  

.3 1 2 если ,0
;3 1 2 2 если ,
1
1
;2 1 2 если ,
2
2
2
2 2
x x
x x
x
x x x
y 





   
 

.1 если 2,
;1 0 если ,4 3 x
;0 если 4
2
х
x x
x ,
y 





 
  
 

.2 если ,1
;2 1 если ,1 2
;1 если ,1
5
2
х x
x x
х x
y  
 










 

.1 если 0,
1 если ,
1
1
;1 если , 1
2
2 2
х
; x
x
x x
y 






  
  

 

; 10 2 если 2, x
; 10 2 1 если ,
2 x
1
;1 2 если ,2
) (x
) (x
) (x x
y
X