Задача 14.14. Задано два числа: 113 і 47. Виконати операції: not 113, 113 and 47, 113 or 27, 113 xor 27. Результат подати у десятковому вигляді.

Розв’язання: Спочатку перетворюємо задані числа у двійкову форму запису: 11310 = 11100012; 4710 = 1011112, після цього виконуємо відповідні операції. Так само як і при виконанні арифметичних дій так і при виконанні логічних операцій, якщо у двійковому запису не вистачає відповідних розрядів, то спереду можна дописувати необхідну кількість нулів.

Отже, операція not:

not 1110001 = 0001110 11102=1410.

Але давайте перевіримо результат при допомозі нашого електронного партнера, для цього просто дамо команду: a := 113; write (not a);

Запускаємо і ... що це? На екрані чомусь число –114. Звідки воно взялось? Може ми забули дописати нулі? Пробуємо:

not 01110001 = 10001110 100011102=14210.

Знову не те! Що ж ще може бути? Так, а якого типу у нас змінна а? Integer? Що ж поміняємо на byte! Знову запускаємо на виконання... отримали 142! Це те, що ми очікували, але причому тут дві різні відповіді! Не здогадались? А ми ж попереджали, що можуть бути результати, які ви не очікуєте! Гаразд, внесемо ясність. Справа в тому, що тип byte може приймати значення від 0 до 255 (згадаєте діапазони значень змінних, приведені на початку книги!). Якщо від 255 відняти 113, то ми і отримаємо число 142. Спробуйте тепер самостійно дати пояснення для типу integer та перевірте себе на інших типах цілочисельних змінних. Крім того, є ще одне пояснення способу отримання вірного результату при виконанні операції not, але бажано, щоб ви самі до нього додумались. Якщо це вам не вдалось вам необхідно ще раз ретельно розібратись з раніше вивченим матеріалом.

При виконанні інших дій ускладнень не виникає:

1110001 1110001 1110001

and or xor

010111101011110101111

01000012=3310 11111112=12710 10111102=9410

Задачу розв’язано.

Операція xor має одну цікаву властивість, а саме: якщо a xor b = c, то c xor b =a. Саме цю властивість операції xor в застосуванні до числових змінних часто використовують при складанні різноманітних алгоритмів по шифруванню інформації. Наведемо приклад. Нехай нам потрібно захистити інформацію від несанкціонованого доступу. Не будемо придумувати “наворочений” алгоритм, а просто зашифруємо слово при допомозі операції xor над кожним символом інформації. Припустимо, що інформацією є слово “Олег”. За “код” приймемо довільне число в межах від 0 до 255, наприклад, число 55 (просто ми мріємо вчитись на одні п’ятірки!). Слово “Олег” у комп’ютерному представленні являє собою послідовність чисел: 142 171 165 163. Провівши над кожним з них операцію xor 55 отримаємо нову послідовність: 185 156 146 148, яка в символьному представленні буде мати вигляд “¦ЬТФ”. А якщо ми пам’ятаємо код, то повторне застосування операції xor 55 до вже зашифрованого слова знову дасть слово “Олег”. Все, що нам потрібно – це пам’ятати код! Погодьтесь, що практично здогадатись про те, що отримане слово колись було “Олегом” дуже важко. При справжньому шифруванні використовуються досить складні алгоритми з декількома кодами, які в свою чергу можуть модифікуватись в процесі шифрування і тоді процес розшифровки стає практично не можливим, або, точніше кажучи, – економічно не вигідним.

Програму, що реалізує описаний спосіб шифрування ми напишемо при розгляді питання про роботу з літерними величинами.

 

Вправи та завдання

 

15.15. Місто А знаходиться в х милях від Нью-Йорку. Напишіть програму, яка обчислює цю відстань в кілометрах.

16.16. Петрик запропонував своє тлумачення «щасливого» квитка. Для нього він «щасливий» тільки тоді, коли сума його цифр ділиться на 5. Перевірити, чи куплений Петриком квиток є щасливим.

17.17. Складіть програму розв'язування рівняння виду ax+b=0.

18.18. Визначити площу прямокутника, якщо відомо, що одна сторона більша за другу на х см, а периметр дорівнює р см. Вказівка: після спрощення формула для визначення площі прийме вигляд S=(p2-x2)/16.

19.19. Знайти суму перших n членів арифметичної прогресії {An}, якщо відомі А1 і D.

20.20. Хлопчик, що торгує на базарі газетами, заробляє а грн. від продажу перших 100 газет. На кожній з інших проданих газет він заробляє по х коп. Напишіть програму, яка визначає заробіток за день хлопчика, якщо він продасть у газет (у>100).

21.21. Реактивний літак перевозить групу футбольних болільників на чемпіонат світу з Києва до Парижу. Три чверті пасажирів мають білет другого класу вартістю х доларів кожен. Всі інші пасажири мають квитки першого класу, які вдвічі дорожчі від білетів другого класі. Напишіть програму, яка виводить суму (в гривнях), що отримує авіакомпанія від продажу квитків на цей рейс.

