Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Типи даних



У мові С++ кожна величина має певний спосіб зберігання й запису в пам'яті – тобто певний тип. При складанні програми необхідно вказати типи даних, до яких належать значення змінних. Наприклад,

float z;

int a=99;

float g(int)

Тут змінна z оголошена як дійсна типу float, змінна а – як ціла типу int, а g оголошена як дійсна функція з аргументом цілого типу.

У С++ передбачений набір типів, що відображають особливості організації пам'яті більшості комп'ютерів і потреби в зберіганні даних. Всі типи даних у С++ можна розділити на дві великі групи: вбудовані типи (тобто існуючі у мові програмування) і користувальницькі типи (створюються самим програмістом). До вбудованих типів ставляться, насамперед, основні (або стандартні) типи:

bool – логічний;

char – символьний;

wchar_t – розширений символьний;

int – цілий;

float – дійсний;

double – дійсний подвійної точності;

Перші чотири типи називаються інтегральними типами, останні два – типами із плаваючою крапкою. Представлення інтегральних типів, відрізняється від коду величин із плаваючою крапкою.

Щоб розширити можливості програміста в застосуванні типів даних, існують модифікатори, які уточнюють внутрішнє представлення й діапазон значень стандартних типів:

signed – знаковий;

unsigned – беззнаковий;

long – довгий;

short – короткий.

При оголошенні змінної модифікатор ставиться перед ключовим словом типу, наприклад,

unsigned int x;

– оголошення цілої беззнакової змінної x. За умовчанням всі інтегральні типи є знаковими, тобто модифікатор signed для них можна вилучати. Модифікатори short і long можуть використовуватися тільки з типом int. Тому замість short int і long int для стислості можна записувати:

short x=221;

long z=-12345678;

До користувальницьких типів належать перелічуваний тип (enum), структури (struct) і класи (class).

Діапазони значень для основних типів даних, а також розмір пам'яті під них наведені у таблиці 1.1.

Табл. 1.1. Розмір пам'яті й діапазони значень для основних типів даних

Тип Розмір (байт) Інтервал значень
bool   true, false
char   -128.. 127
unsigned char   0.. 255
wchar_t   -32768.. 32767
short   -32768.. 32767
unsigned short   0.. 65535
int 16-розр. платформа   -32768.. 32767
32-розр. платформа   -2147483648.. 2147483647
unsigned int 16-розр. платформа   0.. 65535
32-розр. платформа   0.. 4294967295
long   -2147483648.. 2147483647
unsigned long   0.. 4294967295
float   3.4×10-38.. 3.4×1038
double   1.7×10-308.. 1.7×10308
long double   3.4×10-4932.. 1.1×104932

Для змінної типу int виділяється 2 або 4 байти пам'яті залежно від розрядності платформи (мікропроцесора, операційної системи, середовища програмування). Наприклад, Turbo C++ працює на 16-розрядній платформі (MS-DOS), а C++ Builder і Visual C++ - на 32-розрядній (Windows, Unix).

1.3. Операції в С++

У мові С++ є обмежений набір базових типів даних, однак визначений великий набір операцій над даними. Операції служать для побудови виразів. Вираз являє собою послідовність операндів і знаків операцій і служить для обчислення деякого значення. Результат обчислення виразу залежить від пріоритетів операцій (табл. 1.2).

Таблиця 1. 2. Пріоритети операцій у С++

