Вы находитесь на странице: 1из 33

Министерство сельского хозяйства Республики Казахстан

НАО «Казахский агротехнический исследовательский университет


им. С. Сейфуллина»
Кафедра «Информационные системы»

КУРСОВАЯ РАБОТА

Образовательная программа 6В06101 – «Программная инженерия»


Дисциплина «Алгоритмы, структуры данных и программирование»

Тема: Применение теоретических и практических навыков в построения


алгоритмических структур и их программной реализации

Выполнили: обучающийся
группы 05-057-23-17
Қарсұлтанов Төрегелді
Бауржанұлы

Проверила: ст. преподаватель,


PhD доктор Бельдеубаева Ж.Т.

Курсовая работа допущена к защите

(подпись преподавателя)

Астана 2023
НАО «Казахский агротехнический исследовательский университет им.
С. Сейфуллина»
Факультет «Компьютерные системы и профессиональное обучение»
Кафедра «Информационные системы»
Образовательная программа 6B06101 - «Программная инженерия»

ЗАДАНИЕ
на курсовую работу
обучающийся Қарсұлтанов Төрегелді Бауржанұлы

Тема работы: Применение теоретических и практических навыков в


построения алгоритмических структур и их программной реализации
№ Содержание пояснительной записки Сроки Примерный
выполнения объем
1 Введение 10.11.2023 1,5 страницы
2 Основная часть 20.11.2023 4 страниц
3 Заключение 25.11.2023 1,5 страницы

№ Содержание графической части Сроки Количество Формат


выполнени листов
я
1 А4
2 А4
3 А4
4 А4
5 А4
6 А4
7 А4

Литература:
1. Томас Х. Кормен "Алгоритмы: построение и анализ". (Электронный
вариант) Доступно по ссылке: http://www.r-5.org/files/books/computers/algo-
list/common/Cormen_Leiserson_Rivest_Stein-Introduction_to_Algorithms-
RU.pdf
2. "Introduction to Algorithms" (Том Кормен, Чарльз Лейзерсон, Рональд
Ривест, Клиффорд Штайн) Доступно по ссылке:
https://e-maxx.ru/bookz/files/cormen.pdf
3. "Algorithms" (Роберт Седжвик, Кевин Уэйн) Доступно по ссылке:
https://algs4.cs.princeton.edu/home/
4."The Algorithm Design Manual" (Стивен Скиена) Доступно по ссылке:
https://balka-book.com/files/2018/02_02/10_50/u_files_store_3_658271.pdf
5."Data Structures and Algorithms in Python" (Майкл Т. Гудрич, Роберт
Лафоре)Доступно по ссылке: https://pythonz.net/books/31/

2
Дата выдачи задания: 25.10.2023 г.
Дата защиты работы:
Руководитель работы: старший преподаватель, PhD доктор Бельдеубаева Ж. Т.
Задание приняли к исполнению Қарсұлтанов Төрегелді Бауржанұлы

ВВЕДЕНИЕ ……………………………………………………………… 5
3
1 ТЕОРЕТИЧЕСКИЕ ОСНОВЫ АЛГОРИТМИЗАЦИИ И
ПРОГРАММИРОВАНИЯ………………………………………………... 5
1.1 Алгоритмы………………………………………………………………… 6
1.2 Линейные структуры……………………………………………………... 7
1.3 Развлетвления…………………………………………………………….. 7
1.4 Циклы……………………………………………………………………... 8
1.5 Одномерные массивы……………………………………………………. 8
1.6 Двумерные массивы……………………………………………………… 9
ЗАКЛЮЧЕНИЕ…………………………………………………………... 11
ПРАКТИЧЕСКАЯ ЧАСТЬ………………………………………………. 13
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ И
ЛИТЕРАТУРЫ…………………………………………………………… 31

