Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Варіант 1. Float, double, long double

Float, double, long double

Как и ранее, модификатор типа входит в число имён основных типов.

 

Плавающие типы используются для работы с вещественными числами, которые представляются в форме записи с десятичной точкой, так и в "научной нотации". Разница между нотациями становится очевидной из простого примера, который демонстрирует запись одного и того же вещественного числа в различных нотациях.

297.7, 2.977*10**2, 2.977E2

и ещё один пример…

0.002355, 2.355*10**-3, 2.355E-3

В научной нотации слева от символа E записывается мантисса, справа - значение экспоненты, которая всегда равняется показателю степени 10.

Для хранения значений плавающих типов в памяти используется специальный формат представления вещественных чисел. Этот формат называется IEEE форматом.

 

Ниже представлены основные характеристики типов данных с плавающей точкой (опять же для Borland C++ 4.5):

 

Тип данных Байты Биты Min Max

float 4 32 3.4E-38 3.4E+38

double 8 64 1.7E-308 1.7E+308

long double 10 80 3.4E-4932 3.4E+4932

 

Подведём итог.

 

Имена типов данных и их сочетания с модификаторами типов используются для представления данных различных размеров в знаковом и беззнаковом представлении:

char signed char

unsigned char

short

signed short

unsigned short

signed

unsigned

short int

signed short int

unsigned short int

int

signed int

unsigned int

long

signed long

unsigned long

long int

signed long int

unsigned long int

 

Все эти типы образуют множество целочисленных типов. К этому множеству также относятся перечисления.

 

А вот сочетания имён типов и модификаторов для представления чисел с плавающей точкой:

float

double

long double

 

Помимо основных типов в C++ существуют специальные языковые средства, которые позволяют из элементов основных типов создавать новые, так называемые производные типы.

#include <iostream.h>

void main()

{

int a;

double b;

cin>>a;

cin<<b;

}

Тут використовується об’єкт cin. У файлі iostream.h знаходяться|перебувають| оголошення і|та| визначення класу для об'єкту cin |.

Після запуску програми введення повинне закінчуватися клавішею <Enter>.

 

Способи вводу чисел:

1.

31<enter>

12.78<enter>

 

2.

31<npo6eл>12.78<enter>

3.

 

31rl2.78<enter>

 

Число 31 потрапить в змінну a, а дробове число - ні. Якщо неприпустимий символ буде перед першим числом, то введення взагалі не відбудеться.

 

Таким чином, роздільником чисел в послідовності символів є пропуск|прогалина|, а також новий рядок (клавіша <Enter>), табуляція.

Якщо, замість будь-якого пропуску|прогалини|, ви хочете використовувати свій символ, необхідно задати його наступним чином:

...

int a;

double b;

char symb;

cin>>a>>symb>>b;

...

 

Ввести числа можна наступним образом:

31г12.78 або 31;12.78

Ми можемо вводити|запроваджувати| досить|достатньо| довгу послідовність символів-цифр, що розділяються пропусками|прогалинами|, але|та| в програму потрапить|попаде| рівно стільки чисел, скільки змінних написано в операторах введення.

Це пояснюється|тлумачить| тим, що потоки буферизуються. Символи, що натискаються|натискують| користувачем на клавіатурі, спочатку потрапляють в проміжну пам'ять (буфер введення), і|та| тільки|лише| потім виконується перенесення|перенос| в змінні нашої програми. Аналогічно працює і вивід|висновок| - після перетворення символи заносяться в буфер, а вже з|із| буфера виводяться на пристрій|устрій|.


Виведення - об’єкт cout.

Задача: Вивести на єкран

Это 5: 5

Это большое число big: 70000

Это сумма чисел первого и второго числа: 8

Это дробь: 0.625

Это тоже дробь (5/8): 0.625

Это очень большое число: 4.9е+7

Это очень маленькое число 1.7е-107

 

#include <iostream.h>

#include <windows.h>

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

//

int ibig, first,second;

float drob;

double dbig,dsmall;

// ------------------------------------------Вывод данных

cout<<'\n'; //переход на новую строку

cout<<endl; //переход на новую строку

cout<<"Это 5:"<<5<<endl;

cout<<"это больщое целое число: "<<ibig<<endl;

cout<<"это сумма чисел: "<<first<<"и "<<second<<": "<<first+second<<endl;

cout<<"это дробное число: "<<drob<<endl;

cout<<"это тоже дробное число: "<<45/125<<endl;

cout<<"это больщое дробное число: "<<dbig<<endl;

cout<<"это маленькое дробное число: "<<dsmall<<endl;

}

 

Символи і числа

Mіж значенням 5 і символом "5" є різниця. Символу "5" відповідає значення 53, так само як букві " а" відповідає число 97.

Спеціальні управляючі символи

char| tabCharacter| = '\t|'; // вставка символу табуляції

 

\n перехід на новий рядок

\t Табуляція

\b Повернення на одну позицію

\" Подвійна лапка

\' Одиночна лапка

\? Знак питання

\\ Зворотний слеш

 

Лінійні програми

Якщо в програмі усі оператори виконуються послідовно, один за іншим, така програма називається лінійною.

 

Приклад 1|зразок|: Вичислити ціну товару з урахуванням|з врахуванням| торговельної|торгової| надбавки, виражену|виказувати| у відсотках|процентах|.

 

Вхідні дані: ціна товару і|та| надбавка.

Вихідні дані: загальна|спільна| ціна товару

 

Алгоритм розв’язання:

  1. Ввести|запроваджувати| з клавіатури ціну надбавки;
  2. Задати величину надбавки;
  3. Вичислити загальну|спільну| ціну товару;
  4. Вивести результат на екран;

 

#include <iostream.h>

#include <windows.h>

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

float Price, tax=6.75; // tax – цена надбавки

cout<<"Введите цену: "; // вывод на экран

cin>>Price; // ввод с клавиатуры

Price=Price+(Price*tax/100);

cout<<"\nPrice="<<Price;

}

 

При Price=10, ціна з урахуванням|з врахуванням| надбавки буде = 10.675. В даному випадку, після коми вистачить двох цифр.


 

Приклад 2|зразок|: Написати програму, яка переводить|перекладає| температуру в градусах за Фаренгейтом в градуси Цельсія.

Вхідні дані ввести з клавіатури. Результат обчислення вивести на екран.

Рекомендований вид|вигляд| екрану під час виконання програми (дані, які вводить користувач, виділені напівжирним шрифтом).

 

 

  Перевід|перекладає| температури в градусах за Фаренгейтом в градуси Цельсія   Введіть|запроваджуйте| початкові|вихідні| дані: Температура за Фаренгейтом (град) -> 0.5 Температура за Фаренгейтом: ____; в градусах Цельсія _____.  

 

 

Примітка:

C = 5/9(F - 32)

де С|із| - температура за Цельсієм, a F - температура за Фаренгейтом.

 

Розробка функції.

Вхідні дані: температура за Фаренгейтом F - дійсне число;

Вихідні дані: температура за Цельсієм C - дійсне число.

 

 

Алгоритм розв’язання задачі в словесній формі:

 

1. Вивести на екран заголовка програми і запрошення введення;

2. Ввести з клавіатури вхідні дані;

3. вичислити значення температури за Фаренгейтом;

4. Вивести температуру за Цельсієм на екран монітора.


Блок-схема алгоритму:

 

Текст програми:

#include <iostream.h>

#include <windows.h>

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

float C,F;

cout<<"Перевід температури в градусах за Фаренгейтом в градуси Цельсія\n\n";

cout<<"Введіть початкові дані:\n";

cout<<"\tТемпература за Фаренгейтом (град) -> ";

cin>>F;

C=5/9*(F-32);

cout<<"\nТемпература за Фаренгейтом: "<<F<<"; ";

cout<<"в градусах Цельсія: "<<C<<endl<<endl;

}

 

 


Рядок #include <iostream.h> - це директива препроцесора, по якій до початкового|вихідного| тексту програми підключається заголовний файл <iostream.h>. У цьому файлі описаний набір класів для управління введенням/виводом|висновком|, стандартні об'єкти cin для введення з клавіатури і|та| cout для виводу|висновку| на екран, а також операції поміщення в потік << і|та| витягання|видобування| з|із| потоку >>.

Рядок #include <windows.h> -підключається заголовний файл <windows.h>, у якому знаходиться інформація, необхідна для того, що б у вікні виводу|висновку| могли відображатися російські символи.

Програма на C++ складається з|із| функцій. Функція - це іменована послідовність операторів, яка складається із|із| заголовка і|та| тіла.

Рядок, void main() є заголовком головної|чільної| (в даному випадку і|та| єдиної) функції програми. Ім'я її main, що вказує|показуючий|, що саме з неї необхідно починати|зачинати| виконання програми. За ім'ям функції в дужках слідує|прямує| список формальних параметрів. В даному випадку він порожній|пустий|, але|та| дужки потрібні|необхідні| для того, щоб компілятор міг розпізнати, що це саме функція, а не інша конструкція мови|язика|.

