Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмические основы информатики. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
774 Кб
Скачать

//Оператор +, выполняет корректное сложение больших чисел

BigNumber BigNumber::operator + (BigNumber &num) { BigNumber res;

//Приводим размер чанок обоих чисел

if (this->chunks.size() > num.chunks.size()) { num._resize(chunks.size());

}

else { (*this)._resize(num.chunks.size());

}

//Выполняем операцию в зависимости от знаков чисел if (sign == num.sign) {

res = (*this)._plus(num);

}

else {

res = (*this)._minus(num);

}

//Нормализуем результат res._normalizationChunks(); return res;

}

//Оператор -, выполняет корректное вычитание

BigNumber BigNumber::operator - (BigNumber &num) { BigNumber res;

//Приводим размер чанок

if (this->chunks.size() > num.chunks.size()) { num._resize(chunks.size());

}

else { (*this)._resize(num.chunks.size());

}

//В зависимости от знаков, выполняем нужное действие if (sign != num.sign) {

res = (*this)._plus(num);

}

else {

res = (*this)._minus(num);

}

//Нормализуем результат res._normalizationChunks(); return res;

}

//Перегрузка оператора << для вывода в поток

ostream & operator << (ostream &os, BigNumber &num) { num._normalizationSigns();

101

if (num.sign == -1) { os << '-';

}

os << num.chunks[num.chunks.size() - 1];

for (int i = num.chunks.size() - 2; i >= 0; i--) {

os << setw(num.getBASE()) << setfill('0') << num.chunks[i];

}

return os;

}

int main() {

BigNumber n2("-20"); BigNumber n3 = n1 - n2; cout << n3 << endl; return 0;

}

Контрольные вопросы

1.Что такое длинная арифметика и для чего она используется?

2.Какие существуют алгоритмы для работы с длинными числами?

3.Как реализовать операции над длинными числами на компьютере?

4.В чем особенность стековой архитектуры для работы с длинными числами?

5.Что такое рекуррентные соотношения и как они используются в длинной арифметике?

Упражнения

1.Реализовать алгоритм сложения двух длинных чисел, используя стековую архитектуру.

2.Реализовать алгоритм умножения двух длинных чисел с использованием алгоритма Карацубы.

3.Создать программу на языке C, которая выполняет различные операции с длинными числами (сложение, вычитание, умножение).

4.Разработать программу для работы с длинными числами, используя рекуррентные соотношения.

5.Реализовать алгоритмы обработки длинных чисел на основе длинной арифметики.

Задачи

1.Реализовать сложение и вычитание длинных чисел.

2.Реализовать умножение длинных чисел.

102

3.Реализовать деление длинных чисел.

4.Вычислить значение e=lim(1+1n)n с заданным количеством M десятичных знаков после запятой.

5.Вычислить значение π с заданным количеством M десятичных знаков после запятой.

6.Великая Треугольная Область (ВТО) представляет собой прямоугольный треугольник. Его катеты имеют целые длины m и n и лежат на осях координат. Нужно покрыть как можно большую часть территории ВТО квадратными плитами размером 1 x 1. Плиты должны плотно прилегать одна к другой и к катетам ВТО, не выходя за пределы области. Резать плиты нельзя. Плиты поставляются только контейнерами по p штук, используется необходимый минимум количества контейнеров. Вычислить, сколько плит из последнего контейнера останется после покрытия ВТО.

Найти наименьшее число с одинаковыми цифрами, кратное заданному натуральному числу K. Вывести цифру и количество цифр в найденном числе. Если решение не существует, вывести 00. Например, при K=37 нужно вывести 13, а при K=10 – 00.

7.Натуральные k и m, где 1≤k<m, задают правильную дробь km. Вывести кратчайшую последовательность цифр AA...A, предшествую-

щих периоду и период BB...B десятичного представления дроби

ввиде 0,AA...A(BB...B). Если длина периода больше 100, то вывести его первые 100 цифр и многоточие, а после его периода – его длину

вскобках. Например, вход: 3 4 Выход: 0,75(0)

8.В рекуррентной последовательности, называемой числами Фибоначчи, каждый элемент (кроме двух начальных) является суммой двух предыдущих: F0=0, F1=1, Fn=Fn−1+Fn−2 при n≥2. Найти остаток от деления n-го числа Фибоначчи на натуральное число p. Например, при n=12,p=10 остаток равен 4.

9.Заданы натуральные числа N и p (оба в диапазоне от 2 до 109). Найти количество нулей в конце числа N!, записанного в системе счисления с основанием p. Например, при N=7 и p=10 количество нулей равно 1, так как 7!=5040.

103

ЗАКЛЮЧЕНИЕ

Виздании в доступной форме рассмотрены теоретические сведения по основам алгоритизации и структур данных, а также практические задания и приемы, используемые при построении алгоритмов.

Вкаждом разделе приведены примеры, после анализа которых предлагаются контрольные вопросы, упражнения и задачи для самостоятельного выполнения.

Рассмотрен сравнительно ограниченный набор типовых алгоритмов и их реализация на языке С++, унаследовавшего синтаксис языка Си. Авторы учебного пособия стремились показать основные возможности языка С++, его простоту и гибкость в реализации основных алгоритмических конструкций структурного программирования при организации простейших программ, что является достаточным для получения практических навыков, которые могут стать начальным шагом как для освоения азов алгоритмизации и программирования, так и в последующем совершенствовании знаний и профессиональных навыков в применении языка С++.

Вучебном пособии использованы как Интернет-ресурсы, приведенные в рекомендованной литературе, придерживаясь основателей и классиков языка С++, так и собственный многолетний опыт и наработки по преподаванию основ алгоритмизации и программирования.

104

ЛИТЕРАТУРА

Основная

1.Андрианова А.А., Исмагилов, Л.Н., Мухтарова, Т.М. Алгоритмизация и программирование. Практикум: учебное пособие – СПб.:

Лань, 2022.

2.Воробейчиков Л.А., Загвоздкина А.В., Шакин В.Н. Алгоритмизация и программирование: учебное пособие.– М.: МТУСИ, 2022.– 350 с.

3.Груздев Д.В. Программирование C++ (1 курс): учебное пособие. – Воронеж: ВГУ, 2017. - 80 с.

4.Заковряшин А.И. Алгоритмизация и программирование вычис-

лительных задач. – М.: Science Press, 2022. – 237 c.

5.Кнут Д.Э. Искусство программирования. – Т. 1. Основные алго-

ритмы. – М.: [не указано], 2022. – 421 c.

6.Кнут Д.Э. Искусство программирования. – Т. 2. Получисленные алгоритмы. – М.: [не указано], 2018. – 191 c.

7.Кнут Д.Э. Искусство программирования. – Т. 3. – М.: [не указа-

но], 2019. – 431 c.

8.Кривцов А.Н., Хорошенко С.В. Алгоритмизация и программирование. Основы программирования на С/С++: учебное пособие. – СПб.: СПбГУТ им. М.А. Бонч-Бруевича, 2020. – 202 с.

9.Огнева М.В. Программирование на языке С++: практический курс: учебное пособие для вузов. – М.: Юрайт, 2023. – 335 с.

10.Семакин И.Г. Основы алгоритмизации и программирования:

учебник. – М.: Academia, 2017. – 384 c.

11.Серкова Е.Г. Основы алгоритмизации и программирования: практикум. – Ростов-на-Дону: Феникс, 2019. – 189 c.

12.Страуструп Б. Язык программирования С++. – М.: Бином-

Пресс, 2019. – 1136 c.

13.Трофимов В.В. Алгоритмизация и программирование: учебник для академического бакалавриата. – М.: Юрайт, 2017. – 330 c.

14.Ульянова Н.Д. Основные принципы алгоритмизации: учебнометодическое пособие. – Брянск: Брянский ГАУ, 2020. – 56 с.

Дополнительная

1.Алгоритмизация и программирование (+CD-ROM) / И.Н. Фалина

[и др.]. – М.: КУДИЦ-Пресс, 2018. – 280 c.

2.Аляев Ю.А., Козлов О.А. Алгоритмизация и языки програмирования PASCAL, C++, Visial Basic: учебно-справочное пособие. – М: Финансы и статистика, 2002. – 320 с.

105

3.Ашарина И.В. Основы програмирования на языках С и С++. – М.: Горячая линия – Телеком, 2002. – 207 с.

4.Боровский А.Н. Borland C++ Builder. Самоучитель. – СПб.: Пи-

тер, 2005. – 256 с.

5.Давыдов В.Г. Программирование и основы алгоритмизации: учебное пособие. – М.: Высшая школа, 2003. – 447 с.

6.Заковряшин А.И. Алгоритмизация и программирование вычислительных задач. – Вып. 5. – М.: РГГУ, 2021. – 445 c.

7.Информатика и программирование. Алгоритмизация и програм-

мирование / Н.И. Парфилова [и др.]. – М.: Academia, 2022. – 336 c.

8.Канцедал С.А. Алгоритмизация и программирование. – М.: Ин-