ВВЕДЕНИЕ
4
Курс "Алгоритмы, структуры данных и программирование" имеет
важное значение в обучении обучающийся 1 курса факультета программной
инженерии, специализирующихся в области информационных технологий.
Данный курс служит введением в такие понятия, как сортировка, поиск,
различные структуры данных (массивы, связанные списки, деревья, хэш-
таблицы), а также основные принципы алгоритмизации, такие как жадные
алгоритмы и динамическое программирование.
Понимание сложности и оптимизации алгоритмов становится
краеугольным камнем учебной программы по разработке программного
обеспечения. Этот курс дает студентам теоретические знания, а также
основные практические навыки, необходимые для разработки
высокопроизводительных и эффективных программ.
Работая над проектами, студенты не только применяют полученные
знания, но и развивают свои аналитические и творческие навыки. Такой опыт
помогает студентам развить не только понимание алгоритмов, но и
способность находить инновационные решения реальных проблем, что
является ключом к успеху в области информационных технологий.
Студенты, окончившие этот курс, выходят на рынок труда с глубоким
пониманием алгоритмов и способностью эффективно применять их при
создании программного обеспечения. Эти навыки сделают их
востребованными ИТ-специалистами, которые не только способны решать
сложные задачи, но и являются источником инновационных технологических
решений.
Конечно, мы также обсудим вопросы, связанные с образованием и
технологиями.
Технологии играют важную роль в современном образовании,
трансформируя процесс обучения и расширяя границы знаний. Интеграция
технологий в учебную программу не только улучшает процесс обучения, но
и обогащает его.
Интерактивные учебные платформы, онлайн-курсы и виртуальные
лаборатории обеспечивают доступ к информации из любой точки мира, делая
образование более глобальным и доступным. Технологии помогают
персонализировать обучение, учитывая индивидуальные потребности
студентов и создавая комфортную учебную среду.
Помимо обучения использованию технологий, важно также развивать
навыки критического мышления, чтобы адаптировать информацию из разных
источников. Это помогает студентам быть гибкими и компетентными в мире,
где технологии играют важную роль во всех аспектах жизни.
Курс готовит студентов к работе в динамичной ИТ-среде и
воспитывает профессионалов, способных творчески подходить к решению
проблем, выявлять новые возможности и вносить значительный вклад в
развитие информационных технологий.
Кроме того, курс также затрагивает вопросы, связанные с образованием
и технологиями. Технологии играют значительную роль в современном
5
образовании, трансформируя процессы обучения и расширяя границы
знаний.
Интеграция технологий в учебную программу не только улучшает
процесс обучения, но и обогащает его. Интерактивные учебные платформы,
онлайн-курсы и виртуальные лаборатории обеспечивают доступ к
информации из любой точки мира, делая образование более глобальным и
доступным. Технологии помогают персонализировать обучение, учитывая
индивидуальные потребности студентов и создавая комфортную учебную
среду.
Помимо обучения использованию технологий, важно также развивать
навыки критического мышления для адаптации информации из различных
источников. Это помогает студентам быть гибкими и компетентными в мире,
где технологии играют важную роль во всех аспектах жизни.

1 ТЕОРЕТИЧЕСКИЕ ОСНОВЫ АЛГОРИТМИЗАЦИИ И


ПРОГРАММИРОВАНИЯ

1.1 Алгоритмы
Алгоритм (algorithm) – это формально описанная вычислительная
процедура, получающая исходные данные (input), называемые также входом
алгоритма или его аргументом, и выдающая результат вычислений на выход
(output).
Алгоритмы строятся для решения тех или иных вычислительных задач
(computational problems). Формулировка задач описывает, каким требованием
должно удовлетворять решение задачи, а алгоритм, решающий эту задачу,
находит объект, этим требованием удовлетворяющий [1].
"Многие проблемы в информатике можно представить в терминах
структур данных и алгоритмов. Принятие решения о том, какой алгоритм или
структуру данных следует использовать в конкретной ситуации, может быть
сложной задачей, требующей глубокого понимания контекста проблемы и
потенциальных пространств решений" .
Алгоритмы представляют собой последовательность шагов,
разработанных для решения определенной проблемы или выполнения
определенной задачи [3].
Алгоритмы как последовательность шагов или инструкций,
предназначенных для решения конкретной задачи [4].
Алгоритмы могут быть представлены в виде логически упорядоченных
действий, которые оперируют с данными, и приводят к желаемому
результату или решению задачи. Выделяются важность понимания, как
алгоритмы работают и какие задачи они могут решать в рамках
компьютерной науки и программирования [4].
6
"Лучший алгоритм - это тот, который может решить вашу проблему
эффективно и результативно" это общее принятая цитата используется
большинства программистов.

1.2 Линейные структуры


Алгоритм называется линейным, если все его указания (команды)
выполняются в порядке их следования в алгоритме независимо от исходных
и промежуточных данных [20]. Алгоритм обрабатывает данные в строгом
порядке, начиная с первого элемента и заканчивая последним элементом. Он
характеризуется отсутствием ответвлений, когда каждый шаг зависит от
предыдущего и предшествует следующему. Кроме того, поскольку циклов
нет, каждая команда выполняется только 1 раз. Линейные алгоритмы обычно
используются, когда задача может быть разбита на непрерывные шаги,
которые не требуют условий или повторного выполнения.
"Линейные структуры данных организуют свои элементы в линейном
порядке, где каждый элемент имеет уникального преемника и
предшественника, за исключением первого и последнего элементов".
"Линейные структуры данных организуют свои элементы в линейном
порядке, к ним относятся массивы, связанные списки, стеки и очереди".
Линейные структуры включают такие конструкции, как массивы,
связанные списки, стеки и очереди. Они упорядочивают элементы
последовательно, где каждый элемент связан с предыдущим и/или
следующим элементом в структуре [6].

1.3 Разветвления
Ветвящийся алгоритм представляет собой вычислительную процедуру,
в рамках которой предусмотрена возможность ветвления или отклонения.
Эта характеристика позволяет осуществлять различные последовательности
операций в зависимости от условий и входных данных. Такие алгоритмы
обеспечивают разнообразные маршруты выполнения и способны
адаптироваться к различным сценариям в соответствии с логическими
условиями. В качестве условия в разветвляющемся алгоритме может быть
использовано любое понятное исполнителю утверждение, которое может
соблюдаться (быть истинным) или не соблюдаться (быть ложным). Такое
утверждение может быть выражено как словами, так и формулой. Обычно
различают два вида условий простые и составные. Простым условием
называется выражение, составленное из двух арифметических выражений
или двух текстовых величин, связанных одним из знаков <( меньше), < =
( меньше или равно),>( больше),> = ( больше или равно), = ( равно),<>( не
равно). Составные условия состоят из двух или более простых, связанных
логическими операциями И, ИЛИ, НЕ. [3]
Cоздание качественного программного обеспечения требует времени и
усилий.
Тщательная разработка высококачественного программного продукта
требует времени, подобно тому, как вино требует времени для созревания.
7
Подход к разработке программного продукта, аналогичный процессу
создания качественного вина, подразумевает, что для достижения
оптимальных результатов нужно уделить время и тщательность.
Как и в случае выращивания винограда и создания вина, труд и
терпение также играют важную роль в создании качественного
программного обеспечения. Только через постоянную работу, усердие и
время можно достичь оптимальных результатов. Это утверждение
подчеркивает, что важно не только написать код, но и уделить время для его
разработки, тестирования и улучшения, чтобы создать программу, которая
будет успешно работать и в долгосрочной перспективе оставаться
актуальной и эффективной.
Хорошее программное обеспечение должно скрывать сложность для
пользователя, предоставляя простой и интуитивно понятный интерфейс,
несмотря на сложность внутренней реализации.

