Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 23.08.2019
Сообщений: 140

Умножение многочленов через словари

01.02.2022, 23:29. Показов 1498. Ответов 3

Студворк — интернет-сервис помощи студентам
Доброго времени суток, подскажите, как можно выполнить умножение многочленов P и Q, при записи их степеней как ключей и аргументов как значений в словарях Python.

Вот функция для ввода одного многочлена в виде словаря, как можно повторно обратиться к ней, чтобі получить второй многочлен? Спасибо.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def get() :
    while True :
        s = input("КОЕФ СТЕП:\n")
        s = s.split(); n = len(s)
        if n % 2 == 0 :
            C = []; K = []; i = 0; f = True
            while i < n :
                c = float(s[i]); i +=1; k = int(s[i])
                if k < 0 : 
                    f = False
                    print("ERROR, СТЕП <= 0")
                    break
                C.append(c); K.append(k); i +=1
            if f : break
        else : print("ERROR, колич.(КОЕФ)<>колич.(СТЕП)")
    if len(C) == 0 :
        P = [0]
    else :
        n = max(K); P = [0]*(n+1)
        for k in range(len(K)) :
            P[n-K[k]] = C[k]
    return P
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.02.2022, 23:29
Ответы с готовыми решениями:

Задача на умножение многочленов
В первой строке вводится натуральное число - степень многочлена. Во второй строке вводятся коэффициенты многочлена Например вводятся...

Умножение многочленов
дорогие форумчане!! помогите пожалуйста не могу написать программу умножения двух многочленов и их деления с остатком(( Заранее спасибо

Умножение многочленов
Здравствуйте, помогите пожалуйста реализовать на Lisp'е данный код domains int=integer intl=int* predicates ...

3
1 / 1 / 0
Регистрация: 23.08.2019
Сообщений: 140
02.02.2022, 16:08  [ТС]
Извините, не тот код.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def get() :
    P = {}
    while True :
        s = input("КОЕФ СТЕП:\n")
        s = s.split(); n = len(s)
        if n % 2 == 0 :
            i = 0; f = True
            while i < n :
                c = float(s[i]); i +=1; k = int(s[i])
                if k < 0 :
                    f = False; P = {}
                    print("ERROR, СТЕП <= 0")
                    break
                P[k] = c; i +=1
            if f : break
        else :
            P = {}
            print("ERROR, (КОЕФ)<>(СТЕП)")
    return P
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38196 / 21129 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
02.02.2022, 17:23
Лучший ответ Сообщение было отмечено Анкар как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
p1={1:1,0:1}  # p1=x+1
 
# Умножение полиномов
 
def poly_mult(p1,p2):
    res={}
    for d1 in p1.keys():
        for d2 in p2.keys():
            d=d1+d2
            c=p1[d1]*p2[d2]
            if res.get(d) is None:
                res[d]=c
            else:
                res[d]=res[d]+c
    return res
    
# Красивая печать полинома
 
def poly_print(p):
    r=''
    for d in p.keys():
        c=p[d]
        if c != 0:
            sgn='+' if c>0 else '-'
            if len(r)==0 and sgn=='+':
                sgn=''
            c=abs(c)
            if c==1:
                if len(r)==0:
                    if d==0:
                        r=sgn+'1'
                    elif d==1:
                        r=sgn+'x'
                    else:
                        r=sgn+'x**'+str(d)
                else:
                    if d==0:
                        r=r+sgn+'1'
                    elif d==1:
                        r=r+sgn+'x'
                    else:
                        r=r+sgn+'x**'+str(d)
            else:
                if len(r)==0:
                    if d==0:
                        r=sgn+str(c)
                    elif d==1:
                        r=sgn+str(c)+'x'
                    else:
                        r=sgn+str(c)+'x**'+str(d)
                else:
                    if d==0:
                        r=r+sgn+str(c)
                    elif d==1:
                        r=r+sgn+str(c)+'x'
                    else:
                        r=r+sgn+str(c)+'x**'+str(d)
                    
    return r
    
z=poly_mult(p1,p1)
z=poly_mult(p1,z)  
print(poly_print(z)) # (x+1)**3=x**3+3x**2+3x+1
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
02.02.2022, 17:50
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
def input_polynom(name):
    res = dict()
    print()
    print( f'Введите полином {name}.' )
    print('В каждой строке вводите пару коэффициент, степень(>=0)')
    print('Для завершения просто нажмите Enter.')
    bad_data = False
    while True :
        if bad_data:
            print('Повторите ввод:')
            print()
            bad_data = False
        lis = list( float(x) for x in input( '-> ' ).split() )
        if not len(lis):
            if not res:
                print( 'Многочлен пуст, введите данные.' )
                continue
            else:
                break
        if len(lis) != 2:
            bad_data = True
            continue
        coef, deg = lis
        if deg < 0:
            bad_data = True
            continue
        res[int(deg)] = coef
    return res
#==============================================================================
def mul_polynoms( A, B ):
    res = dict()
    for a in A.items():
        for b in B.items():
            res.setdefault(a[0] + b[0], 0)
            res[ a[0] + b[0] ] += a[1]*b[1]
    return res
#==============================================================================
def str_polynom(A):
    res = ''
    A = sorted(A.items(), key=lambda x:x[0], reverse=True)
    A = ( '{:+}'.format(x[1])+'_x^'+str(x[0])+'_' for x in A )
    res = ' '.join( A )
    res = res.replace( '_x^1_', '_x_' ).replace( '_x^0_', '' )
    return res
#==============================================================================
Q = input_polynom('Q')
print( str_polynom(Q) )
P = input_polynom('P')
print( str_polynom(P) )
R = mul_polynoms(Q,P)
print()
print( str_polynom(R) )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2022, 17:50
Помогаю со студенческими работами здесь

Умножение многочленов
Написать программу, реализующую традиционный и быстрый варианты алгоритмов, реализующих поставленную задачу.(Умножение многочленов) ...

Умножение 2-х многочленов.
Правильно ли написанно!!! если нет то исправте Умножение 2-х многочленов. 1 :uses Crt; 2 :const n=2 0; 3 :type 4 :Poly=array ...

Умножение многочленов
Помогите пожалуйста написать программу. &quot;Перемножить два многочлена, заданных списками составляющих их одночленов&quot;. не пойму сам...

Умножение 3 многочленов
Привет всем. Нужно перемножить многочлены: x^4 + x+ 1, x^4+ x^3 + x^2+ x+ 1, x^2+ x+ 1. Ответ известен: 1 + x + x^2 + x^4 +...

Умножение многочленов
задача: операция умножения многочленов с получением нового объекта-многочлена; class Program { static void Main(string...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru