Генератор уравнений: Генераторы Уравнений

Генератор уравнений с одним неихвестным

Генератор уравнений с одним неихвестным — для распечатки и интерактивного решения
 
 
  1. Настройте генератор: выберите действия — умножение, деление или деление с остатком, используемые числа и сложность.
  2. Нажмите «Сгенерировать новые примеры».
  3. C полученными примерами можно работать в трёх режимах:

Готовый файл для распечатки — файл для Word’а, который можно распечатать.
Есть вариант примеров на умножение и деление для ученика — с местами для ответов, и вариант для родителей — с указанными ответами.
Задайте количество страниц, нажмите «изменить», и скачивайте готовый файл.

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

Интерактивные примеры — для тех, кто занимается с планшетом, смартфоном, компьютером, и другим устройством подключённном к интернету.
Задайте нужный шрифт, количество примеров и столбцов и… проверяйте себя on-line.
Если нажать на пример — на экране вместо него появится результат, и ученик сразу сможет проверить себя.

       
Образец:  
59 — 2•(7•x — 10) = 994 — 2•(7•x — 7) = 10106 — 5•(9 — 8•x) = 221
143 — 4•(9•x — 1) = 368 — 5•(2•x — 8) = 835 — 4•(9 — 7•x) = 55
393 — 4•(49 + 9•x) = 17200 — 4•(8 — 8•x) = 392248 — 4•(7•x — 3) = 8
73 — 4•(9 + 6•x) = 1321 — 6•(8 — 2•x) = 943 — 10•(10 — 2•x) = 3
185 — 3•(6•x — 3) = 14125 — 3•(2 — 4•x) = 23971 + 3•(8•x + 17) = 146
81 — 5•(7 — 9•x) = 136530 — 4•(9•x + 67) = 1024 — 7•(2•x — 5) = 45
36 — 2•(9 — 6•x) = 66166 — 3•(3 — 7•x) = 32532 — 3•(2•x — 7) = 5
48 — 3•(2•x — 3) = 15269 — 3•(45 + 5•x) = 14322 + 3•(59 + 7•x) = 646
49 — 4•(4 — 5•x) = 7359 — 7•(6 — 4•x) = 10126 — 3•(5 — 8•x) = 35
269 — 5•(4 — 7•x) = 529103 — 2•(5 — 6•x) = 213141 — 2•(34 + 8•x) = 9
   
Примеры онлайн


Уравнения с одним неизвестным — генератор уравнений различной сложности.

Генератор позволяет создать набор простых и сложных уравнений.

Простые — это уравнения с тремя элементами, у смножителей у неизвестного.
Сложные уравнения требуют раскрытия скобок, в которых находится неизвестное с множителем, и слагаемое или вычитаемое.

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

Варианты: простые/до 10, простые/до 20, простые/до 100, сложные/до 10, сложные/до 20, сложные/до 100

 
www.L1158.ru | www.1158.su
   
[email protected]

Генератор простых арифметических примеров для чайников и не только / Хабр

Привет!

В этой «статье», а вернее сказать очерке, покажу очень простой способ развлечься зная самые основы latex и python.

Зачем?

Ну, можно генерировать простые выражения для детей чтобы считали. Или просто так. Да хоть на обои поставить, если вы такой же фанатик, как и я.

Как это по идее должно работать?

Идея действительно очень простая, написать такую программу может абсолютно каждый. Мы хотим сгенерировать выражение, равное некоторому числу n (которое вводит пользователь). Любое число можно заменить на арифметическое выражение, например, 3 = 1 + 2. А 2 это 4 / 2. Вот так мы сгенерировали 3 = 1 + 4/2. Аналогично, мы введем несколько разных операций и завернем это в LaTeX, язык формул.

Вам понадобится…

Одна неделя опыта в python и matplotlib. Я серьезно.


Основной механизм

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

import random
from math import log
import math
import sys
sys. setrecursionlimit(1000)   # Эта магия делает нерабочий код рабочим
class ProblemGenerator:
    def extract_nums(self, exp):
        symbols = list(exp)
        NUM = "1234567890."
        for i in range(len(symbols)):
            symbols[i] = "N" if symbols[i] in NUM else "T"
        begins = []
        ends = []
        for i in range(len(symbols) - 1):
            fn = symbols[i] + symbols[i + 1]
            if fn == "TN":
                begins.append(i)
            elif fn == "NT":
                ends.append(i)
        if exp[-1] in NUM:
            ends.append(len(exp) - 1)
        if exp[0] in NUM:
            begins = [-1] + begins
        return [(x + 1, y + 1) for x, y in zip(begins, ends)]

