О.С. Зеленський
Посібник для 10-11 класів інформаційно-технологічного профілю Частина 1 2010 р. 1
У посібнику, нап...
33 downloads
396 Views
1MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
О.С. Зеленський
Посібник для 10-11 класів інформаційно-технологічного профілю Частина 1 2010 р. 1
У посібнику, написаному для підтримки навчання основам алгоритмізації та програмування у класах інформаційнотехнологічного профілю, розглядається популярна серед програмістів сучасна мова програмування C#. Зміст посібника відповідає окремим темам рекомендованих Міністерством освіти і науки України навчальних програм «Для поглибленого вивчення інформатики для учнів 8-12 класів загальноосвітніх навчальних закладів» (автори Караванова Т.П.,Костюков В.П.), «Для загальноосвітніх навчальних закладів, спеціалізованих шкіл, гімназій, ліцеїв. Інформатика (поглиблений курс)» (автори Жалдак М.І., Морзе Н.В., Мостіпан О.І.) та программ з інформатики для 11 класів рівень академічний та стандарт (автори І.О. Завадський, Ю.О. Дорошенко, Ж.В. Потапова). Матеріал у посібнику подано у вигляді, зручному для самоосвіти із тренувальними вправами, виконання яких покращить засвоєння навчального матеріалу. У другій частині посібника буде висвітлено матеріал щодо створення Windows-додатків на платформі .NET.
2
Зміст Вступ .......................................................................................................................................................... 3 Тема 1. Знайомство з середовищем програмування .............................................................................. 4 Інтерфейс програми Microsoft Visual C# ............................................................................................ 4 Створення консольного проекту в середовищі Microsoft Visual C# ................................................ 6 Збереження проекту .............................................................................................................................. 6 Інтерфейс середовища SharpDevelop та створення в ньому консольного проекту ........................ 6 Тема 2. Основи мови програмування C# ................................................................................................ 8 Короткі відомості про платформу .NET ............................................................................................. 8 Система типів .NET .............................................................................................................................. 8 Змінні та константи ............................................................................................................................... 8 Основні правила для вибору імен змінним та константам. .............................................................. 9 Структура консольної програми........................................................................................................ 10 Ввід та вивід інформації в програму ................................................................................................. 10 Форматований вивід ........................................................................................................................... 13 Вправи .................................................................................................................................................. 14 Тема 3. Операції з даними ...................................................................................................................... 15 Операція присвоювання ..................................................................................................................... 15 Арифметичні операції ........................................................................................................................ 15 Вправи .................................................................................................................................................. 17 Тема 4. Класи, об’єкти та структури ..................................................................................................... 19 Оголошення класу та створення об’єкта .......................................................................................... 19 Методи ................................................................................................................................................. 20 Структури ............................................................................................................................................ 22 Вправи .................................................................................................................................................. 22 Тема 5. Логічний тип. Операції з даними логічного типу .................................................................. 23 Вправи .................................................................................................................................................. 24 Тема 6. Операція розгалуження ............................................................................................................. 25 Використання оператора if ................................................................................................................. 25 Використання оператора switch......................................................................................................... 27 Вправи .................................................................................................................................................. 28 Тема 7. Масиви ........................................................................................................................................ 29 Одновимірні масиви ........................................................................................................................... 29 Багатовимірні масиви ......................................................................................................................... 29 Вправи .................................................................................................................................................. 30 Тема 8. Цикли .......................................................................................................................................... 31 Цикл for ................................................................................................................................................ 31 Цикл while ............................................................................................................................................ 32 Цикл do while .................................................................................................................................... 33 Цикл foreach ......................................................................................................................................... 33 Оператор безумовного переходу goto ............................................................................................... 34 Вправи .................................................................................................................................................. 34 Тема 9. Робота з масивами ..................................................................................................................... 36 Уведення даних до масиву з клавіатури та вивід масиву в консоль .............................................. 36 Пошук у масиві елемента з заданими властивостями ..................................................................... 37 Пошук найбільшого елемента ........................................................................................................... 38 Пошук елемента в упорядкованому масиві ...................................................................................... 38 Сортування масиву ............................................................................................................................. 39 Вправи .................................................................................................................................................. 39 Тема 10. Рядкові величини ..................................................................................................................... 41 Опис рядкової величини..................................................................................................................... 41 Операції над рядковими величинами ................................................................................................ 41 Функції для роботи з рядковими величинами.................................................................................. 41 Вправи .................................................................................................................................................. 42 1
Тема 11. Функції...................................................................................................................................... 44 Функції без параметрів ....................................................................................................................... 44 Функції з вихідним параметром ........................................................................................................ 44 Масиви параметрів .............................................................................................................................. 46 Параметри змінні та параметри значення......................................................................................... 46 Вихідні параметри............................................................................................................................... 47 Область видимості змінних................................................................................................................ 47 Використання функцій у структурах ................................................................................................ 49 Рекурсія ................................................................................................................................................ 50 Вправи .................................................................................................................................................. 51 Тема 12. Робота з файлами ..................................................................................................................... 52 Клас File. Створення, вилучення, копіювання та переміщення файла .......................................... 52 Читання з текстового файлу ............................................................................................................... 52 Запис до текстового файлу ................................................................................................................. 53 Вправи .................................................................................................................................................. 54 Список джерел ......................................................................................................................................... 55
2
Вступ Із середини минулого століття галузь обчислювальної техніки розвивалася як ні одна з інших. Виникла професія програміста, задачею якого було створювати необхідне для використання обчислювальної техніки програмне забезпечення. Інструментом роботи програміста стали мови програмування, використовуючи які складаються зрозумілі для машини інструкції (програми), завдання яких полягає у розв’язанні поставлених перед обчислювальною технікою задач. Зараз для розв’язування різноманітних задач програмістами у своїй роботі використовується декілька десятків мов програмування. Одні зручно використовувати для написання програм, що запускатимуться та виконуватимуться на комп’ютері користувача, інші – для роботи в Інтернеті, одні краще використовувати для проведення математичних обчислень, інші – для програмування ігор тощо. популярності різних мов програмування Щомісяця проводиться рейтинг (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html). Ще молодою, проте вже досить популярною серед програмістів різних країн є мова C#, розроблена корпорацією Microsoft для програмування на платформі .Net. Мова має ряд переваг перед іншими. На відміну від професійної мови C++, вона легша у вивченні та використанні; від мови Pascal, написаної для вивчення студентами ВНЗ та учнями шкіл, значно потужніша. Цією мовою можна писати додатки (програми) як для Windows, так і для інших операційних систем (MacOs, Linux). Останнім часом C# стає все популярнішою серед програмістів, використовується для вивчення у вищих навчальних закладах та школах витісняючи або доповнюючи Pascal. Станом на червень 2010 року мова знаходилася на шостому місці після Java, C, C++, PHP, Visual Basic. Але Java та PHP більш придатні не для створення комп’ютерних програм, а для Web-дизайну, мови ж C та C++ є занадто складними для оволодіння в рамках шкільної програми. Мова Visual Basic незначно випереджає мову C#, проте на відміну від останньої рейтинг її не зростає, тому вона швидко здає свої позиції. Синтаксис Visual Basic занадто відрізняється від професійних мов C, C++, а це створює «ведмежу» послугу студентам, що у ВНЗ почнуть вивчать професійні мови програмування. У цьому посібнику ми дамо вам основи знань з мови програмування C#, розвинем навики, які допоможуть у подальшому вивченні програмування, математики, інших дисциплін, вивчення яких вимагає розвинутого логічного мислення, охайності, уважності.
3
Тема 1. Знайомство з середовищем програмування Для написання програми програміст використовує текстовий редактор, у якому набирає текст програми. Проте набагато зручніше для цього використовувати спеціальне програмне забезпечення, яке називається середовищем програмування. Розглянемо два середовища програмування для роботи з C#. Під середовищем програмування ми розумітимемо програмний засіб для написання та компіляції програм на мові програмування. Популярне серед програмістів середовище програмування Visual C# 2008 Express можна встановити безкоштовно на комп'ютр з Інтернету на сайті http://www.microsoft.com/rus/express/vcsharp Одночасно в системі встановиться пакет Microsoft .NET Framework 3.5. Після встановлення в головному меню з΄явиться пункт MS Visual C# 2008
Інтерфейс програми Microsoft Visual C# Вікно середовища програмування Microsoft Visual C# (мал.1) складається з меню (1), стандартної панелі інструментів (2), списку раніш виконуваних проектів (3), кнопок для відкриття та створення проектів (4), панелі для виводу повідомлень (5).
Мал. 1 Створимо новий проект. Для цього клацнемо слово Проект (мал. 1, пункт 4). У вікні (мал. 2) для створення програми з віконним графічним інтерфейсом виберемо Приложение Windows Forms (1), вкажемо назву проекту (2) та підтвердимо вибір клацнувши Ok (3). Після створення нового проекту зовнішній вигляд програми зміниться (мал.3) У вікні активізуються панелі: Макет (3), форма проекту (4), панель елементів (5), закладки робочих полів (6), оглядач рішень (файлів проекту) (7), панель попереджень, помилок та повідомлень (8), панель властивостей візуальних елементів (9). Макет (3). Панель призначено для вирівнювання візуальних елементів на формі проекту. Форма проекту(4). Представляє вікно програми, на яке з панелі інструментів (5) переміщаються візуальні компоненти (кнопки, списки, текстові поля тощо). Всі візуальні компоненти встановлені на форму проекту мають маркери зміни розмірів, за допомогою яких можлива зміна їх розмірів та положення. 4
Мал.2
Мал. 3 Панель елементів (5). На цій панелі зосереджено візуальні та невізуальні компоненти, з яких будується проект. Для вибору компоненту перетягніть його мишкою на вікно форми. Закладки робочих полів (6) дозволяють перемикатися між відкритими файлами проекту. Оглядач рішень (7). У даній панелі виводиться список файлів проекту. При подвійному клацанні по відповідному файлу, він відкривається на робочому полі. Інформація в цій панелі має ієрархічну структуру, яка вказує на її структуру та підпорядкованість. У панель попереджень, помилок та повідомлень (8) виводиться інформація під час відлагоджування та компіляції проекту. У панелі Властивості (9) виводиться список доступних властивостей для вибраного компоненту на вікні форми.
5
Створення консольного проекту в середовищі Microsoft Visual C# Вивчення основ мови C# розпочнемо з консольного проекту. Що таке консольний проект? Більшість сучасних комп’ютерних програм створюється для виконання їх користувачем. Вікно програми має елементи керування (кнопки, текстові поля, списки, таблиці, перемикачі, прапорці). Такі програми назвемо Windows Forms. Створення проекту Windows Forms вимагає використання стандартних елементів операційної системи. На відміну від програм Windows Forms, консольний проект не використовує жодних елементів керування, а взаємодія з користувачем здійснюється безпосередньо через вивід інформації у вікно консолі та ввід з клавіатури. Далі називатимето вивід на екран – вивід в консоль, а ввід з клавіатури – ввід з консолі. Для створення консольного проекту виберемо у ході створення нового проекту (мал. 2) Консольное приложение. Після створення даного проекту відкриється файл Program.cs. Панель елементів та властивостей залишиться неактивною, так як консольні проекти не використовують візуальних компонентів.
Мал. 4 Автоматично буде написаний початковий код програми, який може бути дописаний користувачем.
Збереження проекту Для збереження проекту виберемо Файл, Сохранить все… Для проекту буде створено окрему папку, в яку запишуться всі файли проекту.
Інтерфейс середовища SharpDevelop та створення в ньому консольного проекту Середовище програмування SharpDevelop є подібним до Microsoft Visual C#. Та на відміну від неї є OpenSource, завдяки чому залишиться вільним у використанні без накладання жодних обмежень. На час написання цього посібника русифіковано було інтерфейс SharpDevelop 1.1. Проте за більшу подібність та сумісність з Microsoft Visual C# 2008 нами використовуватиметься SharpDevelop 3.2. Завантажити інсталяційний пакет доного середовища можна безкоштовно з сайту виробника http://www.sharpdevelop.net/OpenSource/SD/Download/. Але попередньо в системі необхідно встановити Microsoft .NET Framework 3.5, безкоштовно завантаживши з офіційного сайту: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=c17ba869-9671-4330a63e-1fd44e0e2505 На мал. 5 зображено вигляд вікна програми SharpDevelop 3.2. 6
Мал. 5 Для створення нового проекту слід вибрати з меню File-> New-> Solution.
Мал. 6 Вибрати у полі Categories мову проекту C#-> Windows Applications. У полі Templates вибрати тип проекту Console.Application. У поле Name увести англійськими літерами ім΄я проекту та клацнути кнопку Create. Проект буде створено у папці, вибраній у полі Location.
7
Тема 2. Основи мови програмування C# Короткі відомості про платформу .NET Платформа .NET Framework визначає середовище для підтримки, створення й виконання платформонезалежних гетерогенних додатків. Особливостями даної платформи є незалежне від мови середовище виконання (Common Language Runtime, CLR) та бібліотека класів .NET. Після компіляції створюється не виконуваний файл написаний у машинних кодах, а набір команд записаних проміжною мовою MSIL (Microsoft Intermediate Language). При запуску цього додатку в операційній системі його код написаний у MSIL транслюється JIT-компілятором (Justin-Time compiler - оперативний компілятор) в машинні коди, зрозумілі процесору комп’ютера. Як не важко здогадатися, такий додаток буде працювати лише в операційних системах з установленою платформою NET Framework відповідної версії.
Система типів .NET Усі мови програмування оперують певними даними. Дані можуть бути різних типів. Можна, наприклад, зберігати у пам’яті комп’ютера число, літеру, рядок літер, таблицю чисел тощо. Платформа .NET використовує різні типи даних. Система типів .NET
Типи-значення
Типи-посилання
Структури
Класи Рядки
Переліки
Масиви
Прості типи
Делегати Інтерфейси
Мал. 7 Вивчення всіх типів знаходиться поза рамками даного посібника, проте з основними з них ми познайомимося.
Змінні та константи Для збереження даних у програмі використовуються змінні та константи. Змінною назвемо іменовану область пам’яті, в яку під час виконання програми можна записувати дані певного типу та зчитувати їх за потребою. Константою назвемо іменовану область пам’яті, яка містить значення певного типу, яке можна зчитувати за необхідністю. Для того, щоб використовувати змінну її треба оголосити та ініціювати. Для констант оголошення відбувається одночасно з ініціюванням. Оголошення й ініціалізація змінних: Тип_змінної ім'я_змінної[=значення]; Приклади: int x; //оголошення змінної x 8
x=100; //ініціалізація змінної x long w,z=100; //оголошення змінних w та z й ініціалізація z long q=100*z; //оголошення змінних з динамічною ініціалізацією Оголошення й ініціалізація констант: Тип_константи ім'я_константи[=значення]; Приклад const double pi=3.14; //оголошення та ініціювання константи pi C# - мова з суворим контролем типів. Є дві основні категорії вбудованих типів у C# - прості типи та типии-посилання. Основні прості типи даних в C#: Ім’я типу Граничні значення true або false bool Один символ char Число від -28 до 127 sbyte Число від 0 до 255 (8 розрядів) byte Число від -32768 до 32767 (16 розрядів) short Число від 0 до 65535 (16 розрядів) ushort Число від -2147483648 до 2147483648 (32 розряди) int Число від 0 до 4294967295 (32 розряди) uint Число від -9223372036854775808 до 9223372036854775807 (64 long розряди) Число від 0 до 18446744073709951615 (64 розряди) ulong Число від 1,5·10-45 до 3,4·1038 (32 розряди, точність до 7 десяткових float розрядів) Число від 5,0·10-324 до 1,7·10308 (64 розряди, точність до 15-16 double десяткових розрядів) Число від 1,0·10-28 до 7,9·1028 (128 розряди, точність до 15-16 Dsmal десяткових розрядів) Послідовність символів Unicode string Базовий для всіх інших типів тип object
Приклад true ‘A’ -16 32 -256 128 -100000 200000 -5000000000L 10000000000L 375.95f 1.000000001d 75.95m “Welcome”
Для оголошення імен змінних та констант не можна використовувати будь-які символьні постідовності. Про це читаємо далі.
Основні правила для вибору імен змінним та константам. 1. Першим символом має бути латинська літера, знак підкреслення «_», або сомвол «@». 2. Наступними символами імені можуть були будь-які символи латиниці, знак підкреслення чи цифри. Символи можуть були як з верхнього так і з нижнього регістру. 3. Для імен не можна використовувати ключові слова мови програмування (Main, int, if, for тощо). Звичайно вони виділяються кольором при їх наборі в редакторі. Приклади допустимих імен: myBigScore, _qwer, a12 Приклади недопустимих імен: $qw, 54r, 1if, for, x-12 Слід розуміти, що мова C# є чутливою до регістру, і імена myWord та MyWord будуть різними. За неписаним правилом програмістів імена простих змінних та констант мають починатися з символи нижнього регістру1, імена складних змінних, методів та функцій з верхнього2. Якщо ім'я складене з декількох слів, то перша літера другого слова пишеться великою. Приклади імен змінних та констант: myWord, myString, myBestSolution. Приклади імен методів та функцій: Fib(), Main(), Step(), MaxCount(), Max3(). 1 2
Стиль назвивається camelCase (верблюжий стиль). Назва стилю PascalCode (стиль мови Паскаль). 9
Не рекомендується використовувати символ підкреслення для розділення частин імені (запис word_count виглядає незграбніше ніж wordCount).
Структура консольної програми Ознайомившись з основними типами розглянемо структуру консольної програми на C#. Середовище програмування автоматично створить у новому проекті шаблон для майбутньої програми. Розберемо його. 1 2 3 4 5 6 7 8 9 10 11 12 13 14
using using using using
System; System.Collections.Generic; System.Linq; System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { } } }
Перші чотири рядки програми підключають модулі: System, System.Collections.Generic, System.Linq, System.Text. Модуль представляє спеціальну бібліотеку з інформацією про об΄єкти, які використовуватиме наша програма. Дані модулі входять до системних і є частиною операційної системи. Програміст може написати та підключити після слова using свої модулі, проте це тема для іншої розмови. У середовищі SharpDevelop рядки 2-4 будуть відсутні. У шостому рядку командою namespace ConsoleApplication1 створюється простір імен ConsoleApplication1, в якому описуватимуться всі об΄єкти програми. Що таке простір імен? Це певна область коду, в якій всі об’єкти належать іншому батьківському об’єкту. Так, оголошення простору імен ConsoleApplication1 у шостому рядку означає, що код, уміщений у пару фігурних дужок (рядки 7 та 14) належатиме імені ConsoleApplication1. Метод Main, оголошений у десятому рядку також лежить у просторі імен ConsoleApplication1. Символ «{» (фігурна дужка) починає блок команд, який закінчиться в 14 рядку. Пара символів «{}» називається операторними дужками, призначення яких обмежити блок команд. У даному випадку дужки з сьомого та чотирнадцятого рядків обмежують простір імен нашої програми. У рядку 8 створюється клас Program. У кожній програмі на C# створюється обов΄язковий метод Main(). Його створено в рядку 10. Слово void вказує на те, що дана програма не повертає результат обчислень у програму яка її викликала. Main – це стандартна назва основної програми (інша назва – точка входу). У дужках вказуються параметри, які передаються у дану з командного рядка запуску. Зверніть увагу на обов’язкове слово static перед заголовком методу Main(). Метод Main().є найголовнішим місцем у програмі, який і виконується при її запуску. Код програми слід вписувати після рядка 11 перед рядком 12. ЗВЕРНІТЬ УВАГУ! Мова C# є чутливою до регістра. Це значить, що якщо ви замість static наберете Static, то виникне помилка. Є загальновживане правило, за яким усі ключові слова мови C# пишуться в нижньому регістрі (наприклад, globsl, for, if, static), назви просторів імен, типів, вкладені в них слова починаються з великої літери (Console.WriteLine, System.Windows.Forms.MessageBox).
Ввід та вивід інформації в програму Ввід та вивід інформації здійснюється за допомогою команд: вивід інформації в консоль. вивід інформації в консоль та перехід на новий рядок.
Write () WriteLine () 10
Read () ReadLine ()
читання одного символу з консолі (клавіатури) читання інформації з консолі та перехід на новий рядок.
Створимо програму, яка виведе повідомлення на екран. Створивши порожній консольний проект після операторної дужки { в блоці основної програми додамо код: Console.WriteLine("Привіт. Я вивчаю C#"); Console.Read ();
Приклад 2.1. Текст програми Hello 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Hello { class Program { static void Main(string[] args) { Console.WriteLine("Привіт. Я вивчаю C#"); Console.Read(); } } }
Запустимо програму клавішею F5, кнопкою з панелі інструментів,або з меню Отладка, Начать отладку. На мал. 8 зображено вікно консолі, в яку команда виведе текст, набраний у лапках. Завершиться команда після натискання будь-якої клавіші з клавіатури. Це реалізується командою Console.Read(), яка чекає натискання клавіші на клавіатурі.
Мал. 8 Додаткове завдання Змініть рядок Console.WriteLine("Привіт. Я вивчаю C#"); на Console.Write("Привіт. Я вивчаю C#"); й запустивши програму знайдіть різницю. Створимо програму, яка запитає в користувача ім΄я та виведе для нього привітання. Створимо порожній консольний проект. В блоці основної програми додамо код: Приклад 2.2. Текст програми Dialog 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Dialog { class Program { static void Main(string[] args) { String s; Console.WriteLine("Привіт. Як тебе звати?"); s = Console.ReadLine(); Console.WriteLine("Привіт. {0}. А я програма на C#.",s); Console.Read(); 11
16 17 18
}
}
}
У рядку 11 створюється змінна рядкового типу s. Рядок 12 вміщає команду для виводу на екран тексту "Привіт. Як тебе звати?". Рядок 13 зчитує з клавіатури введений рядок та записує його до змінної s. Рядок 14 виводить на екран текст "Привіт. {0}. А я програма на C#.". Замість {0} виводиться значення змінної s. Декілька слів про форматування виводу в консоль за допомогою команди Console.WriteLine або Console.Write! В платформі .NET прийнято стиль виводу, в якому при визначення рядкового літералу (виразу) з сегментами даних (підставленими значеннями деяких змінних), значення яких залишається невідомим до часу виконання програми, дозволяється вказувати в літералі заповнювач з використанням фігурних дужок. В дужках вказується номер змінної (починаючи з 0), імена яких вказуються через коми після зазначеного літералу. Наприклад: int x=2; int y=3; Console.WriteLine("Значення x={0}. Значення Y={1}",x,y);
Після запуску отримаємо:
Місця, в які буде вставлено змінні Console.WriteLine("Значення x={0}. Значення Y={1}. Знову x={0}",x,y);
літрал
змінні
Дозволяється повтор заповнювача в одному рядку-літералі. Наприклад, допустима така команда: Console.WriteLine("Значення x={0}. Значення Y={1}. Знову x={0}",x,y);
Після запуску отримаємо:
Змінимо 14 рядок у програмі з прикладу 2 додавши у рядок два символи Console.WriteLine("Привіт. {0}. \nА я програма на C#.",s);
Після запуску програми отримаємо:
Мал. 8
12
Як бачимо, «\n» не видно, але в тому місця, де його було вставлено рядок розірвався і його друга частина записалася з абзацу. Літерал «\n» називають керуючим символом переходу на новий рядок. Приведемо інші можливі керуючі символи. Керуючі символи \' \" \\ \a \b \f \n \r \t
Апостроф Лапки Зворотній слеш Системне сповіщення Backspace Початок наступної сторінки Начало нового рядка Return Горизонтальний символ табуляції
Форматований вивід Для вивода на консоль ми використовувати наступну конструкцію: ... int x=23, y=-4; ... Console.WriteLine("x={0}, y={1}", x, y); ...
Тут ми використовувати всередині лапок підстановочні знаки {0}, {1} і т. д. Змінні при цьому виводяться в форматі по замовчуванню. Для виводу в потрібному для нас форматі потрібно використовувати підстановочні знаки з параметрами. Ось деякі з них:
d - десятковий формат. Дозволяє задати загальну кількість знаків (при необхідності число доповнюється зліва нулями). f - формат з фіксованою точністю. Дозволяє задати кількість знаків після коми. x - шістнадцятковий формат. c - грошовий формат (додає знак долара й показує два знаки після коми). e - вивід числа в експоненціальній формі.
Приклад використання форматованого виводу: ... int a=38; //Виводиться 0038 Console.WriteLine("a={0:d4}", a); double pi=3.1415926; // Виводиться 3.14 Console.WriteLine("pi={0:f2}", pi); int b=255; // Виводиться FF. Console.WriteLine("b={0:X}", b); int c=255; // Виводиться ff. Console.WriteLine("c={0:x}", c); double d=1003.214; // Виводиться $1, 003.14 в англійській версії Windows та //1 003,14 р. в російській. Console.WriteLine("d={0:c}", d); double e=213.1; // Виводиться 2.131000e+002 Console.WriteLine("e={0:e}", e); 13
У якості параметрів підстановочних знаків можна використовувати як малі, так і великі літери. Виключення – вивід числа в шістнадцятковому форматі (при використанні h цифри a..f будуть малими, при використанні H – великими).
Вправи 2.1. Написати програму для виводу на консоль інформації: 2, 3, 4 червня 7 червня 9 червня
українська мова і література іноземна мова біологія
2.2. Написати діалогову програму, яка запитає в користувача його ім’я, вік, професію, після чого виведе на консоль всю цю інформацію за зразком: Ім’я Вік Професія
Олексій 24 Шофер
2.3. Написати програму для виводу на консоль псевдографічного зображення: (\__/) (='.'=) (")_(")
2.4. Написати програму для виводу на консоль псевдографічного зображення: __|__ __/ ☼ \========◦ /; |HHHHHHHHH \ ( _@_@_@_@_@_ )
2.5. Написати програму для виводу на консоль псевдографічного зображення: @ @ @ @ @ @ @ @ @ @ @ (\(\ @ /)/) @ @ (=':') (':'=) @ @ ( (")(") (")(") ) @ @ @ @ @ @ @ @
2.6. Написати програму для виводу на консоль псевдографічного зображення: |^^^^^^^^^^^^^''^\| ||\____ | Coca-Cola | ||','''|'''''''\_____, | _ _ | ||__|'__|_____||< '''''(@)'(@)''''''''''''''''''''''**|(@)(@)******|(@)*
2.7. Надіслати вітальну телеграму собі на день народження від президента країни. 2.8. Скласти програму, результатом виконання якої є виведення на екран монітора заданого тексту. Значення, вказані в «< > », повинні задаватися користувачем: Директору ЗАЯВА Прошу зарахувати мого сина (дочку) до Вашої школи
2.9. Скласти програму, результатом виконання якої є виведення на екран монітора заданого тексту Значення, вказані в «< > », повинні задаватися користувачем: Шановні телеглядачі! З технічних причин вихід в ефір передачі під назвою », повинні задаватися користувачем: Шановний(а) ! в приміщенні актового залу школи відбудуться батьківські збори на тему Дирекція школи
14
Тема 3. Операції з даними Операція присвоювання У 13 рядку програми з прикладу 2 (s = Console.ReadLine()) зчитувалася інформація введена з клавіатури та запистувалася до рядкової змінної s Операція «=» називається присвоювання. Її зміст полягає в тому, що дані з правої від знака «=» частини записуються до змінної, розміщеної зліва від «=». У нашому випадку результат виконання функції Console.ReadLine()запишеться до змінної s.
Арифметичні операції Задача більшості програм проводити обчислення. Із уроків математики ми знайомі з дійсними, цілими, натуральними числами. Над ними можна здійснювати операції додавання та віднімання, множення та ділення. До того ж існує багато функції (sin, cos,
та інш )
Приклад 3.1. Створимо програму, для розрахунку площі трикутника за відомими сторонами Для розв΄язання даної задачі спочитку уведемо значення довжин сторін a, b, c, обчислимо півпериметра трикутника p, та скориставшись формулою. Герона знайдемо площу трикутника. Виконавши обчислення, виведемо результати в консоль. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
using using using using
System; System.Collections.Generic; System.Linq; System.Text;
namespace triangle { class Program { static void Main(string[] args) { Console.WriteLine("Введiть сторону a"); int a = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Введiть сторону b"); int b = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Введiть сторону c"); int c = Convert.ToInt32(Console.ReadLine()); int p = (a + b + c) / 2; Console.WriteLine("Півпериметр трикутника p={0}",p); double s = Math.Sqrt(p*(p-a)*(p-b)*(p-c)); Console.WriteLine("Площа трикутника s={0}", s); Console.ReadLine(); } } }
В рядку 12 виводиться в консоль рядок "Введiть сторону a". Проаналізуємо рядок 13 .
15
Присвоєння перетворених функцією Convert.ToInt32 даних змінній a
int a = Convert.ToInt32(Console.ReadLine());
Перетворюємо дані рядкового типу в цілі
Створення змінної a цілого типу
Читання рядкових даних з клавіатури
Після зчитування даних про сторони трикутника в змінні a, b, c у рядку 18 обчислюється та присвоюється змінній p значення півпериметра, а в рядку 20 присвоюється змінній s значення площі трикутника. З мови C++ мова C# взяла префіксні та постфіксні операції додавання. Операцію збільшення змінної X на 1 можна записати так Звичайнай запис Постфіксний запис X=X+1; X++; Останній запис має перевагу у швидкості виконання та в лаконічнішому записі. У наступному прикладі до значення змінної X додамо значення змінної Y, а результат запишемо до змінної X Звичайнай запис Постфіксний запис X=X+Y; X += Y; Приклад 3.2. Програма, яка демонструє постфіксні та префіксні операції 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
using using using using
System; System.Collections.Generic; System.Linq; System.Text;
namespace operations { class Program { static void Main(string[] args) { int x = 4; x++; Console.WriteLine("Перше додавання X={0}",x); x++; Console.WriteLine("Друге додавання X={0}",x); x--; Console.WriteLine("Перше віднімання X={0}",x); x += 5; Console.WriteLine("Після збільшення на 5 X={0}",x); Console.ReadLine(); } } }
Приклад 3.3. Інший варіант програми, яка демонструє постфіксні та префіксні операції 1 2 3 4 5 6 16
using using using using
System; System.Collections.Generic; System.Linq; System.Text;
namespace operations
7 8 9 10 11 12 13 14 15 16 17 18 19
{
}
class Program { static void Main(string[] args) { int x = 4; Console.WriteLine("X={0}\n X={1}\n X={2}\n X={3}",x++,x++,x--,x--); x = 4; Console.WriteLine("X={0}\nX={1}\nX={2}\nX={3}", ++x, ++x, --x, --x); Console.ReadLine(); } }
Виконавши дану програму, розберемося з відмінностями в виконанні 13-го та 15-го рядків. При виконанні операції x++ спочатку здійснюється вивід значення змінної на екран, після чого над змінною здійснюється операція додавання одиниці. Операція ++x спочатку додає до змінної одиницю, після чого виводить її значення на екран. Наступні операції ілюструють відмінність між постфіксними та префікс ними операціями: x = ++y; //значення y збільшується на 1, після чого нове значення записується до змінної x; x = y++; // значення y записується до змінної x, після чого значення змінної y збільшується на 1. Приклад 3.4. Ілюстрація відмінності між префікс ними та постфіксними операціями 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace operations { class Program { static void Main(string[] args) { int x ; int y = 1; x = ++y; Console.WriteLine("X={0}\nY={1}", x, y); Console.WriteLine(); y = 1; x = y++; Console.WriteLine("X={0}\nY={1}", x, y); Console.ReadLine(); } } }
Вправи 3.1. Дано довжину ребра куба. Знайти його об'єм та площу всієї поверхні. 3.2. Дано два дійсні числа. Знайти їх середнє арифметичне і середнє геометричне значення. 3.3. Дано катети прямокутного трикутника. Знайти його гіпотенузу і площу. 3.4. Визначити час падіння каменя на поверхню. Землі з висоти h. 3.5. Трикутник задано координатами вершин. Знайти: 1) периметр трикутника; 2) площу трикутника. 3.6. Визначити, яку роботу необхідно виконати, щоб підняти тіло масою т на висоту h від поверхні Землі. 3 7. Визначити значення опору R в колі електричного струму за заданими значеннями сили струму І і напруги U (R = U/I) 17
3.8. Визначити, яку платню одержить на фірмі сумісник за виконану роботу, якщо йому нараховано S гривень, а податок становить 20% 3.9. Підприємство поклало в банк на депозитний рахунок суму в S тисяч гривень під 40 % річних Яку суму зніме підприємство в кінці року? 3.10. Визначити опір електричного кола, якщо в ньому резистори R1, R2, R3, R4 з'єднані: 1) послідовно; 2) паралельно
18
Тема 4. Класи, об’єкти та структури Оголошення класу та створення об’єкта Нехай нам потрібно створити програму для опису тварин в зоопарку. Об’єктами назвемо тварин, які є в зоопарку. Будь-який об’єкт може мати властивості, та методи. Властивістю назвемо деяку характеристику об’єкта, наприклад, маса, висота, кількість ніг тощо. Об’єкти можуть мати нащадків. Наприклад, об’єкт кінь є нащадком об’єкта ссавець. Нащадки можуть мати деякі властивості батьківського об’єкта. Проте інші властивості можуть відрізнятися. Методом назвемо операцію, дію, яку можна здійснити з даним об’єктом. Наприклад, об’єкт кінь може мати методи введення маси, вивід імені тощо. Класом назвемо групу об’єктів у нашій програмі. При описі класу, описуються об’єкти, які містяться в даному в ньому. Клас дає загальний опис об’єктів, вказує на що вони схожі. Опишемо клас об’єктів Тварина (Animal). Він міститиме такі об’єкти: Кінь (Horse), Лев (Leo), Риба (Fish) тощо. Опис класу здійснюється службовим словом class class Animal { public string kindOfAnimal; public string name; public int numberOfLegs; public float mass; }
У даному фрагменті створюються новий клас Animal. У ньому визначені властивості kindOfAnimal (вид тварини), name (Ім’я), numberOfLegs (кількість ніг), mass (маса). Службове слово public вказує на те, що дане поле буде доступне для всіх нащадків даного класу. Приклад 4.1. Оголошення класу та створення об’єкта 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
using System; namespace c1 { class Program { class Animal { public string kindOfAnimal; public string name; public int numberOfLegs; public float mass; } public static void Main(string[] args) { Animal Horse = new Animal(); Horse.name = "Буцефал"; Horse.mass = 300; Console.WriteLine("Ім’я тварини {0}", Horse.name); Console.WriteLine("Її маса {0} кг", Horse.mass); Console.ReadLine(); } } 19
24
}
У 7-13 рядках описується клас Animal. Слово public перед описом кожного з його властивостей (полів) вказує на доступність (відкритість) даного поля ззовні класу. У рядку 16 створюється об’єкт Horse, який є екземпляром класу Animal. Програма в 17-18 рядках записує до полів об’єкту Horse його ім’я та масу, а в рядках 19-20 виводить їх на екран. Чи працюватиме дана програма, якщо в рядку 10 прибрати слово public? Чому?
Методи Методом назвемо набір команд, властивих нашому об’єкту. Наприклад, команда для виводу на екран імені та маси тварини. Опишемо метод для виводу інформації про тварину в класі Animal. Метод, на відміну від змінної, може мати параметри. Тому після його імені ставимо символи круглих дужок, в яких за необхідності передаються параметри. public void ShowAnimal () { Console.WriteLine("Ім`я тварини {0}",this.name); Console.WriteLine("Її маса {0} кг",this.mass); }
Зверніть увагу на заміну імені об’єкта Horse на службове слово this. Об’єкт Horse під час опису класу Animal буде недоступним, тому виникне помилка. Під час же виконання методу в основній програмі замість слова this компілятор підставить ім’я об’єкта. Приклад 4.2. Використання метода без параметрів 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 20
using System; namespace c1 { class Program { class Animal { public string kindOfAnimal; public string name; public int numberOfLegs; public float mass; public void ShowAnimal() { Console.WriteLine("Ім’я тварини {0}", this.name); Console.WriteLine("Її маса {0} кг", this.mass); } } public static void Main(string[] args) { Animal Horse = new Animal(); Horse.name = "Буцефал"; Horse.mass = 300; Horse.ShowAnimal(); Console.Read(); } } }
В 13-17 рядках описано метод ShowAnimal (). Слово public вказує на доступність даного методу з інших частин програми. Слово void вказує на те, що даний метод не передає даних в основну програму. В рядку 24 даний метод викликається з основної програми. Розглянемо використання методів з параметрами. Створимо метод InputName та InputMass для вводу даних про ім’я та масу тварини. Додамо до опису класу Animal метод Animal InputName (Animal s) { s.name=Console.ReadLine(); return s; }
Приклад 4.3. Використання метода з параметром 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
using System; namespace c1 { class Program { class Animal { public string kindOfAnimal; public string name; public int numberOfLegs; public float mass; public void ShowAnimal() { Console.WriteLine("Ім’я тварини {0}", this.name); Console.WriteLine("Її маса {0} кг", this.mass); } public Animal InputName(Animal s) { s.name = Console.ReadLine(); return s; } } public static void Main(string[] args) { Animal Horse = new Animal(); Horse = Horse.InputName(Horse); Horse.mass = 300; Horse.ShowAnimal(); Console.Read(); } } }
У 18-22 рядках описується метод InputName з параметром Після слова return в рядку 21 указується змінна, дані з якої повертаються з методу в основну програму.
public Animal InputName (Animal s)
Тип даних, що повертає метод Тип даних, що передаються в метод
21
У рядку 27 викликається метод InputName, в який передається параметр Horse, та повертається з нього нове значення Horse.
Структури Структура має призначення подібне до класу, проте спосіб її створення та використання нею пам΄яті відрізняється від класів. Клас – це свого роду посилання на адресу пам΄яті, в якій зберігається дані. Структурою ж це власне самі значення, при оголошенні змінної типу, заданого структурою, створюються нові змінні. Приклад оголошення структури: struct elem { long isn; string type; string name; };
Вправи 4.1. Описати клас tovar (товар) з полями price (ціна), weight (вага), date (дата випуску), kind (їжа, канцтовари, будівельний, запчастини тощо). Описати метод-конструктор для введення даних властивостей з клавіатури. 4.2. Описати клас computers (комп’ютери) з полями price (ціна), processor (тип процесора), hddSize (об’єм жорсткого диска), ramSize (об’єм оперативної пам’яті), frequency (тактова частота). Описати метод-конструктор для введення даних властивостей з клавіатури. 4.3. Описати клас student (студент) з полями firstName (ім’я), lastName (прізвище), faculty (факультет), yearIn (рік вступу), curs (курс). Описати метод-конструктор для введення даних властивостей з клавіатури. 4.4. Описати клас company (фірма) з полями name (назва), year (рік заснування), rem (короткий опис), budget (уставний капітал). Описати метод-конструктор для введення даних властивостей з клавіатури. 4.5. Описати клас book (книга) з полями price (ціна), size (кількість сторінок), date (дата видання), kind (жанр), index (шифр, наприклад, К32-4 тощо) Описати метод-конструктор для введення даних властивостей з клавіатури 4.6. Описати клас employer (робітник) з полями firstName (ім’я), lastName (прізвище), nameTceh (назва цеху де працює), birthDay (дата народження), stag (стаж). Описати метод-для виводу значень усіх полів на консоль. 4.7. Описати клас car (легковий автомобіль) з полями price (ціна), power (потужність), date (дата випуску), kind (Mersedes, ВАЗ, Lanos, Opel тощо), maxHuman (пасажиромісткість). Описати метод-для виводу значень усіх полів на консоль. 4.8. Описати клас weapon (зброя) з полями kind (рушниця, пістолет, автомат, кулемет тощо), weight (маса), date (дата випуску), speed (початкова швидкість польоту кулі), mark (марка, наприклад, Макаров, ТТ, АКМ-47, Максим). Описати метод-для виводу значень усіх полів на консоль. 4.9. Описати клас plane (літак) з полями name (марка, наприклад, АН-24, МИГ-21, Ту-144), length (довжина), width (ширина), power (потужність), date (дата випуску), kind (гвинтовий, турбореактивний), enginCount (кількість двигунів), maxSpeed (максимальна швидкість), top (максимальна висота польоту). Описати метод-для виводу значень усіх полів на консоль. 4.10. Описати клас truck (вантажний автомобіль) з полями price (ціна), power (потужність), date (дата випуску), kind (Mersedes, КАМАЗ, ГАЗ-54l тощо), maxCargo (вантажопідйомність). Описати метод-для виводу значень усіх полів на консоль 22
Тема 5. Логічний тип. Операції з даними логічного типу Крім арифметичних виразів у мовах програмування ще один тип виразів – логічний. Логічним назвемо такий вираз, результатом обчислення якого може бути істина (True) або хиба (False). Для опису такого типу даних використовується слово bool (скорочення від boolean), читається «Буль». В якості операторів у логічних виразах використовуються операції порівняння: Назва Позначення Більше > Менше < Менше рівне = рівне == не рівне != Та логічні операції Назва
Позначення
Умовне (логічне множення) І Умовне (логічне додавання) АБО Заперечення (інверсія) НІ
&&
|| ! Логічна операція && (І) дає істинний результат лише тоді, коли обидва операнди істинні. Логічна операція || (АБО) дає істинний результат тоді, коли хоча б один з операндів істинний. Логічна операція ! (НІ) завжди дає результат протилежний значенню операнда. Приклади простих логічних виразів: Вираз Результат 5==7 False 4==4 True 6>=6 True 6!=8 True Замість чисел можуть використовуватися змінні, яким присвоєно числа. Приклади складних логічних виразів Вираз Результат 5>2 && 3==5 False 5>2 || 3==5 True При складанні як арифметичних, так і логічних виразів слід ураховувати пріоритет виконання різних операцій. Для зміни порядку використовуються дужки Пріор итет
Категорія
Операція
Порядок
0
Первинні
(expr), x y, x->y, f(x), a[x], x++, x--, new, typeof(t), checked(expr), unchecked(expr)
Зліва направо
1
Унарні
+, -, !, ~, ++x, --x, (T)x, sizeof(t)
Зліва направо
2
Мультиплікативні (Множення)
*, /, %
Зліва направо
3
Адитивні (Додавання)
+, -
Зліва направо
4
Зсув
>
Зліва направо
5
Відношеня, перевірка типів
, =, is, as
Зліва направо
6
Еквівалентність
==, !=
Зліва направо
7
Лонгічне І (AND)
&
Зліва направо
8
Логічне виключаючи АБО (XOR)
^
Зліва направо
9
Логічне АБО (OR)
|
Зліва направо 23
10
Умовне логічне І
&&
Зліва направо
11
Умовне логічне АБО
||
Зліва направо
12
Умовний вираз
?:
Справа наліво
13
Присвоювання
=, *=, /=, %=, +=, -=, =, &=, ^=, |=
Справа наліво
Склеювання з null
??
Лямбда-оператор
=>
14
Справа наліво
Розглянемо задачу визначення можливості існування трикутника за довжинами його сторін Приклад 5.1. Використання логічних виразів 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
using System; namespace c_bool_1 { class Program { public static void Main(string[] args) { Console.WriteLine("Уведіть довжини трьох сторін трикутника щоразу натискаючи Enter"); double a=Convert.ToDouble(Console.ReadLine()); double b=Convert.ToDouble(Console.ReadLine()); double c=Convert.ToDouble(Console.ReadLine()); bool sol = a+b>c && a+c>b && b+c>a; Console.WriteLine("Результат {0}",sol); Console.ReadKey(true); } } }
Вправи 5.1.
Обчисліть значення виразу:
x>y&&x= =2, де x=2, y=4.
5.2.
Обчисліть значення виразу:
x= =y&&x!=2, де x=12, y=5.
5.3.
Обчисліть значення виразу:
k>v||ky
Повертає true (істину), якщо x більше y, в іншому випадку повертає false (хибу) 25
x=y
Повертає true (істину), якщо x більше або дорівнює y, в іншому випадку повертає false (хибу)
x 0 , то рівняння має 2a b+ D b D два корені, які обчислюються за формулами x1 = та x 2 = . 2a 2a Слідуючи ідеології об’єктно-орієнтованого програмування створимо новий клас kvRivn з полями-властивостями a, b та c й методами: для вводу коефіцієнтів inputKoef; для обчислення та виводу коренів rozv. Приклад 6.2. Використання розгалуження 1 using System; 2 namespace c.if 3 { 4 class kvRiv 5 { 6 double a, b, c; 7 public void inputKoef() 8 { 9 Console.WriteLine("Уведіть значення коефіцієнтів"); 10 Console.Write("a="); 11 a = System.Convert.ToDouble(Console.ReadLine()); 12 Console.Write("b="); 13 b = System.Convert.ToDouble(Console.ReadLine()); 14 Console.Write("c="); 15 c = System.Convert.ToDouble(Console.ReadLine()); 16 } 17 public void rozv() 18 { 19 string rez; 20 double D = Math.Pow(b, 2) - 4 * a * c; 21 if (D < 0) 22 rez = "Рівняння не має коренів"; 23 else 24 if (D == 0) rez = "x=" + (-b + Math.Sqrt(D)) / (2 * a); 25 26 else rez = "x1=" + (-b + Math.Sqrt(D)) / (2 * a) + "\nx2=" + (-b 27 - Math.Sqrt(D)) / (2 * a); 28 Console.WriteLine(rez); 29 } 30 } 26
31 32 33 34 35 36 37 38 39 40 }
class MainClass { public static void Main(string[] args) { kvRiv riv = new kvRiv(); riv inputKoef(); riv rozv(); } }
a=System.Convert.ToDouble(Console.ReadLine()); Читання рядка з клавіатури Перетворення рядка в дійсне число
Розглянемо задачу про пошук більшого з трьох. Оформимо код у вигляді функції з троьма параметрами. Приклад 6.3. Використання розгалуження 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
using System; namespace c if3 { class Program { static int max3(int a, int b, int c) { int max; if (a > b) max = a; else max = b; if (c > max) max = c; return max; } public static void Main(string[] args) { Console.WriteLine("Введiть три числа, натискаючи щоразу Enter"); int a = Convert.ToInt32(Console.ReadLine()); int b = Convert.ToInt32(Console.ReadLine()); int c = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Максимальне число {0}", max3(a, b, c)); Console.ReadKey(true); } } }
Використання оператора switch Існує безліч задач, в яких вибирати доводиться не з двох варіантів, а з більшого числа. У такому випадку зручно використовувати оператор вибору switch . switch (caseSwitch) // визначення ключа для вибору { case 1: // якщо caseSwitch дорівнює 1 Console.WriteLine("Case 1"); // виводимо на екран "Case 1" break; // виходимо з оператора switch case 2: // якщо caseSwitch дорівнює 1 27
}
Console.WriteLine("Case 2"); // виводимо на екран "Case 2" break; // виходимо з оператора switch default: // у всіх інших випадках Console.WriteLine("Default case"); // виводимо на екран "Default case" break; // виходимо з оператора switch
Розв’яжемо задачу визначення кількості днів у місяці не високосного року . Приклад 7.1. Використання оператора вибору 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
using System; namespace c if4 { class Program { public static void Main(string[] args) { Console.WriteLine("Введiть номер мiсяця"); int month = Convert.ToInt32(Console.ReadLine()); switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: Console.WriteLine("У цьому мiсяцi 31 день"); break; case 2: Console.WriteLine("У цьому мiсяцi 28 днiв"); break; case 4:case 6: case 9:case 11: Console.WriteLine("У цьому мiсяцi 30 днiв"); break; default: Console.WriteLine("Невiрно введено номер мiсяця"); break; } Console.ReadKey(true); } } }
Вправи 6.1. Дано два числа Якщо квадратний корінь другого числа більший за перше число, то збільшити його на п’ять. 6.2. Дано три числа Вивести на екран ті з них, які є парними. 6.3. Дано чотири числа. Визначити скільки з них є від’ємними. 6.4. Дано чотири дійсні числа. Знайти суму тих з них, які є більші за 5. 6.5. Визначити мінімальне та максимальне з трьох уведених з клавіатури чисел. 6.6. Дано коефіцієнти a, b та c квадратного рівняння. Визначити чи має дане рівняння дійсні корені. 6.7. Дано точку з координатами (x,y) в декартовій системі координат. Знаючи, що ні x ні y не дорівнюють нуль, визначити в якій чверті знаходиться точка. 6.8. Скласти програму для знаходження двох найбільших з трьох уведених з клавіатури чисел. 6.9. Скласти програму, яка в залежності від номера уведеного для в тижні визначить його назву (понеділок, вівторок, …, неділя) . 6.10. З початку 2010 року пройшло n місяців та 2 дні Визначити назву поточного місяця (січень, лютий тощо). 28
Тема 7. Масиви Одновимірні масиви Досі в задачах ми розглядували змінні, в кожну з яких можна записати лише одне значення в даний момент часу. Існує багато задач, в яких виникає необхідність збереження в пам’яті послідовності значень однієї й тієї ж величини. Наприклад, розглянемо задачу про збереження в пам΄яті та обробки результатів метереологічних вимірювань температури повітря протягом тижня. Змінна t (температура) повинна прийняти 7 значень за кожен з днів вимірювання. Зрозуміло, можна було б описати 7 змінних: t1, t2, … , t7. Проте цей метод ускладнить процес обробки даних. Масивом назвемо послідовність однотипних даних, які мають одне ім΄я, а розрізняються за індексом. Перед використанням масиву, як і будь-якої змінної, його треба створити. Нехай нам потрібно створити масив t з кількістю елементів 7, і кожен з елементів дійсного типу (double) . double [] t = new double [7];
Такий масив, який представляє послідовність із заданої кількості даних певного типу назвемо одновимірним. Для доступу до певного елемента масиву після імені масиву в квадратних дужках вказуватимемо числовий індекс. Найпершим елементом масиву в нашому випадку буде елемент з індексом 0 (нуль), тобто t[0]. Враховуючи, що елементів масиву 7, то останнім елементом буде елемент t[6]. При спробі звернутися до елемента з номером поза діапазону [0..6] виникне помилка, яка може привести до аварійного переривання програми. t[0]=15 6; //запис до 1-го елементу масиву t значення 15 6 t[2]=10; //запис до 3-го елементу масиву t значення 10 Console.WriteLine(t[1]); //вивід на екран значення 2-го елементу масиву t
Значення до масиву можні записувати як операцією присвоювання, так і задавати одночасно з його створенням. double [] t = new double [7] {11,13 5,15,10,9 5,13 1,15 4};
Багатовимірні масиви Щоб розібратися з багатовимірними масивами уявимо шахову дошку Кожна клітинка задається двома індексами: буквою (від a до h) та цілим числом (від 1 до 8). Шахівниця – це приклад двовимірного масиву. Процес створення двовимірного масиву схожий з одновимірним . int[,] Array2 = new int[2, 3]; або
int[,] Array2 = { { 1, 2, 3 }, { 4, 5, 6 } }; Для запису значення до елементу масиву Array2[1,2]=43;
Різновидом багатовимірних масивів є зубчасті масиви. У ньому кількість елементів у кожному рядку задається окремо. Прикладом задачі з використанням зубчастих масивів є масив місяців та днів у році. Наступний фрагмент програми ілюструє різні способи створення масивів.
class TestArrays { static void Main() 29
{ // Оголошення одновимірного масиву int[] array1 = new int[5]; // Оголошення з одночасним заданням елементів одновимірного масиву int[] array2 = new int[] { 1, 3, 5, 7, 9 }; // Альтернативний спосіб оголошення масиву int[] array3 = { 1, 2, 3, 4, 5, 6 }; // Оголошення двовимірного масиву int[,] multiDimensionalArray1 = new int[2, 3]; // Оголошення з одночасним заданням елементів двовимірного масиву int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } }; // Оголошення зубчастого масиву int[][] jaggedArray = new int[6][]; // Встановлення значення елементам першого рідка зубчастого масиву jaggedArray[0] = new int[4] { 1, 2, 3, 4 }; } }
Вправи 7.1. Вкажіть рядок в якому допущено помилку при описі масиву: а) int [] array2 = new int [] {1,3,5,7,9}; б) int [] array1 = new int [5]; в) int [] multiDimensionalArray1 = new int [2,3]; г) int [] array1 = new int [5]; 7.2. Як називають номер елемента одновимірного масиву? 7.3. Як описуються та як ініціюються одновимірні масиви? Чи можна це зробити однією командою? 7.4. Що буде виведено на консоль у результаті виконання наступного коду? int [] array2 = new int [] { 1, 3, 5, 7, 9 }; Console.WriteLine(array2[2]+array2[3]);
7.5. Що буде виведено на консоль у результаті виконання наступного коду? int [,] array3 = {{1,3,5},{0,4,5},{1,4,3},{0,0,4}}; Console.WriteLine(array3[2,0]+array3[1,2]);
7.6. Чим особливим виділяються зубчасті масиви? 7.7. В чому відмінність описів: int[] array1 = new int[5]; int[] array1; int[] array1 = new int[] { 1, 3, 5, 7, 9 };
7.8. В якому з рядків описано одновимірний массив, а в якому – двовимірний? int [,] array3 = {{1,3,5},{0,4,5},{1,4,3},{0,0,4}}; int [] array2 = new int [] { 1, 3, 5, 7, 9 };
7.9. Написати програму для заповнення масиву цілими числами: 6, 8, 12,86, 0, -5, 8, 9 7.10. Що буде виведено на консоль у результаті виконання наступного коду? int [] array2 = new int [] { -1, 3, 5, 17, 9 }; Console.WriteLine(array2[1]+array2[3]);
30
Тема 8. Цикли Цикл for Для забезпечення можливості повторного використання фрагменту програми в усіх мовах програмування передбачено можливість створення циклів. Розглянемо використання циклу for. for ( init-expression ; cond-expression ; loop-expression) statement ;
задання початкового значення лічильника циклу. умова продовження циклу, яка перевіряється на початку кожного повтору (ітерації). loop-expression операція, яка вказує те,яким чином змінюється значення лічильника циклу в кожній наступній ітерації. statement - команда, яка виконується в тілі циклу задану кількість разів. Лічильником циклу назвемо змінну величину, значення якої змінюється в кожній ітерації й від якого залежить продовжуватиметься цикл чи завершиться. Напишемо програму для обчислення суми всіх чисел від n1 до n2. Приклад 8.1. Використання циклів init-expression cond-expression
1
-
using System;
2
namespace c_for1
3
{
4
class Program
5
{
6
public static void Main(string[] args)
7
{
8
Console.WriteLine("Введіть значення n1 та n2 натискаючи після кожного Enter");
9
int n1 = Convert.ToInt32(Console.ReadLine());
10
int n2 = Convert.ToInt32(Console.ReadLine());
11
int s = 0;
12
for (int i = n1; i b) a -= b;
14 15 16 17 18 19 20 21
else if (a < b) b -= a; } Console.WriteLine("НСД={0}", a); Console.ReadKey(true); } } }
Цикл do while Загальний опис циклу do … while do { statement } while expression;
expression умова продовження виконання циклу. statement команда, яка виконується в тілі циклу задану кількість разів. Особливістю циклу do … while є обов΄язковість виконання хоча б однієї ітерації, так як умова, яка може завершити цикл знаходиться в кінці самого циклу. Розв΄яжемо попередню задачу використовуючи цикл do … while.
Приклад 8.4. Використання циклу do…while 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
using System; namespace c_do_while { class Program { public static void Main(string[] args) { Console.WriteLine("Введіть значення a та b натискаючи після кожного Enter"); int a = Convert.ToInt32(Console.ReadLine()); int b = Convert.ToInt32(Console.ReadLine()); do { if (a > b) a -= b; else if (a < b) b -= a; } while(a != b); Console.WriteLine("НСД={0}", a); Console.ReadKey(true); } } }
Цикл foreach Цикл foreach дозволяє здійснювати ітерацію по кожному об΄єкту в контейнерному класі. До контейнерних класів відносяться масиви, класи колекцій (System.Collection) та визначені користувачем класи колекції. Приклад цикла foreach: int [] Ints = { 1, 2, 3 }; foreach (int temp in Ints) { Console.WriteLine(temp); } 33
Об΄єкти циклу foreach доступні тільки для читання. Розглянемо задачу, яка полягає в виводі на екран елементів масиву цілих чисел. Приклад 8.5. Використання циклу foreach 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
using System; namespace c_foreach { class Program { public static void Main(string[] args) { int[,] Array2 = { { 1, 4, 7 }, { 9, 1, 4 }}; foreach (int temp in Array2) { Console.WriteLine(temp); } Console.ReadKey(true); } } }
Оператор безумовного переходу goto Оператор goto дозволяє перейти до іншого рядка програми як вперед, так і назад. Для відмічання рядка, на який здійснюється перехід використовується мітка. У прикладі, приведеному далі ілюструється використання оператора безумовного переходу goto. Приклад 8.6. Використання циклу goto 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
using System; namespace c_goto { class Program { public static void Main(string[] args) { Console.WriteLine("Цей рядок виконається!"); goto Label1; Console.WriteLine("Цей рядок не виконається!"); Label1: Console.WriteLine("Цей рядок виконається!"); Console.ReadKey(true); } } }
У рядку 9 знаходиться оператор goto, який передає управляння рядку 12, який слідує за рядком 11, у якому стоїть мітка Label1 Рядок 10 виконуватися не буде. Комбінуючи оператор goto та if можна створити цикл. Проте використанням оператора goto зловживати не слід, так як програма може стати дуже заплутаною і незрозумілою. Є деякі обмеження на використання цього оператора. Його не можна, наприклад, використовувати для входу в цикл for. Разом з циклами використовуються оператори break та continue. Оператор break можна використовувати для виходу з циклу for, foreach, while, do while. Оператор continue перериває лише поточну ітерацію, тобто виконання буде продовжене з наступної ітерації циклу, а не відбудеться виходу з циклу.
Вправи 8.1. Надрукувати в стовпчик всі цілі числа від 15 до 45. 8.2. Надрукувати в стовпчик всі числа від 35 до 5. 8.3. Надрукувати таблицю переводу дюймів у сантиметри від 1 до 20. 1 дюйм=25,4 мм. 8.4. Надрукувати таблицю Піфагора від 1 до 15. 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 34
002 003 004 005 006 007 008 009 010 011 012 013 014 015
004 006 008 010 012 014 016 018 020 022 024 026 028 030
006 009 012 015 018 021 024 027 030 033 036 039 042 045
008 012 016 020 024 028 032 036 040 044 048 052 056 060
010 015 020 025 030 035 040 045 050 055 060 065 070 075
012 018 024 030 036 042 048 054 060 066 072 078 084 090
014 021 028 035 042 049 056 063 070 077 084 091 098 105
016 024 032 040 048 056 064 072 080 088 096 104 112 120
018 027 036 045 054 063 072 081 090 099 108 117 126 135
020 030 040 050 060 070 080 090 100 110 120 130 140 150
022 033 044 055 066 077 088 099 110 121 132 143 154 165
024 036 048 060 072 084 096 108 120 132 144 156 168 180
026 039 052 065 078 091 104 117 130 143 156 169 182 195
028 042 056 070 084 098 112 126 140 154 168 182 196 210
030 045 060 075 090 105 120 135 150 165 180 195 210 225
8.5. Надрукувати таблицю множення на 7. 7х1=7 7х2=14 … 7х10=70
8.6. Надрукувати в стовпчик значення: sin 0, sin 1, sin 2, …, sin 90 з точністю до десятитисячних Кут вимірювати в градусах. 8.7. Надрукувати в стовпчик значення:
0,1 ,
0,2 , …, 1 .
8.8. Не використовуючи функцію піднесення до степеня знайти значення x y , де x-дійсне, а yнатуральне . 8.9. Вирахувати суму: 1
1 1 1 ... . 2 3 n
8.10. Надрукувати в стовпчик наступні числа: 1,1 1,2 1,3 … 1,8
35
Тема 9. Робота з масивами Уведення даних до масиву з клавіатури та вивід масиву в консоль Масиви досить популярні при розробці програм. Без них неможливе збереження та обробка інформації. Найпершою задачею є введення інформації до пам΄яті комп΄ютера. Інформацію можна читати з файла, вводити з клавіатури чи іншого пристрою вводу (сканер, веб-камера, звукова карта тощо). Найпростішим та найактуальнішим для нас є введення інформації з клавіатури. Розглянемо процес зчитування з клавіатури цілих чисел та наступним занесенням його до масиву в пам΄яті комп΄ютера. Так як масив, це послідовність однотипних даних, кожне з яких обробляється аналогічно до попереднього, то в основі нашої програми буде цикл. Приклад 9.1. Уведення даних до одновимірного масиву з клавіатури 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
using System; namespace c_vvidmass { class Program { public static void Main(string[] args) { Console.WriteLine("Скiльки елементiв у масивi?"); int n=Convert.ToInt32(Console.ReadLine()); int [] Array = new int[100]; Console.WriteLine("Вводьте данi, щоразу натискаючи Enter"); for (int i=0;i4). У загальному випадку можна записати: n!=(n-1)!*n. Це і буде самоподібне визначення факторіалу. По аналогії можна визначити x y x y 1 x . Сформулюємо алгоритм знаходження факторіала формально: 1) зчитати з клавіатури число n; 2) помножити значення n на функцію обчислення факторіала від (n-1), для обчислення якої помножимо (n-1) на факторіал від (n-2) і т д Обов'язковою має бути умова завершення цього алгоритму. Це буде рівність (n-1)=1. Запишемо рекурсивну функцію для обчислення факторіала. static int Fact( int n) { if (n==1) return 1; else return Fact(n-1)*n; } Зверніть увагу на лексему return Fact(n-1)*n, яка виконується при n 1 . В цьому випадку
відбувається виклик цієї ж самої функції для обчислення факторіалу меншої на одиницю основи. Якщо ж умова n 1 не виконується, то рекурсивного виклику функції не відбувається, а повертається значення 1. Повністю текст програми: Приклад 11.4. Рекурсивне обчислення факторіала 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
using System; namespace c_rekurs1 { class Program { static int Fact( int n) { if (n==1) return 1; else return Fact(n-1)*n; } public static void Main(string[] args) { Console.WriteLine("Уведіть n"); int n=Convert.ToInt32(Console.ReadLine()); Console.WriteLine("При n={0}, n!={1}",n,Fact(n)); Console.ReadKey(true); } } }
Для порівняння приведемо ітераційний алгоритм обчислення факторіалу:
static int Fact( int n) 50
{
}
int r=1; for (int i=1; i