Разность суммы четных и нечетных чисел на Leo
Всем привет! Давно мы с вами не говорили о языке программирования Leo от проекта Aleo. Пора это исправлять и сегодня мы решим данную задачу:
Логика будет следующая: в функцию будут поступать 5 переменных, далее каждая из них будет проверяться на четность. Если число четное, тогда к одной переменной прибавляется данное значение, иначе, к другой. Далее находится разность этих сумм.
Давайте приступать. Открываем Aleo Studio и создаем новую программу.
У нас создалась автоматически функция main, давайте её модифицировать.
Для начала меняем вход функции, на входе будут 5 переменных типа u32, а на выходе также переменная типа u32 (разность сумм).
Теперь нам нужно создать 2 переменные, которые будут хранить в себе суммы четных и нечетных чисел соответственно. Назовем их "ch" для четных и "nch" для нечетных, они будут иметь также тип u32 и по умолчанию значение 0.
Теперь пишем основной алгоритм для начала для переменной a. Для определения, является ли переменная четной или нечетной используем оператор rem, находя остаток от деления на 2. Если остаток равен 0, тогда переменная четная и прибавляем эту переменную к переменной ch, иначе, к переменной nch. В коде это выглядит следующим образом:
Теперь проделываем те же самые алгоритмы с остальными переменными:
Далее давайте проверим, корректно ли считаются суммы четных и нечетных чисел. Для этого на выходе функции поставим переменные ch и nch.
Впишем следующие входные данные:
Таким образом, мы должны получить 6 (четные) и 8 (нечетные). Давайте запустим нашу программу.
Создадим вспомогательную переменную, назовем её sum.
Теперь нам нужно найти разность, для этого мы находим бОльшую переменную и вычитаем из неё меньшую. Пишем следующее условное выражение, а также возвращаем переменную sum:
К сожалению, мы получили данную ошибку. Чтобы ее исправить меняем тип всех переменных с u32 на i32. Итоговый код:
program ex_sum.aleo { transition main(a: i32, b: i32, c: i32, d: i32, e:i32) -> 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 >= ch { sum = nch - ch; } else { sum = ch - nch; } return sum; } }
Даем следующие входные данные:
Теперь наша программа работает верно: