Очевидно, конечная задача решается не оптимально. Можно было динамически проверять числа в первом цикле и сразу выводить их на экран. Однако в общем условии было сказано, что программа должна сохранять данные в массив A, а потом формировать массив B, и лишь после выводить массив B. По этой причине некоторые действия, например, проверка числа на кратность лишь для определения размера массива B, могут выглядеть искусственно.
- base.c - базовая программа С одной функцией
main
. - base_compiled - базовая программа на C, откомпилированная без модификации ассемблерного кода.
- clean_base_with_comments.s - базовая программа на C скомпилированная до уровня ассемблерных команд, которая была откомпилирована с флагами:
-O0 -Wall -masm=intel -S -fno-asynchronous-unwind-tables -fcf-protection=none
, а также модифицированна вручную и дополнена комментариями. - clean_base_with_comments - запускаемый файл модфицированной программы, скомпилированный без использования опций отладки.
- with_funcs.c - программа на C, переписанная с добавлением функций.
- with_funcs_with_comments.s - программа с функциями, прокомпилированная до уровня ассемблерных команд, с комментариями, поясняющими связь регистров/стековых адресов с переменными языка C. Откомпилирована с флагами:
-O0 -Wall -masm=intel -S -fno-asynchronous-unwind-tables -fcf-protection=none
. - with_funcs_with_comments_compiled - запускаемый файл программы, написанной с использованием функций.
Тесты ставят перед собой задачу проверки правильности работы программ на корректных данных. Поэтому на входные данные наложены следующие условия:
- Размер массива A - натуральное число (исходя из того, что в условии это число было обозначено буквой n).
- Число-делитель не равно нулю, так как делимость на ноль (в обычном понимании) проверить нельзя.
- На вход программе подается ровно столько чисел для заполнения массива A, сколько было указано первым входным параметром.
Входные данные:
5 2
1 2 3 4 5
Ожидаемые выходные данные:
2 4
Входные данные:
1 4242
42
Ожидаемые выходные данные:
Входные данные:
1 1
42
Ожидаемые выходные данные:
42
Входные данные:
5 2
-2 -1 0 1 2
Ожидаемые выходные данные:
-2 0 2
Входные данные:
7 -3
-7 -6 0 3 2 -9 6
Ожидаемые выходные данные:
-6 0 3 -9 6