Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Тема 9. Алгоритми роботи з цілими числами
Тип ціле число є основним для будь-якої алгоритмічної мови. Зв'язано це з тим, що вміст комірки пам'яті або регістра процесора можна розглядати як ціле число. Адреси елементів пам'яті також являють собою цілі числа, з їхньою допомогою записуються машинні команди й т.д. Символи представляються в комп'ютері цілими числами - їхніми кодами в деякому кодуванні. Зображення також задаються масивами цілих чисел: для кожної крапки кольорового зображення зберігаються інтенсивності її червоної, зеленої й синьої складової (у більшості випадків - у діапазоні від 0 до 255). Як говорять математики, цілі числа дані, а все інше сконструювала з них людина. Загальноприйнятий у програмуванні термін ціле число або ціла змінна, строго говорячи, не цілком коректний. Цілих чисел нескінченно багато, десятковий або двійковий запис цілого числа може бути як завгодно довгий й не міститися в області пам'яті, відведеної під одну змінну. Ціла змінна в комп'ютері може зберігати лише обмежену безліч цілих чисел у деякому інтервалі. У сучасних комп'ютерах під цілу змінну виділяється 8 байт, тобто 64 двійкового розряду. Вона може зберігати числа від нуля до 2 в 64-й ступені мінус 1. Таким чином, максимальне ціле число, що може зберігатися в цілій змінній, дорівнює 264 - 1 = 18, 446, 744, 073, 709, 551, 615
Додавання й множення значень цілих змінних виконується в такий спосіб: спочатку виконується арифметична операція, потім старші розряди результату, що вийшли за кордон шестидесяти двох двійкових розрядів (тобто вісьми байтів), відкидаються. Певні в такий спосіб операції задовольняють традиційним законам комутативності, асоціативності і дистрибутивності: В елементарній шкільній математиці результат операції залишку від ділення традиційно вважається невід’ємним. Операція знаходження залишку буде позначатися знаком відсотка %, як у мові С#. Тоді, приміром, 3%5 = 3, 17%5 = 2, (-3)%5 = 2, (-17)%5 = 3.Звідси видно, що в шкільній математиці не виконується рівність (-a)%b = -(a%b),Операції зміни знака й знаходження залишку не перестановочні (математичною мовою, не комутирують один з одним). У комп'ютері операція знаходження залишку від ділення для від’ємних чисел визначається інакше, її результат може бути від’ємним. У наведених прикладах результати будуть наступними: 3%5 = 3, 17%5 = 2, (-3)%5 = -3, (-17)%5 = -2.При діленні на позитивне число знак залишку збігається зі знаком діленого. При такому визначенні тотожність (-a)%b = a%(-b) = -(a%b) справедлива. Це дозволяє в багатьох алгоритмах не стежити за знаками (так само, як у тригонометрії формули, виведені для кутів, менших 90 градусів, автоматично виявляються справедливими для будь-яких кутів).У двійковому поданні старший розряд у від’ємних цілих чисел дорівнює одиниці, у додатних - нулю. Двійкові розряди подання цілого числа в програмуванні нумерують від 0 до 31 справа наліво. Старший розряд має номер 31 і часто називається знаковим розрядом. Таким чином, знаковий розряд дорівнює одиниці у всіх від’ємних чисел і нулю в додатних. Двійкове подання максимального по абсолютній величині від’ємних чисел k складається з одиниці й тридцяти одного нуля: -214748364810 = 100000000000000000000000000000002Двійкове подання числа -1 складається із тридцяти двох одиниць: -110 = 111111111111111111111111111111112Двійкове подання максимального додатного числа складається з нуля в знаковому розряді й тридцяти однієї одиниці: 214748364710 = 011111111111111111111111111111112Слід зазначити, що в програмуванні часто використовують також короткі цілі числа, двійковий запис яких займає вісім розрядів, тобто один байт, або шістнадцять розрядів, тобто два байти. Робота з такими короткими цілими числами підтримується на апаратному рівні. У мові Сі однобайтовим цілим числам відповідає тип Sbyte, двухбайтовим - тип short. Однобайтові цілі числа - це елементи кільця відрахувань Zm, де m = 28 = 256. У випадку двухбайтових цілих чисел (тип short) m = 216 = 65536. Розглянемо наступні алгоритми:
Лістинг 9.1. Дано ціле число, знайти суму і кількість чисел
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine(" Введите число: "); int s = int.Parse(Console.ReadLine()); int i = 0, sum = 0;; while (s > 0) { int d = s % 10; sum = sum + d; s = s / 10; i++;
} Console.WriteLine(" Сумма чисел = " + sum+ " kol" +i);
} } }
Лістинг 9.2. Знайти цифру, яка находиться на третьому місці введеного числа.
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Console.WriteLine(" Введите число: "); int s = int.Parse(Console.ReadLine()); int i = 0, s1 = s;
while (s > 0) { s = s / 10; i++; } s = s1; int l = 0; while (s > 0) { int d = s % 10; s = s / 10; l++; if (l==i-2) Console.WriteLine(" число = " + d); } } } } Спробуйте проаналізувати представлені алгоритми з представленням цілого числа типом string. Лістинг 9.3. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _25{ class Program { static void Main(string[] args) { Console.WriteLine(" Введите число: "); string s = Console.ReadLine(); int i = 0, sum = 0;; string d; for (i = 0; i < s.Length; i++) { d = null; d += s[i]; sum += Int32.Parse(d); } Console.WriteLine(" Сумма чисел = " +sum); } }} Лістинг 9.4.using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _26{ class Program { static void Main(string[] args) { Console.WriteLine(" Введіть число: "); string s = Console.ReadLine(); Console.WriteLine(" На третьому місці цифра " + s[2]); } }} Проаналізуйте наведені задачі, перевірте їх працездатність в середовищі програмування.
|