фра-М, Форум, 2017. – 355 c.

9.Канцедал С.А. Алгоритмизация и программирование. – М.: Фо-

рум, Инфра-М, 2018. – 352 c.

10.Канцедал С.А. Алгоритмизация и программирование: учебное

пособие. – М.: Инфра-М, Форум, 2018. – 627 c.

11.Колдаев В.Д. Основы алгоритмизации и программирования: учебное пособие. – М.: Форум, 2015. – 414 c.

12.Командный чемпионат мира по программирования / ред. В. Васильев. – М.: СПб.: СПбГУ ИТМО, 2022. – 196 c.

13.Корниенко М.М. Информатика. Основы алгоритмизации и программирования. Теоретические основы, примеры и задания, практические работы. – М.: Ранок, 2020. – 842 c.

14.Кудрявцева И.А., Швецкий М.В. Программирование: комбинаторная логика: учебное пособие для вузов. – 2-е изд., перераб. и доп. – М.: Юрайт, 2021. – 524 с. [Электронный ресурс]. – Режим доступа: https://urait.ru/bcode/430924

15.Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб.: Питер, 2001. – 464 с.

16.Паронджанов В.Д. Алгоритмические языки и программирова-

ние ДРАКОН: учебное пособие для вузов. – М.: Юрайт, 2021. – 436 с. [Электронный ресурс]. – Режим доступа: https://urait.ru/bcode/449292

17.Парфилова Н.И. Информатика и программирование. Алгоритмизация и программирование: учебник для студентов учреждений высшего профессионального образования.– М.: Академия, 2017. – 683 c.

18.Парфилова Н.И. Программирование: Основы алгоритмизации

ипрограммирования: учебник / под ред. Трусова Б.Г. – М.: Academia, 2014. – 240 c.

19.Подбельский В.В. Язык С++: учеб. пособие. – 5-е изд. – М: Финансы и статистика, 1999. – 560 с.

106

20.Семакин И.Г. Основы алгоритмизации и программирования:

учебник. – М.: Academia, 2017. – 328 c.

21.Серкова Е.Г. Основы алгоритмизации и программирования: практикум. – Ростов-на-Дону: Феникс, 2017. – 159 c.

22.Скляров В.А. Программирование на языках Си и Си++: практическое пособие. – М.: Высшая школа, 1996. – 240 с.

23.Спольски Джоэл о программировании. – М.: СПб.: Символ-

Плюс, 2017. – 352 c.

24.Страуструп Б. Язык программирования С++. – 3-е изд. пер. с англ. – М.: Радио и связь, 1991. – 352 с.

25.Страуструп Б. Язык программирования С++. – М.: Бином-Пресс, 2019. – 1136 c.

26.Трофимов В.В. Алгоритмизация и программирование: учебник для вузов.

27.Фризен И.Г. Основы алгоритмизации и программирования

(среда PascalABC.Net): учебное пособие. – М.: Форум, 2018. – 784 c.

28.Хусаинов Б.С. Структуры и алгоритмы обработки данных. Примеры на языке Си (+СД): учебное пособие . – М.: Финансы и стати-

стика, 2004. – 464 с.

29.Черпаков И.В. Основы программирования: учебник и практикум для прикладного бакалавриата. – Люберцы: Юрайт, 2016. – 219 c.

30.Шамис В.А. Borland C++ Builder 6: для профессионалов. – СПб.:

Питер, 2005. – 798 с.

107

УЧЕБНОЕ ИЗДАНИЕ

Эдгулова Елизавета Каральбиевна Хаширова Татьяна Юрьевна Дзамихова Фатимат Хасеновна

АЛГОРИТМИЧЕСКИЕ ОСНОВЫ ИНФОРМАТИКИ

Учебное пособие

Рекомендовано Редакционно-издательским советом КБГУ в качестве учебного пособия для обучающихся по направлению подготовки 09.03.01 Информатика

и вычислительная техника

Нальчик, «Каб-Балк. ун-т», 2024.

Редактор Л.М. Хакулова

Компьютерная верстка Н.И. Золотаревой

Корректор Л.А. Скачкова

В печать 13.02.2024. Формат 60х84 1/16. 6,28 усл.п.л. 4,0 уч.-изд.л. Тираж 50 экз.

Кабардино-Балкарский государственный университет. 360004, г. Нальчик, ул. Чернышевского, 173.

Печать трафаретная. Бумага офсетная. Заказ № 667.

Производственно-техническое управление Полиграфический участок

360004, г. Нальчик ул. Чернышевского, 173.

108

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]