Система Диофанта — страница 2 из 12

[2]».

— Но мне кажется, что это тайный инструмент составителей задачников для школьников. Согласись, что составить задачу с заданными свойствами ничего не стоит.

= Тогда Нельке я скажу «назови мне два числа, и я тебе напишу квадратное уравнение, где корнями буду эти два числа». Так пожалуй еще круче. .... но придется признаваться как я это делаю.

— Да не проблема, расскажи и покажи. Но, во время демонстрации помни о коварных случаях например x2 — 5x — 3 = 0.

= Ничего, выкручусь, по крайней мере поражу народ своим анализом корней, а затем скажу, что сегодня с отрицательными корнями не хочу возится.

= А, вот еще вопрос. Мы с тобой рассматривали уравнения типа x2 + bx + c = 0, а если будет полное квадратное уравнение: ax2 + bx + c = 0?

— Элементарно, Ватсон. Раздели полное уравнение на а, и получишь приведенное, а дальше ты знаешь.

= Но тогда получатся дробные коэффициенты.

— Мудрость состоит в том, что не стоит бараном упираться в любой принцип, ежели разделение дроби на сомножители составляет трудность, вспоминай о дискриминанте и прочих радостях стандартной формулы.

Но давай поиграемся с корнями 0.5 и 1.5

x2 — [0.5 + 1.5]x + [0.5 • 1.5] = x2 — 2x + 0.75 = 0

давай для удаления дроби, умножим на 100

100x2 — 200x + 75 = 0

Т.е. по крайней мере составлять уравнение по любым корням ты сможешь, и разбитое сердце для Нелли обеспеченно.

= Я тоже хочу попробовать.

— Ну, давай, давай что-нибудь не обычное, пусть будет корень из тринадцати, итак корни КУ 1 + √13 и 1 — √13.

= Крибле крабле бумс: x2 — 2x — 12 = 0

= «Айнун цванцих фирун зихцих» или как говорили древние финики «Повторение мать мучения»

— Финикийцы?!

= Финики — веселее. Давай я повторю все что понял:


--------------------------------------

1. Посмотреть на знаки

--------------------

— + оба корня положительны

— — один корень отрицателен, но положительный больше*

+ — один корень положителен, но отрицательный больше*

+ + оба корня отрицательны


* больше при сравнении абсолютных величин корней.

--------------------


2. Если M меньше S значит абсолютная величина хотя бы одного корня больше нуля, но меньше единицы.

3. Если M удалось разложить на множителе и их сумма (с учетом знаков) равна S — демонстрируем свои феноменальные способности.

3а. Иначе, быстренько считаем дискриминант или шустренько врем «голова заболела,... я уже устал,... на сегодня достаточно...»

4. В случаях 2 и 3а — плавно переходим к демонстрации изготовления уравнений по заданным корням, это дело беспроигрышно (главное не запутаться в арифметике).

--------------------------------------

— Отлично. Теперь ты готов к подвигам?

— Проверим. Реши такое: — x2 — 7x — 12 = 0

= Два минуса значит...

— Два плюса!! И минус с Гриффиндора за невнимательность. Учитывай коварство противника.

= Понял -3 и -4.

— Я не сказал бы, что ты готов. Побольше тренеруйся и внимательность.

= Спасибо, за отличный прикол. Это будет ШОУ!!!

— Успехов в кардио-математических делах.

День 2Тренировка

Научи меня плохому.

Еролаш № 78.


= Спасай!!!


/ Шеф! Все пропало! /


= Шоу под угрозой, а отказаться нельзя.


/ Все, кина не будет. Электричество кончилось. /


— Что случилось?


/ У тебя там не закрытый… а открытый перелом? /


= Сгорел уже на третьей задаче! Хорошо еще, что хвалился своим друзьям, и как заклинило, отговорился, что надо делать уроки и т.п. Но завтра в школе они всем расскажут, и с меня потребуют демонстрацию.


/ Семё-ё-н Семёныч!… /


— Я тебе говорил, что фокусы, как и экспромты, надо тщательно готовить. Потренировался бы побольше, подготовил..., а это мысль...

— Все мои проблемы я...

= Я знаю, все твои проблемы ты решаешь программным путем.

— Да, именно так. План такой: как генерировать квадратные уравнения мы знаем, а значит пишем программку...


/ Лёгким движением руки брюки превращаются… Брюки превращаются… Превращаются брюки… /


Так, это дело займет не пять минут, посмотри пока фильм.

= Брильянтовую ногу?

— Можно и это, но я имел в виду «Праздник святого Йоргена»

............

= Фу..... черно-белый! Немой!!!

— Ну, и что. Фильм тридцатого года, но зато здорово объясняется, как надо готовить чудеса.

...........

— Оторвись, потом досмотришь.


/ Дичь не улетит, она жареная /


— В последнее время я учусь работать с Питоном. Достаточно интересный язык, но особо хвалить или ругать рано, надо получше познакомится.

— Но для начала одно предупреждение. Питон очень требователен к правильному применению отступов, к сожалению fb2 «съедает» лишние пробелы или табуляции, да, есть теги для оформления кода, но не все читалки правильно их воспринимают.


/ Я считаю, что человеку можно верить только в самом крайнем случае. /


Поэтому для зрительного восприятия отступов группы пробелов (табуляцию) я заменю группой точек и пробелов « . . »

= Ясно, при необходимости заменить их на табуляцию. Но не растягивай, у меня время поджимает.


/ Цигель, цигель ай лю-лю /


— Давай разберем, то, что сделано.

— Вариант первый (пробный) для выяснения принципа работы программы.


1 | # -*- coding: utf-8 -*-

2 | import random

3 |

4 | def gen_number():

5 | . . prime_number =(1, 2, 3, 5, 7, 11, 13, 17)

6 | . . sign_number =(0, 1, 2, 3)

7 | . . nu = random.choice(prime_number)

8 | . . sign = random.choice(sign_number)

9 | . . if sign == 0:

10 | . . . . nu = nu * -1

11 | . . return nu

12 |

13 | def show_numb(a):

14 | . . if a > 0:

15 | . . . . return ' + '+ str(a)

16 | . . return ' - ' + str(abs(a))

17 |

18 | for i in range(100):

19 | . . x1 = gen_number()

20 | . . x2 = gen_number()

21 | . . b = x1 + x2

22 | . . c = x1 * x2

23 | . . #print 'x1 = '+str(x1) + ' x2 = '+str(x2)

24 | . . if b != 0:

25 | . . . . print 'x^2 '+ show_numb(b*-1) + 'x ' +show_numb(c)


Строка 2 — подключаем библиотеку для работы со случайными числами.


Строка 4 — функция генерирующая случайное число со случайным знаком

Строка 5 — кортеж из простых чисел, из которых случайно мы будем выбирать ___

Строка 6 — из этого кортежа будем выбирать знак. Минус будет засчитываться только если выпадет 0 (ясно все остальные вероятности = плюс) чем больше этих «ненужных» чисел, тем меньше вероятность выпадания минуса. Вот такая шутка.

Остальные строки функции прозрачны. Не будем сотрясать воздух.


Строка 13 — функция Показа числа. В общем все понятно: если число положительно то перед ним напишем «+», иначе «-».

= А если будет ноль?

— Посмотри внимательно.... нуля не будет.


/ Только нэ суетись! Кутузов!! /


Строка 18 — основной блок программы. В данном случае это цикл повторяющийся 100 раз

Задумываются два числа (из простых чисел с произвольным знаком)

Эти числа умножаются и складываются. Результат выводится на экран.

Строка 24 — исключает из рассмотрения случаи с коэффициентом b равным нулю, уравнение при этом будет слишком примитивно.

= Ты пропустил 23 строку!

— Она закомментирована и нужна была только в отладке для проверки результатов.

— Как видишь, ничего сложного.

= Ну, не знаю, но я...


/ Как говорит наш дорогой шеф, в нашем деле главное — этот самый реализьм! /


— Хорошо, переходим к реальной программе.


1 | # -*- coding: utf-8 -*-

2 | import random

3 |

4 | def gen_number(k):

5 | . . prime_number =(1, 2, 3, 5, 7, 11, 13, 17)

6 | . . sign_number =(0, 1, 2, 3)

7 | . . nu = prime_number[random.randint(0, k)]

8 | . . sign = random.choice(sign_number)

9 | . . if sign == 0:

10 | . . . . nu = nu * -1

11 | . . return nu

12 |

13 | def show_numb(a):

14 | . . if a > 0:

15 | . . . . return ' + '+ str(a)

16 | . . return ' - ' + str(abs(a))

17 | . .

18 | TopList = ['', '','']

19 |

20 | f1 = open("quadratic.htm", 'w')

21 | f2 = open("answer.htm", 'w')

22 |

23 | for ind in TopList:

24 | . . f1.write(ind + '\n')

25 | for ind in TopList:

26 | . . f2.write(ind + '\n')

27 |

28 | f1.write('

\n')

29 | f2.write('

\n')

30 | tr = 0

31 | count = 1

32 |

33 | for i in range(300):

34 | . . x1 = gen_number(4)

35 | . . x2 = gen_number(7)

36 | . . b = x1 + x2

37 | . . c = x1 * x2

38 |

39 | . . if b != 0:

40 | . . . . if tr == 0:

41 | . . . . . . f1.write('

')

42 | . . . . . . f2.write('

')

43 | . . . . f1.write('

\n')

46 | . . . . f2.write('

\n')

49 | . . . . count += 1

50 | . . . . tr += 1

51 | . . . . if tr == 3:

52 | . . . . . . f1.write('

')

44 | . . . . f1.write(str(count) + ') x2 '+ show_numb(b*-1) + 'x ' +show_numb(c) + ' = 0' )

45 | . . . . f1.write('

')

47 | . . . . f2.write(str(count) + ') x1 = '+ str(x1) + '; x2 = ' + str(x2) )

48 | . . . . f2.write('