September 13, 2023

Вывод нескольких переменных + баг в Leo.

Привет! Сегодня будет статья немного необычного формата. Планировал подготовить для вас решение задачи, где мы по стороне квадрата находим периметр, площадь и что самое интересное - длину диагонали квадрата. И забегая вперед, с длиной диагонали возникли проблемы.

Данная статья доступна в видео-формате по ссылке

Для начала давайте перейдем в Aleo Studio и создадим новый проект.

Нам нужно указать вход и выход функции. На входе будет 1 переменная типа field, которая хранит в себе длину стороны квадрата. А вот на выходе 3 переменные типа field. Мы выбираем данный тип переменных, так как для вычисления длины диагонали нужно будет искать квадратный корень, данное действие поддерживается (должно) только с этим типом данных.

transition main(n: field) -> (field, field, field) {

Теперь мы создаем переменные и сразу в них заносим нужные данные.

let p: field = n*4field;

Переменная p равняется стороне квадрата, умноженной на 4.

let s: field = n**2field;

Переменная s равняется стороне квадрата во второй степени.

И теперь мы переходим к проблеме. Диагональ квадрата равняется корню из удвоенного произведения площади. Давайте найдем хотя-бы корень из площади.

let d: field = s.square_root();

Теперь вернем эти 3 переменные.

return (p , s , d);

На данный момент у нас следующий код

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();

Ответ ChatGPT.

Этот код также представляет программу на языке программирования ALEO. Он содержит функцию, которая выполняет некоторые вычисления, связанные с квадратами чисел. Давайте рассмотрим его по шагам:

  1. program square.aleo: Объявление программы с именем "square".
  2. transition main(n: field) -> (field, field, field) {: Объявление функции (перехода) с именем main, которая принимает один аргумент n типа field и возвращает тройку значений типа field.
  3. let p: field = n * 4field;: Объявление переменной p типа field (поле) и инициализация её значением, равным входному аргументу n, умноженному на 4.
  4. let s: field = n ** 2field;: Объявление переменной s типа field и инициализация её значением, равным квадрату входного аргумента n (возвести n во вторую степень).
  5. let d: field = (s * 2field).square_root();: Объявление переменной d типа field и инициализация её значением, равным корню квадратному из произведения значения переменной s на 2.
  6. return (p, s, d);: Возврат тройки значений: p, s и d в качестве результата функции.

Итак, эта программа выполняет следующие действия:

  • Вычисляет p как четыре раза величину n.
  • Вычисляет s как квадрат значения n.
  • Вычисляет d как квадратный корень из удвоенного значения s.

Затем она возвращает тройку значений (p, s, d) в качестве результата выполнения функции.

Результат

Впервые за всю серию статей, ChatGPT не понял назначение программы. Как вы думаете, почему так получилось? Пишите в комментарии. До встречи в следующей статье!