Народна Освіта » Інформатика » § 34. Перетворення величин одного типу на інший

НАРОДНА ОСВІТА

§ 34. Перетворення величин одного типу на інший

Вам уже доводилося перетворювати рядкові дані на числові, числові — на рядкові тощо. Розглянемо функції мови Object Pascal для перетворення величин різних типів.

Функції перетворення чисел на рядки і рядків на числа

Ці функції — StrToInt, StrToFloat, IntToStr і FloatToStr — ви вже використовували. Розглянемо ще декілька прикладів.

Перетворити ціле число на рядок цифр: var a: Integer; s: String; begin

a := 12345;

s := IntToStr(a); // s = '12345' end;

Перетворити рядок цифр на ціле число: var a: Integer; s: String; begin

s := '12345';

a := StrToI nt(s); // a = 12345 end;

 

Перетворити рядок символів на дійсне число (рис. 34.1): var a: Real; begin

a := StrToFloat('12,45'); a := 2 * a;

Edit1.Text := FloatToStr(a); end;

При введенні десяткових дробів слід пам’ятати, що вибір роздільника залежить від налаштування системи (див. с. 156).

У разі неправильного вибору роздільника програма припиняє роботу і виводиться вікно з повідомленням про помилку (рис. 34.2).

 

Виведення дробових чисел за форматом

Для виведення дробових чисел із заданою кількістю знаків у дробовій частині використовується функція

FormatFloat(const Format: String; Value: Extended): String;

Ця функція перетворює значення дійсного числа (Value) на рядок, поданий за шаблоном (параметр Format). Шаблон може містити такі символи форматування:

 

Місце розташування десяткового роздільника

0

Виведення цифри десяткового дробу у відповідну позицію. Якщо цифри в позиції немає — виводиться ''0''

#

Виведення цифри десяткового дробу у відповідну позицію. Якщо цифри в позиції немає — не записується нічого

 

Вивести дійсне число з двома знаками після коми (рис. 34.3): var S: String; begin

S := FormatFloat('#.##', Pi); // S := '3.14'

MessageDlg('Pi :=' + S, mtInformation, [mbOk], 0); end;

Неявне перетворення типів даних

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

var d: Double; a: Integer; begin

a := 100;

d := a; // правильно a := d; // помилка end;

При наданні змінній певного типу значення, яке не може бути автоматично перетворено відповідно до типу змінної, виникає помилка компіляції:

Incompatible types:... (Несумісні типи:...).

Знайти помилку та пояснити приклад. var a: Integer; begin

a := Sqrt(100); // Несумісні типи end;

Функція Sqrt(x) повертає результат дійсного типу.

Під час виконання програми буде отримано повідомлення про помилку Incompatible types: 'Integer' and 'Extended'.

функції перетворення дат і часу

При створенні проектів вам можуть стати в пригоді такі функції:

Функція

Тип результату

Призначення

Date

TDateTime

Повертає поточну дату

Time

TDateTime

Повертає поточний час

DayOfWeek(Date:

Integer

Повертає поточний номер дня тижня:

TDateTime)

від 1 (неділя) до 7 (субота)

Функції перетворення дати і часу з формату TDateTime на рядковий формат (у всіх функцій тип результату — String):

Функція

Призначення

DateTimeToStr(DateTime: TDateTime)

Перетворює дату і час DateTime на рядок

DateToStr(Date: TDateTime)

Перетворює дату Date на рядок

TimeToStr(Time: TDateTime)

Перетворює час Time на рядок

Для задавання, введення і виведення значень типу DateTime застосовують такий формат: hh:mm:ss — для часу; dd.mm.yyyy — для дати. Присвоїти значення типу DateTime: var s: String; t, d: TDateTime; begin

s := '8:30:15'; t := StrToDate(s); s := '19.02.2016'; d := StrToDate(s); end;

Вивести значення поточної дати і часу (рис. 34.4): var t, d: TDateTime; begin

 

t := Time; d := Date;

ShowMessage ('поточна дата =' + DateToStr(d));

ShowMessage ('поточний час =' + TimeToStr(t)); end;

Питання для самоперевірки

1. Як перетворити значення дійсного типу на рядок символів?

2. Як перетворити значення цілого типу на рядок символів?

3. Як перетворити рядок символів на значення числового типу?

4. Як вивести десятковий дріб із заданою кількістю знаків у дробовій частині?

5. В яких випадках відбувається неявне перетворення типів даних?

6. Які функції призначені для роботи з датою та часом?

Вправа 34

Скласти програму «Годинник».

1) Створіть новий проект. Змініть заголовок форми на «Годинник». Розмістіть на формі два компоненти Edit для виведення поточних значень часу і номера дня тижня. Поряд із полем Edit2 створіть напис (LabelI) «День тижня:».

2) Додайте на форму компонент Timer (див. рисунок).

3) Створіть процедуру обробки події OnTimer для об’єкта Timer. У програмному коді запишіть оператори виведення у поля Editl і Edit2 поточних часу і дня тижня відповідно.

 

procedure TForml.Timer1Timer(Sender: TObject); var t: TDateTime; day: String; begin

t := Time;

Editl .Text := TimeToStr(t); day := IntToStr(DayOfWeek(Date));

Edit2.Text := day; end;

4) Додайте на форму кнопку Скільки чекати на день народження? та текстові поля Edit3, Edit4 згідно з рисунком. Поряд із полем Edit3 створіть напис (Label2) «Дата наступного дня народження:».

5) Створіть процедуру обробки події onclick для кнопки. У програмному коді створеної процедури запишіть оператори для визначення кількості днів між датою наступного дня народження і поточною датою:

var day: Double; S: String; begin

S := Edit3.Text; // введення дати наступного дня народження day := Date — StrToDate(S); // різниця між двома датами Edit4.Text := FloatToStr(day); { перетворення дійсного числа day на рядок символів } end;

6) Перевірте роботу програми. Чому в полі виводиться від’ємне число? Виправте помилку. Збережіть проект у папці Вправа 34.

Комп’ютерне тестування

Виконайте тестове завдання 34 з автоматичною перевіркою на сайті interactive.ranok.com.ua.

Практична робота 14

Налагодження готової програми

Завдання: створити проект для розв’язання задачі.

Відомі назва планети, радіус (км) її орбіти, швидкість руху (км/год) по орбіті. обчислити тривалість року на планеті (період обертання планети).

Налагодити програмний код. Перевірити роботу програми для заданих тестових даних:

Назва планети

Радіус орбіти (км)

Швидкість руху (км/год)

Період обертання (доби)

Земля

149600000

107 250

365,18

Венера

108 200 000

126 110

 

Нептун

4 496 600 000

19 550

 

Марс

227900000

86 870

 

Обладнання: ПК із встановленим середовищем програмування Lazarus. хід роботи

Під час роботи з комп’ютером дотримуйтеся правил безпеки.

i. Розміщення елементів керування на формі

1. Створіть новий проект. Розробіть інтерфейс програми (рис. 1).

Змініть для об’єктів Label значення властивості WordWrap на True.

ii. Налагодження програмного коду

2. Створіть процедуру обробки події onclick для кнопки Обчислити.

 

У програмному коді створеної процедури запишіть оператори: var Nazva: String; R, Period: Real;

Const Pi = 3.1415926; begin

Nazva := Edit1.Text; R = Edit2.Text;

V = Edit3.Text;

Period := 2 * Pi * R / V * 24;

Edit4.Text := FloatToStr(Period);

ShowMessage('PiK на планеті ' + 'Nazva'

+ ' триває ' + FormatFloat('#0.00',Period) +' діб'); end;

У програмному коді допущено помилки, можливо, ви помітите їх під час набору тексту програми і виправите, якщо ні — вам допоможе виправити помилки компілятор.

 

iii. тестування програми

3. Після виправлення синтаксичних по

милок перевірте роботу програми для даних планети Земля (рис. 2). Чи збігається відповідь із вказаною в таблиці? Якщо ні — проаналізуйте вираз, який обчислює значення Period:

довжина орбіти

період обертання = ,

швидкість руху · 24

та виправте помилку.

4. Виконайте обчислення для Венери,

Нептуна, Марса. Доповніть таблицю.

5. Які зміни потрібно внести, щоб результат обчислень виводився

в земних роках?

6. Збережіть проект у папці Практична робота 14. Завершіть робо

ту за комп’ютером.

Зробіть висновок: як виправляти синтаксичні та логічні помилки у програмному коді й аналізувати результат роботи програми.

 

Це матеріал з підручника Інформатика 8 клас Бондаренко

 

Категорія: Інформатика

Автор: admin от 7-10-2016, 22:40, Переглядів: 3271