Программирование на языке С#: разработка консольных приложений

Операторы языка C#

Разбить на страницы
Показывать лекцию целиком

Программа на языке С# состоит из последовательности операторов, каждый из которых определяет законченное описание некоторого действия и заканчивается точкой с запятой. Все операторы можно разделить на 4 группы: операторы следования, операторы ветвления, операторы цикла и операторы передачи управления.

Операторы следования

Операторы следования выполняются компилятором в естественном порядке: начиная с первого до последнего. К операторам следования относятся: выражение и составной оператор.

Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении значения выражения или выполнении законченного действия, например, вызова метода. Например:

++i;			//оператор инкремента
x+=y;			//оператор сложение с присваиванием
Console.WriteLine(x); 	//вызов метода
x=Math.Pow(a,b)+a*b;	//вычисление сложного выражения

Частным случаем оператора выражения является пустой оператор ; Он используется тогда, когда по синтаксису оператор требуется, а по смыслу - нет. В этом случае лишний символ ; является пустым оператором и вполне допустим, хотя и не всегда безопасен. Например, случайный символ ; после условия оператора while или if может совершенно поменять работу этого оператора.

Составной оператор или блок представляет собой последовательность операторов, заключенных в фигурные скобки {}. Блок обладает собственной областью видимости: объявленные внутри блока имена доступны только внутри данного блока или блоков, вложенных в него. Составные операторы применяются в случае, когда правила языка предусматривают наличие только одного оператора, а логика программы требует нескольких операторов. Например, тело цикла while должно состоять только из одного оператора. Если заключить несколько операторов в фигурные скобки, то получится блок, который будет рассматриваться компилятором как единый оператор.

Операторы ветвления

Операторы ветвления позволяют изменить порядок выполнения операторов в программе. К операторам ветвления относятся условный оператор if и оператор выбора switch.

Условный оператор if

Условный оператор if используется для разветвления процесса обработки данных на два направления. Он может иметь одну из форм: сокращенную или полную.

Форма сокращенного оператора if:

if (B)  S;

где В - логическое или арифметическое выражение, истинность которого проверяется; S - оператор: простой или составной.

При выполнении сокращенной формы оператора if сначала вычисляется выражение B, затем проводится анализ его результата: если B истинно, то выполняется оператор S ; если B ложно, то оператор S пропускается. Таким образом, с помощью сокращенной формы оператора if можно либо выполнить оператор S, либо пропустить его.

Форма полного оператора if:

if (B) S1; else S2;

где B - логическое или арифметическое выражение, истинность которого проверяется; S1, S2 - оператор: простой или составной.

При выполнении полной формы оператора if сначала вычисляется выражение B, затем анализируется его результат: если B истинно, то выполняется оператор S1, а оператор S2 пропускается; если B ложно, то выполняется оператор S2, а S1 - пропускается. Таким образом, с помощью полной формы оператора if можно выбрать одно из двух альтернативных действий процесса обработки данных.

Рассмотрим несколько примеров записи условного оператора if:

if (a > 0) x=y;		// Сокращенная форма c простым оператором 
if (++i) {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;}	// Полная форма с составными операторами

Рассмотрим пример использования условного оператора.

static void Main()
{
  Console.Write("x= ");
  float x = float.Parse(Console.ReadLine());
  	Console.Write("y=");
  float y = float.Parse(Console.ReadLine());
  if (x < y ) Console.WriteLine("min= "+x);
  else Console.WriteLine("min= "+y);
}

Результат работы программы:

x	y	min
0	0	0
1	-1	-1
-2	2	-2
Задание. Измените программу так, чтобы вычислялось наибольшее значение из х и у.

Операторы S1 и S2 могут также являться операторами if. Такие операторы называют вложенными. При этом ключевое слово else связывается с ближайшим предыдущим словом if, которое еще не связано ни с одним else. Рассмотрим пример программы, использующей вложенные условные операторы.

(рис 4.1) 04_01

Подсчитать количество очков после выстрела по данной мишени.

static void Main()
{
  int Ball=0;
	Console.Write("x= ");
  float x = float.Parse(Console.ReadLine());
  Console.Write("y= ");
  float y = float.Parse(Console.ReadLine());
  if (x * x + y * y <=1) Ball = 10;	//окружность с радиусом 1
  else  if (x * x + y * y <= 4) Ball = 5;	//окружность с радиусом 2
  Console.WriteLine("Ball= "+ Ball);
}

Результат работы программы:

x	y	Ball
0	0	10
1	-1	5
-2	2	0
(рис 4.2) 04_02

Оператор выбора switch

Оператор выбора switch предназначен для разветвления процесса вычислений по нескольким направлениям. Формат оператора:

switch ( <выражение> )
{ 
  case <константное_выражение_1>: 
   [<оператор 1>];  <оператор перехода>;
  case <константное_выражение_2>: 
   [<оператор 2>]; <оператор перехода>; 
  ...
  case <константное_выражение_n>: 
   [<оператор n>]; <оператор перехода>;
   [default: <оператор>; ] 
}
Замечание. Выражение, записанное в квадратных скобках, является необязательным элементом в операторе switch. Если оно отсутствует, то может отсутствовать и оператор перехода.

Выражение, стоящее за ключевым словом switch, должно иметь арифметический, символьный, строковый тип или тип указатель. Все константные выражения должны иметь разные значения, но их тип должен совпадать с типом выражения, стоящим после switch или приводиться к нему. Ключевое слово case и расположенное после него константное выражение называют также меткой case.

Выполнение оператора начинается с вычисления выражения, расположенного за ключевым словом switch. Полученный результат сравнивается с меткой case. Если результат выражения соответствует метке case, то выполняется оператор, стоящий после этой метки, за которым обязательно должен следовать оператор перехода: break, goto и т.д. При использовании оператора break происходит выход из switch и управление передается оператору, следующему за switch. Если же используется оператор goto, то управление передается оператору, помеченному меткой, стоящей после goto.

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

static void Main()
{
  Console.Write("OPER= ");
  char oper=char.Parse(Console.ReadLine());
  bool ok=true;
  Console.Write("A= ");
  int a=int.Parse(Console.ReadLine());
  Console.Write("B= ");            
  int b=int.Parse(Console.ReadLine());
  float res=0;
  switch (oper)
  {
    case '+': res = a + b; break;	//1
    case '-': res = a - b; break;
    case '*': res = a * b; break;
    case ':': if (b != 0)
    { 
      res = (float)a / b; break;
    }
    else goto default;
    default: ok = false; break;        
  }
  if (ok) Console.WriteLine("{0} {1} {2} = {3}", a, oper, b, res);
  else Console.WriteLine("error");
}