1.4 Циклы
Существует циклический алгоритм для эффективной обработки
повторяющихся задач, при котором необходимо выполнять одну и ту же
инструкцию снова и снова. Цикл алгоритма обеспечивает механизм для
повторения блока транзакций до тех пор, пока выполняются логические
условия, определенные до начала цикла. Большинство реально
существующих алгоритмов являются хешированными, то есть имеют
линейные сегменты, ветви, известное количество итераций и итерационных
циклов. В связи с этим трудно сразу скомпилировать алгоритм в полной
форме. Поэтому для составления сложных алгоритмов рекомендуется
использовать суть нисходящего проектирования программ (метод пошаговой
доработки, метод последовательной доработки): сначала без детального
изучения отдельных частей решается общая структура алгоритма. Затем
создаются отдельные блоки, которые не были подробно описаны на
предыдущем шаге. Поэтому на каждом этапе разработки уточняется
реализация частей алгоритма, то есть решаются более простые задачи [4].
Использование циклов таким образом, чтобы код был легко читаемым
и поддерживаемым, что способствует более эффективной разработке и
управлению проектами. Преждевременная оптимизация может привести к
созданию неэффективного и сложного кода. Циклы как к одной из составных
частей программирования, eё широкие аспекты разработки ПО и общие
принципы эффективного и реального программирования [11].

1.5 Одномерные массивы


Массив представляет собой совокупность переменных одного типа с
общим для обращения к ним именем. В C# Python C++ массивы могут быть
как одномерными, так и многомерными, хотя чаще всего применяются
одномерные массивы. Массивы служат самым разным целям, поскольку они
8
предоставляют удобные средства для объединения связанных вместе
переменных. Например, в массиве можно хранить максимальные суточные
температуры, зарегистрированные в течение месяца, перечень биржевых
курсов или же названия книг по программированию из домашней библиотеки
[19]. Главное преимущество массива - в организации данных таким образом,
чтобы ими было проще манипулировать. Так, если имеется массив,
содержащий дивиденды, выплачиваемые по определенной группе акций, то,
организовав циклическое обращение к элементам этого массива, можно без
особого труда рассчитать средний доход от этих акций. Кроме того, массивы
позволяют организовать данные таким образом, чтобы легко отсортировать
их. В программировании одномерный массив - это структура данных,
предназначенная для хранения упорядоченной последовательности
элементов одного типа. Каждый элемент массива идентифицируется
уникальным индексом, который позволяет эффективно обращаться к данным
и манипулировать ими. В этой структуре использование индексов упрощает
такие операции, как сортировка, поиск и замена элементов [5].
Простота и эффективность: массивы обеспечивают простой и быстрый
доступ к элементам. Это базовая структура, на которой основаны многие
другие структуры данных и алгоритмы. Универсальность: одномерные
массивы широко используются в различных приложениях программирования
- от хранения данных до реализации сложных алгоритмов.

1.6 Двумерные массивы


Двумерный массив - это структура данных, элементы которой
организованы в виде двумерной таблицы со строками и столбцами. Этот
формат данных широко используется в программировании для хранения и
манипулирования информацией с двумерной структурой, такой как матрицы,
изображения и таблицы [2].
Основными моментами, на которых акцентируют внимание авторы,
являются
Хранение и удобство доступа: двумерные массивы обеспечивают
простой и эффективный способ хранения информации; два индекса (строки и
столбца) позволяют легко получить доступ к конкретным элементам
таблицы; двумерные массивы могут использоваться для хранения
информации в одном массиве.
Матрицы и обработка данных: в областях, где важна работа с
матрицами и двумерными данными, таких как математика, обработка
изображений и графика, двумерные массивы позволяют удобно выполнять
операции над этими данными.
Практичность и универсальность: Эти структуры данных широко
используются в различных областях программирования и обработки данных.
Они позволяют компактно хранить информацию и эффективно обрабатывать
ее в виде, удобном для алгоритмов и программ.

9
Матрицы и алгоритмы: Важность двумерных массивов хорошо видна в
алгоритмах, связанных с матрицами. Умножение матриц, транспонирование,
поиск путей в графах и многие другие алгоритмы важно реализовать с
помощью двумерных массивов.
Двумерные массивы играют важную роль в программировании,
предоставляя удобный способ организации и манипулирования данными с
двумерной структурой, что делает их важным инструментом в самых разных
областях, где требуется работать с двумерными данными [20].

