Исправь ошибку в коде: где-то не хватает ")" #include #include #include // Объявление функции ассемблера для вычисления среднего арифметического extern double calc_mean(double *arr, int n); // Объявление функции ассемблера для вычисления стандартного отклонения extern double calc_stddev(double *arr, int n, double mean); int main() { // Декларируем массив для хранения значений double arr[100]; // Считываем размер массива int n; printf("Введите размер массива: "); scanf("%d", &n); // Считываем значения массива printf("Введите элементы массива: "); for (int i = 0; i < n; i++) { scanf("%lf", &arr[i]); } // Вычисляем среднее арифметическое с помощью функции ассемблера double mean = calc_mean(arr, n); // Вычисляем стандартное отклонение с помощью функции ассемблера double stddev = calc_stddev(arr, n, mean); // Выводим результаты printf("Среднее арифметическое: %.2f\n", mean); printf("Стандартное отклонение: %.2f\n", stddev); return 0; } // Функция ассемблера для вычисления среднего арифметического double calc_mean(double *arr, int n) { asm( // Регистры для хранения суммы и количества элементов "xor %rax, %rax;" // rax = сумма = 0 "xor %rbx, %rbx;" // rbx = количество элементов = 0 // Цикл по элементам массива "loop_start:" // Прибавляем элемент к сумме "fld (%rsi,%rbx,8);" "fadd %st(0), %st(1);" // Увеличиваем количество элементов "inc %rbx;" // Переходим к следующему элементу "cmp %rbx, %rdx;" "jl loop_start;" // Делим сумму на количество элементов "fild %rbx;" "fdiv %st(0), %st(1);" "fstp %rax;" ); } // Функция ассемблера для вычисления стандартного отклонения double calc_stddev(double *arr, int n, double mean) { asm( // Регистры для хранения суммы квадратов отклонений и количества элементов "xor %rax, %rax;" // rax = сумма квадратов отклонений = 0 "xor %rbx, %rbx;" // rbx = количество элементов = 0 // Цикл по элементам массива "loop_start:" // Вычисляем отклонение от среднего "fld (%rsi,%rbx,8);" "fld %rcx;" "fsub %st(1), %st(0);" // Возводим отклонение в квадрат "fld %st(0);" "fmul %st(0), %st(0);" // Прибавляем квадрат отклонения к сумме "fadd %st(0), %st(1);" // Увеличиваем количество элементов "inc %rbx;" // Переходим к следующему элементу "cmp %rbx, %rdx;" "jl loop_start;" // Делим сумму квадратов отклонений на количество элементов "fild %rbx;" "fdiv %st(0), %st(1);" // Вычисляем квадратный корень "fsqrt;" // Записываем результат в rax "fstp %rax;" ); } makefile: all: test111 test111: mat_ozh.с gсс -masm=intel mat_ozh.с -о test111
Ответ нейросети
07 мая 2025 08:50
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



