Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Зворотний запис числа.






Спробуємо вирішити складну задачу. Дано тризначне число х = 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. Правила виконання арифметичних

операцій мови Паскаль

Операція   Тип оператора Тип результату   Приклад   Результат  
перший другий
+, *, -   Inte­ger   Inte­ger   Inte­ger   2+27    
+, *, -   Inte­ger   Real   Real   2 -3.5   -1.5  
+, *, -   Real   Inte­ger   Real   3.0 - 27   -24.0  
+, *. -   Real   Real   Real   2.5 * 2.5   6.25  
/   будь-який   будь-який   Real   8/2   4.0  

 

Що робити, якщо треба одержати в результаті ціле число, нехай навіть округлене? У цьому випадку можна скористатися однієї з двох убудованих функцій Паскаля: 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.

Програма для обчислення цього вираз пишеться дуже просто — у двох рядків. У першій уводимо значення х, а в другий виводимо результат:


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал