Сборник решений задач из рубежных тестирований в курсе "Языки системного программирования" (автор заданий и курса - @sayon).
Нарисуйте и закодируйте на ассемблере конечный автомат, который проверяет входную строчку и отвечает, содержит ли она ровно два слова, а за ними число. Слова состоят только из символов [a-z], разделены только одинарными пробелами. Макрос get_symbol кладёт в ah следующий символ.
Переведите на ассемблер следующую функцию и последовательность команд для её вызова с аргументами 42, 43, 1.0
int f( int a, long b, float c) { return a + b + *((int*)(&c)); }
Напишите функцию на ассемблере, которая примет строку и подсчитает количество пропусков в ней, состоящих из пробелов или табуляции (вперемешку).
Напишите функцию на C, которая примет указатель на массив чисел типа int и его размер, и заполнит его числами Фибоначчи. Числа Фибоначчи образуют последовательность: 1, 1, 2, 3, 5, 8, ... (каждый следующий элемент – сумма двух предыдущих). Функция не должна использовать рекурсию, malloc и выделять больше 128 байт в стеке.
Напишите функцию на ассемблере, которая примет строку, указатель на буфер в памяти и символ. Она заполнит буфер содержимым строки, перемежая символы строки своим третьим аргументом. Например, для строки “abc” и символа “x” результат “axbxcx”.
Напишите функцию на ассемблере, которая примет строку, посчитает её длину и определит, является ли длина простым числом.
Подсчитайте количество букв в строке и верните указатель на массив, в котором будут храниться результаты подсчёта. 42-ой элемент массива соответствует количеству вхождений символа с кодом 42 и т.д. Оформить в виде функции.
Напишите функцию на ассемблере, которая примет строку и подсчитает количество неотрицательных чисел в ней.
Реализуйте очередь на основе односвязного списка в C.
Напишите функцию на ассемблере, которая примет строку и два символа. Она должна произвести текстовую замену первого символа на второй.
Напишите функцию на ассемблере, которая примет две строки и перемешает их содержимое. Например, “abc” и “def” => “adbecf”.
В массиве char’ов есть только строчные буквы латиницы. Отсортируйте их подсчётом по возрастанию (подсчитав количество вхождений каждой буквы, а затем перезаписав массив). C. Разумеется, оформить в виде функции.
В массиве char’ов есть только цифры. Отсортируйте их на C подсчётом по возрастанию (подсчитав количество вхождений каждой цифры, а затем перезаписав массив). Оформить в виде функции.
С: разбейте строку на слова и верните указатель на массив слов, каждое из которых завершено нуль-терминатором. Строку нельзя менять.
Напишите функцию, которая подсчитает количество слов из более, чем трёх букв в строке. C.
Напишите функцию на С, которая сольёт две строчки в одну, выделив для неё память в куче.
Опишите двоичное дерево на С, хранящее int (каждый элемент имеет не более двух детей). Напишите map для него.