Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Rozwiązanie konkursu, czyli nie wszystko jest tym, na co wygląda.
- Zadanie konkursowe brzmiało: napisz program rozwiązujący równanie
- a * x * x + b * x + c = 0;
- Wygląda jak równanie kwadratowe? Owszem, ale jest to równanie kwadratowe wtedy
- i tylko wtedy, gdy a jest różne od zera, a przecież współczynnik a może przyjąć
- wartość równą zero, gdyż – jak to lubi mawiać Gynvael – „bo czemu nie”.
- Przy zerowym a mamy następujące warianty:
- b c
- 0 0 równianie nieoznaczone (nieskończenie wiele rozwiązań);
- 0 V równanie sprzeczne (brak rozwiązań);
- V V x = -c/b;
- V 0 x = -c/b;
- gdzie V - dowolna wartość różna od zera.
- Sprawdźmy, jak konkursowe programy sobie z tym poradziły.
- *** Etap pierwszy ***
- Wpłynęło 20 zgłoszeń konkursowych. Sześć prac napisano w pythonie, jedną w D, pozostałe w C/C++.
- Przetestujemy nadesłane programy dla a=0, b=1 c=-2. (prawidłowe rozwiązanie: x = 2)
- ==== Program 01, Date: Mon, Jun 20, 2016 at 11:41 AM
- ax*x+bx+c=0
- podaj a = 0
- podaj b = 1
- podaj c = -2
- Jest to rownanie liniowe
- Posiada ono pierwiastek x = 2
- komentarz: OK
- ==== Program 02, Date: Mon, Jun 20, 2016 at 11:42 AM
- Podaj współczynniki a, b i c: 0 1 -2
- To rownianie nie jest kwadratowe! Podaj a roznoe od zera.
- ^C
- komentarz: równanie nie jest kwadratowe, a dziś jest środa, ale gdzie rozwiązanie?!
- ==== Program 03, Date: Mon, Jun 20, 2016 at 11:44 AM
- Podaj a b c: 0 1 -2
- Delta = 1.00
- Pierwiastki tej funkcji kwadratowej to: -inf -nan
- komentarz: -inf i -nan -- radzę zapamiętać tę parę
- ==== Program 04, Date: Mon, Jun 20, 2016 at 12:05 PM
- Podaj wspolczynniki a, b i c: 0 1 -2
- To rownianie nie jest kwadratowe! Podaj a roznoe od zera. ^C
- komentarz: Autor programu 02 przysłał drugie rozwiązanie.
- ==== Program 05, Date: Mon, Jun 20, 2016 at 12:13 PM
- a = 0
- b = 1
- c = -2
- jedno rozwiązanie: 2.00
- komentarz: OK
- ==== Program 06, Date: Mon, Jun 20, 2016 at 12:27 PM
- a*x^2+b*x+c=0
- Wpisz a b i c: 0 1 -2
- 0 lub -0
- komentarz: dwa strzały, dwa pudła
- ==== Program 07, Date: Mon, Jun 20, 2016 at 12:33 PM
- --- Quadratic equation solver ---
- a*x^2 + b*x + c = 0
- Give me 'a': 0
- Variable a should be non-zero.
- Give me 'a': ^C
- komentarz: what?
- ==== Program 08, Date: Mon, Jun 20, 2016 at 12:48 PM
- Podaj a: 0
- Podaj b: 1
- Podaj c: -2
- Obliczam ax^2 + bx + c = 0
- Delta: 1
- Znaleziono dwa rozwiazania:
- x1 = -inf
- x2 = -nan
- komentarz: już gdzieś coś podobnego widziałem, ale to nie to
- ==== Program 09, Date: Mon, Jun 20, 2016 at 12:52 PM
- Input values for a, b, c separated by spaces.
- Numbers with more than one value after decimal point will be truncated.
- Input: 0 1 -2
- Quadratic equation = 0.0x^2+1.0x-2.0=0
- Delta = 1.00
- Square root x1 = -1.00
- Square root x2 = -1.00
- komentarz: nie1 i nie2
- ==== Program 10, Date: Mon, Jun 20, 2016 at 1:01 PM
- Program rozwiazuje rownanie w postaci: ax^2+bx+c=0
- Podaj a: 0
- Podaj b: 1
- Podaj c: -2
- Rownanie liniowe: x = 2
- komentarz: OK
- ==== Program 11, Date: Mon, Jun 20, 2016 at 1:15 PM
- komentarz: W nadesłanym mailu brakowało załącznika, więc potencjalnie poprawne, ale pewności nie ma
- ==== Program 12, Date: Mon, Jun 20, 2016 at 6:04 PM
- 0
- 1
- -2
- It's linear! Please no more cheats.
- Answer is: -2.000000
- komentarz: prawie dobrze, z akcentem na „prawie”
- ==== Program 13, Date: Mon, Jun 20, 2016 at 8:11 PM
- $ python axxbxc.py
- Program do obliczania pierwiastkow rowniania kwadratowego (a*x^2 + b*x + c = 0)
- Prosze uruchomic program podajac jako argumenty kolejne wartosci wspolczynnikow: axxbxc.py a b c
- $ python axxbxc.py 0 1 -2
- Rozwiazanie rownania kwadratowego:
- x1 =
- Traceback (most recent call last):
- File "axxbxc.py", line 26, in <module>
- main(sys.argv)
- File "axxbxc.py", line 14, in main
- print "x1 = ", ((-b - sqDelta)/(2*a))
- ZeroDivisionError: float division by zero
- komentarz: auć
- ==== Program 14, Date: Mon, Jun 20, 2016 at 10:22 PM
- Zadanie: wielomian drugiego stopnia - wyznaczyć x z równania
- Podaj a różne od zera: 0
- Podaj b: 1
- Podaj c: -2
- Równanie: 0.0x^2 + 1.0x +-2.0 = 0
- To jest delta 1.0
- Traceback (most recent call last):
- File "konkurs.py", line 21, in <module>
- x1 = (-b-delta_sqrt)/(2*a)
- ZeroDivisionError: float division by zero
- komentarz: mogłem to przerwać przy „Podaj a różne od zera:”, ale tak jest bardziej widowiskowo
- ==== Program 15, Date: Mon, Jun 20, 2016 at 10:02 PM
- Podaj parametr a
- 0
- Podaj parametr b
- 1
- Podaj parametr c
- -2
- Rozwiazania to: -inf -nan
- komentarz: i znów moi ulubieńcy – -inf i -nan
- ==== Program 16, Date: Mon, Jun 20, 2016 at 8:45 PM
- $ python3 wielom.py
- Jako argumenty należy podać kolejno współczynniki a, b, c wielomianu drugiego stopnia.
- $ python3 wielom.py 0 1 -2
- Traceback (most recent call last):
- File "wielom.py", line 16, in <module>
- print("{:.2f}, {:.2f}".format((-b - math.sqrt(delta)) / (2*a), (-b + math.sqrt(delta)) / (2*a)))
- ZeroDivisionError: float division by zero
- komentarz: przecież podałem!
- ==== Program 17, Date: Mon, Jun 20, 2016 at 8:23 PM
- Podaj a: 0
- Podaj b: 1
- Podaj c: -2
- Traceback (most recent call last):
- File "fkw.py", line 18, in <module>
- x1 = (-b - sqrt(delta)) / (2 * a) # to dzielenie to kreska ułamkowa
- ZeroDivisionError: float division by zero
- komentarz: bęc!
- ==== Program 18, Date: Tue, Jun 21, 2016 at 9:07 AM
- Podaj a: 0
- Podaj b: 1
- Podaj c: -2
- Równanie: 0 * x^2 + 1 * x -2 = 0
- Miejsca zerowe:
- x1: -1
- x2: -1
- Brak parabboli, równanie liniowe!
- Funkcja rosnąca!
- Przedziały:
- D = (-inf; +inf)
- komentarz: przykro mi bardzo
- ==== Program 19, Date: Tue, Jun 21, 2016 at 3:05 PM
- $ python2 licz.py
- Traceback (most recent call last):
- File "licz.py", line 25, in <module>
- assert len(sys.argv)==4
- AssertionError
- $ python3 licz.py
- File "licz.py", line 30
- print "trzy liczby pani, panie."
- ^
- SyntaxError: Missing parentheses in call to 'print'
- $ python2 licz.py 0 1 -2
- -2.000000
- x1 = --------- = -2.00000
- 1.000000
- komentarz: trzy podejścia, poprawnego wyniku brak
- ==== Program 20, Date: Tue, Jun 21, 2016 at 8:03 PM
- ./axxbxc 0 1 -2
- [err] Rownanie nie jest kwadratowe
- komentarz: z tym programem miałem najwięcej kłopotów, bo ponoć on działa w trybie graficznym
- i można coś tam robić strzałkami (całkiem jak w tym wężu autorstwa KrzaQ), no i zamiast '1'
- można podać 'cos(2*3-6)' albo '1-6/12' zamiast '0.5'. Wszystko to opisano jak należy w dokumentacji,
- tyle że nie o to tu chodziło.
- Do drugiego etapu przechodzą programy 01, 05 i 10.
- *** Etap drugi ***
- Teraz spróbujemy rozwiązać równanie nieoznaczone: a = 0, b = 0, c = 0.
- ==== Program 01, Date: Mon, Jun 20, 2016 at 11:41 AM
- ax*x+bx+c=0
- podaj a = 0
- podaj b = 0
- podaj c = 0
- Jest to rownanie liniowe
- Rownanie ma nieskonczenie wiele rozwizan
- komentarz: OK
- ==== Program 05, Date: Mon, Jun 20, 2016 at 12:13 PM
- a = 0
- b = 0
- c = 0
- brak rozwiazan
- komentarz: wręcz przeciwnie!
- ==== Program 10, Date: Mon, Jun 20, 2016 at 1:01 PM
- Program rozwiazuje rownanie w postaci: ax^2+bx+c=0
- Podaj a: 0
- Podaj b: 0
- Podaj c: 0
- Nieskonczonosc rozwiazan
- komentarz: OK
- Do etapu trzeciego przechodzi progam 01 i 10.
- *** Etap trzeci ***
- Ponieważ oba programy bezboleśnie poradziły sobie z równaniem sprzecznym,
- postanowiłem wrócić do warunków z etapu pierwszego.
- Dla przypomnienia: rozwiązywaliśmy tam równanie x + 2 = 0.
- Spróbujmy czegoś „trudniejszego”: x + 0.5 = 0, czyli a=0, b=1, c=0.5
- ==== Program 01, Date: Mon, Jun 20, 2016 at 11:41 AM
- ax*x+bx+c=0
- podaj a = 0
- podaj b = 1
- podaj c = 0.5
- Jest to rownanie liniowe
- Posiada ono pierwiastek x = 0
- komentarz: a wcale nie!
- ==== Program 10, Date: Mon, Jun 20, 2016 at 1:01 PM
- Program rozwiazuje rownanie w postaci: ax^2+bx+c=0
- Podaj a: 0
- Podaj b: 1
- Podaj c: 0.5
- Rownanie liniowe: x = -0.5
- komentarz: dobrze!
- I tyle. Zwycięzcą został autor programu 10 – Michał Szczepańczyk. Gratuluję!
- Nagrodą jest książka napisana przez Gospodarza konkursu, którą ufundowałem zwycięzcy
- w http://ksiegarnia.pwn.pl/Zrozumiec-programowanie,114589762,p.html
- Dziękuję wszystkim za udział w konkursie!
- Świetnie się bawiłem i mam nadzieję, że Wy również.
- --
- Wiechu
- PS Nie testowałem programów dla niezerowego a, bo i po co – równanie kwadratowe rozwiązać potrafi każdy.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement