Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2010, 20:20   #1
pasha92
Пользователь
 
Регистрация: 16.11.2009
Сообщений: 10
По умолчанию Подстановка в многочлен

Помогите в решении следующей задачи:
Многочлен степени n задается своими коэффициентами, каждый из которых записан в своем поле структуры «многочлен». Реализуйте процедуру подстановки вместо x значения x-a, где a – произвольное число
Программа должна запрашивать коэффициенты с клавиатуры и изменять значения исходных коэффициентов при подстановке. Я реализовал процедуры нахождения факториала и биномиальных коэффициентов, а дальше сложить все вместе при одинаковых степенях не получается
Код HTML:
          .model small                 
          .386
          .stack 100h                  
          .data                        
          polynomial struc             ; Структура "полином"      
          coof1    dw 0                ; коэффициенты
          coof2    dw 0
          coof3    dw 0
          coof4    dw 0
          coof5    dw 0
          coof6    dw 0
          coof7    dw 0
          coof8    dw 0
          coof9    dw 0
          coof10   dw 0
          polynomial ends
          coof     polynomial <>       ; экземпляр структуры   
          
          .code
          ; Вычисление факториала n!
          ; edx = n
          ; В eax - результат
          factorial proc
          push     ebx edx             ; Сохранить значения регистров
          cmp      edx, 1              ; 0! = 1, 1! = 1
          jg       @l3
          mov      eax, 1
          jmp      @ret2
          @l3:
          mov      eax, edx            ; eax = n
          mov      ebx, eax            ; ebx = n
          @l4:
          dec      ebx                 ; ebx = n - 1
          mul      ebx                 ; n * (n-1)
          cmp      ebx, 2              ; Сравниваем n - 1 c 2
          jg       @l4                 ; Если n-1 > 2, то продолжаем вычисление
          @ret2
          pop      edx ebx
          ret
          factorial endp


          ; Вычисление биномиальных коэффициентов (сочетаний из n по k)
          ; C = n!/ (k! * (n-k)!)
          ; edx = n, esi = k
          ; Результат - в ax
          combination proc
          push     ebx edx esi         ; Сохранить значения регистров
          call     factorial           ; eax = n!
          push     eax                 ;  Сохраним eax
          sub      edx, esi            ; edx = n-k
          call     factorial           ; eax = (n-k)!
          mov      ebx, eax            ; ebx = (n-k)!
          mov      edx, esi            ; edx = k
          call     factorial           ; eax = k!
          mul      ebx                 ; eax = k! * (n-k)!
          mov      ebx, eax            ; ebx = k! * (n-k)!
          pop      eax                 ; eax = n!
          xor      edx, edx            ; обнулим edx для деления
          div      ebx                 ; eax = n!/ (k! * (n-k)!) = C
          pop      esi edx ebx
          ret
          combination endp

          ; Возведение числа в степень
          ; Степень n - в dx, число a - в bx
          power proc                    
          push     bx cx dx            ; Сохранить значения регистров
          cmp      dx, 0               ; Если n = 0
          jg       @l1                      
          mov      ax, 1               ; то a = 1 
          jmp      @ret3               ; выход из процедуры
          @l1:
          cmp      dx, 1               ; Если n = 1
          jg       @l2
          mov      ax, bx              ; то a = a
          jmp      @ret
          @l2:
          mov      ax, bx              ; ax = a
          dec      dx                  ; dx = n - 1
          mov      cx, dx              ; счетчик цикла
          @l3:
          mul      bx                  ; ax =a^2
          loop     @l3                 ; ... ax = a^n
          @ret:
          pop      dx cx bx
          ret
          power endp
pasha92 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многочлен чебышева Rыся Помощь студентам 2 11.01.2010 08:37
Многочлен. Chudo4258 Помощь студентам 2 10.05.2009 14:02
Паскаль. Схема горнора, многочлен. dido171 Помощь студентам 26 18.01.2009 23:13
Интерполяционный многочлен лагранжа 3.14oner Паскаль, Turbo Pascal, PascalABC.NET 2 10.11.2008 17:30