3572

Алгоритми роботи з цілими числами

Лекция

Информатика, кибернетика и программирование

Тип ціле число є основним для будь-якої алгоритмічної мови. Зв'язано це з тим, що вміст комірки пам'яті або регістра процесора можна розглядати як ціле число. Адреси елементів пам'яті також являють собою цілі числа, з їхньою допомогою записуються машинні команди й т.д...

Украинкский

2012-11-03

54 KB

3 чел.

Алгоритми роботи з цілими числами

Тип ціле число є основним для будь-якої алгоритмічної мови. Зв'язано це з тим, що вміст комірки пам'яті або регістра процесора можна розглядати як ціле число. Адреси елементів пам'яті також являють собою цілі числа, з їхньою допомогою записуються машинні команди й т.д. Символи представляються в комп'ютері цілими числами - їхніми кодами в деякому кодуванні. Зображення також задаються масивами цілих чисел: для кожної крапки кольорового зображення зберігаються інтенсивності її червоної, зеленої й синьої складової (у більшості випадків - у діапазоні від 0 до 255). Як говорять математики, цілі числа дані, а все інше сконструювала з них людина.

Загальноприйнятий у програмуванні термін ціле число або ціла змінна, строго говорячи, не цілком коректний. Цілих чисел нескінченно багато, десятковий або двійковий запис цілого числа може бути як завгодно довгий й не міститися в області пам'яті, відведеної під одну змінну. Ціла змінна в комп'ютері може зберігати лише обмежену безліч цілих чисел у деякому інтервалі. У сучасних комп'ютерах під цілу змінну виділяється 8 байт, тобто 64 двійкового розряду. Вона може зберігати числа від нуля до 2 в 64-й ступені мінус 1. Таким чином, максимальне ціле число, що може зберігатися в цілій змінній, дорівнює

264 - 1 = 18,446,744,073,709,551,615

Арифметичні цілочисельні типи

Ім'я типу

Системний тип

Діапазон

Розмір

Sbyte

System.SByte

- 128... …127

Знакове, 8 Біт

Byte

System.Byte

0... …255

Беззнакове, 8 Біт

Short

System.Short

- 32768 …32767

Знакове, 16 Біт

Ushort

System.UShort

0... …65535

Беззнакове, 16 Біт

Int

System.Int32

- 2,147,483,648…2,147,483,647

Знакове, 32 Біт

Uint

System.UInt32

0...4…4,294,967,295)

Беззнакове, 32 Біт

Long

System.Int64

- 9,223,372,036,854,775,808 …

9,223,372,036,854,775,807

Знакове, 64 Біт

Ulong

System.UInt64

0...18…18,446,744,073,709,551,615

Беззнакове, 64 Біт

Додавання й множення значень цілих змінних виконується в такий спосіб: спочатку виконується арифметична операція, потім старші розряди результату, що вийшли за кордон шестидесяти двох двійкових розрядів (тобто вісьми байтів), відкидаються. Певні в такий спосіб операції задовольняють традиційним законам комутативності, асоціативності і дистрибутивності:

a+b = b+a, ab = ba

(a+b) + c = a+(b+c), (ab)c = a(bc)

a(b+c) = ab+ac

В елементарній шкільній математиці результат операції залишку від ділення традиційно вважається невід’ємним. Операція знаходження залишку буде позначатися знаком відсотка %, як у мові С#. Тоді, приміром,

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]);

}

}

}

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


 

А также другие работы, которые могут Вас заинтересовать

401. Управление персоналом на предприятии Панифкооп 329 KB
  Концепция управления персоналом организации в условиях рыночных отношений. Взаимоотношения с внутренними и внешними клиентами, руководителями, равными по положению, подчиненными. Обучение, переподготовка, повышение квалификации.
402. Компьютерная графика 951 KB
  Технические средства ввода графической информации. Особенности представления цвета в видеоадаптерах EGA и VGA. Элементарные аффинные преобразования в пространстве, составляющие базис операций машинной графики. Понятие текстуры и способы моделирования текстур.
404. Разработка программы реализирующей цветное движущееся изображение 97 KB
  написание программы для DOS и Windows, отображающую рисование дворников автомобиля. Предусмотрение возможности задания скорости исполнения и приостановки/возобновления выполнения по нажатию клавиши на клавиатуре или мыши (для версии под Windows).
405. Создание программы с цветным движущимся изображением 79 KB
  По заданию требуется разработать программу, реализующую цветное движение: вращение многоугольника (количество углов от 3 до 5 задается пользователем). Алгоритмы работы программ различные, что обусловлено высоким уровнем библиотеки OpenGL и относительно низким уровнем средств DirectX.
406. Разработка электронного устройства на примере RC-генератора 1.72 MB
  Назначение и виды генераторов. Схема трёхзвенной RC-цепи. Генераторы синусоидальных колебаний. Режимы самовозбуждения. Автоматическое смещение с помощью базового делителя. Мощные усилительные каскады. Выбор электрической схемы электронного устройства и её описание.
407. Разработка сети кампуса с выходом во внешнюю среду 955 KB
  Список оборудования и линий связи. Сети кампуса объединяют множество сетей различных отделов одного предприятия в пределах одного здания или в пределах одной территории. Сеть разрабатывалась на основе структурированной кабельной системы.
408. Схема модификации резонаторного фильтра для использования в полосовых структурно-перекрытых реализациях фильтров 178.5 KB
  Коэффициенты передачи в выходные узлы можно вычислить методом графов, так как данная схема довольно проста. Формула Мейсона представляет собой отношение произведения коэффициентов передачи ветвей. Для вычисления γ12 выделим в отдельную схему элементы и связи между ними.
409. Анализ и прогнозирование деятельности предприятия ремонтная организация 413 KB
  Возможности организации (резюме). Правовое обеспечение деятельности организации. Стратегия финансирования. Организационный план, конкуренция и рынок сбыта. Оценка рисков и страхования.