Вывод нескольких переменных + баг в Leo.
Привет! Сегодня будет статья немного необычного формата. Планировал подготовить для вас решение задачи, где мы по стороне квадрата находим периметр, площадь и что самое интересное - длину диагонали квадрата. И забегая вперед, с длиной диагонали возникли проблемы.
Данная статья доступна в видео-формате по ссылке
Для начала давайте перейдем в Aleo Studio и создадим новый проект.
Нам нужно указать вход и выход функции. На входе будет 1 переменная типа field, которая хранит в себе длину стороны квадрата. А вот на выходе 3 переменные типа field. Мы выбираем данный тип переменных, так как для вычисления длины диагонали нужно будет искать квадратный корень, данное действие поддерживается (должно) только с этим типом данных.
transition main(n: field) -> (field, field, field) {
Теперь мы создаем переменные и сразу в них заносим нужные данные.
Переменная p равняется стороне квадрата, умноженной на 4.
Переменная s равняется стороне квадрата во второй степени.
И теперь мы переходим к проблеме. Диагональ квадрата равняется корню из удвоенного произведения площади. Давайте найдем хотя-бы корень из площади.
let d: field = s.square_root();
Теперь вернем эти 3 переменные.
На данный момент у нас следующий код
program king.aleo {
transition main(n: field) -> (field, field, field) {
let p: field = n*4field;
let s: field = n**2field;
let d: field = s.square_root();
return (p , s , d);
}
}
Давайте заполним входые данные:
И по результатам работы мы получаем:
Площадь и периметр мы нашли корректно, а вот с квадратным корнем возникают проблемы, к сожалению, решить данную проблему не удалось.
Давайте напишем правильную формулу длины диагонали и загрузим код в ChatGPT.
let d: field = (s*2field).square_root();
Этот код также представляет программу на языке программирования ALEO. Он содержит функцию, которая выполняет некоторые вычисления, связанные с квадратами чисел. Давайте рассмотрим его по шагам:
program square.aleo
: Объявление программы с именем "square".transition main(n: field) -> (field, field, field) {
: Объявление функции (перехода) с именемmain
, которая принимает один аргументn
типаfield
и возвращает тройку значений типаfield
.let p: field = n * 4field;
: Объявление переменнойp
типаfield
(поле) и инициализация её значением, равным входному аргументуn
, умноженному на 4.let s: field = n ** 2field;
: Объявление переменнойs
типаfield
и инициализация её значением, равным квадрату входного аргументаn
(возвестиn
во вторую степень).let d: field = (s * 2field).square_root();
: Объявление переменнойd
типаfield
и инициализация её значением, равным корню квадратному из произведения значения переменнойs
на 2.return (p, s, d);
: Возврат тройки значений:p
,s
иd
в качестве результата функции.
Итак, эта программа выполняет следующие действия:
- Вычисляет
p
как четыре раза величинуn
. - Вычисляет
s
как квадрат значенияn
. - Вычисляет
d
как квадратный корень из удвоенного значенияs
.
Затем она возвращает тройку значений (p, s, d)
в качестве результата выполнения функции.
Результат
Впервые за всю серию статей, ChatGPT не понял назначение программы. Как вы думаете, почему так получилось? Пишите в комментарии. До встречи в следующей статье!