10
ЗАКЛЮЧЕНИЕ

Курс не только предоставляет знания об алгоритмах и структурах


данных, но и обеспечивает стабильную основу для студентов, чтобы изучать
и применять полученные знания на практике. Глубокое погружение в
линейные структуры данных, основы ветвлений и циклов, а также изучение
манипуляций с 1- и 2-мерными массивами не только предоставляют
студентам инструменты, но и эффективные стратегии обработки данных в
реальных приложениях.
Понимание алгоритмов и навыков работы с различными структурами
данных является ключом к созданию программного продукта высокого
уровня, а не просто инструмента. Курс не ограничивается отправкой
информации, он учит студентов формировать свое мышление, анализировать
его, решать проблемы и оптимизировать свой код. И все это является
сокровищем в динамичном мире индустрии информационных технологий.
Однако эта программа не ограничивается теорией. Здесь студенты
сталкиваются с реальными задачами программирования, в которых их знания
оживают, а навыки становятся жизнеспособными. Это своего рода
развивающая тренировочная площадка, которая не только углубляет знания,
но и развивает способность работать в команде, разрабатывать новые
подходы к сложным задачам и применять их на практике. Этот опыт не
только дополняет теоретическую основу, но и формирует будущих
специалистов, готовых к самым сложным задачам в области ИТ.
Это именно образовательный процесс, который не только продвигает
технологии, но и предоставляет студентам навыки, необходимые им для
успеха в динамичной и конкурентной сфере информационных технологий.
Реальное понимание алгоритмов и способность выбирать их для
конкретных задач являются основой для создания высокопроизводительных
программных продуктов. Курс не только демонстрирует новые технологии
развития, но и формирует критическое мышление и аналитические
способности студентов, необходимые в области информационных
технологий.
В дополнение к техническим аспектам, этот курс также охватывает
широкий спектр навыков октябрьского уровня, необходимых для успешной
карьеры в области ИТ. Командная работа, общение, умение предлагать свои
идеи и решения, а также творческий подход к решению проблем - все это
станет важным дополнением к техническим знаниям. Это не просто
образовательная программа, это практическая подготовка к реальным
вызовам современной промышленности.
Такой полный и всесторонний подход к обучению не только дает
учащимся возможность использовать жаргон, но и повышает
осведомленность и уверенность в том, что они могут эффективно решать
сложные проблемы, находить инновационные способы разработки
программного обеспечения и успешно справляться с динамичной и
конкурентной средой ИТ-индустрии. Этот курс - это не просто
11
образовательная программа, он станет путеводной звездой по желаемым
профессиональным достижениям и карьере в области информационных
технологий.
Помимо обучения использованию технологий, важно также развивать
навыки критического мышления для адаптации информации из различных
источников. Это помогает студентам быть гибкими и компетентными в мире,
где технологии играют важную роль во всех аспектах жизни.
Курс готовит студентов к работе в динамичной ИТ-среде, воспитывая
профессионалов, способных творчески подходить к решению проблем,
выявлять новые возможности и вносить значительный вклад в развитие
информационных технологий. Он формирует основы для будущей карьеры в
сфере IT, создавая основу для тех, кто стремится стать инноваторами в этой
динамичной области.

12
2 ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ РАЗРАБОТКИ
АЛГОРИТМОВ

В практической части данного курса рассматриваются следующие


алгоритмические структуры
1. Линейными структурами
2. Развлетвлениями
3. Циклами
4. Одномерными структурами
5. Двумерными структурами
В этой курсовой работе дается индивидуальные задания по
приведенным выше алгоритмическим структурам.
Для решения какой-либо задачи в программирование программист
должен следовать трем основным правила
1)Это создание логической схемы
2)Трассировка – ручное решение данной задачи
3) Непосредственное написание кода.
Задание№1
Любой алгоритм составляется из ряда базовых структур. Простейшей
базовой структурой является следование — структура с линейными
характеристиками. Из этого можно сформулировать определение.
Линейный алгоритм — это алгоритм, образуемый командами, которые
выполняются однократно и именно в той последовательности, в которой
записаны. Линейная структура, по сути, проста. Записать её можно как в
текстовой, так и в графической форме.

Для решения этого задания Y= , была разработана


блок-схема которая показывает последовательное решение данного
выражения. Блок-схема включает в себя этапы вычисления y, ,

и конечное вычисление Y на основе заданных формул.


Сама блок схема показана на (рис.1).

13
Рисунок 1 – Блок-схема

Для правильного решения заданного уравнения. T=


Задача состояла в том, чтобы последовательно вычислить значения,
используемые в уравнении, а затем вычислить конечный результат.

Шаг Переменная\Выражение Значение


1 X -10
2 1.694164602625863
3 ⅇ2 x 485165195.4097903

14
x

4 1+ ⅇ 2 485165196.4097903
5 |1+ ⅇ 2 | 485165196.4097903
x

6 √|1+ⅇ | 22008.24935220888
x
2 x

7 x+2*x -30
8 |x +2 ⋅ x| 30
9 √3 |x +2⋅ x| 3.1072325059538586
2
10 2⋅sin ( x ) +2 ⋅ x 0.07689446876383138
√|1+ⅇ | 2x

2
11 2⋅sin ( x ) +2 ⋅ x 3.18412697471769
√3 | x+2 ⋅ x|
√|1+ⅇ | 2x

После создания блок-схемы и непосредственного


2
написания
2⋅sin ( x ) +2 ⋅ x 3
трассировки для данного выражения T= √| x+2 ⋅ x|, можно
√|1+ⅇ | 2x

приступать к созданию самого кода.


Вот данный код который представлен ниже:

Импортирует модуль math, который предоставляет математические


функции для работы с числами.
Определяет функцию calculate_Y(x), которая вычисляет значение
функции Y(x) по формуле, представленной в выражении внутри функции.
Создает два пустых списка x_values и y_values, в которые будут
сохранены значения x и соответствующие им значения Y(x).
Задает диапазон значений x от -10 до 10 (включительно) с помощью
x_range.
Использует цикл for для итерации по диапазону x_range. На каждой
итерации:

Вычисляет значение Y(x) с помощью функции calculate_Y(x).


15
Добавляет текущее значение x в список x_values и соответствующее
значение Y(x) в список y_values.
Выводит на экран значения x и Y(x) с помощью функции print.
Этот код позволяет вычислить и вывести значения Y(x) для каждого x в
диапазоне от -10 до 10. Он также сохраняет эти значения в списках x_values и
y_values, но не строит график.
Ниже приведены результаты расчетов, выполненных с помощью этого
кода:

Задание №2
Второе задание курсовой работы представляет работу с разветвленным
алгоритмом.
Само определение разветвляющимся называется такой алгоритм, в
котором выбирается один из нескольких возможных вариантов
вычислительного процесса. Каждый подобный путь называется ветвью
алгоритма.
Признаком разветвляющегося алгоритма является наличие операций
проверки условия. Различают два вида условий - простые и составные.
Простым условием (отношением) называется выражение, составленное
из двух арифметических выражений или двух текстовых величин (иначе их
еще называют операндами), связанных одним из знаков:

16
- < - меньше, чем...
- >- больше, чем...
- <= - меньше, чем... или равно
- >= - больше, чем... или равно
- <> - не равно
- = - равно [8]
Вычислить значение функции F, используя значения аргумента X, где a
и b - это константы, описывающие функцию.

Для решения данного примера была составлена блок-


схема. Эта блок-схема отображает последовательность действий и ветвлений
в зависимости от значения переменной x.
Представлена блок-схема разветвленного алгоритма на (рис. 2).

17
Рисунок 2 - Блок-схема разветвленного алгоритма

18
Была разработана трассировка для правильного выполнения задачи.
Эта трассировка представлена в виде таблицы, которая позволяет понять
последовательность вычислений и этапы, необходимые для решения данного
выражения.

,
где x=2a+1, в зависимости от самой x

Вот сама трассировка виде таблицы:


Шаг Переменная\Выражения Значения
1 a 5
2 x = 2а+1 11
3 Если x¿ 1 ИСТИНА
4 In(x) 0.9806

Дальше после выполнение блох-схемы, а также трассировки для


данного задания:

, теперь можно приступить к выполнению самого кода

Здесь ниже представлен сам код:

19
1. import math: Эта строка импортирует модуль `math`, который
предоставляет математические функции для работы с числами.

2. def get_values(): Это начало определения функции `get_values()`, которая


запрашивает у пользователя значение переменной `a` и вычисляет `x` в
соответствии с формулой \(x = 2a + 1\). Затем она возвращает вычисленные
значения `x` и `a`.

3. def calculate_upper_value(x): здесь определена функция


calculate_upper_value(x), которая принимает аргумент “x” и вычисляет
верхнее значение уравнения (2*sin ( x )2+ 3).

4.def calculate_lower_value(x, a): Эта функция calculate_lower_value(x, a)


получает значения “x” и “a” в качестве аргументов и вычисляет нижнее
значение уравнения, используя формулу(√ , 1+ a2 ⋅sin ( x )2 ).

5.def calculate_result(upper_value, lower_value): Определена функция


calculate_result(upper_value, lower_value), которая принимает верхнее и
нижнее значения уравнения и возвращает их отношение.

6.def main(): Это начало определения функции “main()”, которая является


главной точкой входа в программу. Внутри нее выполняется следующее:
- Получаются значения “x” и ”a” с помощью функции get_values().
- Вычисляются верхнее и нижнее значения уравнения с помощью функций
calculate_upper_value(x) и calculate_lower_value(x, a) соответственно.
- Результат вычислений получается через функцию
calculate_result(upper_value, lower_value).
- Результат выводится на экран с округлением до четырех знаков после
запятой.

7. if __name__ == "__main__": Этот блок проверяет, запущен ли скрипт


напрямую (а не импортирован ли он в другой скрипт). Если скрипт запущен
напрямую, вызывается функция “main()”, которая запускает основной поток
выполнения кода.

Вот сам результат программы данного кода:

20
Задание№3

Третье задание в курсовой работе - работа с итерационными


