Комиссия 28.09.26
Открыто с: понедельник, 28 сентября 2026, 15:00
Срок сдачи: понедельник, 28 сентября 2026, 18:00
Требуемые условия завершения
Вариант 1
-
[20 баллов] Создайте функцию
SUM_DIG, которая подсчитывает сумму цифр составляющих число. В качестве параметра функции передаётся обрабатываемое число. Создайте процедуруMAP, которая получает в качестве параметров через стек длину массива, адреса двух массивов одинаковой длины и функцию, которую она применяет к каждому элементу первого массива. Результат применения функции записывается в соответствующий элемент второго массива. В основной программе вызовите процедуруMAPдля исходного массива {90, 120, 411, 172}, массива для результатов и функцииSUM_DIG. Массив для результатов такого же размера следует объявить в секции неинициализированных данных. После вызова процедуры следует распечатать на консоль массив результатов. -
[20 баллов] Реализуйте на языке микроассемблера MAL инструкцию DUP_XYZ Код для инструкции подберите самостоятельно. Для работы инструкции положить на стек три числа v1, v2, v3. Инструкция должна менять содержимое стека следующим образом: значение v1, должно замениться на сумму трех величин v1+v2+v3, значение v2, должно замениться на разность трех величин v1-v2-v3, значение v3, должно замениться на v1+v2 - v3 Т.е. если до инструкции стек имел вид ....s , v1, v2, v3 (v3- значение, лежащее на вершине стека) то после выполнения DUP_XYZ стек должен иметь вид ...s, v1+v2+v3, v1-v2-v3, v1+v2 - v3.
-
[20 баллов] Написать программу на языке C, которая использует потоки и разделяемую память для подсчета частоты символов в заданной строке. Программа должна разбивать строку на несколько частей, каждая из которых обрабатывается отдельным потоком.– Создайте структуру, которая будет содержать:▪ Указатель на строку.▪ Два целых числа: индекс начала и индекс конца части строки, которую будет обрабатывать поток.▪ Массив для хранения частоты символов.– Используйте shmget и shmat для создания и подключения к разделяемой памяти, где будет храниться общий массив частоты символов.– Используйте библиотеку pthread для создания нескольких потоков (например, 4 потока).– Каждый поток должен обрабатывать свою часть строки и обновлять общий массив частоты символов в разделяемой памяти.– Программа должна считывать строку из стандартного ввода.– Разделите строку на части, которые будут обрабатываться потоками.– Используйте мьютексы для синхронизации доступа к общему массиву частоты символов, чтобы избежать состояния гонки.– После завершения работы всех потоков, главный поток должен вывести частоту каждого символа.
Вариант 2
-
[20 баллов] Создайте функцию
F, которая вычисляет значение многочлена по формуле 3x4/8+x−12. В качестве параметра функции передаётся значение x. Создайте процедуруMAP, которая получает в качестве параметров через стек длину массива, адреса двух массивов одинаковой длины и функцию, которую она применяет к каждому элементу первого массива. Результат применения функции записывается в соответствующий элемент второго массива. В основной программе вызовите процедуруMAPдля исходного массива {3, 2, 1, 4}, массива для результатов и функцииF. Массив для результатов такого же размера следует объявить в секции неинициализированных данных. После вызова процедуры следует распечатать на консоль массив результатов. -
[20 баллов] Реализуйте на языке микроассемблера MAL инструкцию DUP_ZYX Код для инструкции подберите самостоятельно. Для работы инструкции положить на стек три числа v1, v2, v3. Инструкция должна менять содержимое стека следующим образом: значение v1, должно замениться на v1+v2-v3, значение v2, должно замениться на разность трех величин v1-v2-v3, значение v3, должно замениться на на сумму трех величин v1+v2+v3 Т.е. если до инструкции стек имел вид ....s , v1, v2, v3 (v3- значение, лежащее на вершине стека) то после выполнения DUP_ZYX стек должен иметь вид ...s, v1+v2-v3, v1-v2-v3, v1+v2 +v3.
-
[20 баллов] Написать программу на языке C, которая использует потоки и разделяемую память для подсчета частоты элементов в заданном массиве целых чисел. Программа должна разбивать массив на несколько частей, каждая из которых обрабатывается отдельным потоком.– Создайте структуру, которая будет содержать:▪ Указатель на массив.▪ Два целых числа: индекс начала и индекс конца части массива, которую будет обрабатывать поток.▪ Массив для хранения частоты элементов массива.– Используйте shmget и shmat для создания и подключения к разделяемой памяти, где будет храниться общий массив частоты элементов массива.– Используйте библиотеку pthread для создания нескольких потоков (например, 4 потока).– Каждый поток должен обрабатывать свою часть массива целых чисел и обновлять общий массив частоты элементов массива в разделяемой памяти.– Программа должна считывать массив из файла.– Разделите массив на части, которые будут обрабатываться потоками.– Используйте мьютексы для синхронизации доступа к общему массиву частоты символов, чтобы избежать состояния гонки.– После завершения работы всех потоков, главный поток должен вывести частоту каждого числа из исходного массива.