Алгоритмические основы информатики. Учебное пособие
.pdf//Оператор +, выполняет корректное сложение больших чисел
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
