Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Зворотний запис числа.
Спробуємо вирішити складну задачу. Дано тризначне число х = abc (a, b, з — його цифри). Потрібно одержати число, записане тими ж цифрами, але в зворотному порядку. Тобто, якщо дано число 128, то одержати треба 821. Перед нами встає задача перебування цифр числа — а, b і с.Вибудувати ці цифри в зворотному порядку легко — результат буде дорівнює х= 100з+ 10 b + а. Найпростіше знайти цифру одиниць з — вона буде дорівнює залишку від розподілу числа х на 10 (наприклад, якщо х = 128, те х mod 10 буде 8, що нам і потрібно). Отже, с: = х mod 10; Щоб знайти b, надійдемо в такий спосіб: спочатку знайдемо ab, рівне х, діленому нацело на 10 (для 128 це буде 12), а потім уже визначимо в — цифру одиниць числа, що вийшло: b: = х div 10 mod 10; Знайти а просто — це результат розподілу х нацело на 100: а: = х div 100; Тепер можна написати всю програму: Program naoborot; Var х, а, b, c: Integer; Begin Write('x==> '); ReadLn(x); с: = x mod 10; b: = x div 10 mod 10; a: = x div 100; Write(1OO * c + 10 * b + a); End. Перетворення типів У Паскале оператор присвоювання не завжди працює, навіть якщо він написаний синтаксично вірно. Коли ми робимо обчислення з відомими числами, результат відомий і проблем не виникає. З перемінними ж усі проходить не завжди так гладко, оскільки змінні типів Integer і Real зберігаються по-різному (займають різний обсяг пам'яті). Комп'ютер улаштований так, що виконувати дії він може тільки з однаковими об'єктами. Візьмемо наступну програму: Program wrong; Var а: Integer; b: Real; Begin b: = 2; a: = 2.9; {Тут утримується помилка! } End. Якщо набрати цю програму і спробувати її оттранслировать, одержимо повідомлення про помилку Type mismatch. Курсор при цьому вкаже на той рядок, у якого в коментарі сказано, що тут утримується помилка. У перекладі на російську мову повідомлення означає Порушення відповідності типів. Давайте розберемося в причинах появи даного повідомлення. У першому операторі перемінної речовинного типу привласнюється ціле число 2. Помилки тут ні, оскільки відбудеться так називане перетворення типу, при якому число 2 буде представлено у виді десяткового дробу 2.0 і записане в b. А навпаки не можна — у цілу перемінну а дробове число 2.9 не запишеться, і транслятор видасть помилку. Такі ситуації виникають дуже часто, і складніше Всього буває розібратися з випадком, коли використовується операція розподілу «/» (наприклад, що буде з результатом f / 2, де f — ціле число?). Існує кілька правил, два з яких уже були описані раніше (у перемінну речовинного типу можна записати ціле число, а навпаки — не можна). Інші правила, що стосуються виконання арифметичних операцій, представлені в табл. 1.2. Таблиця 1.2. Правила виконання арифметичних операцій мови Паскаль
Що робити, якщо треба одержати в результаті ціле число, нехай навіть округлене? У цьому випадку можна скористатися однієї з двох убудованих функцій Паскаля: Trunc(a) або Round (а). Вбудовані функції поки можна вважати звичайними операторами мови Паскаль. Тут Тrunс відкидає дробову частину аргументу, a Round округляє його за правилами математики до найближчого цілого. Приклади: Trunc(2.73) = 2; Trunc(-3.4) = -3; Trunc(1.9) = 1; Round(2.5) = 3; Round(-3.7)=-4.9. Оптимізація програми. І ще одне зауваження. Основний результат роботи програміста — правильно працююча програма. Це саме головне. Однак іноді має значення і швидкість виконання програми, у тому числі швидкість проведення математичних обчислень. У цьому випадку треба писати програми так, щоб бажаний результат досягався за можливо менше число кроків (така програма називається оптимізованою ). Розглянемо ще один приклад. Нехай потрібно обчислити значення вираз x5+7x4-18хз+9x2-x+8. Програма для обчислення цього вираз пишеться дуже просто — у двох рядків. У першій уводимо значення х, а в другий виводимо результат:
|