Пріоритет Знак операції Призначення Схема
  :: Розширення області видимості (доступ до глобального імені або імені з іншої області) :: ідентифікатор (глобальний) ім'я області:: ім'я_елемента структури
  -> Звертання до елемента структури по покажчику на структуру покажчик -> ім'я_члена_структури
  . Звертання до елемента структури по імені структури ім'я_структури. ім'я_члена_структури
  [] Звертання до елемента масиву покажчик [індекс]
  typedef Перетворення типу даного ім'я_типу (вираз) або (тип) вираз
  () Виклик функції Функція(аргументи)
  ++ Інкремент ++ L-значення або L-значення++
  -- Декремент -- L-значення або L-значення--
  ~ Бітове інвертування ~ цілий_вираз
  ! Логічне заперечення ! вираз
  - Унарний мінус - вираз
  + Унарний плюс + вираз
  & Одержання адреси & L-значення
  * Розіменування покажчика * покажчик
  new Виділення динамічної пам'яті new тип даного
  delete Звільнення пам'яті delete покажчик
  sizeof Розмір даного (типу даних) sizeof вираз sizeof (ім'я типу)
  * Множення вираз * вираз
  / Ділення вираз / вираз
  % Залишок від ділення двох цілих вираз % вираз
  ->* Звертання до елементу структури за покажчиком покажчик_на_структуру->* ім'я_елемента_структури-покажчика
  .* Звертання до елементу структури за іменем структури ім'я_структури.* ім'я_члена_структури-покажчика
  + Додавання вираз + вираз
  - Віднімання вираз – вираз
  << Зсув вліво цілий_вираз << цілий _вираз
  >> Зсув вправо цілий _вираз >> цілий _вираз
  < Менше вираз < вираз
  <= Менше або дорівнює вираз <= вираз
  > Більше вираз > вираз
  >= Більше або дорівнює вираз >= вираз
  == Дорівнює вираз == вираз
  != Не дорівнює вираз!= вираз
  & Побітове "І" вираз & вираз
  ^ Виключне побітове "АБО" вираз ^ вираз
  | Побітове "АБО" вираз | вираз
  && Логічне "І" вираз && вираз
  || Логічне "АБО" вираз | | вираз
  ?: Умовний вираз вираз? вираз1: вираз2
  = Просте присвоювання вираз = вираз
  @= Складне присвоювання; @ - один зі знаків операцій * / % + - << >> & ^ | вираз @= вираз
  , Операція слідування (операція «кома») вираз, вираз

2. Лабораторна робота 1.
«Обчислення арифметичних виразів» (2 год.)

Мета роботи: Одержання навичок роботи з арифметичними типами даних і операціями, складання простих програм.

2.1. Теоретичні відомості

При обчисленні арифметичних виразів необхідно враховувати тип змінних-операндів, що беруть участь в операціях. Нижче дані правила дії над операндами різних типів.

2.2.1. Приведення типів

Якщо у виразу (праворуч від операції присвоювання) беруть участь операнди різних типів, то менш точний тип приводиться до більш точного. Наприклад,

int a1;

float c2=a1/99.;

при обчисленні c2 тип першого операнду a1 приводиться до float, тобто до типу другого операнду – дійсної константи 99.

В операціях присвоювання тип результату (правої частини) приводиться до типу лівого операнду. Наприклад, при виконанні фрагмента:

double a1=2.2, b1=3;

int mult=a1*b1;

змінна mult одержить значення 6, але точне значення повинне бути 6.6.

Результатом виконання операторів:

int m=4, n=5;

double div=m/n;

буде значення div=0, оскільки цілочисельне ділення цілих змінних m і n дасть 0. Щоб одержати правильне значення для змінної div у даному прикладі необхідно виконати явне приведення типів, що записується як вираз

(тип)

перед тієї змінної, котру потрібно явно привести до зазначеного типу. Тому для змінних m і n цілого типу правильним буде запис:

double div = (double)m/n;

Тоді змінна m, до якої застосована операція приведення, розглядається як дійсна величина типу double. Так що ділення здійснюється вже не з цілими, а з дійсними числами, і дає правильний результат: 0.75.

2.2. Постановка задачі

1. Обчислити значення виразу (див. розд. «Варіанти») при заданому a і різних b. Значення b змінювати при кожному запуску програми. Виконати обчислення при різних дійсних типах даних (float і double). У програмі для обчислення виразу використати проміжні змінні.

2. Спростити заданий вираз шляхом алгебраїчних перетворень і обчислити точне значення виразу.

3. Порівняти й пояснити результати, отримані згідно п.1 і п.2.

2.3. Варіанти

Завдання
  , при а=1000, b=10-4, 10-5, 10-6
  , при а=1000, b=10-4, 10-5, 10-6
  , при а=1000, b=10-3, 10-5, 10-7
  , при а=1000, b=10-12, 10-14, 10-16
  , при а=1000, b=10-3, 10-5, 10-7
  , при а=1000, b=10-12, 10-14, 10-16
  , при а=1000, b=10-12, 10-14, 10-16
  , при а=1000, b=10-2, 10-3, 10-4
  , при а=1000, b=10-5, 10-7, 10-9
  , при а=1000, b=10-2, 10-3, 10-4
  , при а=1000, b=10-5, 10-7, 10-9
  , при а=1000, b=10-4, 10-5, 10-6
  , при а=1000, b=10-4, 10-5, 10-6
  , при а=1000, b=10-3, 10-5, 10-7
  , при а=1000, b=10-12, 10-14, 10-16
  , при а=1000, b=10-3, 10-5, 10-7
  , при а=1000, b=10-12, 10-14, 10-16
  , при а=1000, b=10-12, 10-14, 10-16
  , при а=1000, b=10-2, 10-3, 10-4
  , при а=1000, b=10-5, 10-7, 10-9
  , при а=1000, b=10-2, 10-3, 10-4
  , при а=1000, b=10-5, 10-7, 10-9
  , при а=1000, b=10-3, 10-5, 10-7
  , при а=1000, b=10-12, 10-14, 10-16
  , при а=1000, b=10-3, 10-5, 10-7

2.4. Методичні вказівки

1. Для введення параметра b використати операцію cin. Числа з плаваючою крапкою варто вводити у вигляді: 1e-2 (= 0.01), 1E-4 (=0.0001), 0.123e+2 (=12.3) і т.д.

2. Виведення значення виразу здійснювати за допомогою операції cout з точністю до 10 значущих цифр. Для цього необхідно використовувати маніпулятор setprecision(int). Наприклад, інструкція

cout << setprecision(8) << x;

виводить 8 значущих цифр змінної x, починаючи з першої цифри. Доступ до маніпулятора setprecision забезпечується заголовним файлом iomanip.h

2.5. Зміст звіту

1. Постановка задачі.

2. Код програми.

3. Результати роботи програми для даних типу float і різних значень b.

4. Результати роботи програми для даних типу double і різних значень b.

5. Результати обчислення з використанням алгебраїчних перетворень.

6. Пояснення результатів.


3. Лабораторна робота 2. «Оператори С++» (2 год.)

Мета роботи: вивчити основні оператори С++, одержати практичні навички використання умовних операторів і операторів циклу при створенні програм.

3.1. Теоретичні відомості

Оператори – це синтаксичні конструкції, що визначають дії, які виконуються програмою.





Дата публикования: 2015-04-07; Прочитано: 1866 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...