алгоритмами. Большинство практических задач требуют многократного
повторения одного и того же действия, то есть многократного использования
одного или нескольких операторов.
Предположим, вам нужно ввести и обработать определенную
последовательность чисел. Если чисел всего пять, можно составить
линейный алгоритм; если чисел 1000, линейный алгоритм тоже можно
написать, но он будет очень скучным и нелогичным. Если при разработке
алгоритма количество чисел неизвестно, то линейный алгоритм в принципе
невозможен.
Другой пример. Чтобы найти фамилию человека в списке, проверьте
первую фамилию в списке, затем вторую, затем третью ...... и так далее, пока
не будет найдена нужная фамилия или не будет достигнут конец списка. Эти
трудности можно преодолеть с помощью циклов.
Цикл - это часть алгоритма (программы), которая выполняется
многократно. Таким образом, итерационный алгоритм - это алгоритм,
содержащий циклы.
Существует два типа циклов: с известным числом итераций и с
неизвестным числом итераций. В обоих случаях речь идет о количестве
итераций на этапе разработки алгоритма.
Существует три типа структур циклов:
 циклы с предусловием;
 циклы с постусловиями;
 Циклы с параметрами [9].
Другими словами, итерационные алгоритмы используются для
выполнения повторяющихся задач в программах без необходимости
многократного написания кода. С помощью циклов можно автоматизировать
повторяющиеся операции, обрабатывать большие объемы данных в массивах
или выполнять действия определенное количество раз.
Условия третьего задания таковы: "Реализуйте три типа циклов: циклы
с параметрами, циклы с предусловием и циклы с постусловием".
Далее для решения данного задания
m
P=∏ ( 2 x j + z )
j =3

где
x j +1=x j +0.25
m, z, x 1−¿ввести с клавиатуры, была создана блок-схема, эта блок-
схема показывает как работает циклический алгоритм и какая идет
последовательность работы алгоритма.
Сама блок-схема циклического алгоритма показана на (рис.3)
НАЧАЛО

21
Ввести m , z , x 1

J=3

j>m НЕТ

Да

2 x j+z

x j +1=x j +0.25

Конец

Рисунок - 3 Цикл с предусловием

После создания блок-схемы для корректного решения данной задачи:


P= prod from {j=3} to {m} {left (2 {x} rsub {j} +z right ) x j +1=x j +0.25 m , z , x1 -ввести” ,
также была сделана трассировка, сама трассировка показывает
последовательность и сам конечный результат решение данной задачи. Здесь
ниже представлена сама трассировка

Итераций xj 2x j + z P

22
3 2.5 6 6
4 2.75 6.5 39
5 3.0 7 273
6 3.25 7.5 1911

И последний этап - это написание кода. Сам код прикреплён ниже.

Ниже приводится пошаговое описание того, что делает эта программа:


Получение данных.
- Пользователю предлагается ввести три числа: число для умножения
(m), значение (z) и первое число (x_1).
Первоначальная настройка:
- Программа начинает отсчет от значения (x_1).
- Начальное значение переменной (P) установлено на 1, так как число,
умноженное на 1, равно этому числу.
Умножение чисел:
- Программа начинает умножать числа по формуле: берет число (x),
удваивает его, прибавляет (z) и прибавляет это число к общему результату
(P).
- После каждого умножения текущее число (x) увеличивается на 0,25.
- Все эти числа умножаются вместе, чтобы получить сумму (P).
- После умножения всех чисел на заданное число (m) программа выдает
итоговое значение (P), которое является результатом всех умножений.
Таким образом, программа помогает учащимся решить задачу на
умножение чисел по формуле для получения конечного результата.
Вывод самой данной программы:

23
Таким образом, каждый этап цикла вносит свой вклад в общее дело.

Задание №4
Одномерный массив, иногда также называемый списком или вектором,
представляет собой структуру данных, которая хранит элементы одного типа
данных последовательно в одной линии. Он является основным и наиболее
простым типом массива.
Одномерный массив обычно представлен в виде упорядоченной
коллекции элементов, каждый из которых имеет свой индекс. Индексация
массива начинается с нуля для первого элемента, затем 1 для второго и так
далее. Каждый элемент можно обратиться по его индексу.
Итерационные алгоритмы являются важной частью разработки
программного кода, особенно при обработке одномерных массивов. Они
позволяют эффективно выполнять повторяющиеся операции над данными в
массивах без необходимости многократного написания кода.
Необходимо создать массив R, содержащий 20 случайных чисел в
пределах от -110 до 150. После этого требуется вычислить количество
отрицательных (ko) и положительных (kp) элементов в этом массиве. Если
количество отрицательных элементов (ko) превышает количество
положительных элементов (kp), то значения элементов массива следует
удвоить. В случае, если количество отрицательных элементов (ko) не
превышает количество положительных элементов (kp), значения элементов
массива необходимо умножить на -2.
Для решения задачи обработки одномерных массивов требуется
реализовать три типа циклов: циклы с параметрами, циклы с предусловием и
циклы с постусловием. Это позволяет эффективно решать повторяющиеся
задачи в программировании и обрабатывать массивы данных различных
размеров.
Преимущества одномерных массивов включают быстрый доступ к
элементам по индексу, эффективное управление большим объемом данных и
возможность использования различных операций над массивами, таких как
сортировка, фильтрация и преобразование элементов.
Далее для решение данной задачи: Создать массив R(20) случайных
чисел в диапазоне (-110;150). Вычислить количество отрицательных (ko) и
положительных (kp) элементов массива. Если ko>kp, то значения элементов
массива удвоить, если kokp, то значения элементов массива умножить на -2.
была создана блок-схема
Сама блок-схема циклического алгоритма показана на (рис.4)
Начало

24
Инициализация массива
R(20) случайными числами
(-110;150)

Подсчет отрицательных
(ko) и положительных
(kp) элементов в
массиве

Да Нет
ko > kp

Умножить значения
Удвоить значения
элементов массива R
элементов массива R
на -2

Конец

Рисунок.4

После создания блок-схемы для корректного решения данной задачи,


также была сделана трассировка, сама трассировка показывает
25
последовательность и сам конечный результат решение данной задачи. Здесь
ниже представлена сама трассировка

Итераций R ko kp
1 числа значение_1 значение_2
2 числа значение_3 значение_4
…… числа …….. ……
20 числа значение_39 значение_40

В этой таблице "число" означает саму последовательность чисел,


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

Завершающий этап - это сам код:

1. Импорт библиотеки random: `import random` - это команда, которая


позволяет использовать функции для генерации случайных чисел в Python.
2. Создание массива из случайных чисел: `R = [random.randint(-110, 150) for _
in range(20)]` - это строка создает массив `R` из 20 элементов, где каждый
элемент представляет собой случайное целое число в интервале от -110 до
150.
3. Подсчет отрицательных и положительных чисел в массиве:

26
- `ko = sum(1 for num in R if num < 0)`: `ko` - это количество отрицательных
чисел в массиве `R`. Он использует генератор списка для подсчета
количества элементов, удовлетворяющих условию `num < 0`.
- `kp = sum(1 for num in R if num > 0)`: `kp` - это количество положительных
чисел в массиве `R`. Он также использует генератор списка для подсчета
числа элементов, которые больше нуля.
4. Изменение значений элементов в массиве:
- `if ko > kp: R = [num * 2 for num in R]`: Если количество отрицательных
чисел (`ko`) больше количества положительных (`kp`), каждый элемент
массива `R` удваивается.
- `else: R = [num * -2 for num in R]`: В противном случае, если количество
отрицательных чисел меньше или равно количеству положительных, каждый
элемент массива `R` умножается на -2.
5.Вывод измененного массива и количества отрицательных и положительных
чисел:
- `print("Массив R после изменений:", R)`: Эта строка выводит измененный
массив `R`.
- `print("Количество отрицательных элементов (ko):", ko)`: Это выводит
количество отрицательных элементов в исходном массиве.
- `print("Количество положительных элементов (kp):", kp)`: А это выводит
количество положительных элементов в исходном массиве.

Вывод самой программы:

Задание №5
Двумерные массивы - это структуры данных, представляющие собой
таблицу из элементов, упорядоченных по двум индексам (обычно строкам и
столбцам). Они являются расширением понятия одномерных массивов, где
элементы упорядочены в строках и столбцах, позволяя хранить данные в
виде таблицы или сетки.
Каждый элемент двумерного массива имеет два индекса: первый
указывает на строку, а второй - на столбец. Например, чтобы обратиться к
элементу на позиции (i, j) в массиве, используют индексы i и j.
Двумерные массивы часто используются для хранения матриц,
изображений, таблиц данных и других структур, где данные организованы в
форме сетки или сетки.
Отличительные черты двумерных массивов:
Структура сетки: Элементы хранятся в форме таблицы с рядами и
столбцами.
Двойной индекс: Для доступа к элементам необходимо использовать два
индекса: один для строки, другой для столбца.

27
Далее была создана блок-схема для решения поставленной задачи. Эта блок-
схема показывает, как работает циклический алгоритм и каков порядок
действия алгоритма.

Начало

Создание
двумерного
массива Z(8,5)

Нахождение строки с
максимальным
элементом

Нахождение максимального
элемента в найденной
строке

Замена элементов
строки на найденный
максимум

Конец

28
Далее для правильного решения, был проведен процесс трассировки в
виде таблицы
Вот представлен сам процесс трассировки таблицы [7].
Шаг Действие Переменные/Данные
1 Создание массива Z из случайных чисел от 0 Z = [[34, 77, 12, 55, 90],
до 100 [18, 45, 67, 23, 88],
[92, 41, 30, 5, 20],
[75, 11, 64, 7, 35],
[50, 76, 83, 81, 3]
[46, 98, 72, 38, 85]
[79, 24, 14, 27, 99]
[93, 43, 22, 89, 2]]
2 Поиск строки с максимальным элементом max_row_index = 6
3 Нахождение максимального элемента в max_element = 99
строке с максимальным элементом
4 Замена всех элементов найденной строки на Z[6] = [99, 99, 99, 99, 99]
максимальный элемент
5 Вывод полученного массива "Двумерный массив Z после
замены:"
[[34, 77, 12, 55, 90],
[18, 45, 67, 23, 88],
[92, 41, 30, 5, 20],
[75, 11, 64, 7, 35],
[50, 76, 83, 81, 3],
[46, 98, 72, 38, 85],
[99, 99, 99, 99, 99],
[93, 43, 22, 89, 2]]

После создания блок-схемы и непосредственного написания


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

29
1. Создание двумерного массива:
- Используя генератор списков, создается двумерный массив `Z` размером
8x5, заполненный случайными числами от 0 до 100.
2. Нахождение строки с максимальным элементом:
- `max_row_index` находит индекс строки с максимальным значением в
массиве `Z`. Для этого используется функция `max()`, которая находит
максимальный элемент в каждой строке и выбирает индекс строки с самым
большим элементом.
3. Нахождение максимального элемента в найденной строке:
- `max_element` находит максимальный элемент в строке, полученной на
предыдущем шаге (`max_row_index`). Это делается с помощью функции
`max()`.
4. Замена всех элементов найденной строки на максимальный элемент:
- `Z[max_row_index] = [max_element] * len(Z[max_row_index])` заменяет все
элементы найденной строки (с индексом `max_row_index`) на максимальный
элемент этой строки.
5. Вывод полученного двумерного массива:
- `print("Двумерный массив Z после замены:", Z)` выводит измененный
массив `Z`.
Итак, в результате выполнения кода, элементы строки с максимальным
значением в массиве `Z` будут заменены на максимальный элемент этой
строки.
Теперь ниже приведён вывод данного кода:

30
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1.Томас Х. Кормен "Алгоритмы: построение и анализ".(Электронный


вариант) Доступно по ссылке: http://www.r-5.org/files/books/computers/algo-
list/common/Cormen_Leiserson_Rivest_Stein-Introduction_to_Algorithms-
RU.pdf
2."Introduction to Algorithms" (Том Кормен, Чарльз Лейзерсон, Рональд
Ривест, Клиффорд Штайн) Доступно по ссылке:
https://e-maxx.ru/bookz/files/cormen.pdf
3."Algorithms" (Роберт Седжвик, Кевин Уэйн)Доступно по ссылке:
https://algs4.cs.princeton.edu/home/
4."The Algorithm Design Manual" (Стивен Скиена)Доступно по ссылке:
https://balka-book.com/files/2018/02_02/10_50/u_files_store_3_658271.pdf
5."Data Structures and Algorithms in Python" (Майкл Т. Гудрич, Роберт
Лафоре)Доступно по ссылке: https://pythonz.net/books/31/
6."Data Structures and Algorithms Made Easy" (Нарасимха Каруманну,
Сриниваса Ваддем)Доступно по ссылке:
https://www.logobook.kz/prod_show.php?object_uid=14403234
7."Problem Solving with Algorithms and Data Structures using Python"
(Брэд Миллер, Дэвид Ранум)Доступно по ссылке:
https://runestone.academy/ns/books/published/pythonds/index.html
8.Steve Mcconnell Code complete доступно по ссылке:
https://www.oreilly.com/library/view/code-complete-2nd/0735619670/
9.Grady Booch Object-Oriented Analysis and Design With Applications
10.Donald Knuth "The Art of Computer Programming": https://www-cs-
faculty.stanford.edu/~knuth/taocp.html
11.Бьёрн Страуструп programming principles and practice using c++:
https://dl.icdst.org/pdfs/files3/fef0590f02fa06bb42cba558fbc9e51c.pdf
12.Линус Торвальдс “Open
Sources”:https://smaldone.com.ar/documentos/libros/opensources.pdf
13.Нарасимха Каруманну, Сриниваса Ваддем "Структуры данных и
алгоритмы - это просто": https://vk.com/doc255577237_555100043?
hash=AIOyLfizsLDpczBEqIZTQC84ernPyFlGkswBB2MzUvg&dl=vX3VsKwM
ZZnbonBq3aZ1AAKRzwMoJ36UXZbRwZzgFng
14. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford
Stein (авторы "Introduction to Algorithms"):
https://dl.ebooksworld.ir/books/Introduction.to.Algorithms.4th.Leiserson.Stein.Riv
est.Cormen.MIT.Press.9780262046305.EBooksWorld.ir.pdf
15. Горностаева, Татьяна Николаевна, Алгоритмы. Учебное пособие –
Мир науки, 2019. (Электронный вариант) Доступен по ссылке: https://izd-
mn.com/PDF/33MNNPU19.pdf
16. Теория алгоритмов (Электронная версия) Доступна по ссылке:
https://ru.wikiversity.org/wiki/%D0%A2%D0%B5%D0%BE
%D1%80%D0%B8%D1%8F_%D0%B0%D0%BB%D0%B3%D0%BE
%D1%80%D0%B8%D1%82%D0%BC%D0%BE%D0%B2
31
17. Н. В. Пацей Основы алгоритмизации и программирования
(Электронный вариант) Доступен по
ссылке:https://core.ac.uk/download/pdf/144004392.pdf
18. Книга: C# 4.0: полное руководство (Электронный вариант)
Доступен по ссылке: https://wm-help.net/lib/b/book/1368874890/70
19.Горностаева, Татьяна Николаевна, Алгоритмы. Учебное пособие –
Мир науки, 2019. (Электронный вариант) Доступен по ссылке: https://izd-
mn.com/PDF/33MNNPU19.pdf
20. Рафгарден Тим “Совершенный алгоритм” Доступно по ссылке:
https://дз.ею/tmp/Bibl_progr_Sb_187kn/Совершенный%20алгоритм.
%20Основы.%202019.pdf

Руководитель работы: Старший преподаватель, PhD доктор, Бельдеубаева


Ж.Т.
Задание приняли к исполнению Қарсұлтанов Төрегелді Бауржанұлы

__________________________
(подпись обучающегося, ФИО)

32
ПРИЛОЖЕНИЯ

В приложениях поместить листинги программ

33

Вам также может понравиться