Лаб. Занятие 11. Обязательные задания для решения в классе.
Лаб. Занятие 11. Обязательные задания для решения в классе [3 балла]
Требования к работе
- Разделяемую память должен создавать только первый процесс.
- При повторной попытке создать разделяемую память должна выдаваться ошибка.
- Второй(и остальные, если есть по заданию) процесс должен подключаться к уже существующей памяти.
- По окончании работы процессов память должна удаляться.
Задание 11.0
Реализовать программу для игры двух пользователей в игру «крестики-нолики» на поле размеров, как минимум, 3 × 3. Процесс должен дождаться запуска взаимодействующего процесса. Далее случайным образом определяется очерёдность ходов, после чего оба процесса по очереди ждут от пользователей ввода данных.
Задание 11.1
Реализовать программу для игры двух пользователей в игру «морской бой». Расположение кораблей игрока можно считывать из файла в виде матрицы занятости клеток без проверки на корректность. Процесс должен дождаться запуска взаимодействующего процесса. Далее случайным образом определяется очерёдность ходов, после чего каждый из процессов в свою очередь ждёт от пользователя ввода данных. Если игрок угадывает клетку, в которой находится корабль противника, он получает право следующего хода. В противном случае право хода передаётся противнику.
Задание 11.2
Реализовать программу, которая дожидается запуска заданного количества экземпляров своего процесса, которым назначаются последовательные номера. Дальше первый процесс генерирует последовательность случайных чисел, которые передаёт второму процессу. Второй процесс увеличивает каждое получаемое число на 1 и передаёт дальше. Последний процесс после увеличения чисел выводит их на печать. Передачу значений можно организовать при помощи массива в разделяемой памяти.
Задание 11.3
Реализовать программу, которая дожидается запуска заданного количества экземпляров своего процесса, которым назначаются последовательные номера. Дальше первый процесс генерирует случайное число, которое передаёт второму процессу. Второй процесс увеличивает число на 1 и передаёт дальше. Последний процесс после увеличения числа передаёт его первому процессу, который после его увеличения выводит на печать. Передачу значений можно организовать при помощи массива в разделяемой памяти.
Задание 11.4
Реализовать две программы, одна из которых генерирует последовательность целых чисел:
xi = [A sin (ω i)] ∀ i = 0, 1, ..., T
для заданных A, ω и T. (Здесь квадратные скобки обозначают операцию округления). После генерирования очередной порции данных программа записывает их в буфер ограниченного размера и дожидается, пока другая программа не прочитает их оттуда. Вторая программа после получения очередной порции данных должна выводить их на печать.
Задание 11.5
Реализовать две программы, первая из которых, будучи запущенной в нескольких экземплярах процесса, получает свой порядковый номер и записывает его заданное количество раз в буфер ограниченного размера. Другая программа должна забрать эти данные из буфера и вывести на печать.Задание 11.6
Напишите программы для реализации следующей задачи. Программа клиент генерирует случайным образом N целых чисел в диапазоне от M до K и передает их серверу через разделяемую память. Сервер принимает числа и подсчитывает две суммы - отдельно для четных чисел и для нечетных. Получив все переданные числа, сервер выводит полученные значения сумм на stdout.
Задание 11.7
Напишите программы для реализации следующей задачи. Программа клиент генерирует случайным образом N целых чисел в диапазоне от M до K и передает их серверу через разделяемую память. Сервер принимает числа, возводит их в квадрат и выводит в стандартный поток вывода.
Задание 11.8
Напишите программы для реализации следующей задачи. Программа клиент генерирует случайным образом N целых чисел в диапазоне от M до K и передает их серверу через разделяемую память. Сервер принимает числа и подсчитывает количество чисел, лежащих в диапазоне [M, (K-M)/2-1] и в диапазоне [(K-M)/2, K]. Получив все переданные числа, сервер выводит посчитанные количества на stdout.
Задание 11.9
Напишите программы для реализации следующей задачи. Программа клиент генерирует случайным образом N целых чисел в диапазоне от M до K и передает их серверу через разделяемую память. Сервер принимает числа и вычисляет среднее арифметическое чисел. Получив все переданные числа, сервер выводит посчитанное значение на stdout.
Задание 11.a
Напишите программы для реализации следующей задачи. Программа клиент записывает в разделяемую память последовательность символов. Сервер принимает эту последовательность и находит в ней наиболее длинную последовательность из подряд идущих одинаковых символов. После чего выводит индекс её начала, длину и символ на stdout.
Задание 11.b
Напишите программы для реализации следующей задачи. Программа клиент записывает в разделяемую память некоторую подстроку, заданной длины и последовательность символов. Сервер принимает эти данные и находит в подпоследовательности все вхождения заданной строки. После чего выводит позиции начала каждого вхождения на stdout.
Задание 11.c
Напишите программы для реализации следующей задачи. Программа клиент записывает в разделяемую память последовательность символов. Сервер принимает эту последовательность и заменяет все строчные латинские символы на заглавные. После чего выводит последовательность на stdout.
Задание 11.d
Напишите программы для реализации следующей задачи. Программа клиент записывает в разделяемую память последовательность символов. Сервер принимает эту последовательность и записывает ее в обратном порядке. После чего выводит результат на stdout.
Задание 11.e
Напишите программы для реализации следующей задачи. Программа клиент записывает в разделяемую память последовательность символов. Сервер принимает эту последовательность производит "циклический сдвиг" содержимого на заданное количество байт влево: сначала записать содержимое последовательности с заданной позиции до конца, затем дописать начало последовательности до заданной позиции.
Задание 11.f
Реализовать программу, которая дожидается запуска заданного количества экземпляров своего процесса, которым назначаются последовательные номера. Дальше первый процесс генерирует последовательность случайных символов, которые передаёт второму процессу. Второй процесс шифрует символ увеличивая его код на заданное значение и передаёт дальше. Последний процесс после изменения символов выводит их на печать. Передачу значений можно организовать при помощи массива в разделяемой памяти.
Задание 11.g
Реализовать программу, которая дожидается запуска заданного количества N экземпляров своего процесса, которым назначаются последовательные номера. Дальше первый процесс генерирует последовательность из N случайных чисел, которые передаёт второму процессу. Второй процесс увеличивает второе получаемое число на 1 и передаёт дальше. Третий процесс увеличивает третье получаемое число на 1 и передаёт дальше. Последний процесс после увеличения последнего числа выводит все числа на печать. Передачу значений можно организовать при помощи массива в разделяемой памяти.
Задание 11.h
Реализовать 2 программы. Первая программа дожидается запуска заданного количества экземпляров второй программы, которым назначаются последовательные номера. Дальше первая программа генерирует последовательность случайных символов, которые передаёт второй программе. Второй процесс шифрует символ увеличивая его код на заданное значение и передаёт дальше. Последний процесс после изменения символов выводит их на печать. Передачу значений можно организовать при помощи массива в разделяемой памяти.
Задание 11.i
Реализовать 2 программы. Первая программа дожидается запуска заданного количества N экземпляров второй программы, которым назначаются последовательные номера. Дальше первый процесс генерирует последовательность из N случайных чисел, которые передаёт второй программе. Второй процесс увеличивает второе получаемое число на 1 и передаёт дальше. Третий процесс увеличивает третье получаемое число на 1 и передаёт дальше. Последний процесс после увеличения последнего числа выводит все числа на печать. Передачу значений можно организовать при помощи массива в разделяемой памяти.
Задание 11.j
Реализовать 2 программы. Первая программа дожидается запуска заданного количества экземпляров второй программы, которым назначаются последовательные номера. Дальше первая программа генерирует последовательность случайных чисел, которые передаёт второй программе. Второй процесс увеличивает каждое получаемое число на 1 и передаёт дальше. Последний процесс после увеличения чисел выводит их на печать. Передачу значений можно организовать при помощи массива в разделяемой памяти.
Задание 11.k
Реализовать 2 программы. Первая программа дожидается запуска заданного количества экземпляров второй программы, которым назначаются последовательные номера. Дальше первая программа генерирует случайное число, которое передаёт второму процессу. Второй процесс увеличивает число на 1 и передаёт дальше. Последний процесс после увеличения числа передаёт его первому процессу, который после его увеличения выводит на печать. Передачу значений можно организовать при помощи массива в разделяемой памяти.
Задание 11.l
Напишите программы для реализации следующей задачи. Программа клиент записывает в разделяемую память последовательность символов. Сервер принимает эту последовательность и выводит на stdout сам символ и его код.
Задание 11.m
Реализовать программу, которая дожидается запуска заданного количества N экземпляров своего процесса, которым назначаются последовательные номера. Дальше первый процесс генерирует последовательность из N*N случайных чисел, которые передаёт второму процессу. Второй процесс считает сколько раз его порядковый номер встретился в этой последовательности. Аналогично третий процесс считает сколько раз его порядковый номер встретился в этой последовательности. После окончания работы всех процессов первая программа выводит на консоль сгенерированную последовательность символов. Передачу значений можно организовать при помощи массива в разделяемой памяти.