Перелік ЛР
ЛР 1. Складні типи даних C# : масиви даних
ЛР 2. Складні типи даних C# : структури
ЛР 3. Функції C#
ЛР 1. Складні типи даних C# : масиви даних
Завдання на ЛР
1. Написати програму виконання операцій з масивами:
Формування масива
Выдображення масива
Викоростання методів класа Array
2. Передбачити:
відображення меню програми;
вибір пунктів меню;
введення даних із клавіатури;
відображення необхідних даних та повідомлень.
Інтерфейс програми
Відомості з теорії
Прості типи даних:
Цілі числа
Цілочисельні типи і їх діапазони
Тип |
Діапазон |
Розмір |
sbyte |
От -128 до 127 |
8-розрядне ціле число із знаком |
byte |
От 0 до 255 |
8-розрядне ціле число без знаку |
short |
От -32 768 до 32 767 |
16-розрядне ціле число із знаком |
ushort |
От 0 до 65 535 |
16-розрядне ціле число без знаку |
int |
От -2 147 483 648 до 2 147 483 647 |
32-розрядне ціле число із знаком |
uint |
От 0 до 4 294 967 295 |
32-розрядне ціле число без знаку |
long |
От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
64-розрядне ціле число із знаком |
ulong |
От 0 до 18 446 744 073 709 551 615 |
64-розрядне ціле число без знаку |
Уявлення цілих чисел у програмі:
12 -1254 36957 -645397
Довільні(речові, дійсні) числа
Типи з плаваючою крапкою дозволяють представляти числа з дробовою
частиною.
Типи для представлення чисел з плаваючою крапкою і їх діапазони
Тип |
Приблизний діапазон |
Точність |
Розрядність |
float |
От ±1,5e−45 до ±3,4e38 |
7 знаків |
32 бита |
double |
От ±5,0e−324 до ±1,7e308 |
15-16 знаків |
64 бита |
Тип decimal призначений для застосування у фінансових розрахунках.
Цей тип має розрядність 128 битий для представлення числових значень
в межах від 1Е-28 до 7,9Е+28. Для звичайних арифметичних обчислень
з плаваючою крапкою характерні помилки округлення десяткових значень.
Ці помилки виключаються при використанні типу decimal, який дозволяє
представити числа з точністю до 28 (а іноді і 29) десяткових розрядів.
Завдяки тому, що цей тип даних здатний представляти десяткові значення
без помилок округлення, він особливо зручний для розрахунків,
пов'язаних з фінансами.
Уявлення дійсних чисел у програмі:
Десяткова (нормальна) форма:
12.365 -1.324 83 -1269
Експоненціальна (показова) форма:
1.236Е2 6.98Е-3 -12.54Е7 -2Е6 4Е-5
Символи
У С# символи представлені 16-розрядним кодом, який називається юнікодом (Unicode).
У юнікоді набір символів представлений настільки широко, що він охоплює символи
практично зі всіх природних мов на світі. Якщо для багатьох природних мов, зокрема
англійського, французького і німецького, характерні відносно невеликі алфавіти, то у
ряді інших мов, наприклад китайському, уживаються досить обширні набори символів,
які не можна представити 8-розрядним кодом. Для подолання цього обмеження в С#
визначений тип char, що представляє 16-розрядні значення без знаку в межах від 0 до 65 535.
При цьому стандартний набір символів в 8-розрядному коді ASCII є підмножиною юнікоду в
межах від 0 до 127. Отже, символи в коді ASCII як і раніше залишаються дійсними в С#.
Уявлення символьных даних у програмі:
'r' 'm' 'Y' '6' '+' '@'
Читання символів із клавіатури
ConsoleKeyInfo cki = new ConsoleKeyInfo(); // структура для збереження кодів клавиш
cki = Console.ReadKey(); // читання кода клавиши
char ch = cki.KeyChar; // збереження кода символа
// використання кодів клавиш
if (ch == '1') ………..
if (cki.KeyChar == (char) 27) break;
Логічний тип даних
Тип bool представляє два логічні значення: "істина" і "брехня".
Ці логічні значення позначаються в С# зарезервованими словами true і false відповідно.
Отже, змінна або вираз типу bool прийматиме одне з цих логічних значень.
У C# тип даних є класом і має ряд методів і властивостей:
MaxValue – повертає максимальне значення для даного типу
MinValue – повертає мінімальне значення для даного типу
Equals(v1,v2) – порівняння значень двох екземплярів даного типу
Parse(str) – перетворення рядка в число
ToString() – перетворення числа в рядок
Довільні типи мають додаткові властивості:
Epsilon – машинний нуль
IsInfinity – перевірка на нескінченність
IsNaN – перевірка на приналежність до чисел
NegativeInfinity – негативна нескінченність
PositiveInfinity – позитивна нескінченність
Масиви
Оголошення одновимірного масиву цілих чисел
int[] arr = new int[100];
Оголошення двовимірного масиву довільних чисел
double [,] matric = new double [8, 8];
Формування масиву випадкових чисел
Random rnd = new Random(); //
for(int i=0; i<30; i++) arr[i] = rnd.Next(1,120); // масив із 30 цілих чисел
// значення від 1 до 120
У C# можна використовувати представлення масиву у вигляді классу Array
і при виконанні операцій з масивами використовувати методи цього класа:
int[] mas = new int[5] { 3, 1, 5, 2, 4 };
mas.SetValue(6,3); // завдання значення елементу(6-значення,3-індекс)
int v = mas.GetValue(2); // читання елементу(2 - індекс)
int l = mas.Length;//визначення розміру масиву
int max = mas.Max(); //визначення максимального значення елементів масиву
int min = mas.Min();//визначення мінімального значення елементів масиву
int midle = mas.Average();//визначення середнього значення елементів масиву
int sum = mas.Sum();//визначення суми елементів масиву
Array.Resize(ref mas, n) ; // зміна розміру масива (n- розмір масива)
Array.Sort(mas, 0, n); // сортування масиву (0, n – початковий і кінцевий індексі)
Array.Reverse(mas, 0, n); // реверс масиву (0, n – індексі)
int ind = Array.BinarySearch(mas, v, 0, n); // пошук значення v у відсортованому масиві
// 0, n – початковий і кінцевий індексі межі пошуку
Рядки
Рядковий тип String (string) визначає і підтримує символьні рядки.
Оголошення рядків: string s;
Клас типу string містить ряд методів для операцій з рядками. Деякі
з цих методів перераховані в таблиці :
Метод |
Опис |
static int Compare(string strA, string strB, StringComparison comparisonType) |
Повертає негативне значення, якщо рядок strA менше рядка strB; позитивне значення, якщо рядок strA більше рядка strB; і нуль, якщо порівнювані рядки рівні. Спосіб порівняння визначається аргументом comparisonType |
bool Equals(string value, StringComparison comparisonType) |
Повертає логічне значення true, якщо зухвалий рядок має таке ж значення, як і у аргументу value. Спосіб порівняння визначається аргументом comparisonType |
int IndexOf(char value) |
Здійснює пошук в зухвалому рядку першого входження символу, визначуваного аргументом value. Застосовується порядковий спосіб пошуку. Повертає індекс першого збігу з шуканим символом або -1, якщо він не виявлений |
int IndexOf(string value, StringComparison comparisonType) |
Здійснює пошук в зухвалому рядку першого входження підрядка, визначуваного аргументом value. Повертає індекс першого збігу з шуканим підрядком або -1, якщо вона не виявлена. Спосіб пошуку визначається аргументом comparisonType |
Додаткові операції з рядками здійснюються з
використанням спеціальних методів :
S.Trim( ) - видаляє початкові і кінцеві пропуски
з рядка S
int p = S.IndexOf( Ps ) - визначає позицію підрядка Ps у рядку S
S = S.Remove( num, n ) - видаляє з рядка n символів,
починаючи з номера num
S = S.Insert( S1, num ) - вставляє у рядок S рядок S1 ,
начиная з номера num
string s = S.Substring( num, n ) - копіює n символів рядка ,
починаючи з номера num
int len = S.Length - повертає довжину рядка
Перетворення рядків
Перетворити рядок str в ціле число
int v = int.Parse(str);
Перетворити рядок str в довільне число
double x = double.Parse(str);
Перетворити довільне число в рядок str
double y = 1.254;
string str = y.ToString( );
string str = y.ToString("G"); // G - загальний формат
string str = y.ToString("0.###" ); // фіксований формат
string str = y.ToString("F3" ); // фіксований формат
Завдання формату виведення довільного числа v
string sm = String.Format(" {0:0.00}", v);
Оголошення змінних:
int a = 123;
double x, y = 4.56;
float z = 1.23E-2;
char ch = ‘A’, sym;
string s, s1 = “Результати”, s2 = “”;
bool flag = false;
Оголошену змінну можна відразу ж ініціалізувати, тобто наповнити початковим значенням.
Важливою особливістю мови є вимога обов'язкової ініціалізації змінною до її першого
використання, тому зазвичай ініціалізація змінної здійснюється у момент її оголошення.
Ініціалізація змінної може відбуватися двома способами: вказівкою її значення або зверненням
до замовчуваного конструктора в пропозиції new. У останньому випадку змінна ініціалізувалася
початковим значенням 0.
Оголошення константи здійснюється так само, як і оголошення ініційованій змінній,
але оператор оголошення починається зарезервованим словом const
const int x = 1, у = 100, z = 0;
Введення/вивід даних
Функції введення:
Console.ReadLine() – повертає значення у вигляді рядка
Console.Read() – повертає значення у вигляді кода сімвола
Console.ReadKey() – повертає значення у вигляді кода клавіш
Для подальшого використання введених даних цей рядок необхідно
перетворити до потрібного типу.
Функції вивідення:
Console.WriteLine(s)
Console. Write (s)
Функції віводят значення у вигляді рядка. Для виведення значень інших
типів необхідно провести перетворення даних в рядок.
Приклади:
Console.WriteLine ("Input V"); // виведення повідомлення
string S;
double V;
S = Console.ReadLine(); // введення із клавіатури
V = double.Parse(S); // перетворення рядка S у довільне число V
Console.WriteLine (" V = " + V.ToString()); // виведення напису і значення V
char key = (char) 0;
ConsoleKeyInfo cki = new ConsoleKeyInfo(); // структура для збереження кода клавиш
cki = Console.ReadKey();// читання кода клавиш
key = cki.KeyChar; // перетворення кода клавиш у сімвол
Оператори C#
Оператори - конструкції мови програмування, що позначають
порядок дій із данніми.
Прості оператори задають відповідність між символікою оператора
і програмних дій.
Складові оператори - програмни інструкції, що складаються з
декількох службових слів (простих операторів,спеціальних конструкцій).
Спеціальні оператори забезпечують спеціальні операції з даними.
Прості оператори:
Оператор присвоєння - =
Забезпечує присвоєння змінним,що задаються в програмі,значень.
Приклади:
x = 1.24; // змінної x присвоюється значення 1.24
// х - дійсного типу
a = delta; // змінної а присвоюється значення
// змінної або константи delta
// a і delta повинні бути одного типу
y = Math.Sin(x); // змінної y присвоюється значення
// стандартної функції sin(x), y-дійсного типу
sym = 'Y'; // змінної sym присвоюється значення 'Y'
// sym - символьного типу
Оператори порівняння:
== - перевірка рівності операндів.
> - перевірка умови,що один операнд більше іншого.
< - перевірка умови,що один операнд менше іншого.
>= - перевірка умови,що один операнд більше або дорівнює другому.
<= - перевірка умови,що один операнд менше або дорівнює другому.
!= - перевірка нерівності операндов.
Дані оператори використовуються в умовних операторах розгалуження.
Роздільник(порожній оператор) - ;
Використовується для поділу операторів або програмних конструкцій.
Приклади:
beta = a + sin(x); b = 123;
Оператори для завдання коментарів у програмі:
/* */ //
Приклади:
// Коментар рядка
/* Це текст коментаря */
Коментари можуть розташовуватися в будь-якому місці програми.
Текстом коментаря може бути будь-який набір символів із
використанням будь-якого алфавіту.
Програмні блоки(оператори програми) в коментатарях не
виконуються (ігноруються програмою).
Складові оператори:
Операторни дужки:
Об'єднують окремі оператори в програмні блоки.
{
< оператори програмного блока >
}
Оператори і програмні конструкції основної функції програми
полягають в операторни дужки:
{
< оператори основної функції програми >
}
Число операторних дужок , що відчиняють ( { ), повинно
відповідати числу операторних дужок , що закривають ( } ).
Оператор розгалуження:
if (< умова >) { < виконувані оператори 1 >; }
else { < виконувані оператори 2 >;}
Дія оператора:
Якщо виконується задана умова,то виконуються оператори 1,
інакше виконуються оператори 2.
Якщо виконуваний оператор у гілках умовного оператора один,
те операторни дужки { } не використовуються.
Можливо використання даного оператора в стислій формі запису:
if( < умова > ) < оператор 1 >;
< наступні оператори >;
У якості умов можуть бути використані прості вираження або
складні програмні конструкції.
