Особливості введення даних у програму з консольного рядка
Особливості виведення даних у консоль
Особливості зчитування даних з файлу та запис їх у файл
Найпростіша програма та її удосконалення
Найпростішу програму мовою C# можна написати навіть у "блокноті". Ось її текст: class FirstClass {static void Main() {}}
Цей набір символів немає жодної практичної цінності окрім тієї, що вона без проблем компілюється (але про це пізніше)!!! Така собі: "Програма яка робить - те, що нічого не робить!"
Трішечки доповнивши цю програму навчимо її зізнаватися в почуттях до вибраної нами мови програмування:
class I_love_CSharp {static void Main() {System.Console.WriteLine("I love C#");}}
Хоча наша програма помістилася в один рядок, та й будь-яку програму на C# можна написати, умовно кажучи, "в один рядок" - так робити не прийнято. Для кращого розуміння програму розбивають на кілька рядків так, щоб в кожному містилася окрема, відносно незалежна частина програми, яку іноді називають - "команда". Крім поділу на рядки для команд створюють відступи від початку рядка. Відступи роблять різні. Величина відступу визначається за певним ієрархічним принципом. Величина виступу підказує програмісту яке значення має у програмі той чи інший фрагмент коду. Умовно пояснимо, що більш "загальніший" фрагмент програми має менший відступ від лівого краю.
class I_love_CSharp
{
static void Main()
{
System.Console.WriteLine("I love C#");
}
}
Зберігати програму потрібно у файл з розширенням *.cs. Наприклад "loveC.cs".
На будь-якому комп'ютері де встановлено Microsoft .NET Framework (не залежно від його версії) цю програму можна перетворити у виконуваний файл (відкомпілювати). Робиться це просто. У папці Windows є папка Microsoft.NET а у ній папка Framework. У папці Framework система, як правило, створює стільки папок - скільки версій платформи у .NET там встановлено. Називатися ці папки будуть за назвою версії. Наприклад "v3.5". У тій папці обов'язково є файл csc.exe - це і є компілятор мови C#. Так от:
файл "*.cs" можна зберегти для компіляції саме в папці певної версії платформи .NET Framework;
запускаєте компілятор (файл csc.exe), в параметрі якого вказуєте ім'я файлу вашої програми. Наприклад в командному рядку можна записати: csc.exe loveC.cs;
якщо програма написана без помилок то за кілька секунд у папці зявиться новий файл з розширенням *.exe. Ім'я нового exe-файлу співпаде з іменем cs-файлу, який ви компілювали.
Тобто, щоб відкомпілювати файл loveC.cs потрібно виконати команду "csc.exe loveC.cs" в результаті якої утвориться файл loveC.exe.
Негайно спробуйте здійснити описане, і ваша посмішка буде найкращою оцінкою за зроблене :-)
Найпростіша програма на C# написана засобами MS Visual Studio
Очевидно створювати програми в блокноті це не найкращий спосіб навчання програмування вже тільки тому, що практично жоден сучасний програміст, для забезпечення високої ефективності своєї праці, не може обійтися без використання спеціальних середовищ програмування. Однією з таких програм є Microsoft Visual Studio.NET. Ця програма розвивається надзвичайно швидко. Кожні два-чотири роки з'являються нові її версії. Оскільки загальні принципи розробки залишаються без зміни а щоразу зростають системні вимоги до використання нових втілень Visual Studio, то ми розглянемо версію середовища програмування від 2008 року - Visual Studio 2008.
Якщо середовище Visual Studio уже інстальоване на вашій машині і ви його запустили то для створення нового проекту C# необхідно скористатися кнопкою Create Project на стартовій сторінці. Ліворуч, у вікні New Project, вибираємо Visual C#, а праворуч тип додатку - Console Application. Слід вказати ім'я проекту, наприклад MyConsoleProgect та натиснути на кнопку ОК. Діалогове вікно закриється... От і все - нова програма готова. Можна доповнити її рядочком Console.WriteLine("I love C#"); розмістивши його у готових фігурних дужках після методу Main. Вибравши у меню Debug пункт StartWithoutDebugging або натиснувши Ctrl+F5 можна запускати код на виконання. Якщо ви правильно розмістили рядок Console.WriteLine("I love C#"); автоматично згенерована програма без помилок відкомпілюється.
У більшості середовищ розробки мовою C#, серед яких найпопулярнішими є різні версії "Sharp Develop" та "Mono Develop", створення нової програми відбувається практично аналогічно. До того ж нова створена програма уже виконує схоже завдання - виводить на екран повідомлення: "Привіт світ" ("Hello World!"). Традиційно саме з такої програми у програмістів прийнято розпочинати знайомство з програмуванням взагалі чи з кожною новою мовою програмування. Цю. програму так і звуть "програма Hello World!".
Аби програма виводила інше повідомлення, наприклад про ваше захоплення програмуванням у тексті нової програми рядок Console.WriteLine("Hello World!") можна замінити рядочком Console.WriteLine("I love C#").
У якій папці Visual Studio зберігає нашу програму?
Місце збереження проекту можна вказати у полі Location в діалоговому вікні, що з'являється на початку його створення. У вказаному місці на диску створюється папка робочої області з таким ім'ям яке ми дали усьому проекту. У нашому випадку - MyConsoleProgectа. У папці робочої області створюються ще файл із ім'ям робочої області й розширенням sln, що містить дані, про настроювання робочої області, файлах, папках і за допомогою якого відбувається завантаження робочого простору в середовище VisualStudio. В цій же папці робочої області створюється ще одна папка проекту з таким само іменем "...\MyConsoleProgect\MyConsoleProgect". Саме у цій папці будуть зберігатися файли проекту і створений файл коду програми MyConsoleProgect.cs. Ще у папці проекту, створюються папки bin, obj, Properties. У папці bin перебуває вкладена папка Debug, де згодом буде перебувати виконує файл проекту (MyConsoleProgect.exe), що з'явиться (скомпілюється) після першого запуску програми та буде щоразу перезаписуватись як тільки проект буде на виконання запускатися знову. Папка obj використається для зберігання відомостей про об'єктні модулі, папка Properties – даних про властивості проекту.
Чому код найпростішої програми автоматично згенерованої у Visual Studio вийшов трохи більшого обсягу?
По перше, в програмі автоматично створено рядок using System, що дозволяє вживати так би мовити коротші імена методів, зокрема, замість System.Console можна писати просто Console. Замість System.Console.WriteLine("I love C#"); ми написали Console.WriteLine("I love C#");. Також на початку коду, у розділі using програма містить назви інших просторів імен, що можуть, аналогічно, спростити використання класів та методів з інших просторів імен окрім System. Ще у програмі вказівкою namespace оголошений свій простір імен. Це може знадобитись якщо ми створювані нами програми будемо узгоджувати з іншими нашими чи чужими розробками. Ще трошки більш детально описується функція Main.
Удосконалення найпростішої програми оператором введення
Якщо у програму додати рядок System.Console.ReadLine(); то зустрівши його програма зупиниться.
class I_love_CSharp
{
static void Main()
{
System.Console.WriteLine("I love C#");
System.Console.ReadLine();
}
}
Ось приклад діалогу .....
class first
{
static void Main()
{
string NewValue = System.Console.ReadLine();
System.Console.WriteLine("how you old?");
int a = System.Convert.ToInt32(System.Console.ReadLine());
System.Console.WriteLine("I love my school! and " + NewValue);
System.Console.Write("I'm ");
System.Console.Write(a);
System.Console.WriteLine(" old. ");
System.Console.ReadLine();
}
}
Розширимо можливості програми
Спираючись на матеріалами сайту http://sernam.ru/book_csharp.php, де опубліковано посібник ОСНОВЫ ЯЗЫКА C# 2005, опишу деякі приклади удосконалення найпростішої програми.
Розширимо можливості програми, а саме навчимо її зчитування дані із клавіатури й виконання найпростішим арифметичних операцій, знаходження суми, різниці, добутку й частки. Для зчитування рядка символів, уведеної із клавіатури в консольному вікні, використається метод Console.ReadLine(), з того ж таки простору імен System. Для перетворення рядка символів у число можна використати метод Parse(). Детальніше про цей метод читайте на сторінці "Введення даних в консоль C#"
Використаємо відповідні методи в програмі:
float m; //Опис змінної m типу float
Console.WriteLine("Привіт з C#");
Console.WriteLine("Уведіть ціле число: "); //Вводимо рядок символів методом
//Console.ReadLine() і за допомогою методу
//Parse() перетворимо його до цілого типу int
//і привласнимо змінній k цілого типу.
int k = Int32.Parse(Console.ReadLine());
Console.WriteLine("Було введене число - " + k);
k = k + k; Console.WriteLine("Сума k+k =" + k);
k = k * k; Console.WriteLine("Добуток k*k =" + k); //Змінна l описана як float float
l = (float)k / ((float)k + (float)k);
Console.WriteLine("Вираз k /(k+k) = " + l);
Console.WriteLine("Введіть дробове число ");
Console.WriteLine("(як розділовий знак");
Console.WriteLine(" використайте кому): "); //Зчитування рядка символів і перетворення її до типу float
m = float.Parse(Console.ReadLine());
m = (m + m)/(m*m); Console.WriteLine("Вираз (m + m)/(m*m)= " + m);
Зверніть увагу на рядок: float l = (float)k / ((float)k + (float)k); Тут, у явному виді використовується приведення типу змінної k до типу float, інакше при проведенні обчислень, результат від ділення буде зведений до цілого числа. У рядку: m = float.Parse(Console.ReadLine()); використовується метод Parse() для перетворення рядка символів в число типу float. Результат перетворення привласнюється змінній m. Тип змінної описаний у рядку: float m; //Опис змінної m типу float
Приклад програми, що визначає, парне число чи ні ввів користувач:
class Program
{
static void Main(string[] args)
{
//Читаємо символ уведений із клавіатури ( метод ReadLine())
//за допомогою методу Parse перетворимо його
//у ціле число й привласнюємо значення змінної k
Console.WriteLine("Уведіть ціле число");
int k = Int32.Parse(Console.ReadLine());
int b = k / 2;
if (2*b == k) { Console.WriteLine("Парне число");
//Фігурні дужки можна не писати у випадку одного оператора. Розгалуження else теж не є обов'язковим - все залежить від конкретного завдання.
}
else { Console.WriteLine("Непарне число");
}
}
}
Приклад використання оператора switch:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Уведіть оцінку");
int k = Int32.Parse(Console.ReadLine());
Console.WriteLine("Уведена оцінка: " + k.ToString());
switch (k)
{ case 1:
case 2: Console.WriteLine("Незадовільно");
break;
case 3: Console.WriteLine("Задовільно");
break;
case 4: Console.WriteLine("Добре");
break;
case 5: Console.WriteLine("Відмінно");
break;
default: Console.WriteLine("Помилка"); break;
}
}
}
У наведеному прикладі залежно від уведеного користувачем числа на екран виводиться та або інша оцінка. Якщо число k не лежить у проміжку від 1 до 5, то виконуються оператори в гілці default і виводиться напис "Помилка". Гілка default необов'язкова.
Зверніть увагу на оператор break. Якщо його не написати, то будуть виконуватися оператори з наступної гілки case до рядка з break'ом .
Якщо в деякій гілці case або default є оператори, то написання break обов'язково. Так, у наступних двох ділянках коду програми є помилки:
... case 1: Console.WriteLine("Зовсім незадовільно"); //Помилка! Отут пропущено break
case 2: Console.WriteLine("Незадовільно"); break; ... ... default: Console.WriteLine("..."); //Помилка! Отут пропущено break }
Застосовуючи оператор switch, необхідно закінчувати кожну case-галузь оператором break.
Приклад циклу for:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Уведіть число");
int k = Int32.Parse(Console.ReadLine());
int sum = 0;
for (int i = 1; i <= k; i++)
{
sum += i; //Еквівалентно sum=sum+i } Console.WriteLine(sum);
}
}
Цей приклад підраховує суму чисел від 1 до уведеного користувачем числа k. Сума записується в змінну sum і виводиться на екран.
Приклад використання циклу While
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Уведіть пароль");
string password;
do
{
password = Console.ReadLine();
}
while (password != "C#"); //-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-
}
}
У прикладі цикл буде виконуватися доти, поки користувач не введе правильний пароль (C#).
Приклад використання операторів break й continue public void Juдmps()
{
int i = 1, j=1;
for(i = 1; i<100; i++)
{
for(j = 1; j<10;j++)
{
if (j>=3) break;
}
Console.WriteLine("Вихід із циклу j при j = {0}", j);
if (i>=3) break;
}
Console.WriteLine("Вихід із циклу i при i= {0}", i);
}
Оператор continue використається тільки в тілі циклу. На відміну від оператора break, що завершує внутрішній цикл, continue здійснює перехід до наступної ітерації цього циклу.
Стандартні математичні функції в С# зібрані в окремому класі Math й є методами класу. Клас Math, що містить стандартні математичні функції, містить два статичні поля, що задає константи е й π, а також 23 статичних методи. Методи задають: тригонометричні функції - Sin, Cos, Tan; зворотні тригонометричні функції - ASin, ACos, ATan, ATan2 (sinx, cosx); гіперболічні функції - Tanh, Sinh, Cosh; експоненту й логарифмічні функції - Exp, Log, Log10; модуль, корінь, знак - Abs, Sqrt, Sign; функції округлення - Ceiling, Floor, Round; мінімум, максимум, ступінь, залишок - Min, Max, Pow, IEEERemainder. В особливих поясненнях ці функції не мають потреби.
Приклад використання:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace temp11
{
class Program
{
static void Main(string[] args)
{
double a, b,t,t0,dt,y;
string NameFunction;
Console.WriteLine("Введіть ім'я F(t)досліджуваної функції a*F(b*t)" + " (sin, cos, tan, cotan)");
NameFunction = Console.ReadLine();
Console.WriteLine("Введіть параметр a (double)");
a= double.Parse(Console.ReadLine());
Console.WriteLine("Уведіть параметр b (double)");
b= double.Parse(Console.ReadLine());
Console.WriteLine("Уведіть початковий час t0(double)");
t0= double.Parse(Console.ReadLine());
const int points = 10;
dt = 0.2;
for(int i = 1; i<=points; i++) { t = t0 + (i-1)* dt;
switch (NameFunction)
{ case ("sin"): y = a*Math.Sin(b*t);
break;
case ("cos"): y = a*Math.Cos(b*t);
break;
case ("tan"): y = a*Math.Tan(b*t);
break;
case ("cotan"): y = a/Math.Tan(b*t);
break;
case ("ln"): y = a*Math.Log(b*t);
break; case ("tanh"): y = a*Math.Tanh(b*t);
break; default: y=1; break;
}
Console.WriteLine ("t = " + t + "; " + a +"*" + NameFunction +"(" + b + "*t)= " + y + ";");
}
double u = 2.5, v = 1.5, p;
p= Math.Pow(u,v);
Console.WriteLine ("u = " + u + "; v= " + v + "; power(u,v)= " + p );
}
}
}
У даному прикладі користувач визначає, яку функцію він хоче обчислити й при яких значеннях її параметрів.