Advertisement
Guest User

Konkurs axxbxc - wyniki

a guest
Jun 21st, 2016
1,347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.60 KB | None | 0 0
  1. Rozwiązanie konkursu, czyli nie wszystko jest tym, na co wygląda.
  2.  
  3. Zadanie konkursowe brzmiało: napisz program rozwiązujący równanie
  4.  
  5. a * x * x + b * x + c = 0;
  6.  
  7. Wygląda jak równanie kwadratowe? Owszem, ale jest to równanie kwadratowe wtedy
  8. i tylko wtedy, gdy a jest różne od zera, a przecież współczynnik a może przyjąć
  9. wartość równą zero, gdyż – jak to lubi mawiać Gynvael – „bo czemu nie”.
  10.  
  11.  
  12. Przy zerowym a mamy następujące warianty:
  13.  
  14. b c
  15. 0 0 równianie nieoznaczone (nieskończenie wiele rozwiązań);
  16. 0 V równanie sprzeczne (brak rozwiązań);
  17. V V x = -c/b;
  18. V 0 x = -c/b;
  19.  
  20. gdzie V - dowolna wartość różna od zera.
  21.  
  22. Sprawdźmy, jak konkursowe programy sobie z tym poradziły.
  23.  
  24.  
  25. *** Etap pierwszy ***
  26.  
  27. Wpłynęło 20 zgłoszeń konkursowych. Sześć prac napisano w pythonie, jedną w D, pozostałe w C/C++.
  28.  
  29. Przetestujemy nadesłane programy dla a=0, b=1 c=-2. (prawidłowe rozwiązanie: x = 2)
  30.  
  31. ==== Program 01, Date: Mon, Jun 20, 2016 at 11:41 AM
  32. ax*x+bx+c=0
  33. podaj a = 0
  34. podaj b = 1
  35. podaj c = -2
  36. Jest to rownanie liniowe
  37. Posiada ono pierwiastek x = 2
  38. komentarz: OK
  39.  
  40.  
  41. ==== Program 02, Date: Mon, Jun 20, 2016 at 11:42 AM
  42. Podaj współczynniki a, b i c: 0 1 -2
  43. To rownianie nie jest kwadratowe! Podaj a roznoe od zera.
  44. ^C
  45. komentarz: równanie nie jest kwadratowe, a dziś jest środa, ale gdzie rozwiązanie?!
  46.  
  47.  
  48. ==== Program 03, Date: Mon, Jun 20, 2016 at 11:44 AM
  49. Podaj a b c: 0 1 -2
  50. Delta = 1.00
  51. Pierwiastki tej funkcji kwadratowej to: -inf -nan
  52. komentarz: -inf i -nan -- radzę zapamiętać tę parę
  53.  
  54.  
  55. ==== Program 04, Date: Mon, Jun 20, 2016 at 12:05 PM
  56. Podaj wspolczynniki a, b i c: 0 1 -2
  57. To rownianie nie jest kwadratowe! Podaj a roznoe od zera. ^C
  58. komentarz: Autor programu 02 przysłał drugie rozwiązanie.
  59.  
  60.  
  61. ==== Program 05, Date: Mon, Jun 20, 2016 at 12:13 PM
  62. a = 0
  63. b = 1
  64. c = -2
  65. jedno rozwiązanie: 2.00
  66. komentarz: OK
  67.  
  68.  
  69. ==== Program 06, Date: Mon, Jun 20, 2016 at 12:27 PM
  70. a*x^2+b*x+c=0
  71. Wpisz a b i c: 0 1 -2
  72. 0 lub -0
  73. komentarz: dwa strzały, dwa pudła
  74.  
  75.  
  76. ==== Program 07, Date: Mon, Jun 20, 2016 at 12:33 PM
  77. --- Quadratic equation solver ---
  78. a*x^2 + b*x + c = 0
  79. Give me 'a': 0
  80. Variable a should be non-zero.
  81. Give me 'a': ^C
  82. komentarz: what?
  83.  
  84.  
  85. ==== Program 08, Date: Mon, Jun 20, 2016 at 12:48 PM
  86. Podaj a: 0
  87. Podaj b: 1
  88. Podaj c: -2
  89. Obliczam ax^2 + bx + c = 0
  90. Delta: 1
  91. Znaleziono dwa rozwiazania:
  92. x1 = -inf
  93. x2 = -nan
  94. komentarz: już gdzieś coś podobnego widziałem, ale to nie to
  95.  
  96.  
  97. ==== Program 09, Date: Mon, Jun 20, 2016 at 12:52 PM
  98. Input values for a, b, c separated by spaces.
  99. Numbers with more than one value after decimal point will be truncated.
  100. Input: 0 1 -2
  101. Quadratic equation = 0.0x^2+1.0x-2.0=0
  102. Delta = 1.00
  103. Square root x1 = -1.00
  104. Square root x2 = -1.00
  105. komentarz: nie1 i nie2
  106.  
  107.  
  108. ==== Program 10, Date: Mon, Jun 20, 2016 at 1:01 PM
  109. Program rozwiazuje rownanie w postaci: ax^2+bx+c=0
  110. Podaj a: 0
  111. Podaj b: 1
  112. Podaj c: -2
  113.  
  114. Rownanie liniowe: x = 2
  115. komentarz: OK
  116.  
  117.  
  118. ==== Program 11, Date: Mon, Jun 20, 2016 at 1:15 PM
  119. komentarz: W nadesłanym mailu brakowało załącznika, więc potencjalnie poprawne, ale pewności nie ma
  120.  
  121.  
  122. ==== Program 12, Date: Mon, Jun 20, 2016 at 6:04 PM
  123. 0
  124. 1
  125. -2
  126. It's linear! Please no more cheats.
  127. Answer is: -2.000000
  128. komentarz: prawie dobrze, z akcentem na „prawie”
  129.  
  130.  
  131. ==== Program 13, Date: Mon, Jun 20, 2016 at 8:11 PM
  132. $ python axxbxc.py
  133. Program do obliczania pierwiastkow rowniania kwadratowego (a*x^2 + b*x + c = 0)
  134. Prosze uruchomic program podajac jako argumenty kolejne wartosci wspolczynnikow: axxbxc.py a b c
  135.  
  136. $ python axxbxc.py 0 1 -2
  137. Rozwiazanie rownania kwadratowego:
  138. x1 =
  139. Traceback (most recent call last):
  140. File "axxbxc.py", line 26, in <module>
  141. main(sys.argv)
  142. File "axxbxc.py", line 14, in main
  143. print "x1 = ", ((-b - sqDelta)/(2*a))
  144. ZeroDivisionError: float division by zero
  145. komentarz: auć
  146.  
  147.  
  148. ==== Program 14, Date: Mon, Jun 20, 2016 at 10:22 PM
  149. Zadanie: wielomian drugiego stopnia - wyznaczyć x z równania
  150. Podaj a różne od zera: 0
  151. Podaj b: 1
  152. Podaj c: -2
  153. Równanie: 0.0x^2 + 1.0x +-2.0 = 0
  154. To jest delta 1.0
  155. Traceback (most recent call last):
  156. File "konkurs.py", line 21, in <module>
  157. x1 = (-b-delta_sqrt)/(2*a)
  158. ZeroDivisionError: float division by zero
  159. komentarz: mogłem to przerwać przy „Podaj a różne od zera:”, ale tak jest bardziej widowiskowo
  160.  
  161.  
  162. ==== Program 15, Date: Mon, Jun 20, 2016 at 10:02 PM
  163. Podaj parametr a
  164. 0
  165. Podaj parametr b
  166. 1
  167. Podaj parametr c
  168. -2
  169. Rozwiazania to: -inf -nan
  170. komentarz: i znów moi ulubieńcy – -inf i -nan
  171.  
  172.  
  173. ==== Program 16, Date: Mon, Jun 20, 2016 at 8:45 PM
  174. $ python3 wielom.py
  175. Jako argumenty należy podać kolejno współczynniki a, b, c wielomianu drugiego stopnia.
  176.  
  177. $ python3 wielom.py 0 1 -2
  178. Traceback (most recent call last):
  179. File "wielom.py", line 16, in <module>
  180. print("{:.2f}, {:.2f}".format((-b - math.sqrt(delta)) / (2*a), (-b + math.sqrt(delta)) / (2*a)))
  181. ZeroDivisionError: float division by zero
  182. komentarz: przecież podałem!
  183.  
  184.  
  185. ==== Program 17, Date: Mon, Jun 20, 2016 at 8:23 PM
  186. Podaj a: 0
  187. Podaj b: 1
  188. Podaj c: -2
  189. Traceback (most recent call last):
  190. File "fkw.py", line 18, in <module>
  191. x1 = (-b - sqrt(delta)) / (2 * a) # to dzielenie to kreska ułamkowa
  192. ZeroDivisionError: float division by zero
  193. komentarz: bęc!
  194.  
  195.  
  196. ==== Program 18, Date: Tue, Jun 21, 2016 at 9:07 AM
  197. Podaj a: 0
  198. Podaj b: 1
  199. Podaj c: -2
  200. Równanie: 0 * x^2 + 1 * x -2 = 0
  201. Miejsca zerowe:
  202. x1: -1
  203. x2: -1
  204.  
  205. Brak parabboli, równanie liniowe!
  206. Funkcja rosnąca!
  207. Przedziały:
  208. D = (-inf; +inf)
  209. komentarz: przykro mi bardzo
  210.  
  211.  
  212. ==== Program 19, Date: Tue, Jun 21, 2016 at 3:05 PM
  213. $ python2 licz.py
  214. Traceback (most recent call last):
  215. File "licz.py", line 25, in <module>
  216. assert len(sys.argv)==4
  217. AssertionError
  218.  
  219. $ python3 licz.py
  220. File "licz.py", line 30
  221. print "trzy liczby pani, panie."
  222. ^
  223. SyntaxError: Missing parentheses in call to 'print'
  224.  
  225. $ python2 licz.py 0 1 -2
  226. -2.000000
  227. x1 = --------- = -2.00000
  228. 1.000000
  229. komentarz: trzy podejścia, poprawnego wyniku brak
  230.  
  231.  
  232. ==== Program 20, Date: Tue, Jun 21, 2016 at 8:03 PM
  233. ./axxbxc 0 1 -2
  234. [err] Rownanie nie jest kwadratowe
  235. komentarz: z tym programem miałem najwięcej kłopotów, bo ponoć on działa w trybie graficznym
  236. i można coś tam robić strzałkami (całkiem jak w tym wężu autorstwa KrzaQ), no i zamiast '1'
  237. można podać 'cos(2*3-6)' albo '1-6/12' zamiast '0.5'. Wszystko to opisano jak należy w dokumentacji,
  238. tyle że nie o to tu chodziło.
  239.  
  240.  
  241.  
  242. Do drugiego etapu przechodzą programy 01, 05 i 10.
  243.  
  244. *** Etap drugi ***
  245.  
  246. Teraz spróbujemy rozwiązać równanie nieoznaczone: a = 0, b = 0, c = 0.
  247.  
  248. ==== Program 01, Date: Mon, Jun 20, 2016 at 11:41 AM
  249. ax*x+bx+c=0
  250. podaj a = 0
  251. podaj b = 0
  252. podaj c = 0
  253. Jest to rownanie liniowe
  254. Rownanie ma nieskonczenie wiele rozwizan
  255. komentarz: OK
  256.  
  257.  
  258. ==== Program 05, Date: Mon, Jun 20, 2016 at 12:13 PM
  259. a = 0
  260. b = 0
  261. c = 0
  262. brak rozwiazan
  263. komentarz: wręcz przeciwnie!
  264.  
  265.  
  266. ==== Program 10, Date: Mon, Jun 20, 2016 at 1:01 PM
  267. Program rozwiazuje rownanie w postaci: ax^2+bx+c=0
  268. Podaj a: 0
  269. Podaj b: 0
  270. Podaj c: 0
  271.  
  272. Nieskonczonosc rozwiazan
  273. komentarz: OK
  274.  
  275.  
  276. Do etapu trzeciego przechodzi progam 01 i 10.
  277.  
  278.  
  279. *** Etap trzeci ***
  280.  
  281. Ponieważ oba programy bezboleśnie poradziły sobie z równaniem sprzecznym,
  282. postanowiłem wrócić do warunków z etapu pierwszego.
  283. Dla przypomnienia: rozwiązywaliśmy tam równanie x + 2 = 0.
  284. Spróbujmy czegoś „trudniejszego”: x + 0.5 = 0, czyli a=0, b=1, c=0.5
  285.  
  286. ==== Program 01, Date: Mon, Jun 20, 2016 at 11:41 AM
  287. ax*x+bx+c=0
  288. podaj a = 0
  289. podaj b = 1
  290. podaj c = 0.5
  291. Jest to rownanie liniowe
  292. Posiada ono pierwiastek x = 0
  293. komentarz: a wcale nie!
  294.  
  295.  
  296. ==== Program 10, Date: Mon, Jun 20, 2016 at 1:01 PM
  297. Program rozwiazuje rownanie w postaci: ax^2+bx+c=0
  298. Podaj a: 0
  299. Podaj b: 1
  300. Podaj c: 0.5
  301.  
  302. Rownanie liniowe: x = -0.5
  303. komentarz: dobrze!
  304.  
  305.  
  306.  
  307. I tyle. Zwycięzcą został autor programu 10 – Michał Szczepańczyk. Gratuluję!
  308. Nagrodą jest książka napisana przez Gospodarza konkursu, którą ufundowałem zwycięzcy
  309. w http://ksiegarnia.pwn.pl/Zrozumiec-programowanie,114589762,p.html
  310.  
  311.  
  312. Dziękuję wszystkim za udział w konkursie!
  313. Świetnie się bawiłem i mam nadzieję, że Wy również.
  314.  
  315. --
  316. Wiechu
  317.  
  318. 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