Комп`ютерна презентація до уроку

Download Report

Transcript Комп`ютерна презентація до уроку

Профільна інформатика
10 клас
Лінія “Алгоритмізація та програмування”
Тема 5. «Лінійні алгоритми.
Введення та виведення даних»,
Тема уроку: Поняття змінної. Ім’я та тип змінної. Опис
стандартних типів змінних. Арифметичні операції.
Правила запису арифметичних виразів
Константа, змінна - це засадничі поняття у будь-якій
мові програмування. Дамо визначення цим поняттям.
Константа - це величина, яка при виконанні
програми залишається незмінною.
Змінна - це елемент пам'яті для тимчасового
зберігання даних. Передбачається, що в
процесі виконання програми значення
змінних можуть змінюватися.
Будь-яка мова програмування подібна до мови людини. Як і в нашій з вами
мові(російському, англійському і так далі), в мові програмування можна виділити
алфавіт, слова і пропозиції. Але мова програмування у відмінності від мови
людини набагато простіше і підкоряється суворим правилам. Це обумовлено
примітивністю обчислювальної техніки : комп'ютер - не людина, домислити
нічого не може і обробляє тільки такий набір команд, який трактується
однозначно.
Отже, розберемо базові поняття мови С# і розпочнемо з основи основ у будьякій мові - його алфавіту.
Алфавіт мови - це той набір символів(знаків), який допустимий в цій мові.
У алфавіт мови C# входять:
прописні і рядкові букви(латинські і національних шрифтів) і символ
підкреслення(_);
цифри;
спеціальні знаки: ' " , { } | [ ] ( ) + - / \ % ? ! . ; : < = > & * ~ ^
Символи, що не відображаються, вони використовуються для відділення
лексем один від одного(це пропуски, табуляція, перехід на новий рядок).
З окремих символів алфавіту мови будуються більші блоки програми :
лексеми, директиви препроцесора і коментарі.
Лексема - це послідовність з одного або декілька символів,
що представляє певний сенс. Лексемам в мові людини
відповідає поняття слово. У літературі, присвяченій
трансляції з мов програмування, часто використовується
термін токен, що має той же сенс. Існує декілька видів
лексем :
ідентифікатори(імена об'єктів);
ключові(зарезервовані, службові) слова;
знаки операцій;
роздільники;
літерали.
Ідентифікатор - це послідовність букв, цифр і
символів підкреслення.
Ідентифікатори використовуються для позначення
імен об'єктів, використовуваних в програмі.
Все, що застосовується в програмі, має ім'я.
Імена(назви) мають константи, змінні, методи,
класи і т. д.
Ім'я не може розпочинатися з цифри. Довжина імені
довільна. Обмеження накладаються тільки на зовнішні
імена, наприклад, на імена бібліотек, але це
обмеження не мови C#, а операційної системи.
У ідентифікаторах допускається застосовувати
національні шрифти, але це небажано.
Ключові слова - це службові слова, які
зарезервовані в мові, їх можна використати тільки по
прямому призначенню(наприклад, for - це заголовок
оператора циклу і нічого більшого), тобто зарезервовані
слова не можна використати в якості імен змінних
користувача.
Ключові слова, визначені в стандарті мови C#,
приведені в наступні таблиці.
Знаки операцій
Операнд
• це один або
декілька символів,
що визначають дію
над операндами.
Усередині знаку
операції не може
бути
пропусків(пропуск це завжди
роздільник).
Наприклад, у
вираженні x+y знак
+ означає операцію
складання, а x і y є
операндами.
Операції і знаки, що
їх, що означають, ми
вивчатимемо в міру
необхідності.
• це константа,
змінна або виклик
методу(функції).
Операнди, пов'язані
знаками операцій,
утворюють вирази.
Поняття "
вираження" в мові
програмування
відповідає поняттю
" словосполучення"
в мові людини. Тип
вираження
визначається типом
операндів.
Роздільник
• Роздільник
використовуються
для розділення або
для угрупування
елементів.
Приклади
роздільників :
пропуски, дужки,
точка, кома.
Літерали(константи)
• це величини, які
незмінні. У C#
допустимі цілі,
речові, символьні,
строкові, логічні
константи і
константа null.
Компілятор
визначає тип
константи по її
зовнішньому
вигляду.
Послідовність (по-іншому - escape- послідовність), що
управляє, є певним символом, перед яким стоїть
обернена коса риска(зворотний слэш). При цьому два ці
знаки вважаються за один символ.
Escape- послідовності потрібні для позначення
символів, що не мають графічного представлення
(наприклад, перехід на новий рядок), а також для
символів, які мають спеціальне значення в символьних і
рядкових константах, наприклад, апостроф.
Допустимі значення послідовностей,
що управляють
EscapeОпис
послідовність
\a
Звуковий сигнал(дзвінок)
\b
Повернення на одну позицію(забій)
\f
Подання сторінки(для переходу до початку
наступній сторінці)
\n
Перехід на новий рядок
\r
Повернення каретки
\t
Горизонтальна табуляція
\v
Вертикальна табуляція
\0
Нуль-символ
\‘
Апостроф(одинарна лапка)
\”
Подвійна лапка
\\
Обернена коса риска
Коментарі - це фрагменти програми, які не обробляються
компілятором, а використовуються для пояснення тексту програми. У
мові C# є ті ж види коментарів, що і в C++, а також з'явився новий вид.
Однорядковий коментар - розпочинається з двох символів "коса
риска", наприклад:
// це коментар в один рядок
2) Багаторядковий коментар - розпочинається з пари символів /* і
закінчується парою */. Приклад:
/* Великий
коментар
*/
3) Коментарі для автоматичної генерації документації в XML- форматі.
Вони розпочинаються з трьох символів "коса риска".
///<summary>
///This is Alfa class
///</summary>
1)
Перш ніж використати в програмі якусь змінну,
потрібно обов'язково дати її опис, тобто сказати, яке
ім'я має змінна і який її тип. Спочатку вказується тип
змінної, а потім її ім'я. Наприклад:
int k; // це змінна цілого типу int
double x; // це змінна дійсного типу подвоєної
точності
Якщо є декілька змінних одного типу, то
допускається їх опис через кому в одному операторові,
наприклад:
double a, b, c;
Після опису змінною її можна використати, але виникає питання: а
яке значення має змінна відразу ж після її опису? Відповідь така: в
програмі на мові C# значення змінної після опису не визначене. Така
змінна може використовуватися в лівій частині оператора
присвоєння, але її не можна використати у виразі або в правій частині
оператора присвоєння. Наприклад:
double x, y, z;
x=2.5; // так можна
y=z+1; // а так не можна! Змінна z не визначена
Для останнього оператора компілятор мови C# видасть
повідомлення про помилку. Цією властивістю (не можна використати
змінну, яка не отримала ніякого значення) мова C# вигідно
відрізняється від своїх попередників - мов С і С++.
Щоб уникнути проблеми, рекомендується ініціалізувати змінні,
тобто не просто виділяти пам'ять під змінні, але і задавати їм при
цьому необхідні значення. Наприклад:
double x=3, y=4, z=5;
Ініціалізація змінних виконується один раз на етапі компіляції.
Усі константи незалежно від типу даних можна підрозділити на дві
категорії: іменовані константи і константи, які не мають власного
імені.
Наприклад:
25 - константа цілого типу;
3.14 - дійсна константа;
'A' - символьна константа.
Наведені константи не мають імені, вони задані своїм зовнішнім
представленням і використовуються в програмі безпосередньо,
наприклад так:
int k=25; // змінна k ініціалізувала константою - цілим числом 25.
У ряді випадків константі зручніше дати ім'я і використати її далі по
імені. Це робить текст програми наочнішим. Зазвичай застосовується для
математичних або фізичних констант.
У мові C# визначити іменовану константу дуже просто. Для цього
використовують ключове слово const, наприклад:
const double PI=3.14; // тут PI – константа
double t;
t=PI * 2;
C# - мова із строгим контролем типів даних.
Це означає, що усі операції в C# контролюються
компілятором на предмет сумісності типів даних, а якщо
операція є неприпустимою, то вона не
компілюватиметься.
Така строга перевірка типів даних допомагає
запобігти помилкам і підвищує надійність. Для
можливості здійснення цього контролю усім змінним,
результатам обчислень виразів і значенням заданий
певний тип (тобто не існує змінної з невизначеним
типом).
Більше того, тип значення визначає види операцій, які
дозволено робити над ним. Операція, дозволена для
одного типу даних, може бути заборонена для іншого
типу.
C# включає дві
основні категорії
вбудованих типів
даних : звичайні
типи(чи прості
типи) і посилальні
типи.
До посилальних
типів відносяться
класи, про які ми
поговоримо пізніше.
Звичайні типи,
яких в ядрі C#
тринадцять,
представлені в
таблиці.
Тип
Опис.
Bool
Значення true/false (істина/брехня)
Byte
8-бітове беззнакове ціле
Char
Символ
Decimal
Числовий тип для фінансових обчислень
Double
Число подвійної точності з плаваючою комою
Float
Число одинарної точності з плаваючою комою
Int
Ціле число
Long
Довге ціле
Sbyte
8-бітове знакове ціле
Ulong
Беззнакове довге ціле
Ushort
Беззнакове коротке ціле
Short
Коротке ціле
Uint
Беззнакове ціле
Ulong
Беззнакове довге ціле
Ushort
Беззнакове коротке ціле
У C# для кожного типу даних строго специфікований
діапазон значень і можливі операції над ними. В C#
строго контролюється виконання цих специфікацій.
У C# визначені дев'ять цілочисельних типів даних :
char, byte, sbyte, short, ushort, int, uint, long і ulong.
Тип даних char в основному застосовується для
представлення символів і буде описаний пізніше в цій
главі.
Інші вісім типів використовуються для виконання
операцій з числами.
У наступній таблиці перераховані ці типи, а також
вказана кількість бітів, що виділяються для
представлення числа, і діапазон можливих значень.
Тип
Кількість
бітів
byte
sbyte
short
ushort
int
uint
long
8
8
16
16
32
32
64
ulong
64
Діапазон значень
від 0 до 255
від -128 до 127
від -32768 до 32767
від 0 до 65535
від -2147483648 до 2147483647
від 0 до 4294967295
від -9223372036854775808 до
9223372036854775807
від 0 до 18446774073709551615
Як показано в таблиці, в C# визначені як знакові, так
і беззнакові варіанти цілочисельних типів.
Відмінність між ними полягає в способі інтерпретації
старшого біта цілого числа. Якщо вказується знакове
ціле, то компілятор генеруватиме код, в якому
передбачається інтерпретація старшого біта цілого
числа як прапора знаку.
Якщо прапор знаку 0, то це додатне число; якщо
прапор знаку 1, то число від'ємне. Від'ємні числа
практично завжди представлені з використанням
методу двійкового доповнення. У цьому методі усі біти
числа(за винятком прапора знаку) інвертуються, потім
до цього числа додається одиниця, на завершення
прапору знаку задається значення 1.
Для цілих типів допустимі наступні групи операцій :
арифметичні операції;
побітові операції;
операції порівняння;
автозбільшення і автозменшення.
Можливе автоматичне перетворення від менш потужного до
потужнішого типу, але не навпаки.
Наприклад:
int i = 3;
short k = 2;
i = k;
// це допустимо
k = i;
// так не можна, буде повідомлення про помилку
k = (short) i; //а так можна - виконуємо явне перетворення
Приклади оголошення
змінних дійсних типів :
float x;
double y;
Для дійсних типів
допустимі наступні групи
операцій :
арифметичні
операції;
операції
порівняння;
автозбільшення і
автозменшення.
Типи даних з плаваючою комою можуть представляти числа,
що мають дробові частини.
У С# існують два типи даних з плаваючою комою, float і
double, представляючі числа з одинарною і подвійною точністю
відповідно. Для представлення даних типу float виділяються 32
біта, що дозволяє привласнювати змінним значення чисел, що
знаходяться в діапазоні від 1.5E-45 до 3.4Е+38.
Для представлення даних типу double виділяються 64 біта, що
розширює діапазон використовуваних чисел до величин з
діапазону від 5Е-324 до 1.7Е+308.
Найчастіше застосовується тип double.
Одна з причин цього в тому, що багато математичних функцій
у бібліотеці класів C# використовують значення, що мають тип
double.
Наприклад, метод Sqrt(), визначений в стандартному класі
System.Math, повертає значення типу double, що є квадратним
коренем його аргументу, що також має тип double.
public static void Main()
{
double x, y, z;
x = 3;
y = 4;
z = Math.Sqrt(x*x + y*y);
Console.WriteLine("Довжина гіпотенузи дорівнює
" + z);
}
}
Метод Sqrt() є членом класу Math.
Зверніть увагу на спосіб виклику методу Sqrt() - ім'я
методу відокремлене крапкою від імені класу, членом
якого він є.
Схожий спосіб запису нам вже зустрічався, коли
перед ім'ям методу WriteLine() стояло ім'я його класу
Console.
Не усі стандартні методи треба викликати, вказавши
спочатку ім'я класу, в якому визначений цей метод, але
деякі методи вимагають саме такого виклику.
Можливо, найцікавішим числовим типом даних в C# є тип
decimal, призначений для використання в грошових
обчисленнях.
У типі decimal для представлення значень, що знаходяться
в діапазоні від 1Е-28 до 7.9Е+28, використовується 128 бітів.
В звичайних арифметичних обчисленнях, виконуваних над
числами з плаваючою комою, неодноразові округлення
значень призводять до неточного результату.
Тип даних decimal усуває помилки, що виникають при
округленні, і може представляти числа з точністю до 28
десяткових розрядів(а в деяких випадках і до 29 розрядів).
Ця здатність представляти десяткові значення без
помилок округлення особливо корисна, коли розраховуються
фінанси.
Приклад програми, яка для грошових обчислень використовує
тип даних decimal. Програма обчислює баланс після
нарахування відсотків:
// Програма демонструє використання типу decimal для
фінансових обчислень
using System;
class UseDecimal
{
public static void Main()
{
decimal balance;
decimal rate;
// Підрахунок нового балансу
balance = 1000.10m;
rate = 0.1m;
// При введенні значення типу decimal повинні закінчуватися
символом m або M.
balance = balance * rate + balance;
Console.WriteLine("Новий баланс: $" + balance);
}
}
На відміну від інших мов програмування (таких, як
С++, в яких для представлення символу виділяється 8
бітів, що дозволяє працювати з 255 символами) в C#
використовується стандартний набір символів Unicode,
в якому представлені символи усіх мов світу.
У C# char - беззнаковий тип, якому для представлення
даних виділені 16 бітів, що дозволяє працювати зі
значеннями, що знаходяться в діапазоні від 0 до
65535(тобто з 65535-а символами).
Стандартний 8-бітовий набір символів ASCII є
складовою частиною Unicode і знаходиться в діапазоні
від 0 до 127. Таким чином, ASCII- символи залишаються
дійсними в C#.
Для того, щоб присвоїти значення символьної змінної,
треба взяти в одинарних лапок символ, що стоїть
праворуч від оператора привласнення. Нижче показаний
синтаксис операторів, при виконанні яких змінній ch
привласнюється значення X.
char ch;
ch = 'X';
Для виведення символьного значення
використовується оператор WriteLine().
Наступний рядок виводить значення змінної ch:
Console.WriteLine("Значення змінної ch - " + ch);
Для булевого типу даних, bool, в
С# визначено два значення:
True (істина)
False (брехня)
Змінна типу bool або логічний вираз матимуть одне з
цих двох значень. Більше того, не існує способу
перетворення значень типу bool в цілочисельні
значення. Наприклад, значення 1 не перетвориться в
значення true, а значення 0 - в значення false.
Приклад програми, яка демонструє
використання типу даних bool:
using System;
public static void Main()
{
bool b;
b = false;
Console.WriteLine("Змінна b має значення " + b);
b = true;
Console.WriteLine("Змінна b має значення " + b);
}
Операції - це дії над даними.
Дані, що беруть участь в операції, часто називають операндами.
Операндом може виступати константа, змінна або виклик якого-небудь
методу. Для кожної операції використовується знак операції, що
відповідає їй, складається з одного або декількох символів. В результаті
виконання операцій завжди виходить якесь значення, що є результатом
виконання операції.
У мові С# існує велика кількість різноманітних операції. Їх можна
класифікувати за різними ознаками, наприклад: по кількості операндів,
за призначенням.
Залежно від кількості операндів в C# одномісні, двомісні і одна
тримісна операція.
За призначенням операції можна згрупувати таким чином:
арифметичні, операції порівняння, логічні, побітові, спеціальні.
Розглянемо основні операції мови C#.
Це найчастіше використовувані операції. Їх сенс близький до того, яким він
відомий з курсу математики.
Знак
операції
Призначення
Приклад
використан
ня
Результ
ат
+
складання
2+5
7
-
віднімання
4-1
3
*
множення
3*5
15
/
ділення(звичайне)
2.4/2
1.2
/
цілочисельне ділення
5/2
2
%
обчислення залишку при цілочисельному
діленні. Операція обчислення залишку
(%) застосовна тільки для цілочисельних
операндів.
5%2
1
Пріоритет операцій складання і віднімання нижчий,
ніж множення, ділення і обчислення залишку.
Для зміни порядку обчислення використовують
круглі дужки, наприклад для множення на 2 суми двох
чисел A і B можна написати: 2* (A+B)
Як видно з отриманих результатів, в C# один знак /
означає дві різні операції. Якщо один або обидва
операнди - дійсні, то виконується звичайне ділення,
якщо обидва операнди - цілі, то виконується ділення
без остачі і результат буде цілого типу. Використання
цієї операції вимагає уважності, наприклад, якщо
запрограмувати обчислення математичного
вираження
Унарна операція "-" означає зміну знаку. Вона має
дуже високий пріоритет - вище, ніж, приміром, у
операції множення.
Тому у виразі - A*B спочатку виконується зміна знаку
для A, а потім множення - A на B.
Для парності є і операція унарний плюс, тобто можна
написати +A
Цікавіші, і головне, дуже споживані операції
автозбільшення і автозменшення.
Правила запису складних математичних
виразів у тексті програми
 Знак множення * ставиться завжди.
 Риска дробу замінюється знаком / .
 Аргументи математичних функцій записуються у
дужках.
 Якщо чисельник містить суму або різницю, то він
береться у дужки.
 Якщо знаменник містить будь-яку дію, то він
береться у дужки.
 Запис можна переносити на наступний рядок.
Методи обчислення різних математичних функцій, які
найчастіше зустрічаються, містяться у класі Math.
Функція
Запис функції
Тип результату
Модуль числа х - |x|
записується як
Abs(x)
тип результату залежить від типу
аргументу
Косинус числа х - сos x
записується Cos(x)
тип результату – double
Синус числа х - sin x
записується
Sin(x)
тип результату – double
Тангенс числа х - tg x
записується Tan(x)
тип результату – double
Більше число з двох заданих
Max(x,y)
тип результату залежить від типу
аргументів
Менше число з двох заданих
Min(x,y)
тип результату залежить від типу
аргументів
Число пі
PI
тип результату – double
Піднесення числа х до степеня у
Pow(x,y)
тип результату – double
Квадратний корінь з числа х
Sqrt(x)
тип результату - double
Правильне округлення дійсного
числа х
Round(x)
тип результату decimal або double,
залежить від типу аргументу
Округлення числа х до меншого
цілого
Floor(x)
тип результату – double
Округлення числа х до більшого
цілого
Ceiling(x)
тип
результату – double
Функція
Запис функції
Тип результату
arccosx
Acos(x)
Функция арккосинуса. Значение аргумента должно находиться в
диапазоне от -1 до +1
arcsinx
Asin(x)
Функция арксинуса. Значение аргумента должно находиться в
диапазоне от -1 до +1
arctgx
Atan(x)
Функция арктангенса
Exp(x)
Обчислює значення
ln x
Log(x)
Повертає значення натурального логарифма (ln x)
lgx
Log10(x)
Повертає значення десяткового логарифма (lg x)
Крім методів, в класі є дві константи:
Math.PI — дорівнює числу = 3,14159265358979
Math.E — дорівнює числу E = 2,71828182845905
Приклади запису математичних виразів у
тексті програми
S = Math.PI * r * r;
C = Math.PI * 2 * r;
p = (a + b + c) / 2;
S = Math.Sqrt(p*(p-a)*(p-b)*(p-c));
x = (-b - Math.Sqrt(d))/(2*a);
y = Math.Sin(x);
y = Math.Sin(Math.PI/2);
1. Обчислити вираз
В тексті програми на C# це буде виглядати так:
y = Math.Sqrt(Math.Abs(x + 2))/(Math.Pow(x, 1.0 / 3) + 4);
2. Обчислити вираз
На C# це запишеться так:
y = Math.Sin(x + Math.PI / 10);
Записати вираз:
r =((a+b)*Math.Sin(Math.Pow(x,2))
+a*b)/Math.Sqrt(Math.Pow(Math.Cos(x
+Math.PI/2),2)-b)
Застосовуються для порівняння(зіставлення)
числової або символьної інформації. Результатом
виконання операцій є або істина(true), або
брехня(false).
Знак
Операція відношення
<
менше
<=
менше або рівно
==
перевірка на рівність(пишеться два знаки
" рівно" без пропусків)
!=
перевірка на нерівність
>=
більше або рівно
>
більше
Пріоритет операцій відношення нижчий, ніж у
арифметичних операцій. Приклад використання :
A+B>=C
Перевіряємо: сума A і B більше С? Якщо " так", то
відповіддю буде true, якщо " ні", то false.
Дійсні числа в пам'яті зберігаються приблизно, при роботі
з ними в ході виконання арифметичних операцій можуть
накопичуватися похибки, тому не рекомендується
виконувати перевірку на рівність або на нерівність для
дійсних чисел, оскільки результат може бути
непередбачуваний. А якщо дуже потрібно? Що робити?
Поступаємо просто. Якщо для дійсних чисел потрібно
виконати перевірку на рівність(типу A==B), то замінюємо її
на перевірку на нерівність виду
|A - B|<=; , де  - деяка мала додатна величина эпсилон.
В термінах мови C# це виглядатиме так
Math.Abs(A - B)<=eps