Главная страница
Навигация по странице:

  • По дисциплине

  • Задание/вариант №

  • Расчетно-аналитическое задание

  • рейтинговая работа python. Коростелёв М.В.. Кафедра информационных систем


    Скачать 57.66 Kb.
    НазваниеКафедра информационных систем
    Анкоррейтинговая работа python
    Дата04.12.2022
    Размер57.66 Kb.
    Формат файлаdocx
    Имя файла Коростелёв М.В..docx
    ТипДокументы
    #827118



    Кафедра ___информационных систем_________________________


    Рейтинговая работа Расчетно-аналитическое задание



    По дисциплине Алгоритмизация и программирование
    Задание/вариант № 10

    Выполнена обучающимся группы з.ИЗДтс 23.1/Б3-21

    Коростелев Максим Витальевич__________________________________

    (фамилия, имя, отчество)
    Преподаватель ____________________________________________________

    (фамилия, имя, отчество)

    Москва – 2022 г.

    Оглавление


    1. Введение 4

    2.Задание для выполнения рейтинговой работы 5

    3. Описание программы 7

    Список используемой литературы 12



    1. Введение


    Рейтинговая работа по дисциплине выполнена мной в ходе самостоятельной работы и является обязательным элементом балльно-рейтинговой системы Университета.

    Расчетно-аналитическое задание – самостоятельная работа, требующая от меня как обучающегося умений применять полученные в ходе изучения дисциплины «Алгоритмизация и программирование» знания и навыки при решении алгоритмических задач и выполнении заданий с использованием типовых алгоритмических конструкций. Выполнение расчетно-аналитического задания ориентировано на развитие навыков программирования на языке Python, логического и аналитического мышления.

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

    2.Задание для выполнения рейтинговой работы


    Дан ряд целых чисел, полученный в результате обработки символов Фамилии, Имени, Отчества обучающегося, а также его ID. Необходимо отсортировать набор данных двумя способами, а также выполнить некоторые арифметические расчеты.

    2.1 исходные данные

    ФИО: Коростелёв Максим Витальевич

    ID учащегося: 70185305

    Содержатся в файле sourse_data.txt

    Пробелы между словами ФИО в обработке набора данных не участвуют. ФИО и ID разделены символом enter (u000a). Данный символ в последующей обработке набора данных не участвует. После номера ID символ enter не стоит; В файле source_data.txt содержится всего две строки.
    Требуется написать программу на языке Python, которая выполняет следующие задачи:

    1. Считать исходные данные из текстового файла source_data.txt

    2. Вычислить целое значение, получившееся в результате деления ID на количество символов, составляющих ФИО (количество символов подсчитывается без учета пробелов).

    3. Определить направление сортировки в зависимости от числа, полученного в п.2:

    - сортировка по возрастанию, если число чётное;

    - сортировка по убыванию, если число нечётное.

    4. Сформировать набор данных (список) из кодов Юникода каждого символа ФИО (исключая пробелы между словами), переведенных в десятичную форму.

    5. Выполнить сортировку набора данных по убыванию или по возрастанию. Сортировку выполнить двумя различными способами, например: сортировка выбором и сортировка методом простого обмена (пузырька). В программном коде должны быть представлены комментарии, обозначающие тот или иной алгоритм сортировки.

    # алгоритм сортировки по методу пузырька

    # алгоритм "Шейкерная сортировка"

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

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

    3. Описание программы


    Опишем два алгоритма сортировки:

    3.1 сортировка вставками

    С помощью этого алгоритма делим список на две части: отсортированную и неотсортированную. Алгоритм перебирает второй сегмент и вставляет текущий элемент в правильную позицию первого сегмента.

    Предположим, что первый элемент списка уже отсортирован. Переходим к следующему элементу, обозначим его х. Если х больше первого, оставляем его на своём месте. Если он меньше, копируем его на вторую позицию, а х устанавливаем как первый элемент.

    Переходя к другим элементам несортированного сегмента, перемещаем более крупные элементы в отсортированном сегменте вверх по списку, пока не встретим элемент меньше x или не дойдём до конца списка. В первом случае x помещается на правильную позицию.

    def insertion_sort():

    nums = array[:] #копируем исходный массив

    #в зависимости от четности выбираем направление сортировки

    if parity:

    for i in range(1, len(nums)): # Сортировку начинаем со второго элемента, т.к. считается, что первый элемент уже отсортирован

    item_to_insert = nums[i] #Сохраним ссылку на индекс предыдущего элемента

    j = i – 1 # Элементы отсортированного сегмента перемещаем вперёд, если они больше

    # элемента для вставки

    while j >= 0 and nums[j] > item_to_insert:

    nums[j + 1] = nums[j]

    j -= 1 # Вставляем элемент

    nums[j + 1] = item_to_insert

    else:

    for i in range(1, len(nums)):

    item_to_insert = nums[i]

    j = i - 1

    while j >= 0 and nums[j] < item_to_insert:

    nums[j + 1] = nums[j]

    j -= 1

    nums[j + 1] = item_to_insert

    return nums

    Сложность: в среднем равна O(n²)

    3.2 сортировка выборкой

    Как и сортировка вставкой, этот алгоритм разделяет список на две части: отсортированную и неотсортированную. Наименьший элемент удаляется из второго списка и добавляется в первый.

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

    Теперь, когда нам известно, что первый элемент списка отсортирован, находим наименьший элемент из оставшихся и меняем местами со вторым. Повторяем это до тех пор, пока не останется последний элемент в списке.

    def selection_sort():

    nums = array[:] #копируем исходный массив

    #в зависимости от четности выбираем направление сортировки

    if parity:

    for i in range(len(nums)): # Значение i соответствует кол-ву отсортированных значений

    lowest_value_index = i # Исходно считаем наименьшим первый элемент

    for j in range(i + 1, len(nums)): # Этот цикл перебирает несортированные элементы

    if nums[j] < nums[lowest_value_index]:

    lowest_value_index = j # Самый маленький элемент меняем с первым в списке

    nums[i], nums[lowest_value_index] = nums[lowest_value_index], nums[i]

    else:

    for i in range(len(nums)):

    lowest_value_index = i

    for j in range(i + 1, len(nums)):

    if nums[j] < nums[lowest_value_index]:

    lowest_value_index = j

    nums[i], nums[lowest_value_index] = nums[lowest_value_index], nums[i]

    return nums

    Сложность: в среднем равна O(n²)

    3.3 среднее квадратическое значение

    def root_mean_square_counting():

    sum_of_squares = sum([i * i for i in array])

    average_sum = sum_of_squares / len(array)

    return round(average_sum ** 0.5, 3)

    3.4 cреднее арифметическое значение

    def arithmetic_mean_counting():

    total_sum = sum(array)

    return round(total_sum / len(array), 3)

    3.5 чтение файла

    with open("sourse_data.txt", encoding='utf-8') as f:

    name = f.readline()[:-1]

    student_id = f.readline()

    array = [ord(i) for i in name.replace(' ', '')] # составление массива из ascii кодов

    number = int(int(student_id) / len(array)) # поиск длинны строки

    parity = number % 2 == 0 # четность числа

    sort_array = insertion_sort() # вызов сортировки

    arithmetic_mean = arithmetic_mean_counting() # вызов подсчета среднего арифметического

    root_mean_square = root_mean_square_counting() # вызов подсчета среднего квадратического

    increasing = 'возрастанию' if parity else 'убыванию' # определяем возрастание/убывание

    3.6 формирование ответа

    answer = f"""1. Исходные данные: {name}; ID: {student_id}

    2. {number}

    3. Направление сортировки: по {increasing}, так как число {number} – {'чётное' if parity else 'нечётное'}

    4. Набор данных: {array}

    5. Отсортированный по {increasing} набор данных {sort_array}

    7. Среднее арифметическое значение: {arithmetic_mean}

    8. Среднее квадратическое значение: {root_mean_square}

    """

    3.7 запись в файл

    with open("result.txt", "w", encoding='utf-8') as f:

    f.write(answer)
    4 Выходные данные

    В текстовый файл result.txt выведены результаты:

    1. Исходные данные: Коростелёв Максим Витальевич; ID: 70185305

    2. 2699434

    3. Направление сортировки: по возрастанию, так как число 2699434 – чётное

    4. Набор данных: [1050, 1086, 1088, 1086, 1089, 1090, 1077, 1083, 1105, 1074, 1052, 1072, 1082, 1089, 1080, 1084, 1042, 1080, 1090, 1072, 1083, 1100, 1077, 1074, 1080, 1095]

    5. Отсортированный по возрастанию набор данных [1042, 1050, 1052, 1072, 1072, 1074, 1074, 1077, 1077, 1080, 1080, 1080, 1082, 1083, 1083, 1084, 1086, 1086, 1088, 1089, 1089, 1090, 1090, 1095, 1100, 1105]

    7. Среднее арифметическое значение: 1080.0

    8. Среднее квадратическое значение: 1080.091

    Список используемой литературы


    1. «Введение в программирование на Python» Автор: Северенс Ч. Объем: 231 стр. 2016г

    2. «Основы программирования на языке Python: учебное пособие» Автор: Буйначев С. К. Боклаг Н. Ю. Объем: 92 стр. 2014г

    3. Интернет ресурс «pythonworld.ru» 2012-2022г


    написать администратору сайта