<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>@romacll</title><author><name>@romacll</name></author><id>https://teletype.in/atom/romacll</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/romacll?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@romacll?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=romacll"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/romacll?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-06-17T22:54:27.255Z</updated><entry><id>romacll:38GCMndPlC4</id><link rel="alternate" type="text/html" href="https://teletype.in/@romacll/38GCMndPlC4?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=romacll"></link><title>Нахождение наименьшего общего кратного (НОК) на языке программирования Leo</title><published>2024-08-30T20:03:56.833Z</published><updated>2024-08-30T20:03:56.833Z</updated><summary type="html">Наименьшее общее кратное (НОК) — это математическое понятие, которое имеет множество применений в реальных задачах, таких как синхронизация процессов, распределение ресурсов и даже криптография. В этой статье мы рассмотрим, как на языке Leo реализовать алгоритм для нахождения НОК двух и более чисел.</summary><content type="html">
  &lt;h4 id=&quot;x9Ct&quot;&gt;Введение&lt;/h4&gt;
  &lt;p id=&quot;UPtl&quot;&gt;Наименьшее общее кратное (НОК) — это математическое понятие, которое имеет множество применений в реальных задачах, таких как синхронизация процессов, распределение ресурсов и даже криптография. В этой статье мы рассмотрим, как на языке Leo реализовать алгоритм для нахождения НОК двух и более чисел.&lt;/p&gt;
  &lt;p id=&quot;HZuW&quot;&gt;Leo — это новый язык программирования, разработанный в рамках проекта Aleo, направленного на создание децентрализованных приложений с приватностью и конфиденциальностью данных. Этот язык предназначен для работы с математическими и криптографическими задачами, что делает его отличным выбором для решения подобных задач.&lt;/p&gt;
  &lt;h5 id=&quot;EiBA&quot;&gt;Зачем нужен НОК?&lt;/h5&gt;
  &lt;p id=&quot;htFb&quot;&gt;Прежде чем углубиться в программирование, давайте разберемся, почему НОК важен. Представьте себе две повторяющиеся задачи, которые выполняются через определенные временные интервалы. Например, одна задача запускается каждые 6 минут, а другая — каждые 8 минут. Чтобы определить, когда обе задачи выполнятся одновременно, нужно найти НОК этих двух чисел. В данном случае НОК равен 24 минутам. Подобные задачи часто встречаются в компьютерных системах, где необходимо синхронизировать различные процессы.&lt;/p&gt;
  &lt;p id=&quot;VYve&quot;&gt;Кроме того, в криптографии НОК используется в алгоритмах, таких как RSA, где важно учитывать общие делители и кратные при работе с ключами. Это делает задачу нахождения НОК важной в теории чисел и безопасности данных.&lt;/p&gt;
  &lt;h4 id=&quot;5bbB&quot;&gt;Основы языка Leo&lt;/h4&gt;
  &lt;p id=&quot;kPBJ&quot;&gt;Leo — это компилируемый язык программирования с поддержкой статической типизации. Он разработан для создания приложений на базе блокчейна, которые могут выполнять приватные вычисления. Основной целью языка является обеспечение конфиденциальности данных при выполнении смарт-контрактов. Проект Aleo, в рамках которого разрабатывается Leo, стремится внедрить эту технологию в реальный мир, предлагая решения для защиты данных и транзакций.&lt;/p&gt;
  &lt;p id=&quot;DCOk&quot;&gt;Leo сочетает в себе элементы функционального и процедурного программирования. Это делает его универсальным инструментом для различных задач, включая математические вычисления. Благодаря встроенным библиотекам и поддержке криптографических примитивов, разработчики могут легко реализовать сложные алгоритмы и создать надёжные приложения.&lt;/p&gt;
  &lt;h5 id=&quot;kbG1&quot;&gt;Синтаксис и особенности&lt;/h5&gt;
  &lt;p id=&quot;RgFU&quot;&gt;Leo поддерживает строгую типизацию, что позволяет избегать ошибок на стадии компиляции. Основные типы данных включают целые числа, массивы и строки. Кроме того, Leo поддерживает сложные структуры данных, такие как структуры и кортежи, что облегчает организацию данных в программах.&lt;/p&gt;
  &lt;p id=&quot;Thif&quot;&gt;Пример простейшей программы на Leo: function main() {&lt;br /&gt;    let x = 5;&lt;br /&gt;    let y = 10;&lt;br /&gt;    let result = x + y;&lt;br /&gt;    console.log(&amp;quot;Результат сложения:&amp;quot;, result);&lt;br /&gt;}&lt;br /&gt; &lt;/p&gt;
  &lt;p id=&quot;4hSV&quot;&gt;Этот код демонстрирует базовые возможности языка: объявление переменных, выполнение арифметических операций и вывод результата в консоль.&lt;/p&gt;
  &lt;h4 id=&quot;3PLq&quot;&gt;Математические вычисления на языке Leo&lt;/h4&gt;
  &lt;p id=&quot;KMZo&quot;&gt;Одной из сильных сторон Leo является его поддержка математических операций. Он предоставляет разработчикам инструменты для выполнения сложных вычислений, включая работу с большими числами, дробями и криптографическими примитивами. Именно поэтому Leo хорошо подходит для задач, связанных с нахождением НОК и НОД.&lt;/p&gt;
  &lt;h5 id=&quot;dSJO&quot;&gt;Алгоритм Евклида&lt;/h5&gt;
  &lt;p id=&quot;OGka&quot;&gt;Как уже было упомянуто, нахождение НОК тесно связано с нахождением наибольшего общего делителя (НОД). Наиболее популярным и эффективным методом нахождения НОД является алгоритм Евклида. Этот древний алгоритм используется уже на протяжении тысячелетий и остаётся одним из самых быстрых способов вычисления НОД.&lt;/p&gt;
  &lt;p id=&quot;h41b&quot;&gt;Суть алгоритма заключается в том, чтобы заменить большее число на остаток от деления его на меньшее, и продолжать этот процесс до тех пор, пока одно из чисел не станет равно нулю. Остаток, оставшийся в последней итерации, и есть НОД.&lt;/p&gt;
  &lt;p id=&quot;1HIk&quot;&gt;function gcd(a: u32, b: u32) -&amp;gt; u32 {&lt;br /&gt;    let mut x = a;&lt;br /&gt;    let mut y = b;&lt;br /&gt;    &lt;br /&gt;    while y != 0 {&lt;br /&gt;        let temp = y;&lt;br /&gt;        y = x % y;&lt;br /&gt;        x = temp;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    return x;&lt;br /&gt;}&lt;br /&gt; &lt;/p&gt;
  &lt;p id=&quot;9Eo2&quot;&gt;Этот код реализует алгоритм Евклида на языке Leo. Он использует цикл &lt;code&gt;while&lt;/code&gt; для итеративного вычисления НОД двух чисел.&lt;/p&gt;
  &lt;h5 id=&quot;FT7G&quot;&gt;Применение НОК в реальной жизни&lt;/h5&gt;
  &lt;p id=&quot;bCmY&quot;&gt;Применение НОК выходит за рамки чисто математических задач. В реальной жизни НОК используется во множестве практических задач. Например, в компьютерных системах задачи синхронизации процессов и планирования требуют точных вычислений НОК для определения времени совместного выполнения задач.&lt;/p&gt;
  &lt;p id=&quot;BDIm&quot;&gt;Другим примером является обработка сигналов, где необходимо синхронизировать работу различных устройств, работающих на разных частотах. В таких случаях вычисление НОК помогает найти общий временной интервал, в который эти устройства могут работать синхронно.&lt;/p&gt;
  &lt;p id=&quot;Dcjb&quot;&gt;В производственных системах, где машины работают с различными интервалами обслуживания, вычисление НОК может помочь определить, когда потребуется остановить обе машины для профилактики. Это позволяет лучше планировать обслуживание и предотвращать незапланированные простои.&lt;/p&gt;
  &lt;h5 id=&quot;0VFG&quot;&gt;НОК и криптография&lt;/h5&gt;
  &lt;p id=&quot;DN0d&quot;&gt;В криптографии нахождение НОК также играет важную роль. Например, в криптографическом алгоритме RSA используется произведение двух больших простых чисел для создания открытого и закрытого ключей. В этом процессе важно учитывать НОК и НОД для правильного выбора параметров ключей. Неправильный расчёт этих значений может сделать криптосистему уязвимой для атак, поэтому точные математические вычисления имеют решающее значение.&lt;/p&gt;
  &lt;h4 id=&quot;79sD&quot;&gt;Расширенная реализация на языке Leo&lt;/h4&gt;
  &lt;p id=&quot;tUde&quot;&gt;Давайте теперь рассмотрим более сложный пример программы на языке Leo, который вычисляет НОК для нескольких чисел одновременно. Для этого мы создадим функцию, которая будет принимать массив чисел и последовательно находить НОК для всех элементов массива.&lt;/p&gt;
  &lt;p id=&quot;A5Rp&quot;&gt;function lcm_array(numbers: [u32; N]) -&amp;gt; u32 {&lt;br /&gt;    let mut result = numbers[0];&lt;br /&gt;    &lt;br /&gt;    for i in 1..N {&lt;br /&gt;        result = lcm(result, numbers[i]);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    return result;&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;
  &lt;p id=&quot;O32c&quot;&gt;Эта функция принимает массив чисел и последовательно вычисляет НОК для каждой пары чисел, пока не будет получен общий НОК для всего массива.&lt;/p&gt;
  &lt;h5 id=&quot;Q0wG&quot;&gt;Обработка больших данных&lt;/h5&gt;
  &lt;p id=&quot;Fibk&quot;&gt;В реальных приложениях часто приходится работать с большими наборами данных. Leo предоставляет инструменты для оптимизации таких задач. Например, использование параллельных вычислений или оптимизированных алгоритмов может значительно ускорить выполнение программы. В случае вычисления НОК для большого количества чисел можно использовать оптимизированные методы, такие как метод бинарного деления массива, что позволяет значительно сократить количество итераций.&lt;/p&gt;
  &lt;p id=&quot;GHpw&quot;&gt;Эта функция принимает массив чисел и последовательно вычисляет НОК для каждой пары чисел, пока не будет получен общий НОК для всего массива.&lt;/p&gt;
  &lt;h5 id=&quot;l79z&quot;&gt;Обработка больших данных&lt;/h5&gt;
  &lt;p id=&quot;Is20&quot;&gt;В реальных приложениях часто приходится работать с большими наборами данных. Leo предоставляет инструменты для оптимизации таких задач. Например, использование параллельных вычислений или оптимизированных алгоритмов может значительно ускорить выполнение программы. В случае вычисления НОК для большого количества чисел можно использовать оптимизированные методы, такие как метод бинарного деления массива, что позволяет значительно сократить количество итераций.&lt;/p&gt;
  &lt;p id=&quot;4GcL&quot;&gt;function optimized_lcm(numbers: [u32; N]) -&amp;gt; u32 {&lt;br /&gt;    if N == 1 {&lt;br /&gt;        return numbers[0];&lt;br /&gt;    } else {&lt;br /&gt;        let mid = N / 2;&lt;br /&gt;        let left_lcm = optimized_lcm(numbers[0..mid]);&lt;br /&gt;        let right_lcm = optimized_lcm(numbers[mid..N]);&lt;br /&gt;        return lcm(left_lcm, right_lcm);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;
  &lt;p id=&quot;Rvdf&quot;&gt;Этот код реализует рекурсивный метод вычисления НОК с использованием принципа &amp;quot;разделяй и властвуй&amp;quot;. Разбивая массив чисел на две части и вычисляя НОК для каждой половины, можно значительно ускорить выполнение программы на больших данных.&lt;/p&gt;
  &lt;h4 id=&quot;Iq4w&quot;&gt;Тестирование и отладка программы&lt;/h4&gt;
  &lt;p id=&quot;tUDH&quot;&gt;Тестирование программы является важной частью процесса разработки. Leo поддерживает встроенные инструменты для тестирования и отладки, что облегчает процесс разработки. В нашем случае мы можем протестировать программу с различными наборами чисел, включая случайные и предопределённые данные, чтобы убедиться в корректности работы алгоритма.&lt;/p&gt;
  &lt;p id=&quot;Iguc&quot;&gt;Пример тестовых данных:&lt;/p&gt;
  &lt;ol id=&quot;7yXC&quot;&gt;
    &lt;li id=&quot;K48n&quot;&gt;Числа 3, 5, 7, 11 — результат должен быть 1155.&lt;/li&gt;
    &lt;li id=&quot;UIxJ&quot;&gt;Числа 10, 20, 30, 40 — результат должен быть 120.&lt;/li&gt;
    &lt;li id=&quot;qqbw&quot;&gt;Числа 8, 9, 21 — результат должен быть 504.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;i4bd&quot;&gt;Эти тесты позволяют проверить корректность алгоритма и его способность обрабатывать разные наборы данных.&lt;/p&gt;
  &lt;h4 id=&quot;TIuy&quot;&gt;Применение на практике: блокчейн и смарт-контракты&lt;/h4&gt;
  &lt;p id=&quot;nAxE&quot;&gt;Leo был разработан для работы в рамках блокчейн-платформы Aleo, которая нацелена на создание приватных и конфиденциальных смарт-контрактов. В блокчейн-среде смарт-контракты могут использовать алгоритмы нахождения НОК и НОД для управления криптографическими операциями и распределения ресурсов.&lt;/p&gt;
  &lt;p id=&quot;plD3&quot;&gt;Например, смарт-контракт может использовать алгоритм нахождения НОК&lt;/p&gt;

</content></entry><entry><id>romacll:oUSHYKWBbov</id><link rel="alternate" type="text/html" href="https://teletype.in/@romacll/oUSHYKWBbov?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=romacll"></link><title>Нахождение наименьшего общего кратного двух чисел на Leo</title><published>2024-08-28T18:07:21.140Z</published><updated>2024-08-28T18:07:21.140Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/98/a6/98a6443c-3d0a-4575-9d9f-0089fba3d3e1.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/a8/78/a878230f-ce5f-4c1f-8f5b-25a62c370f22.jpeg&quot;&gt;Привет! Сегоднчя мы решаем интересную и достаточно сложную задачу на языке программирования Leo от проекта Aleo. Полный текст задачи выглядит так:</summary><content type="html">
  &lt;p id=&quot;G9QY&quot;&gt;Привет! Сегоднчя мы решаем интересную и достаточно сложную задачу на языке программирования Leo от проекта Aleo. Полный текст задачи выглядит так:&lt;/p&gt;
  &lt;p id=&quot;qDcz&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;ILU3&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a8/78/a878230f-ce5f-4c1f-8f5b-25a62c370f22.jpeg&quot; width=&quot;514&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;XHs2&quot;&gt;Давайте начнем с изучения алгоритма поиска наименьшего общего кратного (далее НОК):&lt;/p&gt;
  &lt;figure id=&quot;UVTD&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bb/21/bb2133ef-f6a2-4ea6-9f36-208226cac688.png&quot; width=&quot;915&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;eJK8&quot;&gt;Открываем Aleo Studio и создаем новый проект.&lt;/p&gt;
  &lt;figure id=&quot;kEAg&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/51/f4/51f4c77f-7602-4606-9d02-7f1eac96d7c2.png&quot; width=&quot;653&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;spSB&quot;&gt;У нас создалась базовая программа, изменяем вход и выход функции main. На входе две переменные типа u32, НОК которых мы и будем находить. На выходе функции переменная также типа u32, она будет хранить в себе НОК.&lt;/p&gt;
  &lt;figure id=&quot;3fEF&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/ba/35/ba3574f3-33cc-47c4-87d7-a38fa15c48f0.png&quot; width=&quot;546&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;jUke&quot;&gt;Для начала находим наибольший общий делитель (далее НОД) с помощью алгоритма, указанного ранее. Создаем вспомогательную переменную ost в которой будет храниться остаток от деления большего числа на меньшее.&lt;/p&gt;
  &lt;figure id=&quot;B1zB&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6a/d4/6ad4015f-5e61-4770-9d43-acb15900c404.png&quot; width=&quot;552&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;IhR9&quot;&gt;Теперь создаем цикл for с помощью которого будем делать перебор. В идеале было бы использовать цикл while, но Leo его пока не поддерживает.&lt;/p&gt;
  &lt;figure id=&quot;Bjg0&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/ce/df/cedf652b-4097-4810-a7e4-e0249add6d44.png&quot; width=&quot;292&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;oXU4&quot;&gt;Следующим шагом добавляем условия проверки, является ли остаток равным нулю и также у нас появляются два случая: когда a &amp;gt; b  и когда b &amp;gt; a.&lt;/p&gt;
  &lt;figure id=&quot;mGQy&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/93/a8/93a88389-e707-4d19-a079-b04b59464a2a.png&quot; width=&quot;539&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;n49w&quot;&gt;В каждом случае прописываем нахождение остатка деления большей переменной на меньшую и записываем это значение в переменную ost.&lt;/p&gt;
  &lt;figure id=&quot;aChN&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8c/34/8c34de77-a1fe-4775-b275-8e6066451f34.png&quot; width=&quot;335&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ZaXm&quot;&gt;Теперь нам нужно найти остаток от деления меньшей переменной на остаток.&lt;/p&gt;
  &lt;figure id=&quot;HPkg&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/db/d0/dbd08cef-5ded-4f16-917d-ae6faed9225b.png&quot; width=&quot;310&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Esb9&quot;&gt;Здесь появляется нюанс, что нам нужно хранить последнее значение остатка, который не равен 0, для этого мы создаем вспомогательную переменную и в неё сохраняем остаток до нахождения остатка от деления меньшего числа на предыдущий остаток&lt;/p&gt;
  &lt;figure id=&quot;ru9o&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/43/8c/438c5133-2825-417b-a46c-476758d2e610.png&quot; width=&quot;353&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;V1kB&quot;&gt;Самое сложное мы сделали, теперь в переменной l_ost хранится НОД чисел. Создадим переменную nok в которую сохраним результат работы программы, а также переменную mult в которой будет хранится перемноженное значение переменных a и b (она требуется при нахождении НОК, используя НОД).&lt;/p&gt;
  &lt;figure id=&quot;aBX4&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/18/43/18439bc3-5942-436b-88d1-425a4fc17b41.png&quot; width=&quot;428&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;OnPR&quot;&gt;Осталось в переменную nod записать формулу и вывести её по результату работы программы. Итоговый код выглядит так:&lt;/p&gt;
  &lt;pre id=&quot;fz45&quot;&gt;transition main(a: u32, b:u32) -&amp;gt; u32 {
        let ost: u32 = 0u32;
        let l_ost: u32 = 0u32;
        let nok: u32 = 0u32;
        let mult: u32 = a*b;
            for i: u32 in 1u32..10u32 {
                if b != 0u32 {
                    if a &amp;gt; b {
                        ost = a.rem(b);
                        l_ost = ost;
                        ost = b.rem(ost);
                    }
                    if b &amp;gt; a {
                        ost = b.rem(a);
                        l_ost = ost;
                        ost = a.rem(ost);
                    }
                }
            }
            nok = mult / l_ost;
            return nok;
    }&lt;/pre&gt;
  &lt;p id=&quot;nADt&quot;&gt;Давайте проверим наш код с этими входными данными:&lt;/p&gt;
  &lt;figure id=&quot;oeMn&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/01/b1/01b1cb29-2e00-4052-b580-9d614aa7a3d6.png&quot; width=&quot;495&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;m6SQ&quot;&gt;Мы должны получить 60. Запускаем нашу программу:&lt;/p&gt;
  &lt;figure id=&quot;T8JY&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6e/72/6e72ff73-b4fc-4704-b9d8-24418b5090d4.png&quot; width=&quot;352&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ueuR&quot;&gt;Всё верно, наша программа работает корректно. До встречи в следующих статьях!&lt;/p&gt;

</content></entry><entry><id>romacll:5PmhgDWmkD3</id><link rel="alternate" type="text/html" href="https://teletype.in/@romacll/5PmhgDWmkD3?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=romacll"></link><title>Проверка числа на совершенное на Leo</title><published>2024-08-27T23:10:34.961Z</published><updated>2024-08-27T23:10:34.961Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/20/4e/204ee949-63b6-44c2-8621-fc3524e38020.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/ad/25/ad25f0d8-c412-472f-95a9-765dbf10bd12.jpeg&quot;&gt;Привет! Сегодня мы создадим функцию на языке программирования Leo от проекта Aleo, которая будет определять, является ли полученное число совершенным. Полную задачу вы можете изучить ниже:</summary><content type="html">
  &lt;p id=&quot;dp1T&quot;&gt;Привет! Сегодня мы создадим функцию на языке программирования Leo от проекта Aleo, которая будет определять, является ли полученное число совершенным. Полную задачу вы можете изучить ниже:&lt;/p&gt;
  &lt;figure id=&quot;4EL8&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ad/25/ad25f0d8-c412-472f-95a9-765dbf10bd12.jpeg&quot; width=&quot;521&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;qd78&quot;&gt;Логика программы следующая: мы делаем перебор от 1 до значения переменной, проверяя, делится ли данное число без остатка на нашу переменную, если да, тогда мы суммируем делитель с остальными делителями числа. И далее проверяем, равна ли сумма делителей нашей переменной.&lt;/p&gt;
  &lt;p id=&quot;NGBn&quot;&gt;Давайте приступим и создадим новую программу через Aleo Studio:&lt;/p&gt;
  &lt;figure id=&quot;Mzks&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bd/18/bd18e2cb-ea0b-42a8-9f08-85c68e99ff90.png&quot; width=&quot;641&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;kR7t&quot;&gt;У нас создалась базовая функция main, изменим в ней вход функции на одну переменную a типа u32, а на выходе функции переменная типа boolean (true, если число совершенное, иначе, false):&lt;/p&gt;
  &lt;figure id=&quot;0oBk&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/af/0b/af0b7ad3-3ea1-4c28-a49a-144f42eb962a.png&quot; width=&quot;461&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;6RIv&quot;&gt;Теперь давайте создадим переменную, которая будет хранить сумму всех делителей, переменной а.&lt;/p&gt;
  &lt;figure id=&quot;yvJx&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5c/bc/5cbc5520-c8a0-4dc5-8654-a858c5dc66c5.png&quot; width=&quot;486&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;GXfb&quot;&gt;Следующим шагом создадим переменную result, она будет иметь тип bool и хранить в себе результат работы программы.&lt;/p&gt;
  &lt;figure id=&quot;gVPg&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/30/53/30532d1d-ba5d-49b2-b82a-bbd90dea771c.png&quot; width=&quot;468&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;CiUB&quot;&gt;Теперь создаем цикл перебора, в идеале должен быть перебор от 1 до а, но leo это не поддерживает, поэтому просто берем число в рамках которого будет значение переменной a.&lt;/p&gt;
  &lt;figure id=&quot;o8gU&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1d/87/1d87f872-9aa7-4687-a015-b3f59746ed82.png&quot; width=&quot;493&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;SkGp&quot;&gt;В условном выражении прописываем условие. С помощью оператора rem определяем, является ли итерация i делителем и также проверяем, чтобы мы не выходили за значение переменной a (при i &amp;gt; a делителей быть не может). И если i является делителем, тогда прибавляем i к переменной num&lt;/p&gt;
  &lt;figure id=&quot;9h53&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3a/d7/3ad7bfae-c065-4c81-a2a4-6d67feb6f701.png&quot; width=&quot;511&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;kC9O&quot;&gt;Теперь сравниваем num и a. Если они равны, тогда число совершенное и переменная result имеет значение true.&lt;/p&gt;
  &lt;figure id=&quot;fR2L&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fa/f9/faf9195b-251a-4f5d-bbaa-3ab2b3493a3e.png&quot; width=&quot;318&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;RRGX&quot;&gt;Итак, наша программа готова:&lt;/p&gt;
  &lt;pre id=&quot;tdmT&quot;&gt;program soversh.aleo { 
    transition main(a: u32) -&amp;gt; bool { 
        let num: u32 = 0u32; 
        let result: bool = false; 
            for i: u32 in 1u32..100u32 { 
                if a.rem(i) == 0u32 &amp;amp;&amp;amp; i &amp;lt; a { 
                    num = num + i; 
                } 
            if num == a { 
                result = true; 
                } 
            } 
            return result; 
    } 
}&lt;/pre&gt;
  &lt;p id=&quot;a5ax&quot;&gt;Давайте введем число 131:&lt;/p&gt;
  &lt;figure id=&quot;FtNU&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/de/93/de934770-8666-4c8c-99f5-97547d227721.png&quot; width=&quot;525&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;edQC&quot;&gt;И получаем false:&lt;/p&gt;
  &lt;figure id=&quot;wmDU&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/81/33/81333e57-75a7-40a6-8228-d98955c48aec.png&quot; width=&quot;388&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;S1P6&quot;&gt;Если же введем число 28, которое является совершенным получаем true:&lt;/p&gt;
  &lt;figure id=&quot;sd5g&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4a/65/4a659aa5-1260-466a-90b3-d7791b362eed.png&quot; width=&quot;398&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;qhFf&quot;&gt;Да! Всё верно. На этом всё, увидимся в следующей статье.&lt;/p&gt;

</content></entry><entry><id>romacll:XZbi4k2hc9r</id><link rel="alternate" type="text/html" href="https://teletype.in/@romacll/XZbi4k2hc9r?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=romacll"></link><title>Разность суммы четных и нечетных чисел на Leo</title><published>2024-08-27T23:03:58.662Z</published><updated>2024-08-27T23:03:58.662Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/a5/95/a5952b4f-4f53-4315-9eb4-eef0dc05aa2e.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/b3/99/b399dec7-c900-4432-87c3-9b8e0b79129a.jpeg&quot;&gt;Всем привет! Давно мы с вами не говорили о языке программирования Leo от проекта Aleo. Пора это исправлять и сегодня мы решим данную задачу:</summary><content type="html">
  &lt;p id=&quot;QcSW&quot;&gt;Всем привет! Давно мы с вами не говорили о языке программирования Leo от проекта Aleo. Пора это исправлять и сегодня мы решим данную задачу:&lt;/p&gt;
  &lt;figure id=&quot;sWta&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b3/99/b399dec7-c900-4432-87c3-9b8e0b79129a.jpeg&quot; width=&quot;714&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;zOm6&quot;&gt;Логика будет следующая: в функцию будут поступать 5 переменных, далее каждая из них будет проверяться на четность. Если число четное, тогда к одной переменной прибавляется данное значение, иначе, к другой. Далее находится разность этих сумм.&lt;/p&gt;
  &lt;p id=&quot;4JDu&quot;&gt;Давайте приступать. Открываем Aleo Studio и создаем новую программу.&lt;/p&gt;
  &lt;figure id=&quot;J1WJ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9d/43/9d43e3f8-8e9a-44a3-9f68-111ad7c22dbb.png&quot; width=&quot;630&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Jecq&quot;&gt;У нас создалась автоматически функция main, давайте её модифицировать.&lt;/p&gt;
  &lt;figure id=&quot;QrDN&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c7/86/c7862080-2ec3-4981-8a94-e5783bee9a60.png&quot; width=&quot;630&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;wHZM&quot;&gt;Для начала меняем вход функции, на входе будут 5 переменных типа u32, а на выходе также переменная типа u32 (разность сумм).&lt;/p&gt;
  &lt;figure id=&quot;plWp&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e4/dd/e4dd7e43-0377-4cbc-8f77-c29fc06f5122.png&quot; width=&quot;784&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Hidl&quot;&gt;Теперь нам нужно создать 2 переменные, которые будут хранить в себе суммы четных и нечетных чисел соответственно. Назовем их &amp;quot;ch&amp;quot; для четных и &amp;quot;nch&amp;quot; для нечетных, они будут иметь также тип u32 и по умолчанию значение 0.&lt;/p&gt;
  &lt;figure id=&quot;yeSo&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3e/98/3e985e24-00cb-4a18-b4df-5a74e80c07ab.png&quot; width=&quot;803&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;bOwR&quot;&gt;Теперь пишем основной алгоритм для начала для переменной a. Для определения, является ли переменная четной или нечетной используем оператор rem, находя остаток от деления на 2. Если остаток равен 0, тогда переменная четная и прибавляем эту переменную к переменной ch, иначе, к переменной nch. В коде это выглядит следующим образом:&lt;/p&gt;
  &lt;figure id=&quot;c4pI&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/34/e8/34e81f7e-bce9-4635-937b-a6a906cfa92c.png&quot; width=&quot;780&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;IXtb&quot;&gt;Теперь проделываем те же самые алгоритмы с остальными переменными:&lt;/p&gt;
  &lt;figure id=&quot;naiN&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/58/78/58781c69-4e4a-4267-8cec-7e212a967910.png&quot; width=&quot;692&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;AGnl&quot;&gt;Далее давайте проверим, корректно ли считаются суммы четных и нечетных чисел. Для этого на выходе функции поставим переменные ch и nch.&lt;/p&gt;
  &lt;figure id=&quot;zO8h&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/27/54/27543f77-16b6-4ade-97e0-8fef16d39e7b.png&quot; width=&quot;757&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;UcDC&quot;&gt;Впишем следующие входные данные:&lt;/p&gt;
  &lt;figure id=&quot;9Wms&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8b/66/8b662927-bec0-446a-b5ad-3880598e4047.png&quot; width=&quot;536&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KchF&quot;&gt;Таким образом, мы должны получить 6 (четные) и 8 (нечетные). Давайте запустим нашу программу.&lt;/p&gt;
  &lt;figure id=&quot;j1fI&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/79/39/793976fc-1ea5-425b-b26e-0f825691cacb.png&quot; width=&quot;379&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;qhK6&quot;&gt;Да, программа работает верно. &lt;/p&gt;
  &lt;p id=&quot;DpdS&quot;&gt;Создадим вспомогательную переменную, назовем её sum.&lt;/p&gt;
  &lt;figure id=&quot;RDKU&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/80/d3/80d375bc-77a3-46be-8c55-4b81da85cfe6.png&quot; width=&quot;266&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ajZ6&quot;&gt;Теперь нам нужно найти разность, для этого мы находим бОльшую переменную и вычитаем из неё меньшую. Пишем следующее условное выражение, а также возвращаем переменную sum:&lt;/p&gt;
  &lt;figure id=&quot;pGML&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1a/c0/1ac02af9-82c9-4525-a102-c81b8ae0ddea.png&quot; width=&quot;354&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;r00R&quot;&gt;Запускаем нашу программу:&lt;/p&gt;
  &lt;figure id=&quot;uJ8c&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1f/fc/1ffc83fe-1d04-49a2-8b64-37cd58937e12.png&quot; width=&quot;780&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;uo9o&quot;&gt;К сожалению, мы получили данную ошибку. Чтобы ее исправить меняем тип всех переменных с u32 на i32. Итоговый код:&lt;/p&gt;
  &lt;pre id=&quot;I3sR&quot;&gt;program ex_sum.aleo { 
    transition main(a: i32, b: i32, c: i32, d: i32, e:i32) -&amp;gt; i32 { 
        let ch: i32 = 0i32; 
        let nch: i32 = 0i32; 
        let sum: i32 = 0i32; 
            if a.rem(2i32) == 0i32 { 
                ch = ch + a; 
            } else { 
                nch = nch + a; 
            } 
            if b.rem(2i32) == 0i32 { 
                ch = ch + b; 
            } else { 
                nch = nch + b; 
            } 
            if c.rem(2i32) == 0i32 { 
                ch = ch + c; 
            } else { 
                nch = nch + c; 
            } 
            if d.rem(2i32) == 0i32 { 
                ch = ch + d; 
            } else { 
                nch = nch + d; 
            } 
            if e.rem(2i32) == 0i32 { 
                ch = ch + e; 
            } else { 
                nch = nch + e; 
            } 
            if nch &amp;gt;= ch { 
            sum = nch - ch; 
            } else { 
            sum = ch - nch; 
            } 
            return sum; 
    } 
}&lt;/pre&gt;
  &lt;p id=&quot;L84Q&quot;&gt;Даем следующие входные данные:&lt;/p&gt;
  &lt;figure id=&quot;ORPU&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fc/88/fc8843a0-bdb9-4e53-aff0-a638783be7e3.png&quot; width=&quot;517&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;iNcf&quot;&gt;Теперь наша программа работает верно:&lt;/p&gt;
  &lt;figure id=&quot;zgHG&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/dc/c5/dcc593ac-0d8a-499b-a66a-ee0857034e23.png&quot; width=&quot;388&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;bmyd&quot;&gt;На этом всё! До встречи в следующих статьях, пока!&lt;/p&gt;

</content></entry><entry><id>romacll:hbNxAny6IZ-</id><link rel="alternate" type="text/html" href="https://teletype.in/@romacll/hbNxAny6IZ-?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=romacll"></link><title>Aleo Instructions and snarkVM: A Comprehensive Guide</title><published>2024-07-25T13:22:15.162Z</published><updated>2024-07-25T13:22:15.162Z</updated><summary type="html">Welcome to the comprehensive guide on Aleo instructions and snarkVM. This guide aims to provide an in-depth understanding of Aleo instructions, the intermediate representation of Aleo programs. All Leo programs are compiled into Aleo instructions, which are then compiled into bytecode. Understanding Aleo instructions is crucial for those interested in fine-grained circuit design or implementing a compiler that reads a high-level language other than Leo and runs on Aleo.</summary><content type="html">
  &lt;h2 id=&quot;7FWz&quot;&gt;Introduction&lt;/h2&gt;
  &lt;p id=&quot;066v&quot;&gt;Welcome to the comprehensive guide on Aleo instructions and snarkVM. This guide aims to provide an in-depth understanding of Aleo instructions, the intermediate representation of Aleo programs. All Leo programs are compiled into Aleo instructions, which are then compiled into bytecode. Understanding Aleo instructions is crucial for those interested in fine-grained circuit design or implementing a compiler that reads a high-level language other than Leo and runs on Aleo.&lt;/p&gt;
  &lt;h2 id=&quot;d5Hg&quot;&gt;Aleo Instructions Overview&lt;/h2&gt;
  &lt;p id=&quot;Csps&quot;&gt;Aleo programs are defined in files with a &lt;code&gt;.aleo&lt;/code&gt; extension. These programs contain Aleo instructions, which are akin to an assembly-like programming language. Aleo instructions serve as an intermediate step between high-level Leo programs and the low-level bytecode executed by the Aleo Virtual Machine (AVM).&lt;/p&gt;
  &lt;h3 id=&quot;0eXt&quot;&gt;The Compilation Process&lt;/h3&gt;
  &lt;ol id=&quot;QRJk&quot;&gt;
    &lt;li id=&quot;02D3&quot;&gt;&lt;strong&gt;Leo to Aleo Instructions&lt;/strong&gt;: High-level Leo programs are first compiled into Aleo instructions. This step involves translating the more abstract and user-friendly Leo syntax into a more granular and detailed set of operations.&lt;/li&gt;
    &lt;li id=&quot;U2ev&quot;&gt;&lt;strong&gt;Aleo Instructions to Bytecode&lt;/strong&gt;: The Aleo instructions are then compiled into AVM opcodes, the bytecode that the Aleo Virtual Machine can execute. This bytecode is optimized for execution efficiency and security within the AVM.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2 id=&quot;9O9u&quot;&gt;Key Concepts and Features&lt;/h2&gt;
  &lt;h3 id=&quot;aj8L&quot;&gt;1. File Import&lt;/h3&gt;
  &lt;p id=&quot;vlox&quot;&gt;In Aleo, you can import modules or other program files to utilize their functions, records, and other definitions.&lt;/p&gt;
  &lt;pre id=&quot;Lmeq&quot;&gt;import foo.aleo;
&lt;/pre&gt;
  &lt;p id=&quot;jYoc&quot;&gt;This statement imports the &lt;code&gt;foo.aleo&lt;/code&gt; file, allowing you to use its contents in your current program.&lt;/p&gt;
  &lt;h3 id=&quot;LFWy&quot;&gt;2. Programs&lt;/h3&gt;
  &lt;p id=&quot;cEkX&quot;&gt;An Aleo program is defined with the &lt;code&gt;program&lt;/code&gt; keyword followed by the program name. Inside the program block, you can define various elements such as records, functions, and transitions.&lt;/p&gt;
  &lt;pre id=&quot;Gcqp&quot;&gt;program hello.aleo {
    // code
}
&lt;/pre&gt;
  &lt;p id=&quot;fUgb&quot;&gt;This defines a new program named &lt;code&gt;hello.aleo&lt;/code&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;hRkg&quot;&gt;3. Data Types&lt;/h3&gt;
  &lt;p id=&quot;esNZ&quot;&gt;Aleo supports several primitive data types essential for blockchain programming:&lt;/p&gt;
  &lt;ul id=&quot;c1Zn&quot;&gt;
    &lt;li id=&quot;QaBG&quot;&gt;&lt;strong&gt;Boolean&lt;/strong&gt;: Represents a true or false value.&lt;/li&gt;
    &lt;li id=&quot;NKZT&quot;&gt;&lt;strong&gt;Unsigned Integer&lt;/strong&gt;: Represents non-negative integers with different bit sizes (e.g., &lt;code&gt;u8&lt;/code&gt;, &lt;code&gt;u32&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;mVX7&quot;&gt;&lt;strong&gt;Field Element&lt;/strong&gt;: Represents elements of a finite field, useful in cryptographic operations.&lt;/li&gt;
    &lt;li id=&quot;aUog&quot;&gt;&lt;strong&gt;Group Element&lt;/strong&gt;: Represents elements of a cryptographic group.&lt;/li&gt;
    &lt;li id=&quot;udP4&quot;&gt;&lt;strong&gt;Scalar Element&lt;/strong&gt;: Used in elliptic curve cryptography operations.&lt;/li&gt;
    &lt;li id=&quot;3evS&quot;&gt;&lt;strong&gt;Address&lt;/strong&gt;: Represents a user or contract address on the Aleo blockchain.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;w3oS&quot;&gt;let b: bool = false; // boolean
let i: u8 = 1u8; // unsigned integer
let a: field = 1field; // field element
let g: group = 0group; // group element
let s: scalar = 1scalar; // scalar element
let receiver: address = aleo1ezamst4pjgj9zfxqq0fwfj8a4cjuqndmasgata3hggzqygggnyfq6kmyd4; // address
&lt;/pre&gt;
  &lt;p id=&quot;GTni&quot;&gt;&lt;strong&gt;Type Casting&lt;/strong&gt; Type casting allows you to convert a value from one type to another.&lt;/p&gt;
  &lt;pre id=&quot;9bdx&quot;&gt;let a: u8 = 1u8;
let b: u32 = a as u32; // cast 1u8 to 1u32
&lt;/pre&gt;
  &lt;h3 id=&quot;r5GY&quot;&gt;4. Records&lt;/h3&gt;
  &lt;p id=&quot;fam4&quot;&gt;Records in Aleo are used to group related data together under one name.&lt;/p&gt;
  &lt;pre id=&quot;Nl7Q&quot;&gt;record token {
    owner: address,
    amount: u64,
}
&lt;/pre&gt;
  &lt;p id=&quot;14GF&quot;&gt;This defines a &lt;code&gt;token&lt;/code&gt; record with two fields: &lt;code&gt;owner&lt;/code&gt; (an address) and &lt;code&gt;amount&lt;/code&gt; (an unsigned 64-bit integer).&lt;/p&gt;
  &lt;h3 id=&quot;uKGm&quot;&gt;5. Structs&lt;/h3&gt;
  &lt;p id=&quot;0YGd&quot;&gt;Structs in Aleo provide a way to model more complex data structures.&lt;/p&gt;
  &lt;pre id=&quot;LR3b&quot;&gt;struct message {
    sender: address,
    object: u64,
}
&lt;/pre&gt;
  &lt;p id=&quot;fyX8&quot;&gt;This defines a &lt;code&gt;message&lt;/code&gt; struct with a &lt;code&gt;sender&lt;/code&gt; (an address) and an &lt;code&gt;object&lt;/code&gt; (an unsigned 64-bit integer).&lt;/p&gt;
  &lt;h3 id=&quot;XtYn&quot;&gt;6. Arrays&lt;/h3&gt;
  &lt;p id=&quot;YBW4&quot;&gt;Arrays in Aleo are collections of elements of the same type.&lt;/p&gt;
  &lt;pre id=&quot;YD8y&quot;&gt;let arr: [bool; 2] = [true, false];
&lt;/pre&gt;
  &lt;p id=&quot;hEmR&quot;&gt;This creates an array &lt;code&gt;arr&lt;/code&gt; of two boolean values, &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;IJHi&quot;&gt;7. Transitions&lt;/h3&gt;
  &lt;p id=&quot;cwnp&quot;&gt;Transitions define state changes in the blockchain and can take public or private inputs to produce a new state.&lt;/p&gt;
  &lt;pre id=&quot;8hGI&quot;&gt;transition mint_public(
    public receiver: address,
    public amount: u64,
) -&amp;gt; token {
    // Your code here
}
&lt;/pre&gt;
  &lt;p id=&quot;jUcD&quot;&gt;This &lt;code&gt;mint_public&lt;/code&gt; transition takes a &lt;code&gt;receiver&lt;/code&gt; address and an &lt;code&gt;amount&lt;/code&gt;, returning a &lt;code&gt;token&lt;/code&gt; record.&lt;/p&gt;
  &lt;h3 id=&quot;7szq&quot;&gt;8. Functions&lt;/h3&gt;
  &lt;p id=&quot;Owev&quot;&gt;Functions in Aleo are reusable blocks of code that perform specific tasks.&lt;/p&gt;
  &lt;pre id=&quot;Dbmq&quot;&gt;function compute(a: u64, b: u64) -&amp;gt; u64 {
    return a + b;
}
&lt;/pre&gt;
  &lt;p id=&quot;U1m6&quot;&gt;This &lt;code&gt;compute&lt;/code&gt; function takes two unsigned 64-bit integers and returns their sum.&lt;/p&gt;
  &lt;h3 id=&quot;PSK0&quot;&gt;9. Inline Functions&lt;/h3&gt;
  &lt;p id=&quot;NJes&quot;&gt;Inline functions are more restricted and meant for simple, reusable code snippets.&lt;/p&gt;
  &lt;pre id=&quot;jQt0&quot;&gt;inline foo(
    a: field,
    b: field,
) -&amp;gt; field {
    return a + b;
}
&lt;/pre&gt;
  &lt;p id=&quot;6F9U&quot;&gt;This &lt;code&gt;foo&lt;/code&gt; inline function adds two field elements and returns the result.&lt;/p&gt;
  &lt;p id=&quot;6Zx4&quot;&gt;Function rules:&lt;/p&gt;
  &lt;ul id=&quot;n746&quot;&gt;
    &lt;li id=&quot;HsCX&quot;&gt;&lt;strong&gt;Transition&lt;/strong&gt; functions can call functions and inline functions.&lt;/li&gt;
    &lt;li id=&quot;tZrz&quot;&gt;&lt;strong&gt;Function&lt;/strong&gt; functions can only call inline functions.&lt;/li&gt;
    &lt;li id=&quot;gZoL&quot;&gt;&lt;strong&gt;Inline&lt;/strong&gt; functions can only call other inline functions.&lt;/li&gt;
    &lt;li id=&quot;XOoY&quot;&gt;Recursive calls (direct or indirect) are not allowed.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;r0Sk&quot;&gt;10. For Loops&lt;/h3&gt;
  &lt;p id=&quot;Cv2d&quot;&gt;For loops iterate over a range of values.&lt;/p&gt;
  &lt;pre id=&quot;UuOp&quot;&gt;let count: u32 = 0u32;

for i: u32 in 0u32..5u32 {
    count += 1u32;
}
&lt;/pre&gt;
  &lt;p id=&quot;u6AY&quot;&gt;This loop increments &lt;code&gt;count&lt;/code&gt; from 0 to 5.&lt;/p&gt;
  &lt;h3 id=&quot;XcCA&quot;&gt;11. Mappings&lt;/h3&gt;
  &lt;p id=&quot;3m4e&quot;&gt;Mappings associate keys with values, similar to dictionaries or hash maps.&lt;/p&gt;
  &lt;pre id=&quot;yvh9&quot;&gt;mapping balances: address =&amp;gt; u64;

let contains_bal: bool = Mapping::contains(balances, receiver);
let get_bal: u64 = Mapping::get(balances, receiver);
let get_or_use_bal: u64 = Mapping::get_or_use(balances, receiver, 0u64);
let set_bal: () = Mapping::set(balances, receiver, 100u64);
let remove_bal: () = Mapping::remove(balances, receiver);
&lt;/pre&gt;
  &lt;h3 id=&quot;UyzW&quot;&gt;12. Commands&lt;/h3&gt;
  &lt;p id=&quot;09DT&quot;&gt;Commands perform specific blockchain operations, such as asserting conditions or generating random numbers.&lt;/p&gt;
  &lt;pre id=&quot;1EAU&quot;&gt;transition matches(height: u32) -&amp;gt; Future { 
    return check_height_matches(height); 
}

async function check_height_matches(height: u32) {
    assert_eq(height, block.height); // block.height returns the latest block height
}

let g: group = group::GEN; // the group generator
let result: u32 = ChaCha::rand_u32(); // generate a random u32
let owner: address = self.caller; // address of the program function caller
let hash: field = BHP256::hash_to_field(1u32); // hash any type to a field
let commit: group = Pedersen64::commit_to_group(1u64, 1scalar); // commit using a scalar as a blinding factor

let a: bool = true;
assert(a); // assert the value of a is true

let a: u8 = 1u8;
let b: u8 = 2u8;
assert_eq(a, a); // assert a and b are equal
assert_neq(a, b); // assert a and b are not equal
&lt;/pre&gt;
  &lt;h3 id=&quot;thhk&quot;&gt;13. Operators&lt;/h3&gt;
  &lt;p id=&quot;ckvl&quot;&gt;Operators perform arithmetic, bitwise, and logical operations on data.&lt;/p&gt;
  &lt;pre id=&quot;hzhe&quot;&gt;let sum: u64 = a + b; // arithmetic addition
let diff: u64 = a - b; // arithmetic subtraction
let prod: u64 = a * b; // arithmetic multiplication
let quot: u64 = a / b; // arithmetic division
let remainder: u64 = a % b; // arithmetic remainder
let neg: u64 = -a; // negation

let bitwise_and: u64 = a &amp;amp; b; // bitwise AND
let bitwise_or: u64 = a | b; // bitwise OR
let bitwise_xor: u64 = a ^ b; // bitwise XOR
let bitwise_not: u64 = !a; // bitwise NOT

let logical_and: bool = a &amp;amp;&amp;amp; b; // logical AND
let logical_or: bool = a || b; // logical OR
let eq: bool = a == b; // equality
let neq: bool = a != b; // non-equality
let lt: bool = a &amp;lt; b; // less than
let lte: bool = a &amp;lt;= b; // less than or equal
let gt: bool = a &amp;gt; b; // greater than
let gte: bool = a &amp;gt;= b; // greater than or equal
&lt;/pre&gt;
  &lt;h2 id=&quot;xJPl&quot;&gt;Conclusion&lt;/h2&gt;
  &lt;p id=&quot;lJQK&quot;&gt;Understanding Aleo instructions and snarkVM is essential for anyone looking to delve deeper into the Aleo ecosystem. By mastering the intermediate representation of Aleo programs, developers can achieve fine-grained control over their circuit designs and optimize their applications for the Aleo blockchain. Whether you&amp;#x27;re transitioning from Leo or implementing a new compiler, this guide serves as a foundational resource for working with Aleo instructions and snarkVM.&lt;/p&gt;

</content></entry><entry><id>romacll:rVtUIgrJQZK</id><link rel="alternate" type="text/html" href="https://teletype.in/@romacll/rVtUIgrJQZK?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=romacll"></link><title>Leo Syntax Cheatsheet</title><published>2024-07-24T03:07:37.691Z</published><updated>2024-07-24T03:07:37.691Z</updated><summary type="html">In Aleo, you can import modules or other program files to utilize their functions, records, and other definitions in your program. This is similar to import statements in other programming languages like Python or JavaScript.</summary><content type="html">
  &lt;h3 id=&quot;SVqO&quot;&gt;1. File Import&lt;/h3&gt;
  &lt;p id=&quot;jMiy&quot;&gt;In Aleo, you can import modules or other program files to utilize their functions, records, and other definitions in your program. This is similar to import statements in other programming languages like Python or JavaScript.&lt;/p&gt;
  &lt;pre id=&quot;3sPn&quot;&gt;import foo.aleo;
&lt;/pre&gt;
  &lt;p id=&quot;DGuS&quot;&gt;This statement imports the &lt;code&gt;foo.aleo&lt;/code&gt; file, allowing you to use its contents in your current program.&lt;/p&gt;
  &lt;h3 id=&quot;GVhH&quot;&gt;2. Programs&lt;/h3&gt;
  &lt;p id=&quot;JkDM&quot;&gt;An Aleo program is defined with the &lt;code&gt;program&lt;/code&gt; keyword followed by the program name. Inside the program block, you can define various elements such as records, functions, and transitions.&lt;/p&gt;
  &lt;pre id=&quot;eSRO&quot;&gt;program hello.aleo {
    // code
}
&lt;/pre&gt;
  &lt;p id=&quot;lyYQ&quot;&gt;This defines a new program named &lt;code&gt;hello.aleo&lt;/code&gt;. The program&amp;#x27;s code goes inside the curly braces.&lt;/p&gt;
  &lt;h3 id=&quot;7Fup&quot;&gt;3. Data Types&lt;/h3&gt;
  &lt;p id=&quot;UqjY&quot;&gt;Aleo supports several primitive data types that are commonly used in blockchain programming.&lt;/p&gt;
  &lt;ul id=&quot;HMPC&quot;&gt;
    &lt;li id=&quot;2Ca0&quot;&gt;&lt;strong&gt;Boolean&lt;/strong&gt;: Represents a true or false value.&lt;/li&gt;
    &lt;li id=&quot;c1I4&quot;&gt;&lt;strong&gt;Unsigned Integer&lt;/strong&gt;: Represents non-negative integers with different bit sizes (e.g., &lt;code&gt;u8&lt;/code&gt;, &lt;code&gt;u32&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;dkqn&quot;&gt;&lt;strong&gt;Field Element&lt;/strong&gt;: Represents elements of a finite field, useful in cryptographic operations.&lt;/li&gt;
    &lt;li id=&quot;drVI&quot;&gt;&lt;strong&gt;Group Element&lt;/strong&gt;: Represents elements of a cryptographic group.&lt;/li&gt;
    &lt;li id=&quot;Fpki&quot;&gt;&lt;strong&gt;Scalar Element&lt;/strong&gt;: Used in elliptic curve cryptography operations.&lt;/li&gt;
    &lt;li id=&quot;KmiL&quot;&gt;&lt;strong&gt;Address&lt;/strong&gt;: Represents a user or contract address on the Aleo blockchain.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;Zf07&quot;&gt;let b: bool = false; // boolean
let i: u8 = 1u8; // unsigned integer
let a: field = 1field; // field element
let g: group = 0group; // group element
let s: scalar = 1scalar; // scalar element
let receiver: address = aleo1ezamst4pjgj9zfxqq0fwfj8a4cjuqndmasgata3hggzqygggnyfq6kmyd4; // address
&lt;/pre&gt;
  &lt;p id=&quot;gYLt&quot;&gt;&lt;strong&gt;Type Casting&lt;/strong&gt; Type casting allows you to convert a value from one type to another. This is useful when you need to operate on values of different types.&lt;/p&gt;
  &lt;pre id=&quot;lOf0&quot;&gt;let a: u8 = 1u8;
let b: u32 = a as u32; // cast 1u8 to 1u32
&lt;/pre&gt;
  &lt;p id=&quot;wnQY&quot;&gt;Primitive types include: &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;bool&lt;/code&gt;, &lt;code&gt;field&lt;/code&gt;, &lt;code&gt;group&lt;/code&gt;, &lt;code&gt;i8&lt;/code&gt;, &lt;code&gt;i16&lt;/code&gt;, &lt;code&gt;i32&lt;/code&gt;, &lt;code&gt;i64&lt;/code&gt;, &lt;code&gt;i128&lt;/code&gt;, &lt;code&gt;u8&lt;/code&gt;, &lt;code&gt;u16&lt;/code&gt;, &lt;code&gt;u32&lt;/code&gt;, &lt;code&gt;u64&lt;/code&gt;, &lt;code&gt;u128&lt;/code&gt;, &lt;code&gt;scalar&lt;/code&gt;. Casting is possible between these types, ensuring flexibility in handling different data types.&lt;/p&gt;
  &lt;h3 id=&quot;2hDH&quot;&gt;4. Records&lt;/h3&gt;
  &lt;p id=&quot;8CXU&quot;&gt;Records in Aleo are similar to structs in other languages. They are used to group related data together under one name.&lt;/p&gt;
  &lt;pre id=&quot;lldY&quot;&gt;record token {
    owner: address,
    amount: u64,
}
&lt;/pre&gt;
  &lt;p id=&quot;QdrY&quot;&gt;This defines a &lt;code&gt;token&lt;/code&gt; record with two fields: &lt;code&gt;owner&lt;/code&gt; (an address) and &lt;code&gt;amount&lt;/code&gt; (an unsigned 64-bit integer).&lt;/p&gt;
  &lt;h3 id=&quot;yhUC&quot;&gt;5. Structs&lt;/h3&gt;
  &lt;p id=&quot;qIS7&quot;&gt;Structs are another way to group related data, providing a way to model more complex data structures.&lt;/p&gt;
  &lt;pre id=&quot;L1je&quot;&gt;struct message {
    sender: address,
    object: u64,
}
&lt;/pre&gt;
  &lt;p id=&quot;qKaI&quot;&gt;This defines a &lt;code&gt;message&lt;/code&gt; struct with a &lt;code&gt;sender&lt;/code&gt; (an address) and an &lt;code&gt;object&lt;/code&gt; (an unsigned 64-bit integer).&lt;/p&gt;
  &lt;h3 id=&quot;PVLC&quot;&gt;6. Arrays&lt;/h3&gt;
  &lt;p id=&quot;VGM4&quot;&gt;Arrays in Aleo are collections of elements of the same type.&lt;/p&gt;
  &lt;pre id=&quot;5eYZ&quot;&gt;let arr: [bool; 2] = [true, false];
&lt;/pre&gt;
  &lt;p id=&quot;eF03&quot;&gt;This creates an array &lt;code&gt;arr&lt;/code&gt; of two boolean values, &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;YIdF&quot;&gt;7. Transitions&lt;/h3&gt;
  &lt;p id=&quot;7bLQ&quot;&gt;Transitions are special functions that define state changes in the blockchain. They can take public or private inputs and produce a new state.&lt;/p&gt;
  &lt;pre id=&quot;FmJS&quot;&gt;transition mint_public(
    public receiver: address,
    public amount: u64,
) -&amp;gt; token {
    // Your code here
}
&lt;/pre&gt;
  &lt;p id=&quot;TDj6&quot;&gt;This &lt;code&gt;mint_public&lt;/code&gt; transition takes a &lt;code&gt;receiver&lt;/code&gt; address and an &lt;code&gt;amount&lt;/code&gt;, then returns a &lt;code&gt;token&lt;/code&gt; record. The &lt;code&gt;public&lt;/code&gt; keyword indicates that these inputs are visible to everyone.&lt;/p&gt;
  &lt;h3 id=&quot;MsmN&quot;&gt;8. Functions&lt;/h3&gt;
  &lt;p id=&quot;7M3H&quot;&gt;Functions in Aleo are reusable blocks of code that perform specific tasks. They can accept parameters and return values.&lt;/p&gt;
  &lt;pre id=&quot;vIBH&quot;&gt;function compute(a: u64, b: u64) -&amp;gt; u64 {
    return a + b;
}
&lt;/pre&gt;
  &lt;p id=&quot;oss5&quot;&gt;This &lt;code&gt;compute&lt;/code&gt; function takes two unsigned 64-bit integers and returns their sum.&lt;/p&gt;
  &lt;h3 id=&quot;CmYe&quot;&gt;9. Inline Functions&lt;/h3&gt;
  &lt;p id=&quot;EftJ&quot;&gt;Inline functions are a more restricted type of function meant for simple, reusable code snippets. They can only be called within other inline functions or regular functions.&lt;/p&gt;
  &lt;pre id=&quot;SIoE&quot;&gt;inline foo(
    a: field,
    b: field,
) -&amp;gt; field {
    return a + b;
}
&lt;/pre&gt;
  &lt;p id=&quot;9dnQ&quot;&gt;This &lt;code&gt;foo&lt;/code&gt; inline function adds two field elements and returns the result.&lt;/p&gt;
  &lt;p id=&quot;R67L&quot;&gt;Function rules:&lt;/p&gt;
  &lt;ul id=&quot;pFKM&quot;&gt;
    &lt;li id=&quot;zN7a&quot;&gt;&lt;strong&gt;Transition&lt;/strong&gt; functions can call functions and inline functions.&lt;/li&gt;
    &lt;li id=&quot;o4qP&quot;&gt;&lt;strong&gt;Function&lt;/strong&gt; functions can only call inline functions.&lt;/li&gt;
    &lt;li id=&quot;5exc&quot;&gt;&lt;strong&gt;Inline&lt;/strong&gt; functions can only call other inline functions.&lt;/li&gt;
    &lt;li id=&quot;J1GL&quot;&gt;Recursive calls (direct or indirect) are not allowed to prevent infinite loops and ensure predictable execution.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;CUj5&quot;&gt;10. For Loops&lt;/h3&gt;
  &lt;p id=&quot;q6Kj&quot;&gt;For loops in Aleo iterate over a range of values.&lt;/p&gt;
  &lt;pre id=&quot;7CzA&quot;&gt;let count: u32 = 0u32;

for i: u32 in 0u32..5u32 {
    count += 1u32;
}
&lt;/pre&gt;
  &lt;p id=&quot;mfoS&quot;&gt;This loop increments &lt;code&gt;count&lt;/code&gt; from 0 to 5.&lt;/p&gt;
  &lt;h3 id=&quot;0c5W&quot;&gt;11. Mappings&lt;/h3&gt;
  &lt;p id=&quot;Fp44&quot;&gt;Mappings in Aleo are similar to dictionaries or hash maps in other languages. They associate keys with values.&lt;/p&gt;
  &lt;pre id=&quot;nEGi&quot;&gt;mapping balances: address =&amp;gt; u64;

let contains_bal: bool = Mapping::contains(balances, receiver);
let get_bal: u64 = Mapping::get(balances, receiver);
let get_or_use_bal: u64 = Mapping::get_or_use(balances, receiver, 0u64);
let set_bal: () = Mapping::set(balances, receiver, 100u64);
let remove_bal: () = Mapping::remove(balances, receiver);
&lt;/pre&gt;
  &lt;p id=&quot;ao0B&quot;&gt;This snippet defines a &lt;code&gt;balances&lt;/code&gt; mapping from addresses to unsigned 64-bit integers and demonstrates various operations on the mapping.&lt;/p&gt;
  &lt;h3 id=&quot;mmpG&quot;&gt;12. Commands&lt;/h3&gt;
  &lt;p id=&quot;5Xyf&quot;&gt;Commands in Aleo allow you to perform specific blockchain operations, such as asserting conditions or generating random numbers.&lt;/p&gt;
  &lt;pre id=&quot;RduK&quot;&gt;transition matches(height: u32) -&amp;gt; Future { 
    return check_height_matches(height); 
}

async function check_height_matches(height: u32) {
    assert_eq(height, block.height); // block.height returns the latest block height
}

let g: group = group::GEN; // the group generator
let result: u32 = ChaCha::rand_u32(); // generate a random u32
let owner: address = self.caller; // address of the program function caller
let hash: field = BHP256::hash_to_field(1u32); // hash any type to a field
let commit: group = Pedersen64::commit_to_group(1u64, 1scalar); // commit using a scalar as a blinding factor

let a: bool = true;
assert(a); // assert the value of a is true

let a: u8 = 1u8;
let b: u8 = 2u8;
assert_eq(a, a); // assert a and b are equal
assert_neq(a, b); // assert a and b are not equal
&lt;/pre&gt;
  &lt;p id=&quot;nS7S&quot;&gt;Commands include assertions and various cryptographic operations essential for blockchain functionality.&lt;/p&gt;
  &lt;h3 id=&quot;WueF&quot;&gt;13. Operators&lt;/h3&gt;
  &lt;p id=&quot;kwQw&quot;&gt;Operators in Aleo allow you to perform arithmetic, bitwise, and logical operations on data.&lt;/p&gt;
  &lt;pre id=&quot;J8Hs&quot;&gt;let sum: u64 = a + b; // arithmetic addition
let diff: u64 = a - b; // arithmetic subtraction
let prod: u64 = a * b; // arithmetic multiplication
let quot: u64 = a / b; // arithmetic division
let remainder: u64 = a % b; // arithmetic remainder
let neg: u64 = -a; // negation

let bitwise_and: u64 = a &amp;amp; b; // bitwise AND
let bitwise_or: u64 = a | b; // bitwise OR
let bitwise_xor: u64 = a ^ b; // bitwise XOR
let bitwise_not: u64 = !a; // bitwise NOT

let logical_and: bool = a &amp;amp;&amp;amp; b; // logical AND
let logical_or: bool = a || b; // logical OR
let eq: bool = a == b; // equality
let neq: bool = a != b; // non-equality
let lt: bool = a &amp;lt; b; // less than
let lte: bool = a &amp;lt;= b; // less than or equal
let gt: bool = a &amp;gt; b; // greater than
let gte: bool = a &amp;gt;= b; // greater than or equal
&lt;/pre&gt;
  &lt;p id=&quot;xIIY&quot;&gt;This section demonstrates the use of various operators for performing different types of operations on data in Aleo.&lt;/p&gt;

</content></entry><entry><id>romacll:g1sodiZ4Gnr</id><link rel="alternate" type="text/html" href="https://teletype.in/@romacll/g1sodiZ4Gnr?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=romacll"></link><title>Калькулятор штрафов за превышение скорости на Leo</title><published>2024-07-23T11:34:17.757Z</published><updated>2024-07-23T11:34:17.757Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/1f/18/1f1895ca-b528-4642-a74a-4b5aa2054a60.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/60/e1/60e1775f-6b57-4c88-8e59-17a1948e5064.png&quot;&gt;Привет! Мы продолжаем изучать язык программирование Leo, который создала команда проекта Aleo. И сегодня мы решим такую задачу от ChatGPT:</summary><content type="html">
  &lt;p id=&quot;S6CP&quot;&gt;Привет! Мы продолжаем изучать язык программирование Leo, который создала команда проекта Aleo. И сегодня мы решим такую задачу от ChatGPT:&lt;/p&gt;
  &lt;figure id=&quot;tnR5&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/60/e1/60e1775f-6b57-4c88-8e59-17a1948e5064.png&quot; width=&quot;703&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;6T7z&quot;&gt;Задача достаточно простая, но здесь есть сложности с работой с отрицательными числами. Но обо всём по порядку. Для начала создаём новый проект в Aleo Studio&lt;/p&gt;
  &lt;figure id=&quot;Zv02&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/41/15/41154e9a-38ad-4443-9f33-75d80884f913.png&quot; width=&quot;642&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;yog8&quot;&gt;Создалась базовая программа&lt;/p&gt;
  &lt;figure id=&quot;O3hG&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e5/4a/e54ac13a-71ab-4be4-b291-8da933a1ef3d.png&quot; width=&quot;604&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;BxS3&quot;&gt;К нам в функцию main поступают переменные speed_limit и actual_speed, они имеют тип i32, это нужно, так как мы будем вычитать из актуальной скорости лимит и это значение может быть отрицательным, если нет никаких нарушений. На выходе функции переменная типа i32, она будет хранить в себе сумму штрафа&lt;/p&gt;
  &lt;figure id=&quot;9ajY&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ae/77/ae778ff3-ef59-4a0d-8228-9a3cb94b18f5.png&quot; width=&quot;712&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;SW84&quot;&gt;Теперь давайте создадим переменную penalty, она будет хранить в себе сумму штрафа и мы будем выводить её по результатам работы программы. По умолчанию штраф равен 0.&lt;/p&gt;
  &lt;figure id=&quot;2iDs&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/78/d5/78d52499-e021-4f9e-bad2-33b6fdb8466e.png&quot; width=&quot;717&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;glAP&quot;&gt;Далее мы начинаем сравнивать ограничение и актуальную скорость. Если скорость минус ограничение больше 0 и меньше 10, тогда штраф равен 50.&lt;/p&gt;
  &lt;figure id=&quot;Z21F&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2b/0c/2b0cabce-01c7-4d26-a17f-55f1280d16fd.png&quot; width=&quot;766&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Zkhh&quot;&gt;Тоже самое прописываем для разницы больше 10, но меньше 20&lt;/p&gt;
  &lt;figure id=&quot;8qrV&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7a/3e/7a3ebfa9-516d-4f89-a930-34a3832044bd.png&quot; width=&quot;763&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;v2L9&quot;&gt;Если же превышение больше, чем на 20, тогда штраф равен 200&lt;/p&gt;
  &lt;figure id=&quot;LBMX&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2c/c2/2cc29ae2-5986-4933-8a4c-f6d32e977084.png&quot; width=&quot;405&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;AAGK&quot;&gt;Возвращаем переменную penalty и так выглядит наш итоговый код&lt;/p&gt;
  &lt;figure id=&quot;IV75&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/41/56/41569c85-c89a-4bd6-8b9b-1dc4aef5bcd4.png&quot; width=&quot;945&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;7mH9&quot;&gt;Вводим, например, такие входные данные:&lt;/p&gt;
  &lt;figure id=&quot;meeQ&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8f/88/8f88eec3-7f8a-49e1-b0f4-bb90717d1bde.png&quot; width=&quot;521&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ICuM&quot;&gt;Соответсвенно превышение на 15 километров в час и штраф должен быть 100. Запускаем нашу программу&lt;/p&gt;
  &lt;figure id=&quot;o42y&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0e/bf/0ebf3175-50c1-4490-b1d3-6d0d30c07c14.png&quot; width=&quot;832&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;MCQx&quot;&gt;Да, всё работает корректно! Мы выполнили задачу правильно. До встречи в следующих уроках&lt;/p&gt;

</content></entry><entry><id>romacll:ltdeKL5Ep7E</id><link rel="alternate" type="text/html" href="https://teletype.in/@romacll/ltdeKL5Ep7E?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=romacll"></link><title>Проверка числа на число Армстронга на Leo</title><published>2024-07-22T13:24:41.352Z</published><updated>2024-07-22T13:24:41.352Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/e9/25/e9255366-f78c-4442-a1d9-5b5686cb324e.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/bf/f8/bff8500f-30f0-402e-8810-22ccd94c01ef.png&quot;&gt;Всем привет! В данной статье мы решим задачу, которую нам предложил ChatGPT. Она выглядит следующим образом:</summary><content type="html">
  &lt;p id=&quot;V0Uw&quot;&gt;Всем привет! В данной статье мы решим задачу, которую нам предложил ChatGPT. Она выглядит следующим образом:&lt;/p&gt;
  &lt;figure id=&quot;eDLq&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bf/f8/bff8500f-30f0-402e-8810-22ccd94c01ef.png&quot; width=&quot;707&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;E3oK&quot;&gt;Как нам пишет ChatGPT, число Армстронга - это такое число, которое равно сумме своих собственных цифр, возведенных в степень, равную количеству его цифр. Поскольку это определение можно понять по разному, давайте посмотрим на примере:&lt;/p&gt;
  &lt;figure id=&quot;ZNsw&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b1/9e/b19e76ae-18d9-415e-8039-348e23fbc07e.png&quot; width=&quot;688&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;oMOx&quot;&gt;То есть мы должны провести данный расчёт. Находим все цифры числа и возводим их в степень, равную количеству цифр. Для начала открываем Aleo Studio и создаём новый проект.&lt;/p&gt;
  &lt;figure id=&quot;6FWO&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/47/de/47deedce-f54f-46a3-8ec0-09d5a21b931a.png&quot; width=&quot;647&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ugqd&quot;&gt;У нас создалась базовая функция main, давайте её менять:&lt;/p&gt;
  &lt;figure id=&quot;osXU&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ab/2d/ab2d0b5d-2a0a-4946-97a3-25cf561dc579.png&quot; width=&quot;589&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;TT6f&quot;&gt;У нас в функцию поступает одна переменная, которую мы будем проверять, является ли её значение числом Армстронга. Она будет иметь тип u32. На выходе функции переменная boolean, если значение переменной является числом Армстронга, то мы возвращаем true, иначе, false&lt;/p&gt;
  &lt;figure id=&quot;U4GY&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/75/6d/756dbf6f-b0c5-4ac4-86d8-6c0ae9b592e4.png&quot; width=&quot;450&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;zLEy&quot;&gt;Теперь давайте для дальнейшей работы продублируем значение переменной a в еще одну переменную. Пусть это будет переменная b.&lt;/p&gt;
  &lt;figure id=&quot;jHrA&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fc/7d/fc7d807a-07b3-40c4-9191-bc8aa11d9f8c.png&quot; width=&quot;453&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;5IaT&quot;&gt;Сохраним каждую цифру нашего трехзначного числа в отдельную переменную. Для этого с помощью оператора rem находим остаток от деления нашего числа на 10 и делим наше число нп 10 чтобы перейти на другой разряд.&lt;/p&gt;
  &lt;figure id=&quot;eZDd&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b6/e9/b6e9d009-9d1a-4e91-a3e6-e29eeefecee3.png&quot; width=&quot;296&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8Z6X&quot;&gt;Давайте для проверки выведем цифры нашего числа (они должны быть задом наперед)&lt;/p&gt;
  &lt;figure id=&quot;BYSl&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/74/b8/74b86f8f-60fa-42bf-af40-f4842a0a186c.png&quot; width=&quot;549&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;BuMW&quot;&gt;С этими входными данными:&lt;/p&gt;
  &lt;figure id=&quot;LoeL&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4a/9b/4a9bd928-765b-4096-acaa-190c6df8013d.png&quot; width=&quot;557&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;YZA3&quot;&gt;Если всё работает верно, мы должны получить 321&lt;/p&gt;
  &lt;figure id=&quot;MGDL&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b4/1d/b41d5aae-405a-428c-bfbe-15702ad804d8.png&quot; width=&quot;382&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;tPxP&quot;&gt;Да, всё работает! Создадим переменную result, она будет иметь тип boolean.&lt;/p&gt;
  &lt;figure id=&quot;dwWZ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0c/25/0c2534bd-35bb-4c8e-8695-6d02a726443f.png&quot; width=&quot;450&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;AcyC&quot;&gt;Переходим к последнему этапу. Если переменная a равняется необходимым вычислениям, тогда result будет иметь значение true.&lt;/p&gt;
  &lt;p id=&quot;rcFm&quot;&gt;Нам остается вернуть переменную result.&lt;/p&gt;
  &lt;figure id=&quot;7HEe&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/05/cd/05cdb859-aac3-431e-86aa-65cdf604e980.png&quot; width=&quot;158&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;W3CP&quot;&gt;Запускаем нашу программу с предыдущими входными данными. В них число 123, которое не является числом Армстронга, так что мы должны получить false.&lt;/p&gt;
  &lt;figure id=&quot;WmEG&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a9/c8/a9c8b11f-5420-48a8-bc1d-62bc4f188549.png&quot; width=&quot;388&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;k20P&quot;&gt;Если же мы отправим число 153&lt;/p&gt;
  &lt;figure id=&quot;0KWL&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/60/c7/60c7fa74-dad6-4be1-af90-83765ca7618d.png&quot; width=&quot;502&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;3jog&quot;&gt;Мы получаем true&lt;/p&gt;
  &lt;figure id=&quot;ODnJ&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cd/a2/cda202ad-bf03-468a-acd8-a953440e379e.png&quot; width=&quot;381&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;3wKj&quot;&gt;Всё верно! Наша программа работает корректно. До встречи в следующих статьях по проекту Aleo и языку программирования Leo.&lt;/p&gt;

</content></entry><entry><id>romacll:A7z4xr2Vg5a</id><link rel="alternate" type="text/html" href="https://teletype.in/@romacll/A7z4xr2Vg5a?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=romacll"></link><title>Поиск среднего значения списка  без минимального и максимального элементов на Leo</title><published>2024-06-30T08:07:33.081Z</published><updated>2024-06-30T08:07:33.081Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/7a/35/7a352699-4e79-4fa0-adea-852d71887223.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/bf/59/bf593d2b-e1dc-4e5e-acaf-2b5f1a88abb4.png&quot;&gt;Всем привет! Сегодня мы решим такую необычную задачу на языке программирования Leo, который создан проектом Aleo:</summary><content type="html">
  &lt;p id=&quot;sPSR&quot;&gt;Всем привет! Сегодня мы решим такую необычную задачу на языке программирования Leo, который создан проектом Aleo:&lt;/p&gt;
  &lt;figure id=&quot;q5zw&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bf/59/bf593d2b-e1dc-4e5e-acaf-2b5f1a88abb4.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;P4lW&quot;&gt;Для начала конечно же открываем Aleo Studio и создаем новый проект.&lt;/p&gt;
  &lt;figure id=&quot;nVpO&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/18/cc/18ccabb0-59aa-46d4-9643-c46d01298051.png&quot; width=&quot;650&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;zzro&quot;&gt;У нас создалась базовая программу с функцией main.&lt;/p&gt;
  &lt;figure id=&quot;AJYA&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/49/c0/49c01b7a-13bc-41dd-b7d2-908b254bc948.png&quot; width=&quot;894&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;JKTC&quot;&gt;Теперь меняем вход и выход функции. На входе функции 5 переменных типа u32, на выходе одна переменная типа u32, которая будет хранить в себе среднее арифметическое.&lt;/p&gt;
  &lt;figure id=&quot;otgN&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5a/95/5a9594cd-9aff-41d7-b4e1-38ec3eb75a16.png&quot; width=&quot;786&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Oda1&quot;&gt;Теперь давайте найдем сумму всех перемменных. Запишем её в переменную sum. Нам понадобится это значение, мы вычтем из него большую и меньшую переменные и поделим на три, тем самым решим задачу.&lt;/p&gt;
  &lt;figure id=&quot;pCKx&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9f/70/9f70372c-7ca4-48a1-922c-e301d1c965cb.png&quot; width=&quot;740&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;OOnm&quot;&gt;Переходим к созданию переменных, которые будут хранить наибольшее и наименьшее значения. По умолчанию они будут иметь значение равное 0.&lt;/p&gt;
  &lt;figure id=&quot;Ru9l&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9d/00/9d003b01-9fde-4c02-80aa-9cfe57f7e225.png&quot; width=&quot;741&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;BUQH&quot;&gt;Далее создаем копию всех входных переменных, так как мы будем их менять при поиске наибольшего и наименьшего чисел.&lt;/p&gt;
  &lt;figure id=&quot;bGFP&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/20/49/204968b7-c948-46bd-a4ee-bf9eff2ce1db.png&quot; width=&quot;773&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KbHb&quot;&gt;Следующим шагом ищем наибольшее число. Будем искать его следующим способом: если a &amp;gt; b, тогда задаем переменной b значение переменной a. И по очереди перебираем до переменной e. В коде это выглядит так:&lt;/p&gt;
  &lt;figure id=&quot;trl4&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/87/bd/87bd5920-4d7c-44f8-b00d-5172e1f839d1.png&quot; width=&quot;151&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vM6O&quot;&gt;Сейчас наибольшее число хранится в переменной e, зададим значение переменной highest переменной e.&lt;/p&gt;
  &lt;figure id=&quot;3yLj&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7c/4e/7c4e2516-96ec-4000-bb20-1493b491b502.png&quot; width=&quot;130&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;sdP3&quot;&gt;Делаем тоже самое только с обратным действием для поиска наименьшего числа:&lt;/p&gt;
  &lt;figure id=&quot;46AQ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/05/ec/05ec1a83-8438-4fd8-b7cd-7d165e45102f.png&quot; width=&quot;180&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;6lbY&quot;&gt;Теперь находим среднее арифметическое по принципу, который я описал вначале статьи и возвращаем переменную result:&lt;/p&gt;
  &lt;figure id=&quot;C5v4&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/27/7b/277b97a2-5baf-42b5-b0a1-f02c704a7819.png&quot; width=&quot;497&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;0fbm&quot;&gt;Вписываем входные данные:&lt;/p&gt;
  &lt;figure id=&quot;2HV3&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/43/cb/43cb2a7e-1f3a-43af-b46d-4ed28f929c5c.png&quot; width=&quot;486&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;sO6q&quot;&gt;Исходя из этих данных мы должны получить 120.&lt;/p&gt;
  &lt;figure id=&quot;Gtkl&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c8/09/c809f011-c808-4059-a19a-5394719cce46.png&quot; width=&quot;381&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;GlmQ&quot;&gt;Всё верно, мы получили правильный результат, а значит выполнили задачу. До встречи в следующем уроке!&lt;/p&gt;

</content></entry><entry><id>romacll:PgVYaEnArow</id><link rel="alternate" type="text/html" href="https://teletype.in/@romacll/PgVYaEnArow?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=romacll"></link><title>Решаем задачи от новой версии ChatGPT 4o #4</title><published>2024-06-15T21:32:04.207Z</published><updated>2024-06-15T21:32:04.207Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/04/83/04837d12-6d35-4734-9203-0f1d4cb996e2.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/b7/c4/b7c47c9b-0ea6-40dd-b833-7a15bcc8468e.png&quot;&gt;Привет! Рад видеть вас в 4ой статье, где мы изучаем язык программирования Leo от проекта Aleo, используя ChatGPT 4O.</summary><content type="html">
  &lt;p id=&quot;q6MS&quot;&gt;Привет! Рад видеть вас в 4ой статье, где мы изучаем язык программирования Leo от проекта Aleo, используя ChatGPT 4O.&lt;/p&gt;
  &lt;p id=&quot;Fwel&quot;&gt;Напоминаю, мы делали этот запрос в ChatGPT:&lt;/p&gt;
  &lt;figure id=&quot;3wmk&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b7/c4/b7c47c9b-0ea6-40dd-b833-7a15bcc8468e.png&quot; width=&quot;755&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;bb1h&quot;&gt;Четвёртая задача имеет следующее содержание:&lt;/p&gt;
  &lt;figure id=&quot;L7zq&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/39/de/39dee68c-1a67-4d70-a8df-ed21711bcf82.png&quot; width=&quot;759&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;CjnR&quot;&gt;Соответственно нам нужно написать конвертер из градусов цельсия в фаренгейты, при этом в задаче уточняется, что нам нужно использовать константы. Начнем с формулы перевода, она имеет следующий вид:&lt;/p&gt;
  &lt;figure id=&quot;o8o7&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8a/ff/8affc987-256a-403c-9882-3c531eac2f23.png&quot; width=&quot;376.5&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;1rpi&quot;&gt;Создадим новый проект в Aleo Studio, назовём его ex4.&lt;/p&gt;
  &lt;figure id=&quot;BOd6&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/26/38/2638b8e7-2ab7-406f-93fb-bc99be94de6c.png&quot; width=&quot;660&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;kQYc&quot;&gt;Теперь у нас есть базовая функция main, давайте её модифицировать:&lt;/p&gt;
  &lt;figure id=&quot;nxKY&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/16/34/16349385-3a83-4abe-a04d-fc5493850e22.png&quot; width=&quot;576&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;5olq&quot;&gt;Меняем вход и выход функции. На входе переменная a типа u32, она будет хранить значение в градусах цельсия. А на выходе переменная типа u32, которая хранит преобразованное значение в фаренгейтах.&lt;/p&gt;
  &lt;figure id=&quot;xEsj&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/29/fd/29fd555c-bf74-4978-b259-ee33ea157df6.png&quot; width=&quot;435&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;R3SU&quot;&gt;Создадим переменную frg, которая будет хранить преобразованное значение.&lt;/p&gt;
  &lt;figure id=&quot;ntPa&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b4/90/b490ed44-a41b-450b-8bab-c9e397f84f82.png&quot; width=&quot;205&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;NlrE&quot;&gt;Далее исходя из задачи использовать константы, хочется создать константы со значением 9/5 и 32 (забегая вперед скажу, что это не сработает), и задать переменной frg значение в виде формулы, где цифры мы заменим константами.&lt;/p&gt;
  &lt;figure id=&quot;Mk7l&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/12/32/1232d2f7-741a-4efd-8fb3-6b41487862d5.png&quot; width=&quot;456&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;wbaT&quot;&gt;Но если мы запустим код со входными данными 20, то получим 52, что неправильно.&lt;/p&gt;
  &lt;figure id=&quot;mO0b&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/11/86/1186d92f-9cec-4305-a348-02e3ab500f8e.png&quot; width=&quot;141&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;PrHJ&quot;&gt;Это происходит из-за того что Leo не поддерживает дробные числа, поэтому округляет 9/5, причем до единицы.&lt;/p&gt;
  &lt;p id=&quot;M5nn&quot;&gt;Поэтому нам следует просто вынести из константы 9/5 и сразу записать в формулу:&lt;/p&gt;
  &lt;figure id=&quot;EcrQ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/82/6c/826cb94a-c316-41d3-9685-d8c5d9cb9f01.png&quot; width=&quot;479&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;P1h9&quot;&gt;Теперь запускаем со входными данными 20.&lt;/p&gt;
  &lt;figure id=&quot;0rGU&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a5/a2/a5a28bec-5acf-43e2-b9dc-f5354ef4891d.png&quot; width=&quot;115&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;OOIA&quot;&gt;И мы получили 68, что является правильным результатом.&lt;/p&gt;
  &lt;p id=&quot;xekC&quot;&gt;На этом всё! До встречи в следующих статьях по проекту Aleo и языку программирования Leo.&lt;/p&gt;

</content></entry></feed>