Далі йде тіло функції - |цебто| ті оператори, які потрібно виконати.

Для зберігання початкових|вихідних| даних і|та| результатів потрібно виділити місце в оперативній пам'яті. У нашій програмі потрібно зберігати два значення: F і|та| C, тому в операторові визначаються дві змінні.

При описі будь-якої змінної треба вказати її тип |типа|, щоб компілятор знав, скільки виділити місця в пам'яті, як розшифровувати її внутрішнє представлення|виставу|, а також які дії можна буде виконати з|із| цією величиною. Наприклад, для дійсних чисел в пам'яті зберігається мантиса і|та| порядок|лад|, а цілі представляються просто в двійковій формі, тому внутрішнє представлення одного і|та| того ж цілого і|та| дійсного числа буде різним. Для дій з|із| цілими і|та| дійсними величинами формуються різні набори машинних команд.

Оскільки температура може набувати не лише|не те що| цілих значень, для змінних вибраний дійсний тип float. Можна також вибрати тип|типа| double, який дозволяє представляти|уявляти| дійсні числа більшого діапазону значень і з|із| більшою точністю.

У загальному|спільному| випадку тип змінних вибирається виходячи з можливого діапазону значень і|та| необхідної точності представлення даних. Цілочисельні операції виконуються набагато швидше.

Далі йде оператор виведення назви програми:

cout<<"Перевід температури в градусах за Фаренгейтом в градуси Цельсія\n\n";

Стандартний об'єкт, за допомогою якого виконується вивід|висновок| на екран – це cout. Йому за допомогою операції << передається те, що ми хочемо вивести. За допомогою управляючого символу \n на екран будуть виведено два пустих рядки.

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

cout<<"Введіть початкові дані:\n\tТемпература за Фаренгейтом (град) -> ";

На екран виводиться вказаний в операторові рядок символів. Символ \n переводить|перекладає| курсор на наступний|такий| рядок, а \t - робить|чинить| відступ (табуляція).

Цей рядок можна було б записати н.ч.:

cout<<"Введіть початкові дані:"<<endl<<"\tТемпература за Фаренгейтом (град) -> ";

Для виведення декількох елементів використовується ланцюжок операцій виводу <<. Для перехода на наступний рядок замість символу \n використовується слово endl. Це - маніпулятор; він управляє (маніпулює) стандартним об'єктом cout.

У рядку

cin>>F;

виконується введення з клавіатури одного числа в змінну F за допомогою об'єкту cin і|та| операції витягання|видобування| >>. Якщо потрібно ввести декілька величин, використовується ланцюжок операцій >>. В процесі введення число перетвориться з|із| послідовності символів, набраних на клавіатурі, у внутрішнє представлення дійсного числа і поміщається в елемент пам'яті, зарезервовану для змінної F.

У операторові

C=5./9*(F - 32);

обчислюється|вичисляє| вираз, записаний праворуч від операції присвоєння, і|та| результат заноситься (присвоюється) у виділену для цій змінній пам'ять. Вираз - це правило для обчислення|підрахунку| деякого значення, можна назвати|накликати| його формулою. Порядок|лад| обчислень визначається пріоритетом операцій.

Основні правила відповідають прийнятим в математиці: віднімання має нижчий пріоритет, ніж множення, тому для того, щоб воно було виконане раніше, відповідна частина|частка| виразу заключається в дужки. Ділення|поділка| і|та| множення мають однаковий пріоритет і|та| виконуються зліва направо, тобто|цебто| спочатку ціла константа 5 буде поділена на цілу константу 9, а потім результат цієї операції помножений на результат віднімання числа 32 з|із|і змінної F.

Відладка програми

Під час відладки необхідно|треба| запустити програму на виконання кілька разів, задаючи різні значення температури. Можна задавати і цілі числа - вони будуть автоматично перетворені в дійсну форму.

Можна побачити, що результат виконання програми завжди виявляється|опиняється| рівним нулю! Це відбувається|походить| із-за|через| способу обчислення|підрахунку| виразу. Константи 5 і|та| 9 мають цілий тип|типа|, тому результат їх ділення|поділки| також цілочисельний. Округлення не відбувається|походить|, дробова частина|частка| завжди відкидається. Для виправлення помилки необхідно|треба| записати хоч би|хоча би| одну з констант у вигляді дійсного числа, наприклад:

С = 5. / 9 * (F - 32);

Дійсна константа "5". за умовчанням має тип|типа| double, і|та| при виконанні ділення|поділки| відбувається|походить| автоматичне перетворення до цього ж типу|типа| іншої константи, а потім і|та| результату віднімання.

Можна записати цей вираз змінивши|зраджувати| порядок|лад| дій:

C = 5 * (F - 32) /9;

В цьому випадку буде виконано перетворення констант до типу|типа| float, як до найменш довгому з|із| тих, що беруть участь у виразі.

Перед запуском програми необхідно|треба| мати тестові приклади|зразки|, що містять|утримують| початкові|вихідні| дані і|та| очікувані|сподівані| результати. Кількість цих прикладів|зразків| залежить від алгоритму.

 

Приклад 3|зразок|: Написати функцію користувача, яка переводить|перекладає| температуру в градусах за Фаренгейтом в градуси Цельсія.

Розробка будь- якої функції ведеться в тому ж порядку|ладу|, що і розробка програми в цілому. Спочатку визначається інтерфейс функції, тобто які значення подаються їй на вхід і що повинне вийти в результаті. Потім розробляється структура даних (тип даних), в яких зберігатимуться ці і проміжні значення; потім складається алгоритм, програма і тестові приклади.

Алгоритм роботи програми залишається тим же. Обчислення|підрахунок| температури за Цельсієм для одного значення аргументу оформимо у вигляді окремої функції.

Нашій функції вимагається набути ззовні значення температури по Форингейту. Ця величина, а також результат мають тип|типа| float. Тому, заголовок функції може виглядати так:

float Cels_Fahr(double F)

Результат обчислення|підрахунку| виразу збережемо в змінній C, яка має бути описана усередині|всередині| функції, оскільки поза|зовні| нею вона не потрібна (рекомендується описувати змінні так, щоб їх зона видимості була мінімальною з|із| можливих).


Текст програми:

#include <iostream.h>

#include <windows.h>

double Cels_Fahr(float F)

{

float C;

C= 5./9*(F-32);

return C;

}

 

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

double c, f;

cout<<"Введите стартовую температуру по Фаренгейту: ";

cin>>f;

cout<<"\nЗа Фаренгейтом: \tВ градусах Цельсія: "<<endl;

c=Cels_Fahr(f);

cout<<'\t'<<f<<'\t'<<c<<endl;

f=f+0.5;

c=Cels_Fahr(f);

cout<<'\t'<<f<<'\t'<<c<<endl;

f+=0.5;

c=Cels_Fahr(f);

cout<<'\t'<<f<<'\t'<<c<<endl;

 

}

 

За рахунок використання функції програма вийшла яснішою і|та| компактнішою, тому що|бо| задача була розділена на дві: обчислення|підрахунок| функції і|та| вивід таблиці. Крім того, написану нами функцію можна при необхідності без змін перенести в іншу програму або помістити в бібліотеку.

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

Механізм передачі параметрів у функцію. Коли ми пишемо в списку параметрів функції вираз виду|вигляду| float F, це означає|значить|, що у функцію при її виклику має бути передане значення відповідного фактичного параметра. Для цього в області пам'яті, що називається стеком, створюється його копія, з|із| якою і|та| працює функція. Зміна цієї копії не може зробити ніякого|жодного| впливу на елемент пам'яті, в якому зберігається сам фактичний параметр. На місці фактичного параметра можна при виклику задавати і вираз. Вираз обчислюється|вичисляє|, і|та| його результат записується|занотовує| в стек на місце, яке відведено для відповідного параметра.

Наприклад, в нашому випадку виклик функції міг виглядати

c = Cels_Fahr(f+0.5);

Цей метод передачі параметрів називається передачею параметрів за значенням.

Для повернення результату, вичисленого функцією, в зухвалу програму служить оператор return.

return C;

Після нього вказується|указує| вираз, результат обчислення|підрахунку| якого передається в точку виклику функції.

А тепер розглянемо|розглядуватимемо| ще один варіант цієї ж програми:

#include <iostream.h>

#include <windows.h>

double Cels_Fahr(float F)

{

return 5./9*(F-32);;

}

 

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

double c, f;

cout<<"Введите стартовую температуру по Фаренгейту: ";

cin>>f;

cout<<"\nЗа Фаренгейтом: \tВ градусах Цельсія: "<<endl;

c=Cels_Fahr(f);

cout<<'\t'<<f<<'\t'<<Cels_Fahr(f)<<endl;

f+=0.5;

cout<<'\t'<<f<<'\t'<<Cels_Fahr(f)<<<endl;

f+=0.5;

cout<<'\t'<<f<<'\t'<<Cels_Fahr(f)<<<endl;

}

 

<== предыдущая лекция | следующая лекция ==>
Типы данных. R - возрат коретки, f - перевод страницы | Текста программы
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 577; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.094 сек.