Комментарии 20
а теперь перепишите это на фреймворке Kivy - и программа у вас превратится в жар птицу (по красоте) и ее даже можно будет без особых переделок запускать на Android.
Хорошо, вот на Delphi:
procedure TFormMain.ButtonCalcClick(Sender: TObject);
begin
var A := EditA.Text.ToDouble;
var B := EditB.Text.ToDouble;
var C := EditC.Text.ToDouble;
var Discriminant := Power(B, 2) - 4 * A * C;
if Discriminant > 0 then
begin
var X1 := (-B + Sqrt(Discriminant)) / (2 * A);
var X2 := (-B - Sqrt(Discriminant)) / (2 * A);
MemoResult.Text := Format('x1 = %f'#13#10'x2 = %f', [X1, X2]);
end
else
MemoResult.Text := 'Уравнение не имеет действительных корней';
end;
procedure TFormMain.ButtonCalcIncompClick(Sender: TObject);
begin
var A := EditIncompA.Text.ToDouble;
var B := EditIncompB.Text.ToDouble;
var X := -(B / A);
MemoResultIncomp.Text := Format('x = %f', [X]);
end;
Это весь код, что я написал. На Андроид, Мак, Линукс и Иос тоже запустится
А ты тоже школьник? Dephi с торрентов? На всех, тобой перечисленных OS, тестил? Где у тебя файл с описанием GUI? Сколько "весит" бинарник этого твоего "на Deplhi"?
Не школьник.
Delphi имеет бесплатную Community версию. У меня вообще платная.
На всех указанных OS это будет работать.
Собрать могу хоть сейчас на все платформы на одной машине.
Файл с описанием GUI трогать не надо, это всегда автогенерация. Его пишет сама среда разработки. Ты визуально конструируешь UI.
Ехе весит около 15мб. Не имея никаких зависимостей. На других платформах - также (но Линукс требует gtk).
Упрощу вопрос. Зачем ты привёл своё решение на Delphi? Что хотел показать этим?
Интересно, как такой “графический hello world” сейчас, на текущее время
можно реализовать на разных языках, что получается,
какие возможности кроссплатформенности
как выглядит исходный текст
насколько быстро это можно реализовать
какие другие проблемы возникают То есть тема вполне для обсуждения на habr.
15мб хелоуворлд бгг. 1кб это должно весить, и работать на любой платформе начиная как минимум с винХП.

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Калькулятор квадратных уравнений</title>
<style>
* {
box-sizing: border-box;
font-family: "Segoe UI", sans-serif;
}
body {
margin: 0;
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background: #1e1e1e;
color: white;
}
.window {
width: 900px;
background: #252525;
border-radius: 12px;
padding: 18px;
box-shadow: 0 0 25px rgba(0,0,0,0.4);
}
.title {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 18px;
font-size: 20px;
font-weight: 600;
}
.logo {
width: 28px;
height: 28px;
border-radius: 50%;
background: #b32025;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
}
.content {
display: flex;
gap: 20px;
}
.card {
flex: 1;
background: #2c2c2c;
border-radius: 12px;
padding: 18px;
}
.card h2 {
margin-top: 0;
margin-bottom: 18px;
font-size: 22px;
font-weight: 500;
}
.input-group {
position: relative;
margin-bottom: 14px;
}
.input-group input {
width: 100%;
padding: 14px 45px 14px 14px;
border: 1px solid #555;
border-radius: 6px;
background: #3a3a3a;
color: white;
font-size: 18px;
outline: none;
}
.input-group span {
position: absolute;
right: 14px;
top: 50%;
transform: translateY(-50%);
color: #bdbdbd;
font-size: 18px;
}
button {
width: 100%;
padding: 14px;
border: none;
border-radius: 6px;
background: #59c6f4;
color: black;
font-size: 18px;
cursor: pointer;
transition: 0.2s;
margin-bottom: 16px;
}
button:hover {
background: #71d3fb;
}
.result {
min-height: 90px;
background: #3a3a3a;
border: 1px solid #555;
border-radius: 6px;
padding: 14px;
font-size: 20px;
line-height: 1.6;
white-space: pre-line;
}
</style>
</head>
<body>
<div class="window">
<div class="title">
<div class="logo">D</div>
Калькулятор квадратных уравнений
</div>
<div class="content">
<!-- Полное квадратное -->
<div class="card">
<h2>Квадратные уравнения</h2>
<div class="input-group">
<input type="number" id="a" value="-4">
<span>A</span>
</div>
<div class="input-group">
<input type="number" id="b" value="5">
<span>B</span>
</div>
<div class="input-group">
<input type="number" id="c" value="6">
<span>C</span>
</div>
<button onclick="solveQuadratic()">Решить</button>
<div class="result" id="quadraticResult"></div>
</div>
<!-- Неполное -->
<div class="card">
<h2>Квадратные неполные уравнения</h2>
<div class="input-group">
<input type="number" id="na" value="-1">
<span>A</span>
</div>
<div class="input-group">
<input type="number" id="nb" value="5">
<span>B</span>
</div>
<button onclick="solveSimple()">Решить</button>
<div class="result" id="simpleResult"></div>
</div>
</div>
</div>
<script>
function solveQuadratic() {
let a = parseFloat(document.getElementById('a').value);
let b = parseFloat(document.getElementById('b').value);
let c = parseFloat(document.getElementById('c').value);
let d = b * b - 4 * a * c;
let result = '';
if (d < 0) {
result = 'Нет действительных корней';
}
else if (d === 0) {
let x = (-b / (2 * a)).toFixed(2);
result = `x = ${x}`;
}
else {
let x1 = ((-b - Math.sqrt(d)) / (2 * a)).toFixed(2);
let x2 = ((-b + Math.sqrt(d)) / (2 * a)).toFixed(2);
result = `x1 = ${x1}\nx2 = ${x2}`;
}
document.getElementById('quadraticResult').innerText = result;
}
function solveSimple() {
let a = parseFloat(document.getElementById('na').value);
let b = parseFloat(document.getElementById('nb').value);
if (a === 0) {
document.getElementById('simpleResult').innerText = 'A не может быть 0';
return;
}
let x = Math.sqrt(-b / a);
if (isNaN(x)) {
document.getElementById('simpleResult').innerText = 'Нет решения';
} else {
document.getElementById('simpleResult').innerText =
`x = ${x.toFixed(2)}`;
}
}
solveQuadratic();
solveSimple();
</script>
</body>
</html>Другие ОС


Среда. Дизайнер (код окна трогать не надо)

Я знаю, что такое Delphi. C четвёртой по седьмую версию пользовался довольно активно и даже деньги зарабатывал этим. Но раз уж ты осилил скриншоты, дай ссылку на .apk и бинарник для Linux. Сильно интересно стало, насколько это действительно кросплатформенно.
Насколько "кроссплатформенно" можешь посмотреть здесь:
https://github.com/HemulGM/ChatGPT
Это куда более крупный проект. С доступными бинарниками
Вообще не уровень хабра. Да и цель статьи не понятна. Если хотели научить аудиторию использовать tkinter, то зачем описывать, как в питоне импортируются пакеты, и что означает else? Если хотели обучить синтаксису питона, то этого явно мало, да и пример для обучения выбран не самый показательный.
Можешь глянуть, я тут что-то похожее делал - только там вообще все решить можно
А что за дичь с "неполными" квадратными уравнениями? Это же просто частные случаи, когда один или несколько коэффициентов равны нулю. Вот только, если a == 0,то уравнение перестаёт быть квадратным, а если a == b == 0, то оно перестаёт быть уравнением и становится равенством, только в одном случае истинным, а в остальных ложным. И все это можно запрограммировать без лишних полей ввода. Просто не вводим коэффициенты, если их нет. Корни, кстати, тоже можно представить не в виде одной-двух переменных, а иначе, более универсально.
Я понял. Теперь дети пишут свои потуги в виде статей на Хабре. Вот это уровень, вот это мы приехали.
То моё беспокойство что я не написал ни одного поста - было нивелировано тем, что смысл постов просто обесценился.
Наличие научных публикаций в дипломе, на которое так пытались дрочить научруки, и чего я не стал делать - очевидно что полная хуйня. Круто что не вляпался в это ЧСВшное дерьмо... Просто делаешь что хочешь, для себя, и как сам это видишь. Всё. Объяснять кому-то очевидные с одной стороны, и агностические с другой стороны темы - бред. Главное - результат. А он есть.
Блин, смысл статьи то в чём? Я однажды смог ускорить обучение нейронки в 10к раз, что шло вразрез с подобием доки (на тот момент их не было), и просто рассказал об этом ребятам в команде, и всё. Похоже в этом было бы гораздо больше смысла, чем в этой статье.
Да и в целом алгоритм туповатый. Как и UX. Суть программы это упростить что-то, а не усложнить, задавая очевидные и ненужные вопросы. Задача - либо ввод уравнения целиком (с парсингом), либо коэффициентов, и всё. Ввод коэффициента A,B,C - тоже звучит тупо, потому что не понятно к какой степени они относятся. Эти цифры в принципе не были нужны. Очевидно что нужно было вместо них писать неизвестную с показателем. А сейчас программа зачем? Половина это копипаста, перегруженный интерфейс, так ещё и непонятный.
Неплохо для первого проекта. Я так баловался с реализацией алгоритма дисперсии, это поинтереснее будет.
Можете ознакомиться с ttk.button() или, лучше, с более совершенными формами tkinter вроде customtkinter. Тогда можно сделать близкое к WinUI стилю, более современно выглядящее приложение, а не просто WinForms, примерно такое, как товарищ выше в комментах прислал. Это возможно и c Python.
Если интересно, потом покажу свой старый эксперимент "DisperiaPro", на котором я разбирался с компиляцией бинарников на Python и реализовал подсчёт среднеквадратичного отклонения, дисперсии и др.
Ну чего вы негативите так народ?
Ну да, тема не хабровская совсем, просто школьник написал код и показал это миру.
В целом, он не виноват что его пост одобрили и опубликовали)
Раз есть что есть, лучше поддержим его как старшие коллегия))
А негативить идём под посты типа "я X и за 30 секунд сделал свое приложение через ИИ, так что эти ваши прахрамисты никому не нужны"
https://habr.com/ru/articles/1031410/
Дык, это, там +51
А-а, там шутка юмора. Не выкупил при беглом осмотре.


Как создать калькулятор для расчёта квадратных уравнений на Python с использованием фреймворка Tkinter