Первомайський ЦНТТУМ
Гурток «Сучасні технології програмування»
Керівник гуртка Семенова Олена Анатоліївна
Розробка заняття на тему:
Тема: «Типи даних в С++. Правила іменування та способи оголошення змінних. Введення даних, команда сin. Синтаксис та застосування.»
Мета: ознайомитись з поняттям типів даних та їх застосуванням, виховувати вміння побудови аналогій, розвивати увагу, грамотність та логічне мислення.
Обладнання: ПК, ПЗ — текстовий редактор, середовище програмування CodeBlocks.
Хід заняття
1. Організаційний момент та розминка.
Продовжуємо оволодіння технікою сліпого десятипальцевого набору на клавіатурі.
На минулому занятті ми додали до «вихідного набору» ще чотири букви. Давайте сьогодні не будемо додавати нові, а попрактикуємось робити «ВЕЛИКІ», або, як їх ще називають, заголовні літери.
Пам“ятаєте, як рухаються вказівні пальці, коли друкують букви е, н? Поставте руки у «вихідну позицію» і зробіть аналогічний рух лівим мізинцем вліво-вниз, навскоси. Тільки не повертайте його на місце, а зафіксуйте його в позиції, коли він натиснув клавішу. Це клавіша «shift». Коли ви тримаєте її натиснутою, вона вмикає на цей час «верхній» регістр, тобто, всі букви, які ви в цей час надрукуєте, будуть «ВЕЛИКІ», тобто, заголовні.
Спробуйте по черзі надрукувати всі «освоєні» вже вашими пальчиками 14 букв: А, В, І, Ф, К, Е, П, Р, Г, Н. О, Л, Д, Ж.
Що? Виникла проблема із буквою Ф? Звичайно, її має друкувати мізинець лівої руки, а він зайнятий іншою клавішею :) … В цьому випадку ви маєте знайти йому тимчасову заміну. Правильно, для того і існують сусіди в житті, щоб в важкий час підтримати :). Букву Ф ми натискаємо, використовуючи безіменний палець лівої руки, який робить крок вліво і допомагає відсутньому сусідові :).
Тренування в нас сьогодні теж буде трошки «навпаки». Зазвичай ми не обирали власні імена. Сьогодні — виключення. Ми будемо обирати їх також. Починаємо називати слова-власні імена та назви, маючи отакі букви: А, В, І, Ф, К, Е, П, Р, Г, Н. О, Л, Д, Ж.
Париж :)
Віка
Федір (Чудово! Тут є «проблемна» буква ф)
Кіра
Ліна
Кафе
Африка Ірак Іран Прага Кіпр Женева
Тепер інтенсивне тренування пальців: 3 рядка цих слів друкуємо через пробіли. :)
Далі переходимо до інтенсивного тренування мозку, тобто до отримання наступних знань з програмування. :)
2. Основна частина. Розгляд нової теми.
Частина І. Типи даних в С++. Правила іменування та способи оголошення змінних.
Головною метою будь-якої програми є робота з даними різного типу та їх обробка. А що таке дані? Коли ви розв“язуєте якусь задачу з математики, фізики, хімії, яке питання перш за все перед собою ставите? Правильно, «що нам дано?». А друге? Які в цих даних властивості? Тобто в будь якому разі «що ми маємо», щоб знайти рішення. Ми записуємо їх окремо і... ?
Ну, добре, давайте розберемо на прикладі простенької арифметичної задачі: «Катя зібрала на 20 грибів більше, ніж її братик Сашко. Разом в них 70 грибів. Скільки грибів зібрав Сашко?»
Перше питання буде яким? Що дано, так?
Разом — 70 грибів
Катя зібрала на 20 більше
Знайти: скільки зібрав Сашко.
З чого ми починаємо розв“язання? З визначення, яка в нас задача. Із невідомим. ТОБТО? Нам треба скласти рівняння, і ми починаємо розв“язання зі слів: нехай кількість грибів, які зібрав Сашко дорівнює х. …
До речі, яка назва отакої букви? І чому вона називається «змінна»? Авжеж, вона приймає значення, які можуть змінюватись.
По суті, ми зараз в оцій простенькій задачі для початкової школи робимо те, що в програмуванні називається «оголошенням змінної».
Що ми знаємо про наше невідоме х? Які в нього властивості? Чи може в нашій задачі х=1,5 ? Тобто ми для себе визначаємо тип х — ціле число! До того ж воно обмежене: не може бути менше за 0 (сподіваюсь, не треба пояснювати, чому.. :) ), і аж ніяк не може бути більше або рівне 50 :). Таким чином ми не задумуючись виділили певну «комірку» - «окреслили» для себе приблизний розмір та тип розв“язку. Адже в результаті в нас ніяк не може вийти 1,5 землекопа замість певної цілої кількості грибів :).
Всі ці висновки ми робимо практично не задумуючись, автоматично, тому що ми це знаємо із умови. І одразу їх «кладемо десь на поличку нашої пам“яті», щоб дістати, коли прийде час перевіряти правильність рішення.
Таким самим чином працює і комп“ютер, обробляючи програму, яку ви пишете. Йому теж потрібно дані, які ви записуєте, десь «покласти на поличку». Але, на відміну від вас, машина не знає, який тип даних ви маєте на увазі, коли пишете якусь назву. Яким чином робити перевірку, якщо невідомо, що перевіряти. Ви знаєте, що комп“ютер для обробки даних використовує ? … оперативну пам“ять (пам“ять для проведення операцій). І вона має обмеження по розміру. Що відбувається, коли такої пам“яті стає замало?
Так ось, щоб запобігти отаким штучним створенням проблем, для програмування ввели поняття типу даних, про використання яких треба повідомляти машину завчасно.
Тобто: вам потрібна змінна а… Ви не повідомили комп“ютеру, що вона має бути ціла, і комп“ютер, щоб її обробити, має вгрузити в оперативну пам“ять відомості про усі можливі варіанти…
Усі типи даних можна розділити на основні (базові) і складені. Основні типи: цілі, дійсні, символьні та логічні дані. На основі цих чотирьох типів вводиться опис складених: масиви, перелічення, функції, структури, посилання, покажчики, об’єднання і класи. Поступово ми розглянемо їх усі.
Для опису основних типів мови C++ використовують такі службові слова:
Типи int, char, bool називають цілими, а типи float та double — дійсними з плаваючою крапкою.
В таблиці, яку ви можете легко знайти в просторах інтернету, приміром, у Вікіпедії, є розміри для основних типів даних
Тип |
Розмір, байт |
Значення |
bool |
1 |
true або false |
unsigned short int |
2 |
від 0 до 65 535 |
short int |
2 |
від -32 768 до 32 767 |
unsigned long int |
4 |
від 0 до 4 294 967 295 |
long int |
4 |
від -2 147 483 648 до 2 147 483 647 |
int (16 розрядів) |
2 |
від -32 768 до 32 767 |
int (32 розряди) |
4 |
від -2 147 483 648 до 2 147 483 647 |
unsigned int (16 розрядів) |
2 |
від 0 до 65 535 |
unsigned int (32 розряди) |
4 |
від 0 до 4 294 967 295 |
char |
1 |
від 0 до 256 |
float |
4 |
від 1.2е-38 до 3.4е38 |
double |
8 |
від 2.2е-308 до 1.8е308 |
long double |
10 |
від 3.4е-4932 до 3.4е+4932 |
Розмір однакового типу даних може відрізнятися на комп’ютерах різних платформ, а також може залежати від операційної системи. Тому при оголошенні тієї чи іншої змінної потрібно чітко уявляти, скільки байт вона буде займати в пам’яті ЕОМ, щоб запобігти проблемам, пов’язаним з переповненням і неправильною інтерпретацією даних.
Запам'ятовувати всі ці числа не обов'язково. Просто ви маєте зрозуміти, для чого потрібен розподіл даних на типи.
Давайте повернемось до нашої задачі з арифметики. Програма для її розв'язання почнеться саме із оголошення змінної та типу даних для значень, які вона може приймати.
Спочатку треба дати змінній якесь ім'я…Запам'ятайте , що воно обмежено не лише вашою фантазією і здоровим глуздом))) Не рекомендовано використовувати службові символи типу “пробіл”, @, # та інші, а також кирилицю або інші абетки, окрім латиниці.
Скажімо, в нашій задачі ми можемо залишити змінній назву х, або дати їй ім’я типу mush від англ. mushroom- гриб, чи транслітом grib або GRIBY.
Виглядатиме це отак:
#include <iostream>
#include <windows.h>
using namespace std;
int main ()
{
int mush; // означає, що ми будемо використовувати далі змінну із назвою mush, яка може приймати тільки цілі значення
mush=(70-20)/2;
cout<<mush<<endl;
return 0;
}
Окремо хочу звернути вашу увагу на рядок
cout<<mush<<endl;
Як бачите:
- ми не пишемо змінну в лапках, як до того писали текстові символи;
- на екран виводиться не ім“я, а значення змінної. Ця властивість оператора виводу знадобиться нам ще не раз. До речі…
Давайте поекспериментуємо з нею :). Як ви гадаєте, що побачите на екрані, коли запустите оцю програмку?
#include <iostream>
#include <windows.h>
using namespace std;
int main ()
{
int mush;
cout<<mush<<endl;
return 0;
}
Чому такий результат? Незрозуміло, звідки взялось число?…А якщо ви згадаєте про те, що кожна змінна - це власне, поличка, осередок в пам’яті ….де до появи вашої змінної можливо, щось уже лежало :)
Все просто: ви не уточнювали, яке саме значення змінна має приймати на початку програми. Якщо початкове значення змінної не важливе, то його й не оголошують.
Але якщо це значення важливе, то змінну можна оголосити і ініціалізувати, тобто, надати їй потрібне початкове значення.
Знову ж таки, це можна зробити не одним способом:
int mush;
mush=2;
int mush=2;
Якщо в програмі використовується більше однієї змінної одного типу, їх можна оголошувати одночасно, через кому:
int mush, х, а;
Звичайно, можна одразу ініціалізувати потрібну змінну:
int mush=2, х, а=-4;
А зараз, враховуючи все, що ви вже знаєте, скажіть, що ви побачите на екрані після завершення роботи програми?
#include <iostream>
#include <windows.h>
using namespace std;
int main ()
{
int mush=0;
mush=2;
cout<<mush<<endl;
return 0;
}
Хто дав відповідь 2, той отримує… поздоровлення із правильною відповіддю, особливо, якщо не вгадав, а реально зрозумів :) .
Що ж відбулось у нашій програмі.. пройдемось по рядкам:
int mush=0; - оголошення та ініціалізація цілочисленної змінної mush (надання змінній значення 0) Тобто якби ми далі поставили cout<<mush<<endl; то побачили б на екрані 0.
Але наступний рядок у нас
mush=2; - надання змінній mush значення 2 за допомогою оператора присвоювання. Тобто в цьому рядку значення, яке ми надавали при оголошенні змінної, змінилось тепер дорівнює 2.
А оператор виведення дав нам поточне значення змінної:
cout<<mush<<endl; - ми побачили значення 2.
В цієї команди є ще декілька цікавих властивостей…
Яку помилку видасть компілятор, якщо йому надати на компіляцію ось таку програму:
#include <iostream>
#include <windows.h>
using namespace std;
int main ()
{
int а=2, в=5;
сout<<а+в<<endl;
return 0;
}?
Впіймались - ніяку :). Якщо, звісно, ви правильно напишете букви та розставите правильно знаки :).
За допомогою однієї команди cout можна виводити кілька різних значень різного типу даних.
Наприклад:
int а=2, в=5;
сout<<а<<”+”<<в<<”=”<<a+b<<endl;
В одному рядку і одній команді сумістились два різних типи даних: int (цілі числа) та char (символи).
Тепер спробуйте за аналогією зробити частковий “калькулятор”, тобто продовжіть самостійно програму, щоб результатом було виведення на екран “Сума”, “Різниця”, “Добуток”, та “Частка” двох змінних (значення теж надайте самі).
Частина ІІ Введення даних, команда сin. Синтаксис та застосування.
Отже, як вивести значення змінних на екран, зрозуміло.
Але не завжди в програмі ми знаємо, які значення прийматимуть змінні… Іноді потрібно, щоб це зробив користувач - той, хто буде з вашою програмою працювати. Ви це зрозуміли, коли писали “частковий калькулятор”. Власне кажучи, це був не калькулятор, а просто красиве виведення на екран результата простих арифметичних дій, так? Але користувачу програми це не цікаво, оскільки йому потрібно якісь числа реально порахувати…
Для таких цілей потрібно? правильно, якимось чином ці числа отримати і для цього існує команда введення даних .. Вмикаємо логічне мислення і знання англійської мови… :) Якщо виведення значень в нас с-out (назовні) , то введення значень… ? за аналогією і змістом? с-in (всередину). І аналогічно синтаксис: якщо сout<< , тоді сin>>. Звичайно, є ще відмінності…
сin>>а;
То? Так, будете довго чекати або з подивом дивитись на екран, де нічого не відбувається, лише блимає курсор (можливо) :). Чому так?
Тому, що сin>> чекає інформацію, а не надає її. Тобто в програмі команді сin>> завжди передує команда сout , щоб повідомити користувача програми, що йому треба зробити для продовження.
Наприклад, гра- “угадайка” :)
#include <iostream>
#include <windows.h>
using namespace std;
int main ()
{int а;
сout<<”Введіть будь-яке число від 1 до 100”<<endl; //повідомляємо, що треба зробити для продовження програми
сin>> а; //в цьому місці виконання програми виникне “пауза”, що триватиме, доки користувач набере число та натисне enter.
сout<<”Ви набрали число”\t<<а<<endl;
return 0;
}
Тепер давайте покращимо наш “частковий” калькулятор: на початку роботи він повинен запропонувати ввести два числа і отримати в стовпчик результати чотирьох арифметичних операцій: додавання, віднімання ...
І я сподіваюсь, ви упораєтесь з цим без моєї допомоги… ;)
Хто не впорався, нехай це буде вашим домашнім завданням.
Приємного відпочинку і настрою та успіхів! :)