22.22. На протязі місяця продавець доставляв додому 4 л молока в день. В березні молоко коштувало х коп. за літр. З першого квітня ціна підвищилась до (х+а) коп. за літр. Скільки потрібно заплатити продавцю за все доставлене молоко в кінці квітня? Кількість молока, що купується щоденно, залишилась тією ж.

23.23. Хлопчик може бігати в три рази швидше, ніж ходити. Швидкість його ходьби становить 4 км/год. Він прийняв участь в марафонському забігу, але зійшов з дистанції, пробігши тільки х км. Який час він затратив на подолання цієї відстані?

24.24. Робітник заробляє х грн. за кожні 38 годин своєї роботи. Йому платять в 1,5 рази більше за кожну годину понад 38 годин. Яку суму він отримає, якщо пропрацює а годин (а>38)?

25.25. Людині потрібно з'їздити з Лондону в розміщений в 390 милях Едінбург. Вона може їхати на автомобілі марки “Роллс-Ройс” або на автомобілі марки “Форд Ескорт”. “Роллс-Ройс” витрачає 1 галон пального на кожні 15 миль шляху. “Форд Ескорт” витрачає 1 галон пального на кожні 36 миль шляху. Скільки буде коштувати поїздка до Единбургу на “Роллс-Ройсі”, якщо вартість 1 галону бензину становить х фунтів? Скільки грошей він зекономить, якщо замість цього поїде на автомобілі марки “Форд Ескорт”?

26.26. Магазин продає b автомобілів по ціні 5627 грн. за кожен. Знайти загальну виручку від продажу автомобілів.

27.27. Щоденно на молочній фермі надоюють по 1842 л молока. Знайдіть кількість молока, отриманого за довільний місяць (вводиться число днів в місяці).

28.28. Заробіток працівників на підприємстві склав х грн. Його потрібно поділити порівну між а працівниками. Виведіть заробіток кожного працівника.

29.29. В магазині продається тканина для костюму. Її ціна b грн. за кв. метр. Напишіть програму, яка підраховує і виводить на екран вартість куска цієї тканини довжиною х м і шириною 80 см.

30.30. Людина бажає обклеїти шпалерами довгу стінку в своїй квартирі. Довжина стінки а м, а висота b м. Рулон шпалер має довжину 12 м і ширину 80 см. Скільки будуть коштувати шпалери для всієї стінки, якщо ціна одного рулону k грн.?

31.31. Обчисліть заробітну плату працівника при погодинній системі оплати, якщо відомі тарифна ставка за 1 годину і кількість відпрацьованих годин за місяць.

32.32. Складіть програму знаходження площі трикутника за його основою та висотою.

33.33. Складіть програму знаходження площі ромба за його стороною і гострим кутом (кут попередньо переведіть в радіани). S=a2Sinf, де a – сторона, f – кут.

34.34. Складіть програму знаходження суми всіх натуральних чисел від 1 до n (використайте формулу суми членів арифметичної прогресії). , де а1 – перший член послідовності, а d – різниця.

35.35. Знайдіть площу круга, якщо відомо радіус кола.

36.36. В прямокутному трикутнику відомі катет і гіпотенуза. Знайдіть інший катет.

37.37. В арифметичній прогресії відомі 1-й член послідовності і різниця. Знайдіть 30-й член послідовності і суму перших 40 членів.

38.38. Знайдіть координати кінців відрізку, заданого координатами його кінців.

39.39. За двома сторонами і кутом між ними в трикутнику АВС знайдіть два інших кути і третю сторону. , де а, b – відомі сторони, аf – кут між ними.

40.40. Складіть програму обчислення рівнодійної сил F, що діють на тіло масою m, яке рухається з прискоренням а. F = ma.

41.41. Складіть програму обчислення швидкості тіла в момент часу t при рівноприскореному русі. Відомі початкова швидкість V0 і прискорення а, при умові, що тіло рухається прямолінійно. Vt=V0+at.

42.42. Складіть програму обчислення опору R в колі електричного струму за даними значеннями струму І та напруги U. .

43.43. Складіть програму визначення висоти h, на підніметься тіло, що має масу m, кинуте вертикально вгору з початковою швидкістю V0. .

44.44. Складіть програму обчислення об'єму прямокутного паралелепіпеда за його сторонами.

45.45. Складіть програму для обчислення значення виразу: . Відомо, що z № 0 i y № 0.

46.46. Складіть програму запиту даних та друку результатів для визначення середньої економії пального та мастил в автобусному парку за місяць, якщо відома середня економія за день по бензину, дизельному паливу та мастилам.

47.47. Для відливки циліндричної деталі з чавуну необхідно визначити її об'єм. Складіть програму для розв'язання цієї задачі.

48.48. Четверо друзів повечеряли в ресторані. Офіціант подав їм рахунок на х грн. кожному. Друзі вирішили залишити офіціанту чайові в розмірі 15% від рахунку. Складіть програму, яка виводить на екран суму чайових, яку отримав офіціант.

49.49. Кожен тиждень Юрко отримує гроші на дрібні витрати. З них він витрачає х коп. на солодощі, що становить одну чверть того, що він отримує щоденно. Юрко вирішив зберігати одну третину того, що залишається після придбання солодощів. Складіть програму, що яка підраховує суму, накопичену Юрком за рік.