Един ден, докато седях там и си пишех скучната домашна по алгебра, ми хрумна една мисъл. Какво ще стане, ако направя калкулатор по алгебра с JavaScript, който в момента уча, за да върши домашното вместо мен. Очевидно можех да намеря такъв калкулатор онлайн, но исках да опитам да го направя сам. Също така исках да се предизвикам още повече, като напиша кода съвсем сам, без външна помощ или с JavaScript библиотеки. Това би било идеалното предизвикателство за мен на сегашното ми ниво на JavaScript.

Осъзнах обаче, че един пълен калкулатор по алгебра, който може да реши всяко уравнение, ще бъде твърде труден и освен това нивото ми по математика все още не е там, където мога да реша всяко уравнение. Затова реших да започна просто и да добавям към моя калкулатор, докато подобрявам JavaScript. Моята цел е да направя прост калкулатор, който ще намери една променлива, т.е. x в уравнение. Все още няма да работи с нищо като скоби или дроби и предполагам, че променливата е x. Това обаче не го прави лесно, тъй като никога преди не съм правил нещо подобно и реших да го направя напълно без референтен код или външна помощ.

Създаване на HTML и CSS

Преди да се тревожа за действителния код, реших първо да направя по-лесната част. Всичко, което трябваше да направя, беше да направя основна HTML форма с бутон за въвеждане на текст, Изпращане и Изчистване. С CSS промених цвета на фона на нещо по-добро и направих
формата центрирана на екрана. Също така направих бутоните и въвеждането на текст по-големи и това беше всичко за HTML и CSS.

Планирането

Сега идва трудната част, същинският код. Нямах представа как ще направя това или дали изобщо е възможно да го направя. Така че си помислих как сам да реша задача по алгебра с математиката, която научих. Учили са ме, че за да решиш задача по алгебра, първо трябва да поставиш всички променливи
отляво на знака за равенство и всички числа отдясно на знака за равенство. След това трябва да добавите или извадите променливите заедно и да добавите или извадите числата заедно, докато останете с едно число и променлива от всяка страна. След това разделяте количеството на променливата на числото от дясната страна
, което накрая ви дава стойността на променливата. Това ми даде моя план и различните стъпки, които трябваше да направя с моя код.

Стъпките за решаване на уравнението:

1. Променлива отляво, числа отдясно
2. Събиране или изваждане на променливи и числа
3. Разделете числото от дясната страна на количеството на променливата

Настройване на уравнението

Преди да мога да направя нещо, имаше един проблем. Уравнението, което се въвежда, е под формата на низ. Как мога да взема променливи и числа и да ги местя и събирам заедно, ако работя с низ. За щастие, след като направих нормален математически калкулатор, вече знаех какво трябва да направя, за да взема
низа и да работя с него. Трябваше да взема низа и да го преобразувам в масив, използвайки метода split. Тъй като работя с лявата и дясната страна на уравнението, всъщност имах нужда от два масива. Така че, за да конвертирам низа в масив, реших да разделя низа от знака за равенство, което ми даде два масива.
След това отново разделям тези масиви с пространството, оставяйки ми два масива, с които всъщност мога да работя.

  1. Променлива отляво, числа отдясно:

    За да преместя променливите отляво, трябваше първо да ги намеря в масива, което беше лесно да направя, защото всичко, което трябваше да направя беше проверка дали текущият елемент на масива включва x. След това бих погледнал оператора (+ или -) и бих взел обратното, например отрицателен x ще бъде избутан като положителен x в лявата страна. По време на този процес, ако намеря променлива, която е само x
    , преобразувах я в 1x, за да мога да правя изчисления с тях по-късно.

Кодът за преместване на числата надясно също беше подобен, където щях да погледна операторите и да натисна номера съответно надясно.

В този процес на подреждане на уравнението имаше много много специфични сценарии, при които моят код може да не работи, например когато числото е първият елемент, така че трябваше
да тествам за тези сценарии и да накарам кода си да работи с всички тях. Това малко усложни нещата, но в крайна сметка всичко се получи.

2. Добавяне или изваждане на променливи и числа:

След като уравнението ми беше подредено правилно, трябваше да събирам и изваждам числата, което беше доста лесно. Трябваше само да погледна оператора и съответно да добавя или изваждам числата в масива. За променливите трябваше да взема числото с променливата и да добавя или изваждам
това. Например, бих взел 3 в 3x и 5 в 5x и бих ги събрал заедно.

3. Разделете числото от дясната страна на количеството на променливата

Това беше най-лесната част, тъй като нямаше никакви цикли или нещо фантастично. Всичко, което трябваше да направя, беше да разделя две числа, така че числото от дясната страна да бъде разделено на числото с променливата, която накрая ми даде стойността на x.

В тази стъпка също забелязах, че ако x стане 0, това ще доведе до грешка, така че ако x е 0, просто бих казал, че уравнението е грешно, например x = x + 7 или че x може да бъде всяко число, например x + 2 = х + 2

Краят?

След 3 часа и половина упорита работа моят калкулатор най-накрая заработи и постигнах целта си. Сблъсках се с много предизвикателства и направих неща, които никога преди не съм правил. Радвам се, че се справих с това предизвикателство и наистина се радвам, че се получи.

Това не означава, че това е краят на този калкулатор, тъй като всичко, което направих, беше да го накарам да работи с основни уравнения. Следващата ми цел е да го накарам да работи с дроби и скоби. Също така искам потребителят да може да въвежда всяка променлива, така че да не е принуден да въвежда x. Друго ограничение в този момент е, че уравнението трябва да има интервали и няма да работи по този начин: 3+7, така че това е нещо, което ще поправя в следващата итерация. Звучи като забавно предизвикателство!

Пълният изходен код е достъпен в Github repository.