Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
++: ПР № 3 .
Практична робота №3.
Мета роботи : вивчити класифікацію типів і їх внутрішнє представлення в мові С++, навчитися працювати із стандартними типами даних.
При виконанні лабораторної роботи для кожного завдання вимагається написати програму на мові С++, яка отримує на вході дані і виводить їх на екран у відформатованому вигляді. Введення даних здійснюється з клавіатури з урахуванням вимог до вхідних даних, що містяться в постановці завдання. Обмеженнями на вхідні дані є допустимий діапазон значень використовуваних числових типів в мові С++.
Вказівки до виконання роботи.
Вимоги до звіту.
Приклад розвязання задачі.
Теоретичні відомості.
Введення - виведення - це операції передачі даних між програмою і зовнішніми пристроями - екраном, клавіатурою, жорстким або гнучким диском.
Механізм введення-виводу, не залежить від особливостей роботи різноманітних пристроїв. Програма працює не з фізичними, а з логічними пристроями введення-виводу - потоками.
Інформація вводиться і виводиться у вигляді потоку байтів - значення по значенням. Потік нагадує "канал" або "трубу", через яку дані поступають від джерела до приймача. Взаємодія з потоком для збільшення швидкості передачі даних проводиться через спеціальну область оперативною пам' яті - буфер.
По напряму передачі даних потоки можна розділити на вхідні (дані вводяться в пам'ять), вихідні (дані виводяться з пам'яті).
Дані прямують у вхідний потік - спеціальний об'єкт cin (З input ), пов'язаний з клавіатурою.
Визначення. Операція введення >> перетворить дані (послідовність символів) до типу змінної, в яку має бути поміщено результат.
Синтаксис:
cin>>имя_переменной;
Клавішею <Enter> - закінчення вводу.
Для роботи з потоковим введенням - виводом необхідно підключити заголовний файл
#include <iostream.h>
Приклад 1. Обчислити вираз (а+b)*, де а, b, з - цілі числа. Вхідні дані ввести з клавіатури.
Вхідні дані: три цілих числа
Вихідні дані: ціле число
Алгоритм розвязання завдання: лінійний.
#include <iostream.h>
void main()
{
int a,b,c, result;
cin>>a; //введення в змінну a значення з клавіатури
cin>>b; //введення в змінну b значення з клавіатури
cin>>c;
result=(a+b)*c; //формування результату
}
Варіанти введення даних :
|
2 |
5 |
\n |
3 |
\n |
2 |
\n |
|
|
a |
b |
c |
|
2 |
5 |
3 |
2 |
\n |
|
|||
a |
b |
c |
|
2 |
5 |
, |
3 |
, |
2 |
\n |
|
a |
ошибка |
Значення змінних b і c - невизначене.
|
а |
5 |
, |
3 |
, |
2 |
\n |
|
ошибка |
Значення змінних а, b і c - невизначене.
Приклад. Ввести 3 дійсні числа.
#include <iostream.h>
void main()
{
double ad,bd,cd;
cin>>ad>>bd>>cd;
}
|
2 |
5 |
. |
3 |
\n |
2 |
\n |
1 |
. |
5 |
\n |
|
ad |
bd |
cd |
Приклад: Ввести ціле число, символ і дробове число.
Символ можна розглядати як роздільник, відмінний від стандартного.
#include <iostream.h>
void main()
{
int ai;
char bch;
double cd;
cin>>аi>>bch>cd;
}
|
2 |
, |
3 |
. |
5 |
\n |
|
ai |
bch |
cd |
Висновки:
При введенні чисел використовуються символи - розмежувачі: пропуск, табуляція, перехід на новий рядок.
Визначення. Операція виведення << переводить інформацію, яка виводиться, в послідовність символів і поміщає їх у вихідний потік обєкт сout.
На екран можна виводити:
Приклади використання інструкцій виводу :
#include <iostream.h>
void main()
{
int a,b,result;
cin>>a>>b;
result=a+b;
cout<<result;
}
Приклад.Вивести на екран фразу "Моя перша програма".
#include <iostream.h>
void main()
{
cout<<Моя первая программа;
}
Приклад. Скласти два дійсні числа, присвоїти їм початкові значення за допомогою оператора присвоєння. Результат не зберігати в ОП, а тільки вивести на екран.
#include <iostream.h>
void main()
{
double ad,bd;
ad=3.15;
bd=2.;
cout<<ad+bd;
}
Приклад. Скласти два цілі числа. При оголошенні змінних, ініціалізувати їх початковими значеннями ( присвоїти початкові значення).
Рекомендований вигляд екрана:
Результат складання чисел 2 і 3 дорівнює 5.
Вхідні дані: два цілі числа a і b
Вихідні дані: a + b
Аналіз алгоритму :
Вихідний рядок складається з 6 частин:
Результат сложения чисел |
2 |
и |
3 |
равен |
5 |
Символьний рядок (СР) |
а |
СР |
b |
СР |
a + b |
#include <iostream.h>
void main()
{
int a=2,b=3;
cout<<Результат сложения чисел <<a<< и <<b<< равен <<a+b;
}
#include <iostream.h> void main() { int a=2,b=3; cout<<a; cout<<b; } |
Результат: 23 |
Приклад. Скласти два цілі числа, введених з клавіатури.
Результат вивести на екран у виді:
a=2
b=3
a+b=5
#include <iostream.h>
void main()
{
int a,b,result;
cin>>a>>b;
cout<<a=<<a<<\nb=<<b<<\na+b=<<a+b;
}
#include <iostream.h>
void main()
{
int a,b,result;
cin>>a>>b;
cout<<a=<<a<<endl<<b=<<b<<endl<<a+b=<<a+b<<endl;
}
Форматування
Форматування - розташування чисел і слів в належних місцях.
Для організації виводу використовуватимемо спеціальні управляючі символи.
\n перехід на новий рядок
\t Табуляція
\b Повернення на одну позицію
\" Подвійна лапка
\' Поодинока лапка
\? Знак питання
\\ Зворотний слеш
Приклад: Написати програму, яка переводить температуру в градусах за Фаренгейтом в градуси Цельсія. Вхідні дані ввести клавіатури. Результат обчислення вивести на екран.
Рекомендований вид екрану під час виконання програми (дані, які вводить користувач, виділені жирним шрифтом).
Введіть початкові дані: Температура за Фаренгейтом (град) -> 25.5 Температура за Фаренгейтом: ____; в градусах Цельсія _____ . |
Вхідні дані: температура за Фаренгейтом - дійсне число;
Вихідні дані: температура Цельсія - дійсне число.
Алгоритм:
C = (5/9)*(F - 32)
где С - температура за Цельсієм, a F - температура за Фаренгейтом.
Фаренгейт Fahrenheit [haɪt]
Temperature - температура
Текст программы.
#include <iostream.h>
#include <windows.h>
/*
Програма переведення температури в градусах за Фаренгейтом
в градуси Цельсія
*/
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
double tFahr; // температура в градусах по Фаренгейту (Fahrenheit)
double tCels; // температура в градусах по Цельсию (Celsius)
cout<<"Введіть початкові дані:\n";
cout<<"\tТемпература за Фаренгейтом (град) -> ";
cin>>F;
tCels=5/9*(tFahr-32);
cout<<"\nТемпература за Фаренгейтом: "<<tFahr<<"; ";
cout<<"в градусах Цельсія: "<<tCels<<endl<<endl;
}
#include <windows.h> - у файлі windows.h, знаходиться інформація, необхідна для відображення кирилиці (Windows - 1251 ).
Відладка програми
Результат обчислення вираження 5/9*(F - 32) при будь-яких значеннях F завжди дорівнює 0.
Константи 5 і 9 мають цілий тип, тому результат їх ділення також має цілий тип, тому дробова частина завжди відкидається.
Виправлення помилки :запишем одну з констант у вигляді дійсного числа:
З = 5. / 9 * (tFahr - 32);
Дійсна константа "5" за умовчанням має тип double, і при виконанні ділення відбувається автоматичне перетворення до цього ж типу іншої константи, а потім і результату ділення.
Приклад. Переведення температури в градусах за Фаренгейтом в градуси Цельсія.
Рекомендований вид екрану :
За Фаренгейтом За Цельсієм
25 -3.88889
#include <windows.h>
#include <iostream.h>
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
double tFahr=25;
double tCels;
tCels= 5./9*(tFahr-32);
cout<<"\nЗа Фаренгейтом"<<'\t'<<"За Цельсієм"<<endl;
cout<<tFahr<<"\t\t"<<tCels<<endl<<endl;
}
Маніпулятори введення/виводу
Маніпулятори - це спеціальні функції, які використовуються для форматування виведення інформації на екран.
Для їх використання, необхоимо підключити заголовний файл <iomanip.h>
Приклад. Переведення температури в градусах за Фаренгейтом в градуси Цельсія.
Рекомендацій вид екрану .
tFahr |
tCels |
25 |
-3.88889 |
20 символів |
15 символів |
#include <windows.h>
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
double tFahr=25;
double tCels;
tCels= 5./9*(tFahr-32);
cout<<setw(20)<<"tFahr"<<setw(15)<<"tCels"<<endl;
cout<<setw(20)<<tFahr<<setw(15)<<tCels<<endl;
system("pause");
}
За умовчанням, інформація вирівнюється по правому краю.
Зробимо програму більш універсальною: ширину полів задамо за допомогою именованых констант. Зміна значень констант виконується в одному місці програми, а використовувати константи можна багаторазово:
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
double tFahr=25;
double tCels;
const int lf=15, lc=13; // именованные константы
tCels= 5./9*(tFahr-32);
cout<<setw(lf)<<"tFahr"<<setw(lc)<<"tCels"<<endl;
cout<<setw(lf)<<tFahr<<setw(lc)<<tCels<<endl;
system("pause");
}
Формат виведення дійсних чисел.
За умовчанням дійсні числа виводяться у форматі з плаваючою точкою.
Приклад. Вивести два дійсні числа: 55555555555. і 55.5
... float a=55555555555.,b=55.5; cout<<"a="<<a<<"\nb="<<b<<endl; ... |
Результат a=5.55556e+010 b=55.5 |
Для виведення інформації в інших форматах використовуються прапори. Прапор може знаходитися в двох станах: встановлений (1), скинутий (0). Кожен прапор має своє ім'я.
Наприклад, для виведення чисел з фіксованою точкою використовуються прапор fixed.
0 |
||||||
fixed |
Прапор fixed, якщо встановлений (знаходиться в змозі 1), то дійсні числа виводяться у форматі з фіксованою точкою. За умовчанням - скинутий (0).
Маніпулятори для роботи з прапорами:
setiosftags |
Встановити прапор |
resetiosflags |
Скинути прапор |
Приклад. Переведення температури в градусах за Фаренгейтом в градуси Цельсія з використанням фіксованого формату
... double f=25,c; c= 5./9*(f-32); cout<<setiosflags(ios::fixed); cout<<setw(20)<<"tFahr"<<setw(15)<<"tCels"<<endl; cout<<setw(20)<<tFahr<<setw(15)<<tCels<<endl; ... |
Результат F C 25.000000 -3.888889 |
Флаг scientific.
0 |
1 |
|||||
fixed |
scientific |
Результат:
F C
2.500000e+001 -3.888889e+000
За умовчанням - вирівнювання по правому краю.
Прапори:
left - вирівнювання ліворуч;
right - вирівнювання справа.
Значення прапорів за замовчанням |
|
0 |
0 |
0 |
1 |
|
fixed |
scientific |
left |
right |
Приклад. Переведення температури в градусах за Фаренгейтом в градуси Цельсія з використанням фіксованого формату і вирівнювання значень ліворуч.
#include <windows.h> #include <iostream> #include <iomanip> using namespace std; void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); double tFahr=25; double tCels; const int lf=20, lc=15; tCels= 5./9*(tFahr-32); cout<<setiosflags(ios::fixed); cout<<setiosflags(ios::left); cout<<setw(lf)<<"tFahr"<<setw(lc)<<"tCels"<<endl; cout<<setw(lf)<<tFahr<<setw(lc)<<tCels<<endl; system("pause"); } |
Результат tFahr tCels 25.000000 -3.888889 |
Необхідно звернути увагу.
При одночасній установці прапорів left і right програма може поводитися непередбачувано.
|
1 |
1 |
|
left |
right |
Тому один з прапорів має бути скинутий за допомогою маніпулятора скидання прапора resetiosflags/
cout<<resetiosflags(ios::left);
|
0 |
1 |
|
left |
right |
Прапор showpoint.
|
0 |
0 |
1 |
showpoint |
left |
right |
Приклад. Переведення температури в градусах за Фаренгейтом в градуси Цельсія без установки прапора фіксованого формату.
void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); double tFahr=25; double tCels; const int lf=15, lc=15, l_all=lf+lc; tCels= 5./9*(tFahr-32); cout<<setw(lf)<<tFahr<<setw(lc)<<tCels<<endl; system("pause"); } |
Результат 25 -3.88889 |
С установкой флага showpoint. cout<<setiosflags(ios::showpoint); |
Результат 25.0000 -3.88889 |
Задане визначення залишається в силі до появи іншого маніпулятора setprecision.
Для коректної роботи маніпулятора, необхідно, щоб прапор fixed був встановлений.
Приклад. Переведення температури в градусах за Фаренгейтом в градуси Цельсія з використанням фіксованого формату. Кількість знаків після коми дорівнює 2.
... cout<<setiosflags(ios::fixed); cout<<setprecision(2); cout<<setw(20)<<"tFahr"<<setw(15)<<"tCels"<<endl; cout<<setw(20)<<tFahr<<setw(15)<<tCels<<endl; ... |
Результат F C 25.00 -3.89 |
Символ - заповнювач - це символ, яким заповнюються незаполненнные позиції при використанні маніпулятора setw. За умовчанням - це пропуск.
Приклад. Переведення температури в градусах за Фаренгейтом в градуси Цельсія .
Рекомендацій вид екрану .
tFahr tCels
------------------------------
25.00 -3.89
------------------------------
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
double tFahr=25;
double tCels;
const int lf=15, lc=15, l_all=lf+lc;
tCels= 5./9*(tFahr-32);
cout<<setiosflags(ios::fixed);
cout<<setprecision(2);
cout<<endl<<setw(lf)<<"tFahr"<<setw(lc)<<"tCels"<<endl;
cout<<setfill('-')<<setw(l_all)<<'-'<<endl;
cout<<setfill(' '); //восстановление символа-заполнителя
cout<<setw(lf)<<tFahr<<setw(lc)<<tCels<<endl;
cout<<setfill('-')<<setw(l_all)<<'-'<<endl;
system("pause");
}
Створення консольного застосування
Консоль - це інтерфейс, використовуваний програмою, що працює в текстовому режимі. Програма має вхідний і вихідний буфери. Вхідний буфер пов'язаний з клавіатурою, вихідний з екраном. Кожна програма, що працює в текстовому режимі, взаємодіє з Windows через консоль.
Для консолі Windows автоматично створює вікно, яке має практично ті ж властивості, що і звичайне вікно Windows. Відповідно консольне застосування - це застосування, що працює в текстовому режимі і не створює власних вікон.
Створення нового проекту
Для створення нового проекту виберіть New. з меню File. Ця команда відкриває вікно діалогу New. Тут ви повинні виконати наступне:
Project types |
Visual C++. |
Templates (шаблони) |
оскільки вимагається створити консольне застосування, слід вибрати опцію Win32 Console Application. |
Location (місце розташування) |
Інформація про розміщення нової робочої області проекту вводиться в це поле . Тут вкажіть особисту папку. Це можна зробити, скориставшись розташованою справа кнопкою Browse. (перегляд). |
Project Name ((ім'я проекту), |
Задайте ім'я нового проекту, наприклад, First. Одночасно з введенням імені проекту, це ж ім'я автоматично додається як підкаталог в полі Location. |
Після виконання описаних дій натисніть кнопку OK, внаслідок чого на екрані з'явиться інформаційне вікно майстра створення консольного застосування.
Натисніть Application Setting. Інформація у вікні оновитися.
Майстер пропонує декілька варіантів створення заготівель застосування.
Зупинимося на "найважчому" варіанті - вибір перемикача An empty project (порожній проект). При цьому не створюються ніяких додаткових файлів - тільки файл проекту. Надалі в нього треба буде додати файли, що містять текст програми.
Отже, ми підготували місце для розміщення нашої програми.
Тепер додамо в проект чистий файл. У нім набиратимемо текст нашої програми. Для цього необхідно виконати наступні дії:
Відкривається вікно вибору файлів. Знову у вас величезний вибір. Зараз необхідно вибрати значок C++ File (файл, що містить програму на мові С).
У текстовому полі Name (ім'я файлу) введіть ім'я файлу, наприклад Lab_02.
Натисніть кнопку Open.
Деякі моменти, на які необхідно звернути увагу.
А на экран выводиться: µЄЁю
Це легко пояснити тим, що в Windows, наприклад, буква про - 238, а в DOS цьому коду відповідає буква ю. Коду ж латиниці співпадають в обох ОС.
Кожне завдання необхідно вирішити відповідно до вивчених методів обробки даних і перетворення типів даних в мові С++.
Слід реалізувати кожне завдання відповідно до приведених етапів:
Звіт по лабораторній роботі повинен відповідати наступній структурі.
Контрольні питання
Приклад розвязання задачі.
Розробити програму, яка виводить на екран таблицю, що містить дані, введені з клавіатури.
Буддійські монастирі Японії періоду Нара
Школа |
Кількість ченців |
Площа землі (га) |
Т |
220 |
368.8 |
Я |
50 |
54.7 |
Д |
10 |
12.2 |
Примітка: Т - Тендай; З - Сингон; Д Дзедзіцу
У кожній області діяльності створюються власні бази даних, наприклад, в медицині бази даних по диспансерному обліку, по пільгових ліках.
Розроблювана програма є базою даних для зберігання і обробки даних про Буддійські монастирі Японії періоду Нара.
Буддизм в Японії - найпоширеніша релігія, що охоплює більшість населення. За усю півторатисячолітню історію в Японії були сформувалися численні буддійські школи і течії, сконцентровані на абсолютно різних аспектах вчення, - одні на філософії, інші - на культурі, треті - на медитації, четверті - на ритуалі, п'яті, - на читанні мантр. Різні школи популярні серед різних верств населення - учених, ченців, самураїв, простолюддя. Школи активно взаємодіють.
Для кожної змінної підбирається такий тип, який би забезпечував представлення в пам'яті її значення з достатнім діапазоном і достатньою точністю.
Школа, Кількість ченців, Площа земель.
. . .
При відладці програми відстежуються значень змінних - тих, які вводяться.
При роботі програми на екран було відображено наступне:
При виконанні лабораторної роботи вивчені питання:
Розробити програму, яка виводить на екран таблицю, що містить дані, введені з клавіатури.
Вариант 1
Приблизительное количество звезд разных спектральных классов в Галактике
Спектральный класс |
Приблизительная масса (отн.Солнца) |
Часть % |
Численность |
O |
32.00 |
0.00002 |
55000 |
F |
1.25 |
2.90000 |
12000000000 |
M |
0.20 |
73.2000 |
293000000000 |
Примечание: не показаны данные для классов: B, A, G, K
Вариант 2
Сельскохозяйственные предприятия
Название |
Вид собственности |
Площадь земли (кв.м) |
Кол. работников |
З |
Д |
3000.45 |
120 |
Р |
К |
174896.96 |
27 |
П |
Ч |
56026.55 |
6 |
Примечание:
Название: З - Заря, Р -Росинка, П - Петренко.
Вид собственности: Д - государственная, Ч - частная, К кооперативная.
Вариант 3
Коэффициенты теплопроводимости материаллов
Вещество |
Тип |
Влажность (%) |
Коэффициент |
А |
М |
100 |
209.300 |
С |
Т |
100 |
0.035 |
Г |
Д |
20 |
0.730 |
Примечание:
Вещество: А - Алюминий, С -Стекловата , Г -Глина.
Тип: М - металлы, Т - термоизоляционные материалы, Д - другие материалы
Вариант 4
Измерение скорости света
Методы измерения скорости света |
Исследователь |
Год |
Скорость света (м/с) |
1 |
О |
1676 |
2,22•108 |
2 |
Л |
1849 |
3,12•108 |
2 |
И |
1972 |
2.99792456•108 |
Примечание:
Методы: 1 - Астрономический , 2 Лабораторный.
Исследователь: О - Оле Ремер, Л - Луи Физо, И - Ивенсон
Вариант 5
Таблица элементарных частиц
Частица |
Масса (Мэв) |
Масса (me) |
Время жизни (с) |
М |
105.66 |
206 |
2.2·106 |
Т |
1782.00 |
3490 |
3.5·1012 |
О |
1675.00 |
3273 |
1·1010 |
Примечание:
Название частицы: М - Мюон, Т - Тау-лептон, О - Омега-гиперон.
Варіант 6
Ведомость спортивних состязаний
Код команды |
Количество балов |
Место в итоге |
С |
123.7 |
2 |
Ш |
79.8 |
3 |
Д |
134.8 |
1 |
Примечание: Д - "Динамо", С - "Спартак", Ш - "Шахтер"
Вариант 7
Ведомость общественного транспорта
Вид транспорта |
Код маршрута |
Протяженность маршрута (км) |
Время в дороге (мин) |
Т |
12 |
27.5 |
75 |
М |
17 |
13.6 |
57 |
А |
16 |
57.3 |
117 |
Примечание: Тр - трамвай, М маршрутное такси, А автобус
Вариант 8
Информация о некоторых планетах солнечной системы
Планета |
Расстояниеот Солнца (млн км) |
Расстояние от Солнца (а.е.) |
Период обращения (сут) |
Период вращения на экваторе (сут) |
М |
57.9 |
0.39 |
87.97 |
58 |
В |
108.2 |
0.72 |
227.7 |
243 |
З |
149.6 |
1.00 |
365.26 |
1 |
Примечание: М Меркурий, В Венера, З - Земля
Вариант 9
Прайс-лист
Тип товара |
Цена за 1 шт (грн) |
Минимальное количество в партии (штук) |
П |
4.75 |
4 |
Б |
13.90 |
10 |
К |
411.00 |
1 |
Примечание: П - папка, К Калькулятор, Б - бумага
Вариант 10
Скорость звука в жидкостях
Вещество |
Тип |
Температура (град.С) |
Скорость (м/сек) |
А |
Ч |
20 |
1656 |
Р |
Ч |
20 |
1451 |
К |
М |
29 |
1406 |
Примечание:
Вещество: А Анилин, Р Ртуть, Л- Кедровое;
Тип жидкости: Ч - чистое вещество, М масло.
PAGE 20
FILENAME \p C:\TEXNICUM_2012\CI_2012\Lesson_C_08_vvod_vyvod\Lab\C_Lab_02_vvod_vyvod_ukr.doc DATE \@ "M/d/yyyy" 10/13/2013
Обєкт джерело даних
Буфер вхідного потока даних
Объект приймач даних
Буфер вихідного потока даних
программа
программа
программа
клавиатура
>>
cin (вхідний потік)
программа
программа
программа
программа
программа
программа
дисплей
программа
cout (вихідний потік)
<<