Смысл функции extract_nums в том, чтобы получить n пар чисел (a, b), где a — позиция первого символа, b — позиция последнего + 1.

Например, если мы запустим следующий код:

gen = ProblemGenerator()
print(gen.extract_nums("13+256/355+25"))

Увидим:

[(0, 2), (3, 6), (7, 10), (11, 13)]

То есть это массив tuple. (0, 2) означает, что есть число между 0 (включительно) и 2 (не включительно).

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

def unmin(*args, acc=2):
    r = []
    for arg in args:
        f = round(arg, acc)
        if f > 0:
            f = str(f)
        else:
            f = "(" + str(f) + ")"
        r.append(f)
    return r
def __c_sum(num):
    a = round(random.random() * 100, 3)
    b = num - a
    a, b = unmin(a, b)
    return a + " + " + b
def __c_mul(num):
    a = num / (random.random() * 100 + 10)
    if a == 0.0:
        b = random.random()
    else:
        b = num / a
    a, b = unmin(a, b)
    return a + " * " + b

Суть функции unmin не только в том, чтобы просто преобразовать все аргументы в строки, но и в том, чтобы заключить в скобки какой-то из операндов, если он меньше нуля. К примеру, мы получили числа a=3, b=-4. Если мы напишем

a = 3
b = -4
a, b = unmin(a, b)

То a=«3», b=»(-4)»

Ну а остальные функции понятные: __c_sum возвращает строку вида «13 + 4», а __c_mul «13 * 4».
Остается соединить эти две штуки и заменять каждое число в выражении на выражение.
Добавим в ProblemGenerator следующий код:

class ProblemGenerator:
...
    def __init__(self):
        self.funcs = []
    
    def add_expander(self, func):
        self.funcs.append(func)
    
    def complexify(self, num):
        return random.choice(self.funcs)(num)
    
    def __rxp__(self, exp):
        x, y = random.choice(self.extract_nums(exp))
        exp = exp[:x] + "(" + self.complexify(float(exp[x:y])) + ")" + exp[y:]
        return exp
    
    def randexpr(self, ans, steps):
        e = str(ans)
        for i in range(steps):
            e = self.__rxp__(e)
        return e

complexify принимает какое-то число, а возвращает строку — усложненное выражение. Например, если напишем:

gen = ProblemGenerator()
gen.add_expander(__c_sum)
print(gen.complexify(13))

Получим:

31. 2 + (-18.2)

Как работает __rxp__? Мы выбираем позицию случайно числа из выражения (к примеру, если есть выражение «13+35/45», то допустим мы выбрали (3, 5)) и заменяем это число на выражение, равное этому числу. То есть хотелось бы:

«13+35/45» — рандомное число (3, 5)
«13+» + «(12 + 23)» + «/45»
«13+(12+23)/45»

Так и работает __rxp__
Ну а randexpr работает совсем просто. Например, если у нас четыре шага, то раскрывать выражение будет так:

13
(5.62 + 7.38)
((20.63 + (-15.01)) + 7.38)
((20.63 + (-(67.5 + (-52.49)))) + 7.38)
((20.63 + (-((15.16 + 52.34) + (-52.49)))) + 7.38)

Попробуем запустить:

gen = ProblemGenerator()
gen.add_expander(__c_sum)
gen.add_expander(__c_mul)
exp = gen.randexpr(1, 5)
print(exp)

Результат:

((6.63 + (56.62 + 16.8)) + (-((60.53 + 3.61) + 14.91)))

LaTeX

Как ни странно, осталось самое простое. {» + b + «} i*» + c

Добавим все функции в gen:

gen = ProblemGenerator()
gen.add_expander(__l_sum) # Сумма двух чисел
gen.add_expander(__l_div)   # Дробь
gen.add_expander(__l_pow) # Степень
gen.add_expander(__l_sqrt) # Квадратный корень
gen.add_expander(__l_int)   # Определенный интеграл
gen.add_expander(__l_sig)   # Оператор сигма

И наконец добавим вывод результата:

import matplotlib.pyplot as plt
plt.axis("off")
latex_expression = gen.randexpr(1, 30)  # 30 раз заменяем. Выражение будет равно 1
plt.text(0.5, 0.5, "$" + latex_expression + "$", horizontalalignment='center', verticalalignment='center', fontsize=20)
plt.show()

Вот и всё.

Весь код

import random
from math import log
import math
import sys
sys.setrecursionlimit(1000)
class ProblemGenerator:
    def extract_nums(self, exp):
        symbols = list(exp)
        NUM = "1234567890. "
        for i in range(len(symbols)):
            symbols[i] = "N" if symbols[i] in NUM else "T"
        begins = []
        ends = []
        for i in range(len(symbols) - 1):
            fn = symbols[i] + symbols[i + 1]
            if fn == "TN":
                begins.append(i)
            elif fn == "NT":
                ends.append(i)
        if exp[-1] in NUM:
            ends.append(len(exp) - 1)
        if exp[0] in NUM:
            begins = [-1] + begins
        return [(x + 1, y + 1) for x, y in zip(begins, ends)]
    
    def __init__(self):
        self.funcs = []
    
    def add_expander(self, func):
        self.funcs.append(func)
    
    def complexify(self, num):
        return random.choice(self.funcs)(num)
    
    def __rxp__(self, exp):
        x, y = random.choice(self.extract_nums(exp))
        exp = exp[:x] + "(" + self.complexify(float(exp[x:y])) + ")" + exp[y:]
        return exp
    
    def randexpr(self, ans, steps):
        e = str(ans)
        for i in range(steps):
            e = self. __rxp__(e)
        return e
def unmin(*args, acc=2):
    r = []
    for arg in args:
        f = round(arg, acc)
        if f > 0:
            f = str(f)
        else:
            f = "(" + str(f) + ")"
        r.append(f)
    return r
def __c_sum(num):
    a = round(random.random() * 100, 3)
    b = num - a
    a, b = unmin(a, b)
    return a + " + " + b
def __c_mul(num):
    a = num / (random.random() * 100 + 10)
    if a == 0.0:
        b = random.random()
    else:
        b = num / a
    a, b = unmin(a, b, acc=5)
    return a + " * " + b
def __c_sub(num):
    a = num + 100 ** (random.random() * 2)
    b = (a - num)
    a, b = unmin(a, b)
    return a + " - " + b
def __c_log(num):
    fr = random.randint(300, 500)
    a = math.e ** (num / fr)
    a, fr = unmin(a, fr, acc=5)
    return "log(" + a + ") * " + fr
def __l_sum(num):
    a = 100 ** (random.random() * 2)
    b = num - a
    a, b = unmin(a, b)
    return a + " + " + b
def __l_div(num):
    a = num * (random.random() * 100 + 10)
    if a == 0. {" + b + "} i*" + c
gen = ProblemGenerator()
gen.add_expander(__l_sum)
gen.add_expander(__l_div)
gen.add_expander(__l_pow)
gen.add_expander(__l_sqrt)
gen.add_expander(__l_int)
gen.add_expander(__l_sig)
import matplotlib.pyplot as plt
plt.axis("off")
latex_expression = gen.randexpr(1, 30)  # 30 раз заменяем. Выражение будет равно 1
plt.text(0.5, 0.5, "$" + latex_expression + "$", horizontalalignment='center', verticalalignment='center', fontsize=15)
plt.show()


Результат (3 скриншота)

Math.com Генератор рабочих листов по алгебре

Math.com Генератор рабочих листов по алгебре
Дом | Учитель | Родители | Глоссарий | О нас
Отправить эту страницу другу по электронной почте
Выбрать тему
-Select SubjectОсновная математикаПовседневная математикаПредварительная алгебраАлгебраГеометрияТригонометрияСтатистикаИсчислениеДополнительные темыДругое
Ресурсы
Cool Tools
Формулы
Ссылки
Учебные советы
Чудеса математики
Поиск


  
Генератор рабочих листов по алгебре
Имя учителя:
Название рабочего листа:
Выберите количество уравнений каждого типа:

Одношаговые уравнения: (например, x-4=10)
Двухшаговые уравнения: (например, 2x+6=16)
Объединение похожих терминов
Х с обеих сторон
Распределительная собственность

Системы — найти x и у

решить, добавив
решить, вычитая
смесь двух вышеуказанных
требуется один шаг умножения
общая система
решить путем замены

Квадратика — ax 2 +bx+c=0

простой факторизуемый
сложно факторизуемый ( a не равно 1)
общее — требуется квадратичная формула
мнимые решения, общие

Примечание. На листе не будет рекламы.

Опции:

Создать лист ответов также

Включить заголовок

Нет негативов

051020304050607080 Процент коэффициентов, которые являются дробями

Советы по печати — для достижения наилучших результатов печати.

Разрешения. Можете ли вы их фотокопировать? рабочие листы?

Лист ответов открывается в отдельном окне. Пожалуйста, отключите блокировщик всплывающих окон или попробуйте использовать Internet Explorer, если он не появляется.

  
  

 
Свяжитесь с нами | Реклама и спонсорство | Товарищество | Ссылка на нас | Карта сайта

© 2000-2005 Math.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

© 2015 - 2019 Муниципальное казённое общеобразовательное учреждение «Таловская средняя школа»

Карта сайта