Skip to content

Latest commit

 

History

History

idz-03

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

ИДЗ-3. Работа с числами с плавающей точкой.

Вариант 33.

Задание

Разработать программу, определяющую корень уравнения x^3−0.5x^2+0.2x − 4 = 0 методом половинного деления с точностью от 0,001 до 0,00000001 в диапазоне [1;3].Если диапазон некорректен, то подобрать корректный диапазон.

Оглавление

Введение

Отчет

Прочее

Введение

О программе

Программа на C изначально разрабатывалась с учетом всех требований включительно до оценки 9. Поэтому, с самого начала, присутствует разделение на модули, работа с файлами, генерация случайных данных и подсчет времени работы программы.

После работы, в консоль выводится затраченное время в миллисекундах (без учета ввода и вывода).

Входные данные

Ограничение на точность: 0 < e (epsilon).

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

Аргументы запуска

TODO

Аргумент Описание Пример
./a.out <epsilon> ./a.out 0.001
<epsilon> -file <входной файл> [выходной файл] Передача и получение данных из программы с использованием файлов. Выходной файл может быть опущен, в таком случае результат выполнения будет выведен в консоль ./a.out 0.3 -file input.txt, ./a.out 0.1 -file input.txt output.txt
-random <seed> Запуск программы в режиме генерацией случайных данных. Сгенерированная строка и результат выполнения выводятся в консоль ./a.out -random 10
-test <seed> Стресс-тестирование программы. ./a.out -test 235

Представленные файлы

| /c-source - исходный код программы на языке C
| /tests
|   | /temp - папка с временными файлами генерируемыми тестовой утилитой. которые подаются на вход программе
|   | main.py - утилита тестирования
| /version-1 - ASM c исполняемым файлом полученный из c-source
| /version-2 - ASM с комментариями и исполняемым файлом (на базе version-0)

О тестировании

Для тестирования был написан специальный Python скрипт, который генерирует многочисленные наборы случайных данных вида (input, correct_answer) на которых тестируется каждая программа. В рамках одного тестового прогона, наборы подаваемые на вход каждой программы одинаковы.

Тестирование файлового и консольного режима также происходит на одинаковых данных.

Для стресс-теста, каждая программа запускается скриптом несколько раз в режиме -test, при этом время выполнения суммируется.

Ознакомиться подробнее с алгоритмом можно в main.py

Mark 4

Для получения ASM кода использовался следующий набор опций

gcc -masm=intel \
    -fno-asynchronous-unwind-tables \
    -fno-jump-tables \
    -fno-stack-protector \
    -fno-exceptions \
    ../c-source/*.c \
    -S

Макросов в полученных ASM файлах не оказалось, но мною была удалена бОльшая часть служебных меток GCC.

Для получения исполняемого файла из ASM

gcc *.s

Результаты тестовых прогонов

python3 tests/main.py c-source/a.out version-1/a.out
Running 300 tests of random on each executable...
✓ c-source/a.out:       Random Tests Passed
✓ version-1/a.out:      Random Tests Passed

Running 300 tests on each executable...
✓ c-source/a.out:       Console Tests passed
✓ version-1/a.out:      Console Tests passed
✓ c-source/a.out:       File Tests passed
✓ version-1/a.out:      File Tests passed

Mark 5

Checklist

4 балла

  • Приведено решение задачи на C на планируемую оценку. Ввод данных осуществляется с клавиатры. Вывод данных осуществляется на дисплей.
  • В полученную ассемблерную программу, откомпилированную без оптимизирующих и отладочных опций, добавлены комментарии, поясняющие эквивалентное представление переменных в программе на C. То есть, для всех ссылок на память, включая и относительные адреса и регистры, указать имя переменной на языке C исходной программы.
  • Из ассемблерной программы убраны лишние макросы за счет использования при компиляции из C соответствующих аргументов командной строки и/или за счет ручного редактирования исходного текста ассемблерной программы.
  • Модифицированная ассемблерная программа отдельно откомпилирована и скомпонована без использования опций отладки.
  • Представлено полное тестовое покрытие, дающее одинаковый результат на обоих программах. Приведены результаты тестовых прогонов для обоих программ, демонстрирующие эквивалентность функционирования.
  • Для сопоставления с полученной ассемблерной программой необходимо также приложить исходные тексты на ассемблере, сформированные компилятором языка C.
  • Сформирован отчет с результатами тестовых прогонов и описанием используемых опций компиляции, проведенных модификаций ассемблерной программы.

5 баллов

  • В программе на языке C необходимо использовать функции с передачей данных через формальные параметры.
  • Внутри функций необходимо использовать локальные переменные, которые при компиляции отображаются на стек.
  • В ассемблерную программу в местах вызова функции добавить комментарии, описывающие передачу фактических параметров и перенос возвращаемого результата. При этом небходимо отметить, какая переменная или результат какого выражения соответствует тому или иному фактическому параметру.
  • В ассемблерных функциях для каждого формального параметра необходимо добавить комментарии, описывающие связь между именами формальных параметров на языке C и регистрами (или значением на стеке), через которые эти параметры передаются.
  • Для сопоставления с полученной ассемблерной программой необходимо также приложить исходные тексты на ассемблере, сформированные компилятором языка C.
  • Информацию о проведенных изменениях отобразить в отчете наряду с информацией, необходимой на предыдущую оценку.