Результат выполнения программы:

oper	x	y	rez
+	4	5	9
:	4	0	error
%	4	3	error
Задания.
  • Замените в строке 1 оператор break, на оператор goto case '-' и посмотрите, что произойдет, если в качестве операции ввести +.
  • В условном операторе if уберите ветку else и посмотрите, что произойдет.
  • Если необходимо, чтобы для разных меток выполнялось одно и тоже действие, то метки перечисляются через двоеточие. Например:

    switch (oper)
    {
      case '+': res = a + b; break;	
      case '-': res = a - b; break;
      case '*': res = a * b; break;
      case '/': case ':': if (b != 0)  // перечисление меток
      {
        res = (float)a / b; break;
      }
      else goto default;
      default: ok = false; break;
    }

    Операторы цикла

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

    Цикл с предусловием while

    Оператор цикла while организует выполнение одного оператора (простого или составного) неизвестное заранее число раз. Формат цикла while:

    while (B) S;

    где B - выражение, истинность которого проверяется (условие завершения цикла); S - тело цикла - оператор (простой или составной).

    Перед каждым выполнением тела цикла анализируется значение выражения В: если оно истинно, то выполняется тело цикла, и управление передается на повторную проверку условия В ; если значение В ложно - цикл завершается и управление передается на оператор, следующий за оператором S.

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

    В качестве иллюстрации выполнения цикла while рассмотрим программу вывода на экран целых чисел из интервала от 1 до n.

    static void Main()
    {
      Console.Write("N= ");
      int n=int.Parse(Console.ReadLine());
      int i = 1;
      while (i <= n)           //пока i меньше или равно n
      Console.Write(" "+ i++ ); //выводим i на экран, затем увеличиваем его на 1             
    }

    Результаты работы программы:

    n               ответ
    10               1  2  3  4  5  6  7  8  9  10
    Задание. Измените программу так, чтобы:
  • числа выводились в обратном порядке;
  • выводились только нечетные числа.
  • Цикл с постусловием do while

    Оператор цикла do while также организует выполнение одного оператора (простого или составного) неизвестное заранее число раз. Однако в отличие от цикла while условие завершения цикла проверяется после выполнения тела цикла. Формат цикла do while:

    do  S while (B);

    где В - выражение, истинность которого проверяется (условие завершения цикла); S - тело цикла - оператор (простой или блок).

    Сначала выполняется оператор S, а затем анализируется значение выражения В: если оно истинно, то управление передается оператору S, если ложно - цикл завершается, и управление передается на оператор, следующий за условием B. Так как условие В проверяется после выполнения тела цикла, то в любом случае тело цикла выполнится хотя бы один раз.

    В операторе do while, так же как и в операторе while, возможна ситуация зацикливания в случае, если условие В всегда будет оставаться истинным.

    В качестве иллюстрации выполнения цикла do while рассмотрим программу вывода на экран целых чисел из интервала от 1 до n.

    static void Main()
    {
      Console.Write("N= ");
      int n=int.Parse(Console.ReadLine());
      int i = 1;
      do
        Console.Write(" " + i++); 
        //выводим i на экран, затем увеличиваем его на 1
      while (i <= n); //пока i меньше или равно n
    }
    Задание. Измените программу так, чтобы:
  • числа выводились в обратном порядке;
  • выводились только четные числа.
  • Цикл с параметром for

    Цикл с параметром имеет следующую структуру:

    for ( <инициализация>; <выражение>; <модификация>) <оператор>;

    Инициализация используется для объявления и/или присвоения начальных значений величинам, используемым в цикле в качестве параметров (счетчиков). В этой части можно записать несколько операторов, разделенных запятой. Областью действия переменных, объявленных в части инициализации цикла, является цикл и вложенные блоки. Инициализация выполняется один раз в начале исполнения цикла.

    Выражение определяет условие выполнения цикла: если его результат истинен, цикл выполняется. Истинность выражения проверяется перед каждым выполнением тела цикла, таким образом, цикл с параметром реализован как цикл с предусловием. В блоке выражение через запятую можно записать несколько логических выражений, тогда запятая равносильна операции логическое И ( ).

    Модификация выполняется после каждой итерации цикла и служит обычно для изменения параметров цикла. В части модификация можно записать несколько операторов через запятую.

    Оператор (простой или составной) представляет собой тело цикла.

    Любая из частей оператора for (инициализация, выражение, модификация, оператор) может отсутствовать, но точку с запятой, определяющую позицию пропускаемой части, надо оставить.

    static void Main()
    {
    Console.Write("N= ");
    int n=int.Parse(Console.ReadLine());
    for (int i=1; i<=n;)     //блок модификации пустой     
    Console.Write(" " + i++); 
    }
    Задание. Измените программу так, чтобы:
  • числа выводились в обратном порядке;
  • выводились квадраты чисел.
  • Цикл перебора foreach будет рассмотрен позже.

    Вложенные циклы

    Циклы могут быть простые или вложенные (кратные, циклы в цикле). Вложенными могут быть циклы любых типов: while, do while, for. Каждый внутренний цикл должен быть полностью вложен во все внешние циклы. "Пересечения" циклов не допускаются.

    Рассмотрим пример использования вложенных циклов, который позволит вывести на экран числа следующим образом:

    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, Console.WriteLine())     //1
      for (int j=1; j<=5; ++j)
      Console.Write(" " + 2); 
    }
    Замечание. В строке 1 в блоке модификации содержится два оператора ++i и Console.WriteLine(). В данном случае после каждого увеличения параметра i на 1 курсор будет переводиться на новую строку. Задание. Измените программу так, чтобы таблица содержала n и m столбцов (значения n и m вводятся с клавиатуры).

    Операторы безусловного перехода

    В С# есть несколько операторов, изменяющих естественный порядок выполнения команд: оператор безусловного перехода goto, оператор выхода break, оператор перехода к следующей итерации цикла continue, оператор возврата из метода return и оператор генерации исключения throw.

    Оператор безусловного перехода goto

    Оператор безусловного перехода goto имеет формат:

    goto <метка>;

    В теле той же функции должна присутствовать ровно одна конструкция вида:

    <метка>: <оператор>;

    Оператор goto передает управление на помеченный меткой оператор. Рассмотрим пример использования оператора goto:

    static void Main()
    {      
      float x;
      metka: Console.WriteLine("x="); //оператор, помеченный меткой 
      x = float.Parse(Console.ReadLine());
      if (x!=0) Console.WriteLine("y({0})={1}", x, 1 / x ); 
      else
      {
        Console.WriteLine("функция не определена");
        goto metka; // передача управление метке
      }	
    }

    Следует учитывать, что использование оператора goto затрудняет чтение больших по объему программ, поэтому использовать метки нужно только в крайних случаях, например, в операторе switch.

    Оператор выхода break

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

    Мы уже применяли оператор break для выхода из оператора switch, аналогичным образом он может применяться для выхода из других операторов.

    Оператор перехода к следующей итерации цикла continue

    Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации (повторение тела цикла). Рассмотрим оператор continue на примере.

    static void Main()
    {
      Console.WriteLine("n=");            
      int n = int.Parse(Console.ReadLine());
      for (int i = 1; i <= n; i++)
      {
        if (i % 2 == 0) continue;
        Console.Write(" " + i);
      }
    }
    Замечание.Операторы return и throw будут рассмотрены позже.

    Практикум

  • Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений "Да", "Нет", "На границе" в зависимости от того, лежит ли точка внутри заштрихованной области, вне заштрихованной области или на ее границе.

    Пример:

    1.(рис 4.1) 04_01
    using System;
    namespace Hello
    {
      class Program
      {
         static void Main()
         {
         Console.Write("x=");            
         float x = float.Parse(Console.ReadLine());
         Console.Write("y=");
         float y = float.Parse(Console.ReadLine());
         if (x * x + y * y < 9  y > 0)
           Console.WriteLine("внутри");
         else if (x * x + y * y > 9 || y < 0)
           Console.WriteLine("вне");
           else Console.WriteLine("на границе");
          }
      }
    }

    Области задаются графически следующим образом:

    2.(рис 4.2) 04_02 3.(рис 4.3) 04_03 4.(рис 4.4) 04_04
    5.(рис 4.5) 04_05 6.(рис 4.6) 04_06 7.(рис 4.7) 04_07 8.(рис 4.8) 04_08
    9.(рис 4.9) 04_09 10.(рис 4.10) 04_10 11.(рис 4.11) 04_11 12.(рис 4.12) 04_12
    13.(рис 4.13) 04_13 14.(рис 4.14) 04_14 15.(рис 4.15) 04_15 16.(рис 4.16) 04_16
    17.(рис 4.17) 04_17 18.(рис 4.18) 04_18 19.(рис 4.19) 04_19 20.(рис 4.20) 04_20
  • Составить программу.Замечание. При решении данных задач возможно использовать оператор switch или вложенные операторы if.
  • Дан порядковый номер дня недели, вывести на экран его название.

    Пример:

    using System;
    namespace Hello
    {
      class Program
      {
        static void Main()
        {
          Console.Write("n=");            
          byte n = byte.Parse(Console.ReadLine());
          switch (n)
          {
            case 1: Console.WriteLine("понедельник"); break;
            case 2: Console.WriteLine("вторник"); break;
            case 3: Console.WriteLine("среда"); break;
            case 4: Console.WriteLine("четверг"); break;
            case 5: Console.WriteLine("пятница"); break;
            case 6: Console.WriteLine("суббота"); break;
            case 7: Console.WriteLine("воскресенье"); break;
            default: Console.WriteLine("ВЫ ОШИБЛИСЬ"); break;
          }
        }
      }
    }
  • Дан порядковый номер месяца, вывести на экран количество месяцев оставшихся до конца года.
  • Дан порядковый номер дня месяца, вывести на экран количество дней оставшихся до конца месяца.
  • Дан номер масти m ( 1 <= m <= 4 ), определить название масти. Масти нумеруются: "пики" - 1, "трефы" - 2, "бубны" - 3, "червы" - 4.
  • Дан номер карты k ( 6 <= k <= 14 ), определить достоинство карты. Достоинства определяются по следующему правилу: "туз" - 14, "король" - 13, "дама" - 12, "валет" - 11, "десятка" - 10, $$\dots$$, "шестерка" - 6.
  • Дан номер масти m ( 1 <= m <= 4 ) и номер достоинства карты k ( 6 <= k <= 14 ). Определить полное название соответствующей карты в виде "дама пик", "шестерка бубен" и т.д.
  • С 1 января 1990 года по некоторый день прошло n дней, определить название текущего месяца.
  • С 1 января 1990 года по некоторый день прошло m месяцев, определить название текущего месяца.
  • С некоторой даты по настоящий день прошло m месяцев, определить название месяца неизвестной даты.
  • С некоторой даты по настоящий день прошло m месяцев, найти неизвестную дату.
  • С некоторой даты по настоящий день прошло n дней, найти неизвестную дату.
  • С 1 января 1990 года по некоторый день прошло m месяцев и n дней, определить название текущего месяца.
  • Дано расписание приемных часов врача. Вывести на экран приемные часы врача в заданный день недели (расписание придумать самостоятельно).
  • Проведен тест, оцениваемый в целочисленный баллах от нуля до ста. Вывести на экран оценку тестируемого в зависимости от набранного количества баллов: от 90 до 100 - "отлично", от 70 до 89 - "хорошо", от 50 до 69 - "удовлетворительно", менее 50 - "неудовлетворительно".
  • Дан год. Вывести на экран название животного, символизирующего заданный год по восточному календарю.
  • Дан возраст человека мужского пола в годах. Вывести на экран возрастную категорию: до года - "младенец", от года до 11 лет - "ребенок", от 12 до 15 лет - "подросток", от 16 до 25 лет - "юноша", от 26 до 70 лет - "мужчина", более 70 лет - "старик".
  • Дан пол человека: м - мужчина, ж - женщина. Вывести на экран возможные мужские и женские имена в зависимости от введенного пола.
  • Дан признак транспортного средства: a - автомобиль, в - велосипед, м - мотоцикл, с - самолет, п - поезд. Вывести на экран максимальную скорость транспортного средства в зависимости от введенного признака.
  • Дан номер телевизионного канала. Вывести на экран наиболее популярные программы заданного канала.
  • Дан признак геометрической фигуры на плоскости: к - круг, п - прямоугольник, т - треугольник. Вывести на экран периметр и площадь заданной фигуры (данные, необходимые для расчетов, запросить у пользователя).
  • Вывести на экран:Замечание. Решите каждую задачу тремя способами - используя операторы цикла while, do while и for.
  • целые числа 1, 3, 5, ..., 21 в строчку через пробел:

    Пример:

    using System;
    namespace Hello
    {
      class Program
      {
          
        static void Main()
        {
          Console.Write("n=");            
          byte n = byte.Parse(Console.ReadLine());
    
          Console.Write("while: ");
          int i = 1;           
          while (i <= n)
          {
            Console.Write(" " + i);
            i += 2;
          }
    
          Console.Write("do while: ");
          i = 1;
          do
    {
    Console.Write(" " + i);
    i += 2;
    }
    while (i <= n);
    
    Console.Write("For: ");
    for (i = 1; i<=n; i+=2)
          {
            Console.Write(" " + i);
          }
        }
      }
    }
  • целые числа числа следующим образом:
    10 10.4 
    11 11.4
    ...
    25 25.4
    числа следующим образом:
    25 25.5 24.8 
    26 26.5 25.8
    ...
    35 35.5 34.8
  • таблицу соответствия между весом в фунтах и весом в килограммах для значений 1, 2, 3, ..., 10 фунтов (1 фунтов = 453г);
  • таблицу перевода 5, 10, 15, ..., 120 долларов США в рубли по текущему курсу (значение курса вводится с клавиатуры);
  • таблицу стоимости для 10, 20, 30,..., 100 штук товара, при условии, что одна штука товара стоит х руб (значение х водится с клавиатуры);
  • таблицу перевода расстояний в дюймах в сантиметры для значений 2, 4, 6, ..., 12 дюймов (1 дюйм = 25.4 мм);
  • кубы всех целых чисел из диапазона от А до В ( А<=В ) в обратном порядке;
  • все целые числа из диапазона от А до В ( А<=В ), оканчивающиеся на цифру Х ;
  • все целые числа из диапазона от А до В ( А<=В ), оканчивающиеся на цифру Х или У ;
  • все целые числа из диапазона от А до В ( А<=В ), оканчивающиеся на любую четную цифру;
  • только положительные целые числа из диапазона от А до В ( А<=В );
  • все целые числа из диапазона от А до В , кратные трем ( А<=В );
  • все четные числа из диапазона от А до В , кратные трем ( А<=В );
  • только отрицательные четные числа из диапазона от А до В ( А<=В );
  • все двухзначные числа, в записи которых все цифры разные;
  • все двухзначные числа, в которых старшая цифра отличается от младшей не больше чем на 1;
  • все трехзначные числа, которые начинаются и заканчиваются на одну и ту же цифру;
  • все трехзначные числа, в которых хотя бы две цифры повторяются.
  • Вывести на экран числа следующим образом:

    :

    1) 1 1 1 1 1 1
    2 2 2 2 2 2
    3 3 3 3 3 3
    4 4 4 4 4 4
    using System;
    namespace Hello
    {
      class Program
      {
        static void Main()
        {
          for (int i = 1; i<=4; ++i, Console.WriteLine())
          {
            for(int j=1; j<=6; ++j)
            Console.Write(" " + i);
          }
        }
      }
    }
    2)1 2 3 10 3)-10 -9 -8 12
    1 2 3 10 -10 -9 -8 12
    1 2 3 10 -10 -9 -8 12
    1 2 3 10 -10 -9 -8 12
    -10 -9 -8 12
    4)41 42 43 50 5)5 6)1 1 1 1 1
    51 52 53 60 5 5 1 1 1 1
    61 62 63 70 5 5 5 1 1 1
    5 5 5 5 1 1
    71 72 73 80 5 5 5 5 5 1
    7)1 8)6 6 6 6 6 9)7
    2 2 7 7 7 7 6 6
    3 3 3 8 8 8 5 5 5
    4 4 4 4 9 9 4 4 4 4
    5 5 5 5 5 10 3 3 3 3 3
    10)8 8 8 8 8 11)1 12)1
    7 7 7 7 1 2 2 1
    6 6 6 1 2 3 3 2 1
    5 5 1 2 3 4 4 3 2 1
    4 1 2 3 4 5 5 4 3 2 1
    13)0 1 2 3 4 14)4 3 2 1 0 15)1
    0 1 2 3 3 2 1 0 0
    0 1 2 2 1 0 2 2
    0 1 1 0 0 0
    0 0 3 3 3
    0 0 0
    4 4 4 4
    0 0 0 0
    5 5 5 5 5
    0 0 0 0 0 0
    16)8 17)1 18)9
    7 6 4
    7 7 2 2 8 8
    6 6 7 7 3 3
    6 6 6 3 3 3 7 7 7
    5 5 5 8 8 8 2 2 2 2
    5 5 5 5 4 4 4 4 6 6 6 6 6
    4 4 4 4 9 9 9 9 1 1 1 1 1
    19)3 20)2 2 2 2 2
    0 3 4 5 6 7
    2 3 2 2 2 2
    9 0 2 3 4 5
    2 2 3 2 2 2
    8 9 0 1 2 3
    2 2 2 3 2 2
    7 8 9 0 0 1
    2 2 2 2 3 2
    6 7 8 9 0 -1
  • Самостоятельная работа

    Задача 1.Дана шахматная доска размером nxn клеток. Верхняя левая клетка доски черная и имеет номер (1, 1). Например, для n=4 шахматная таблица выглядит следующим образом:

    1 2 3 4
    1
    2
    3
    4
  • для заданного значения n определить количество черных ячеек шахматной доски;
  • по номеру ячейки (k, m) определить ее цвет;
  • определить, являются ли ячейки с номерами (k1, m1) и (k2, m2) одного цвета;
  • определить, находится ли фигура, стоящая в ячейке с номером (k1, m1), под ударом второй фигуры, стоящей в ячейке с номером (k2, m2), при условии, что ход второй фигуры и ей является:
  • пешка;
  • слон;
  • ладья;
  • ферзь;
  • конь.
  • Задача 2. Задана дата в формате <день>.<месяц>.<год>. Определить:

  • сколько дней прошло с начала года;
  • сколько дней осталось до конца года;
  • дату предыдущего дня;
  • дату следующего дня.
  • Задача 3.Натуральное число из n цифр является числом Армстронга, если сумма его цифр, возведенных в n-ную степень, равна самому числу. Например, 153=13+53+33. Найти все трехзначные числа Армстронга.

    Задача 4.Стороны прямоугольника заданы натуральными числами n и m. Найти количество квадратов (стороны которых выражены натуральными числами), на которые можно разрезать данный прямоугольник, если от него каждый раз отрезать квадрат:

  • наименьшей площади;
  • наибольшей площади
  • Страницы:

    Программа на языке С# состоит из последовательности операторов, каждый из которых определяет законченное описание некоторого действия и заканчивается точкой с запятой. Все операторы можно разделить на 4 группы: операторы следования, операторы ветвления, операторы цикла и операторы передачи управления.

    Операторы следования

    Операторы следования выполняются компилятором в естественном порядке: начиная с первого до последнего. К операторам следования относятся: выражение и составной оператор.

    Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении значения выражения или выполнении законченного действия, например, вызова метода. Например:

    ++i;			//оператор инкремента
    x+=y;			//оператор сложение с присваиванием
    Console.WriteLine(x); 	//вызов метода
    x=Math.Pow(a,b)+a*b;	//вычисление сложного выражения

    Частным случаем оператора выражения является пустой оператор ; Он используется тогда, когда по синтаксису оператор требуется, а по смыслу - нет. В этом случае лишний символ ; является пустым оператором и вполне допустим, хотя и не всегда безопасен. Например, случайный символ ; после условия оператора while или if может совершенно поменять работу этого оператора.

    Составной оператор или блок представляет собой последовательность операторов, заключенных в фигурные скобки {}. Блок обладает собственной областью видимости: объявленные внутри блока имена доступны только внутри данного блока или блоков, вложенных в него. Составные операторы применяются в случае, когда правила языка предусматривают наличие только одного оператора, а логика программы требует нескольких операторов. Например, тело цикла while должно состоять только из одного оператора. Если заключить несколько операторов в фигурные скобки, то получится блок, который будет рассматриваться компилятором как единый оператор.

    Операторы ветвления

    Операторы ветвления позволяют изменить порядок выполнения операторов в программе. К операторам ветвления относятся условный оператор if и оператор выбора switch.

    Условный оператор if

    Условный оператор if используется для разветвления процесса обработки данных на два направления. Он может иметь одну из форм: сокращенную или полную.

    Форма сокращенного оператора if:

    if (B)  S;

    где В - логическое или арифметическое выражение, истинность которого проверяется; S - оператор: простой или составной.

    При выполнении сокращенной формы оператора if сначала вычисляется выражение B, затем проводится анализ его результата: если B истинно, то выполняется оператор S ; если B ложно, то оператор S пропускается. Таким образом, с помощью сокращенной формы оператора if можно либо выполнить оператор S, либо пропустить его.

    Форма полного оператора if:

    if (B) S1; else S2;

    где B - логическое или арифметическое выражение, истинность которого проверяется; S1, S2 - оператор: простой или составной.

    При выполнении полной формы оператора if сначала вычисляется выражение B, затем анализируется его результат: если B истинно, то выполняется оператор S1, а оператор S2 пропускается; если B ложно, то выполняется оператор S2, а S1 - пропускается. Таким образом, с помощью полной формы оператора if можно выбрать одно из двух альтернативных действий процесса обработки данных.

    Рассмотрим несколько примеров записи условного оператора if:

    if (a > 0) x=y;		// Сокращенная форма c простым оператором 
    if (++i) {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;}	// Полная форма с составными операторами

    Рассмотрим пример использования условного оператора.

    static void Main()
    {
      Console.Write("x= ");
      float x = float.Parse(Console.ReadLine());
      	Console.Write("y=");
      float y = float.Parse(Console.ReadLine());
      if (x < y ) Console.WriteLine("min= "+x);
      else Console.WriteLine("min= "+y);
    }

    Результат работы программы:

    x	y	min
    0	0	0
    1	-1	-1
    -2	2	-2
    Задание. Измените программу так, чтобы вычислялось наибольшее значение из х и у.

    Операторы S1 и S2 могут также являться операторами if. Такие операторы называют вложенными. При этом ключевое слово else связывается с ближайшим предыдущим словом if, которое еще не связано ни с одним else. Рассмотрим пример программы, использующей вложенные условные операторы.

    (рис 4.1) 04_01

    Подсчитать количество очков после выстрела по данной мишени.

    static void Main()
    {
      int Ball=0;
    	Console.Write("x= ");
      float x = float.Parse(Console.ReadLine());
      Console.Write("y= ");
      float y = float.Parse(Console.ReadLine());
      if (x * x + y * y <=1) Ball = 10;	//окружность с радиусом 1
      else  if (x * x + y * y <= 4) Ball = 5;	//окружность с радиусом 2
      Console.WriteLine("Ball= "+ Ball);
    }

    Результат работы программы:

    x	y	Ball
    0	0	10
    1	-1	5
    -2	2	0
    (рис 4.2) 04_02

    Оператор выбора switch

    Оператор выбора switch предназначен для разветвления процесса вычислений по нескольким направлениям. Формат оператора:

    switch ( <выражение> )
    { 
      case <константное_выражение_1>: 
       [<оператор 1>];  <оператор перехода>;
      case <константное_выражение_2>: 
       [<оператор 2>]; <оператор перехода>; 
      ...
      case <константное_выражение_n>: 
       [<оператор n>]; <оператор перехода>;
       [default: <оператор>; ] 
    }
    Замечание. Выражение, записанное в квадратных скобках, является необязательным элементом в операторе switch. Если оно отсутствует, то может отсутствовать и оператор перехода.

    Выражение, стоящее за ключевым словом switch, должно иметь арифметический, символьный, строковый тип или тип указатель. Все константные выражения должны иметь разные значения, но их тип должен совпадать с типом выражения, стоящим после switch или приводиться к нему. Ключевое слово case и расположенное после него константное выражение называют также меткой case.

    Выполнение оператора начинается с вычисления выражения, расположенного за ключевым словом switch. Полученный результат сравнивается с меткой case. Если результат выражения соответствует метке case, то выполняется оператор, стоящий после этой метки, за которым обязательно должен следовать оператор перехода: break, goto и т.д. При использовании оператора break происходит выход из switch и управление передается оператору, следующему за switch. Если же используется оператор goto, то управление передается оператору, помеченному меткой, стоящей после goto.

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

    static void Main()
    {
      Console.Write("OPER= ");
      char oper=char.Parse(Console.ReadLine());
      bool ok=true;
      Console.Write("A= ");
      int a=int.Parse(Console.ReadLine());
      Console.Write("B= ");            
      int b=int.Parse(Console.ReadLine());
      float res=0;
      switch (oper)
      {
        case '+': res = a + b; break;	//1
        case '-': res = a - b; break;
        case '*': res = a * b; break;
        case ':': if (b != 0)
        { 
          res = (float)a / b; break;
        }
        else goto default;
        default: ok = false; break;        
      }
      if (ok) Console.WriteLine("{0} {1} {2} = {3}", a, oper, b, res);
      else Console.WriteLine("error");
    }

    Результат выполнения программы:

    oper	x	y	rez
    +	4	5	9
    :	4	0	error
    %	4	3	error
    Задания.
  • Замените в строке 1 оператор break, на оператор goto case '-' и посмотрите, что произойдет, если в качестве операции ввести +.
  • В условном операторе if уберите ветку else и посмотрите, что произойдет.
  • Если необходимо, чтобы для разных меток выполнялось одно и тоже действие, то метки перечисляются через двоеточие. Например:

    switch (oper)
    {
      case '+': res = a + b; break;	
      case '-': res = a - b; break;
      case '*': res = a * b; break;
      case '/': case ':': if (b != 0)  // перечисление меток
      {
        res = (float)a / b; break;
      }
      else goto default;
      default: ok = false; break;
    }

    Операторы цикла

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

    Цикл с предусловием while

    Оператор цикла while организует выполнение одного оператора (простого или составного) неизвестное заранее число раз. Формат цикла while:

    while (B) S;

    где B - выражение, истинность которого проверяется (условие завершения цикла); S - тело цикла - оператор (простой или составной).

    Перед каждым выполнением тела цикла анализируется значение выражения В: если оно истинно, то выполняется тело цикла, и управление передается на повторную проверку условия В ; если значение В ложно - цикл завершается и управление передается на оператор, следующий за оператором S.

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

    В качестве иллюстрации выполнения цикла while рассмотрим программу вывода на экран целых чисел из интервала от 1 до n.

    static void Main()
    {
      Console.Write("N= ");
      int n=int.Parse(Console.ReadLine());
      int i = 1;
      while (i <= n)           //пока i меньше или равно n
      Console.Write(" "+ i++ ); //выводим i на экран, затем увеличиваем его на 1             
    }

    Результаты работы программы:

    n               ответ
    10               1  2  3  4  5  6  7  8  9  10
    Задание. Измените программу так, чтобы:
  • числа выводились в обратном порядке;
  • выводились только нечетные числа.
  • Цикл с постусловием do while

    Оператор цикла do while также организует выполнение одного оператора (простого или составного) неизвестное заранее число раз. Однако в отличие от цикла while условие завершения цикла проверяется после выполнения тела цикла. Формат цикла do while:

    do  S while (B);

    где В - выражение, истинность которого проверяется (условие завершения цикла); S - тело цикла - оператор (простой или блок).

    Сначала выполняется оператор S, а затем анализируется значение выражения В: если оно истинно, то управление передается оператору S, если ложно - цикл завершается, и управление передается на оператор, следующий за условием B. Так как условие В проверяется после выполнения тела цикла, то в любом случае тело цикла выполнится хотя бы один раз.

    В операторе do while, так же как и в операторе while, возможна ситуация зацикливания в случае, если условие В всегда будет оставаться истинным.

    В качестве иллюстрации выполнения цикла do while рассмотрим программу вывода на экран целых чисел из интервала от 1 до n.

    static void Main()
    {
      Console.Write("N= ");
      int n=int.Parse(Console.ReadLine());
      int i = 1;
      do
        Console.Write(" " + i++); 
        //выводим i на экран, затем увеличиваем его на 1
      while (i <= n); //пока i меньше или равно n
    }
    Задание. Измените программу так, чтобы:
  • числа выводились в обратном порядке;
  • выводились только четные числа.
  • Цикл с параметром for

    Цикл с параметром имеет следующую структуру:

    for ( <инициализация>; <выражение>; <модификация>) <оператор>;

    Инициализация используется для объявления и/или присвоения начальных значений величинам, используемым в цикле в качестве параметров (счетчиков). В этой части можно записать несколько операторов, разделенных запятой. Областью действия переменных, объявленных в части инициализации цикла, является цикл и вложенные блоки. Инициализация выполняется один раз в начале исполнения цикла.

    Выражение определяет условие выполнения цикла: если его результат истинен, цикл выполняется. Истинность выражения проверяется перед каждым выполнением тела цикла, таким образом, цикл с параметром реализован как цикл с предусловием. В блоке выражение через запятую можно записать несколько логических выражений, тогда запятая равносильна операции логическое И ( ).

    Модификация выполняется после каждой итерации цикла и служит обычно для изменения параметров цикла. В части модификация можно записать несколько операторов через запятую.

    Оператор (простой или составной) представляет собой тело цикла.

    Любая из частей оператора for (инициализация, выражение, модификация, оператор) может отсутствовать, но точку с запятой, определяющую позицию пропускаемой части, надо оставить.

    static void Main()
    {
    Console.Write("N= ");
    int n=int.Parse(Console.ReadLine());
    for (int i=1; i<=n;)     //блок модификации пустой     
    Console.Write(" " + i++); 
    }
    Задание. Измените программу так, чтобы:
  • числа выводились в обратном порядке;
  • выводились квадраты чисел.
  • Цикл перебора foreach будет рассмотрен позже.

    Вложенные циклы

    Циклы могут быть простые или вложенные (кратные, циклы в цикле). Вложенными могут быть циклы любых типов: while, do while, for. Каждый внутренний цикл должен быть полностью вложен во все внешние циклы. "Пересечения" циклов не допускаются.

    Рассмотрим пример использования вложенных циклов, который позволит вывести на экран числа следующим образом:

    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, Console.WriteLine())     //1
      for (int j=1; j<=5; ++j)
      Console.Write(" " + 2); 
    }
    Замечание. В строке 1 в блоке модификации содержится два оператора ++i и Console.WriteLine(). В данном случае после каждого увеличения параметра i на 1 курсор будет переводиться на новую строку. Задание. Измените программу так, чтобы таблица содержала n и m столбцов (значения n и m вводятся с клавиатуры).

    Операторы безусловного перехода

    В С# есть несколько операторов, изменяющих естественный порядок выполнения команд: оператор безусловного перехода goto, оператор выхода break, оператор перехода к следующей итерации цикла continue, оператор возврата из метода return и оператор генерации исключения throw.

    Оператор безусловного перехода goto

    Оператор безусловного перехода goto имеет формат:

    goto <метка>;

    В теле той же функции должна присутствовать ровно одна конструкция вида:

    <метка>: <оператор>;

    Оператор goto передает управление на помеченный меткой оператор. Рассмотрим пример использования оператора goto:

    static void Main()
    {      
      float x;
      metka: Console.WriteLine("x="); //оператор, помеченный меткой 
      x = float.Parse(Console.ReadLine());
      if (x!=0) Console.WriteLine("y({0})={1}", x, 1 / x ); 
      else
      {
        Console.WriteLine("функция не определена");
        goto metka; // передача управление метке
      }	
    }

    Следует учитывать, что использование оператора goto затрудняет чтение больших по объему программ, поэтому использовать метки нужно только в крайних случаях, например, в операторе switch.

    Оператор выхода break

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

    Мы уже применяли оператор break для выхода из оператора switch, аналогичным образом он может применяться для выхода из других операторов.

    Оператор перехода к следующей итерации цикла continue

    Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации (повторение тела цикла). Рассмотрим оператор continue на примере.

    static void Main()
    {
      Console.WriteLine("n=");            
      int n = int.Parse(Console.ReadLine());
      for (int i = 1; i <= n; i++)
      {
        if (i % 2 == 0) continue;
        Console.Write(" " + i);
      }
    }
    Замечание.Операторы return и throw будут рассмотрены позже.

    Практикум

  • Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений "Да", "Нет", "На границе" в зависимости от того, лежит ли точка внутри заштрихованной области, вне заштрихованной области или на ее границе.

    Пример:

    1.(рис 4.1) 04_01
    using System;
    namespace Hello
    {
      class Program
      {
         static void Main()
         {
         Console.Write("x=");            
         float x = float.Parse(Console.ReadLine());
         Console.Write("y=");
         float y = float.Parse(Console.ReadLine());
         if (x * x + y * y < 9  y > 0)
           Console.WriteLine("внутри");
         else if (x * x + y * y > 9 || y < 0)
           Console.WriteLine("вне");
           else Console.WriteLine("на границе");
          }
      }
    }

    Области задаются графически следующим образом:

    2.(рис 4.2) 04_02 3.(рис 4.3) 04_03 4.(рис 4.4) 04_04
    5.(рис 4.5) 04_05 6.(рис 4.6) 04_06 7.(рис 4.7) 04_07 8.(рис 4.8) 04_08
    9.(рис 4.9) 04_09 10.(рис 4.10) 04_10 11.(рис 4.11) 04_11 12.(рис 4.12) 04_12
    13.(рис 4.13) 04_13 14.(рис 4.14) 04_14 15.(рис 4.15) 04_15 16.(рис 4.16) 04_16
    17.(рис 4.17) 04_17 18.(рис 4.18) 04_18 19.(рис 4.19) 04_19 20.(рис 4.20) 04_20
  • Составить программу.Замечание. При решении данных задач возможно использовать оператор switch или вложенные операторы if.
  • Дан порядковый номер дня недели, вывести на экран его название.

    Пример:

    using System;
    namespace Hello
    {
      class Program
      {
        static void Main()
        {
          Console.Write("n=");            
          byte n = byte.Parse(Console.ReadLine());
          switch (n)
          {
            case 1: Console.WriteLine("понедельник"); break;
            case 2: Console.WriteLine("вторник"); break;
            case 3: Console.WriteLine("среда"); break;
            case 4: Console.WriteLine("четверг"); break;
            case 5: Console.WriteLine("пятница"); break;
            case 6: Console.WriteLine("суббота"); break;
            case 7: Console.WriteLine("воскресенье"); break;
            default: Console.WriteLine("ВЫ ОШИБЛИСЬ"); break;
          }
        }
      }
    }
  • Дан порядковый номер месяца, вывести на экран количество месяцев оставшихся до конца года.
  • Дан порядковый номер дня месяца, вывести на экран количество дней оставшихся до конца месяца.
  • Дан номер масти m ( 1 <= m <= 4 ), определить название масти. Масти нумеруются: "пики" - 1, "трефы" - 2, "бубны" - 3, "червы" - 4.
  • Дан номер карты k ( 6 <= k <= 14 ), определить достоинство карты. Достоинства определяются по следующему правилу: "туз" - 14, "король" - 13, "дама" - 12, "валет" - 11, "десятка" - 10, $$\dots$$, "шестерка" - 6.
  • Дан номер масти m ( 1 <= m <= 4 ) и номер достоинства карты k ( 6 <= k <= 14 ). Определить полное название соответствующей карты в виде "дама пик", "шестерка бубен" и т.д.
  • С 1 января 1990 года по некоторый день прошло n дней, определить название текущего месяца.
  • С 1 января 1990 года по некоторый день прошло m месяцев, определить название текущего месяца.
  • С некоторой даты по настоящий день прошло m месяцев, определить название месяца неизвестной даты.
  • С некоторой даты по настоящий день прошло m месяцев, найти неизвестную дату.
  • С некоторой даты по настоящий день прошло n дней, найти неизвестную дату.
  • С 1 января 1990 года по некоторый день прошло m месяцев и n дней, определить название текущего месяца.
  • Дано расписание приемных часов врача. Вывести на экран приемные часы врача в заданный день недели (расписание придумать самостоятельно).
  • Проведен тест, оцениваемый в целочисленный баллах от нуля до ста. Вывести на экран оценку тестируемого в зависимости от набранного количества баллов: от 90 до 100 - "отлично", от 70 до 89 - "хорошо", от 50 до 69 - "удовлетворительно", менее 50 - "неудовлетворительно".
  • Дан год. Вывести на экран название животного, символизирующего заданный год по восточному календарю.
  • Дан возраст человека мужского пола в годах. Вывести на экран возрастную категорию: до года - "младенец", от года до 11 лет - "ребенок", от 12 до 15 лет - "подросток", от 16 до 25 лет - "юноша", от 26 до 70 лет - "мужчина", более 70 лет - "старик".
  • Дан пол человека: м - мужчина, ж - женщина. Вывести на экран возможные мужские и женские имена в зависимости от введенного пола.
  • Дан признак транспортного средства: a - автомобиль, в - велосипед, м - мотоцикл, с - самолет, п - поезд. Вывести на экран максимальную скорость транспортного средства в зависимости от введенного признака.
  • Дан номер телевизионного канала. Вывести на экран наиболее популярные программы заданного канала.
  • Дан признак геометрической фигуры на плоскости: к - круг, п - прямоугольник, т - треугольник. Вывести на экран периметр и площадь заданной фигуры (данные, необходимые для расчетов, запросить у пользователя).
  • Вывести на экран:Замечание. Решите каждую задачу тремя способами - используя операторы цикла while, do while и for.
  • целые числа 1, 3, 5, ..., 21 в строчку через пробел:

    Пример:

    using System;
    namespace Hello
    {
      class Program
      {
          
        static void Main()
        {
          Console.Write("n=");            
          byte n = byte.Parse(Console.ReadLine());
    
          Console.Write("while: ");
          int i = 1;           
          while (i <= n)
          {
            Console.Write(" " + i);
            i += 2;
          }
    
          Console.Write("do while: ");
          i = 1;
          do
    {
    Console.Write(" " + i);
    i += 2;
    }
    while (i <= n);
    
    Console.Write("For: ");
    for (i = 1; i<=n; i+=2)
          {
            Console.Write(" " + i);
          }
        }
      }
    }
  • целые числа числа следующим образом:
    10 10.4 
    11 11.4
    ...
    25 25.4
    числа следующим образом:
    25 25.5 24.8 
    26 26.5 25.8
    ...
    35 35.5 34.8
  • таблицу соответствия между весом в фунтах и весом в килограммах для значений 1, 2, 3, ..., 10 фунтов (1 фунтов = 453г);
  • таблицу перевода 5, 10, 15, ..., 120 долларов США в рубли по текущему курсу (значение курса вводится с клавиатуры);
  • таблицу стоимости для 10, 20, 30,..., 100 штук товара, при условии, что одна штука товара стоит х руб (значение х водится с клавиатуры);
  • таблицу перевода расстояний в дюймах в сантиметры для значений 2, 4, 6, ..., 12 дюймов (1 дюйм = 25.4 мм);
  • кубы всех целых чисел из диапазона от А до В ( А<=В ) в обратном порядке;
  • все целые числа из диапазона от А до В ( А<=В ), оканчивающиеся на цифру Х ;
  • все целые числа из диапазона от А до В ( А<=В ), оканчивающиеся на цифру Х или У ;
  • все целые числа из диапазона от А до В ( А<=В ), оканчивающиеся на любую четную цифру;
  • только положительные целые числа из диапазона от А до В ( А<=В );
  • все целые числа из диапазона от А до В , кратные трем ( А<=В );
  • все четные числа из диапазона от А до В , кратные трем ( А<=В );
  • только отрицательные четные числа из диапазона от А до В ( А<=В );
  • все двухзначные числа, в записи которых все цифры разные;
  • все двухзначные числа, в которых старшая цифра отличается от младшей не больше чем на 1;
  • все трехзначные числа, которые начинаются и заканчиваются на одну и ту же цифру;
  • все трехзначные числа, в которых хотя бы две цифры повторяются.
  • Вывести на экран числа следующим образом:

    :

    1) 1 1 1 1 1 1
    2 2 2 2 2 2
    3 3 3 3 3 3
    4 4 4 4 4 4
    using System;
    namespace Hello
    {
      class Program
      {
        static void Main()
        {
          for (int i = 1; i<=4; ++i, Console.WriteLine())
          {
            for(int j=1; j<=6; ++j)
            Console.Write(" " + i);
          }
        }
      }
    }
    2)1 2 3 10 3)-10 -9 -8 12
    1 2 3 10 -10 -9 -8 12
    1 2 3 10 -10 -9 -8 12
    1 2 3 10 -10 -9 -8 12
    -10 -9 -8 12
    4)41 42 43 50 5)5 6)1 1 1 1 1
    51 52 53 60 5 5 1 1 1 1
    61 62 63 70 5 5 5 1 1 1
    5 5 5 5 1 1
    71 72 73 80 5 5 5 5 5 1
    7)1 8)6 6 6 6 6 9)7
    2 2 7 7 7 7 6 6
    3 3 3 8 8 8 5 5 5
    4 4 4 4 9 9 4 4 4 4
    5 5 5 5 5 10 3 3 3 3 3
    10)8 8 8 8 8 11)1 12)1
    7 7 7 7 1 2 2 1
    6 6 6 1 2 3 3 2 1
    5 5 1 2 3 4 4 3 2 1
    4 1 2 3 4 5 5 4 3 2 1
    13)0 1 2 3 4 14)4 3 2 1 0 15)1
    0 1 2 3 3 2 1 0 0
    0 1 2 2 1 0 2 2
    0 1 1 0 0 0
    0 0 3 3 3
    0 0 0
    4 4 4 4
    0 0 0 0
    5 5 5 5 5
    0 0 0 0 0 0
    16)8 17)1 18)9
    7 6 4
    7 7 2 2 8 8
    6 6 7 7 3 3
    6 6 6 3 3 3 7 7 7
    5 5 5 8 8 8 2 2 2 2
    5 5 5 5 4 4 4 4 6 6 6 6 6
    4 4 4 4 9 9 9 9 1 1 1 1 1
    19)3 20)2 2 2 2 2
    0 3 4 5 6 7
    2 3 2 2 2 2
    9 0 2 3 4 5
    2 2 3 2 2 2
    8 9 0 1 2 3
    2 2 2 3 2 2
    7 8 9 0 0 1
    2 2 2 2 3 2
    6 7 8 9 0 -1
  • Самостоятельная работа

    Задача 1.Дана шахматная доска размером nxn клеток. Верхняя левая клетка доски черная и имеет номер (1, 1). Например, для n=4 шахматная таблица выглядит следующим образом:

    1 2 3 4
    1
    2
    3
    4
  • для заданного значения n определить количество черных ячеек шахматной доски;
  • по номеру ячейки (k, m) определить ее цвет;
  • определить, являются ли ячейки с номерами (k1, m1) и (k2, m2) одного цвета;
  • определить, находится ли фигура, стоящая в ячейке с номером (k1, m1), под ударом второй фигуры, стоящей в ячейке с номером (k2, m2), при условии, что ход второй фигуры и ей является:
  • пешка;
  • слон;
  • ладья;
  • ферзь;
  • конь.
  • Задача 2. Задана дата в формате <день>.<месяц>.<год>. Определить:

  • сколько дней прошло с начала года;
  • сколько дней осталось до конца года;
  • дату предыдущего дня;
  • дату следующего дня.
  • Задача 3.Натуральное число из n цифр является числом Армстронга, если сумма его цифр, возведенных в n-ную степень, равна самому числу. Например, 153=13+53+33. Найти все трехзначные числа Армстронга.

    Задача 4.Стороны прямоугольника заданы натуральными числами n и m. Найти количество квадратов (стороны которых выражены натуральными числами), на которые можно разрезать данный прямоугольник, если от него каждый раз отрезать квадрат:

  • наименьшей площади;
  • наибольшей площади
  • Вернуться к учебному плану