Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

HW02 - dělení polynomů

Termín odevzdání 7.11.2021 23:59 CET
Bodový zisk 5b
Počet uploadů 10

Zadání

Napište program pro dělení dvou polynomů

Vstup

  • Jméno souboru na příkazové řádce
  • Soubor obsahuje dvě řádky, na každé řádce jsou koeficienty polynomu (zadané ve stejném formátu jako v tomto cvičení), tedy polynom $a_0 + a_1 x + a_2 x^2 + \ldots + a_n x^n$ je reprezentován polem $a_0\ a_1\ a_2\ ...\ a_n$.
  • Koeficienty polynomu jsou celá čísla oddělená mezerou.
  • Vstupní polynomy mohou být různého stupně.
  • Je zaručeno, že je vždy zadán alespoň nultý-koeficient $a_0$.

Výstup

  • Na standardní výstup vypište koeficienty polynomu, který vznikne vydělením prvního vstupního polynomu druhým vstupním polynomem.
  • Na druhou řádku standardního vstupu vypište zbytek po dělení prvního vstupního polynomu druhým vstupním polynomem.
  • Koeficienty jsou vypsány od nejmenšího (tj. $a_0$, $a_1$, atd.) a jsou odděleny mezerou.
  • Poslední vypsaný koeficient $a_i$ nesmí být roven nule pokud $i > 0$
  • Tedy například: polynom $1 + 2x$ je vypsán jako '1 2', nikoliv jako '1 2 0' nebo '1 2 0 0'.
  • Polynom $0$ (tj. $a_0=0$) musí být vypsán jako '0'.
  • Polynom $0 + 3x^3$ je vypsán jako '0 0 0 3'. Výpisy typu '0 0 0 3 0 0' nebo '0 0 0 3 0 0 0 0 0' nejsou správné.
  • Výstupní koeficienty jsou opět celá čísla.

Odevzdání

  • Program odevzdejte do úlohy HW02 pod jménem main.py
  • Předpokládejte, že
    • je zaručeno, že program bude volán se jménem existujícího souboru.
    • je zaručeno, že vstupní soubor obsahuje správně zadané polynomy (tj. dvě řádky, na každé řádce řada celých čísel oddělená mezerou). Na každé řádce je zadáno alespoň jedno číslo.

Tipy

  • výsledek je celočíselný polynom. Aby Vám výpočet vyšel, použijte vnitřní typ Fraction:

from fractions import Fraction
 
f = open(sys.argv[1],"r")
line = f.readline()
p1 = list(map(Fraction, line.split()))
line = f.readline()
p2 = list(map(Fraction, line.split()))
f.close()

  • Argument příkazové řádky předáte v terminálu (na Linuxových systémech) takto:

python3 polynom.py soubor.txt

  • Pokud používáte jiný operační systém, případně takové vývojové prostředí, kde nelze argument příkazové řádky nastavit, použijte (pro ladění) pevné jméno souboru a před odevzdáním do Bruta použijte hodnotu z sys.argv takto:

filename = sys.argv[1]   # tuto radku zakomentovat pro domácí ladeni
filename = "soubor.txt"  # tuto radku zakomentovat pro Bruta
f = open(filename, "r")

Příklady

V následujících příkladech předpokládejte, že se program volá s argumentem, který definuje jméno vstupního souboru, např.:

python3 main.py soubor.txt

Pokud soubor.txt obsahuje:

0 12 -2 -4
3 -2

Výstup (stdout):

0 4 2
0

Komentář: neboť $(0 + 4x + 2x^2)(3-2x) = 0+ 12x -2x^2 -4x^3$.


Pokud soubor.txt obsahuje:

5 -3 6 2 -8
2 0 3 4

Výstup (stdout):

2 -2
1 1

Komentář: neboť $(2 - 2x)(2 +3x^2+4x^3)+(1+x) = 5 -3x +6x^2 +2x^3 -8x^4$, nebo $(2 - 2x)(2 +3x^2+4x^3) = (5 -3x +6x^2 +2x^3 -8x^4) - (1+x)$

courses/bab37zpr/hw/hw02.txt · Last modified: 2021/10/29 19:03 by vencovac