середа, 28 лютого 2018 р.

Починаємо вивчати C#. Змінні, оператор присвоювання та арифметичні операції.

Комп'ютерну програму можна розглядати як послідовність команд. Ми пишемо програму на мові програмування C#. Почнемо вивчати команди і конструкції цієї мови.
Для цього напишемо програму, яка розв'язує рівняння виду
ax =  b
де a і  b - деякі задані числа, а x - число, яке необхідно знайти.
Як відомо (із шкільної математики), розв'язок такого рівняння знаходиться за формулою
x = b/a
Напишемо програму, яка рахує x за цією формулою.
Запускаємо Студію і відкриваємо наше "app" рішення. (Меню File -> Open -> Project/Solution... в відкрившомуся діалозі вибираємо наш файл app.sln і нажимаємо Open.)

Якщо необхідно створити нове рішення, то вибираємо меню File->New->Project. Відкриється вікно New project. В цьому вікні зліва вибираємо Installed->Visual C#->Windows Classic Desktop, далі вибираємо із списку Console App (.NET Framework). Далі задаємо ім'я проекту (App), робочу папку (в цій папці будуть створені  файли рішення і проекту) і ім'я рішення (solution).
Якщо не відкрилося вікно Solution Explorer, вибираємо меню View -> Solution Explorer, вікно Solution Explorer стане видимим. В цьому вікні в проекті app вибираємо файл Program.cs - цей файл відкриється в редакторі.
Файл, який автоматично створила для нас Студія, виглядає так:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace App
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }


Наша програма починає виконуватись з першої стрічки, яка йде за
 static void Main(string[] args)
{
З цього місця почнемо писати наш код (послідовність команд).

Перша конструкція, яка нам необхідна - це змінна.

Декларуючи змінну, ми даємо компілятору наступну інструкцію: необхідно зарезервувати місце в пам'яті комп'ютера, де ми зможемо зберігати деякі данні.
В програмі може бути багато різних змінних, їх треба якось розрізняти. В C# змінна має ім'я, використовуючи це ім'я ми будемо вказувати компілятору, яке саме місце в пам'яті нам зараз потрібне.
Програма може працювати з різними даними, вони можуть по-різному зберігатись в пам'яті. Наприклад, це може бути текст, ціле число, дріб і багато іншого. Тому в C# використовують таке поняття, як тип змінної. Знаючи тип змінної, компілятор зможе правильно зарезервувати необхідне місце в пам'яті і зможе правильно будувати послідовність команд процесора для роботи з цими даними.

Змінна в C#:

  • Використовується для резервування певного місця в пам'яті для зберігання даних.
  • Має ім'я. Ми звертаємося до того чи іншого місця в пам'яті вказуючи ім'я змінної.
  • Має тип. Тип вказує компілятору, які саме дані ми будемо зберігати в цій змінній.
Тепер ми можемо почати писать код. Зразу хочу сказати, що перший варіант коду у нас буде далеко не такий, який пишуть професійні програмісти. Це тому, що ми ще дуже мало знаємо і змушені використовувати далеко не всі можливості мови.

Змінна в C# декларується наступним чином: пишемо тип змінної а потім ім'я змінної. В кінці ставимо ";".
Наприклад, запис
     double a; 
декларує змінну "a" типу "double"
"double" зберігає числа з плаваючою  точкою. Зараз ми можемо вважати такі числа звичайними числами виду 5.23, 123.456 і так далі.

Наступна конструкція, яку ми будемо використовувати для розв'язку рівняння - це оператор присвоювання.

Оператор присвоювання наказує компілятору побудувати код, який запише в певну змінну певні дані.
Виглядає це так:
  a = 123.45;
Ця команда записує в змінну a число 123.45. Таким чином, після виконання цієї команди в пам'яті, яка відповідає змінній a, будуть зберігатися данні, які представляють число 123.45

Зверніть увагу, що оператор присвоювання в C# має зовсім інший зміст, ніж знак "=" в математиці.
В математиці "=" означає твердження, що дві сутності (наприклад, два числа) рівні.
На мові C# оператор (команда) "=" - це команда записати певні дані в певне місце в пам'яті комп'ютера.

Далі нам потрібно буде виконати обчислення.
Для обчислень ми будемо використовувати арифметичні оператори.
Як видно з формули для знаходження кореня рівняння ax = b,
x = b/a
нам  треба виконати операцію ділення. В C# для операції ділення використовується символ "/".
Також існують операції множення ("*"), додавання ("+"), віднімання ("-") та інші. Символи, які використовуються для арифметичних операцій, підібрані так, щоб, з одного боку, вони були схожі на відповідні математичні символи, а з іншого боку, ці символи присутні на клавіатурі і  вираз можна записати в один рядок  Пізніше я більш детально розповім про вирази в C#.

Зараз нам потрібно виконати операцію ділення.
Виглядає це так:

  double a;
  double b;
  double с;
  a = 10;
  b = 2;
  c = a/b;
Для останнього рядка компілятор побудує код, який прочитає число із змінної "a" (точніше, прочитає число із того місця в пам'яті, яке відповідає змінній "a"), прочитає число із змінної "b", відніме від першого числа друге і запише результат в змінну "c".

Коментарі.

Часто буває зручно прямо в тексті програми написать коментар, який буде пояснювати код.
В C# любий текст після "//" і до кінця рядка є коментарем. Коментар може містити любий текст і не впливає на роботу програми.
Наприклад:

  double a; // тут можна писать все, що нам треба.
  // це теж коментар, який не впливає на роботу програми
  double b;

Тепер у нас є все необхідне, щоб написати нашу програму.
Наш код буде виглядати так:
 static void Main(string[] args)
{
  double a; // резервуємо місце в пам'яті
  a = 2;    // записуємо в це місце число "2"
  double b;
  b = 10;   // Записуємо в змінну "b" число "10"
  

  double x;
  x = b / a;
  
  Console.WriteLine(x);  // виводимо результат
  Console.ReadLine();    // чекаємо на "Enter"
}

 
Запускаємо програму (меню Debug -> Start Debugging)
Відкриється консоль, в якій ми побачимо результат, число 5.




А так виглядає наша програма в Студії:



Звичайно, ця програма дуже далека від програм, які використовуються на практиці.
В цій програмі безліч недоліків. Вона розв'язує цілком конкретне рівняння. Для того, щоб розв'язати інше рівняння (інші значення "a" і "b"), необхідно змінити програму. Наш код виглядає громіздким. Якщо b буде рівним нулю, то наша програма аварійно завершиться.
По мірі вивчення можливостей C# наші програми ставатимуть кращими.