Пример «Функции с двумя операндами»
Файлы:
- Синтаксис языка
- Встроенные функции
- Функции с двумя операндами.перфо
- Встроенные функции
Пример программы на языке программирования Перфо:
//Эта программа написана на языке Перфо
//Для демонстрации встроенных функций с двумя операндами
//--- Операции сравнения ---
// Тест функции > : проверяет, больше ли первое значение второго
(Вывод "(> 7 5): " (> 7 5) пс) // ожидаем: Истина
(Вывод "(> 3 9): " (> 3 9) пс) // ожидаем: Ложь
// Тест функции < : проверяет, меньше ли первое значение второго
(Вывод "(< 2 4): " (< 2 4) пс) // ожидаем: Истина
(Вывод "(< 8 3): " (< 8 3) пс) // ожидаем: Ложь
// Тест функции = : проверяет равенство
(Вывод "(= ""где"" ""где""): " (= "где" "где") пс) // ожидаем: Истина
(Вывод "(= ""где"" ""де""): " (= "где" "де") пс) // ожидаем: Ложь
// Тест функции <> : проверяет неравенство, аналог !=
(Вывод "(<> 5 5): " (<> 5 5) пс) // ожидаем: Ложь
(Вывод "(<> 5 3): " (<> 5 3) пс) // ожидаем: Истина
// Тест функции != : проверяет неравенство, аналог <>
(Вывод "(!= ""а"" ""а""): " (!= "а" "а") пс) // ожидаем: Ложь
(Вывод "(!= ""а"" ""б""): " (!= "а" "б") пс) // ожидаем: Истина
// Тест функции БольшеРавно: проверяет, больше или равно
(Вывод "(>= 5 3): " (>= 5 3) пс) // ожидаем: Истина
(Вывод "(>= 4 4): " (>= 4 4) пс) // ожидаем: Истина
(Вывод "(>= 2 7): " (>= 2 7) пс) // ожидаем: Ложь
// Тест функции МеньшеРавно: проверяет, меньше или равно
(Вывод "(<= 2 5): " (<= 2 5) пс) // ожидаем: Истина
(Вывод "(<= 4 4): " (<= 4 4) пс) // ожидаем: Истина
(Вывод "(<= 8 3): " (<= 8 3) пс) // ожидаем: Ложь
//--- Математические функции ---
// Тест функции Atan2: угол по координатам
(Вывод "(Atan2 1 1): " (Atan2 1 1) пс) // ожидаем: ? 0.785 (?/4)
(Вывод "(Atan2 1 -1): " (Atan2 1 -1) пс) // ожидаем: ? 2.356 (3?/4)
// Тест функции LogN: логарифм по основанию 2
(Вывод "(LogN 8 2): " (LogN 8 2) пс)
// ожидаем: 3
// Тест функции % : остаток от деления
(Вывод "(% 17 5): " (% 17 5) пс) // ожидаем: 2
(Вывод "(% 10 2): " (% 10 2) пс) // ожидаем: 0
// Тест функции Окр: округление числа до указанного количества знаков после запятой
(Вывод "(Окр 3.14159 2): " (Окр 3.14159 2) пс)
// ожидаем: 3.14
//--- Логические функции ---
// Тест функции Исклили: логическое XOR
(Вывод "(Исклили Истина Ложь): " (Исклили Истина Ложь) пс) // ожидаем: Истина
(Вывод "(Исклили Истина Истина): " (Исклили Истина Истина) пс) // ожидаем: Ложь
// Тест функции БитИсклили: побитовая операция XOR
(Вывод "(БитИсклили 6 3): " (БитИсклили 6 3) пс)
// ожидаем: 5 — потому что 6 (110) XOR 3 (011) = 101
//--- Функции работы с датами ---
// Тест функции ДобавитьМесяц: прибавляет месяцы к дате
(Перем Дата '20250115')
(Вывод "(ДобавитьМесяц Дата 2): " (ДобавитьМесяц Дата 2) пс) // ожидаем: 15.03.2025 0:00:00
//--- Функции работы с типами и значениями ---
// Тест функции Тип: получает значение типа Тип для указанного строкой определения типа
(Вывод "(Тип ""Строка""): " (Рефлектор.ПолучитьПредставлениеТипа(Тип "Строка")) пс) // ожидаем: Строка
(Вывод "(Тип ""Массив""): " (Рефлектор.ПолучитьПредставлениеТипа(Тип "Массив")) пс) // ожидаем: Промкод.Перфолента.Массив
//(Вывод "(Тип (Список 1 2 3)): " (Тип (Список 1 2 3)) пс) // ожидаем: список
// Тест функции ЭтоТип: соответствует ли значение типу Строка
(Перем Значение "абв")
(Вывод "Значение = """ Значение """" пс)
(Вывод "(ЭтоТип Значение ""Строка""): " (ЭтоТип Значение "Строка") пс) // ожидаем: Истина
(Вывод "(ЭтоТип Значение (Тип ""Строка"")): " (ЭтоТип Значение (Тип "Строка")) пс) // ожидаем: Истина
(Вывод "(ЭтоТип Значение ""Строка""): " (ЭтоТип Значение "Число") пс) // ожидаем: Ложь
(Вывод "(ЭтоТип Значение (Тип ""Строка"")): " (ЭтоТип Значение (Тип "Число")) пс) // ожидаем: Ложь
// Тест функции ЭтоНеТип: соответствует ли значение типу Строка
(Вывод "(ЭтоНеТип Значение ""Строка""): " (ЭтоНеТип Значение "Строка") пс) // ожидаем: Ложь
(Вывод "(ЭтоНеТип Значение (Тип ""Строка"")): " (ЭтоНеТип Значение (Тип "Строка")) пс) // ожидаем: Ложь
(Вывод "(ЭтоНеТип Значение ""Строка""): " (ЭтоНеТип Значение "Число") пс) // ожидаем: Истина
(Вывод "(ЭтоНеТип Значение (Тип ""Строка"")): " (ЭтоНеТип Значение (Тип "Число")) пс) // ожидаем: Истина
// Тест функции ЗнчКТипу: приводит значение к другому типу, если возможно
(Перем Чис 123ч)
(Вывод "(ЗнчКТипу Чис ""Строка""): " (ЗнчКТипу Чис "Строка") пс) // ожидаем: "123"
(Вывод "(ЗнчКТипу ""123"" ""Число""): " (ЗнчКТипу "123" "Число") пс) // ожидаем: 123
(Вывод "(ЗнчКТипу ""123"" (Тип ""Байт"")): " (ЗнчКТипу "123" (Тип "Байт")) пс) // ожидаем: 123
//--- Функции работы с объектами ---
// Тест функции Это: ссылаются ли переменные на один объект
(Перем Объект1 (Список "а" "б" "в"))
(Перем Объект2 Объект1) // тот же объект
(Перем Объект3 (Список "а" "б" "в")) // новый список с тем же содержимым
(Вывод "(Это Объект1 Объект2): " (Это Объект1 Объект2) пс) // ожидаем: Истина
(Вывод "(Это Объект1 Объект3): " (Это Объект1 Объект3) пс) // ожидаем: Ложь
// Тест функции ЭтоНе: не ссылаются ли переменные на один объект
(Вывод "(ЭтоНе Объект1 Объект2): " (ЭтоНе Объект1 Объект2) пс) // ожидаем: Ложь
(Вывод "(ЭтоНе Объект1 Объект3): " (ЭтоНе Объект1 Объект3) пс) // ожидаем: Истина
// Тест функции ЕслиНеОпределено (аналог ??): подставляет значение по умолчанию, если объект не определен
(Перем Значение Неопределено)
(Вывод "(ЕслиНеОпределено Значение ""дефолт""): " (ЕслиНеОпределено Значение "дефолт") пс) // ожидаем: "дефолт"
(Уст Значение "известно")
(Вывод "(ЕслиНеОпределено Значение ""дефолт""): " (ЕслиНеОпределено Значение "дефолт") пс) // ожидаем: "известно"
// Тест функции ?? (аналог ЕслиНеОпределено): возвращает второй аргумент, если первый это Неопределено
(Перем Нечто Неопределено)
(Вывод "(?? Нечто ""резерв""): " (?? Нечто "резерв") пс) // ожидаем: "резерв"
(Уст Нечто "значение")
(Вывод "(?? Нечто ""резерв""): " (?? Нечто "резерв") пс) // ожидаем: "значение"
//--- Функции работы со списками ---
// Тест функции ПЭЛ (аналог ПолучитьЭлемент): получает элемент списка по индексу
(Перем Буквы (Список "а" "б" "в" "г" "д" "е" "ё" "ж" "з" "и"))
(Вывод "(ПЭЛ Буквы 5): " (ПЭЛ Буквы 5) пс)
// ожидаем: "е"
// Если индекс не указан, то возвращаем первый элемент
(Вывод "(ПЭЛ Буквы): " (ПЭЛ Буквы) пс)
// ожидаем: "а"
// ПЭЛ работает со строками
(Вывод "(ПЭЛ ""Буквы"" 3): " (ПЭЛ "Буквы" 3) пс)
// ожидаем: "в"
// Тест функции ПолучитьЭлемент (аналог ПЭЛ): получает элемент списка по индексу
(Перем Буквы (Список "а" "б" "в" "г" "д" "е" "ё" "ж" "з" "и"))
(Вывод "(ПолучитьЭлемент Буквы 8): " (ПолучитьЭлемент Буквы 8) пс)
// ожидаем: "з"
// Если индекс не указан, то возвращаем первый элемент
(Вывод "(ПолучитьЭлемент Буквы): " (ПолучитьЭлемент Буквы) пс)
// ожидаем: "а"
//--- Функции работы со строками ---
// Тест функции Лев: извлекает n символов слева
(Перем Строка "абвгдеёжзи")
(Вывод "(Лев Строка 4): " (Лев Строка 4) пс)
// ожидаем: "абвг"
// Тест функции Прав: извлекает n символов справа
(Вывод "(Прав Строка 3): " (Прав Строка 3) пс)
// ожидаем: "ззи"
// Тест функции Найти: поиск подстроки
(Вывод "(Найти ""абвгдеёжзи"" ""де""): " (Найти "абвгдеёжзи" "де") пс)
// ожидаем: 5
// Тест функции СтрНачинаетсяС: начало строки
(Вывод "(СтрНачинаетсяС ""абвгде"" ""абв""): " (СтрНачинаетсяС "абвгде" "абв") пс) // ожидаем: Истина
(Вывод "(СтрНачинаетсяС ""абвгде"" ""вг""): " (СтрНачинаетсяС "абвгде" "вг") пс) // ожидаем: Ложь
// Тест функции СтрЗаканчиваетсяНа: конец строки
(Вывод "(СтрЗаканчиваетсяНа ""абвгде"" ""где""): " (СтрЗаканчиваетсяНа "абвгде" "где") пс) // ожидаем: Истина
(Вывод "(СтрЗаканчиваетсяНа ""абвгде"" ""вг""): " (СтрЗаканчиваетсяНа "абвгде" "вг") пс) // ожидаем: Ложь
// Тест функции КодСимвола: код символа
(Вывод "(КодСимвола ""УЖ"" 2): " (КодСимвола "УЖ" 2) пс)
(Вывод "(КодСимвола ""Ж""с): " (КодСимвола "Ж"с) пс)
// ожидаем: числовой код "Ж" (например 1046, зависит от кодировки)
// Тест функции НайтиСКонца: поиск подстроки справа налево
(Перем Строка "абвгдеабвгде")
(Вывод "(НайтиСКонца Строка ""вг""): " (НайтиСКонца Строка "вг") пс) // ожидаем: 9
// Тест функции СтрЧислоВхождений: количество подстрок
(Вывод "(СтрЧислоВхождений ""абвабвабв"" ""абв""): " (СтрЧислоВхождений "абвабвабв" "абв") пс) // ожидаем: 3
//Тест функции НСтр: возвращает подстроку на указанном языке
(Перем МногоязычнаяСтрока "ru = ""Добрый вечер!""; en = ""Good Evening!""")
(Вывод "(НСтр МногоязычнаяСтрока ""ru""): " (НСтр МногоязычнаяСтрока "ru") пс) // ожидаем: Добрый вечер!
(Вывод "(НСтр МногоязычнаяСтрока ""en""): " (НСтр МногоязычнаяСтрока "en") пс) // ожидаем: Good Evening!
// Тест функции СиСтр: выполняет замену escape последовательностей принятых в языке C на соответствующие им символы
(Перем СтрокаСи "1-я строка\n2-я строка перед табуляцией\tпосле табуляции")
(Вывод "(СиСтр """ СтрокаСи """): " пс (СиСтр СтрокаСи) пс)
// ожидаем:
//первая строка
//вторая строка перед табуляцией после табуляции
// Тест функции СтрПолучитьСтроку: получить строку по номеру
(Перем Многострочная (СиСтр "первая строка\nвторая строка\nтретья строка"))
(Вывод "(СтрПолучитьСтроку Многострочная 2): " (СтрПолучитьСтроку Многострочная 2) пс) // ожидаем: "вторая строка"
// Тест функции СтрСравнить: лексикографическое сравнение
(Вывод "(СтрСравнить ""абв"" ""абв""): " (СтрСравнить "абв" "абв") пс) // ожидаем: 0
(Вывод "(СтрСравнить ""абв"" ""абг""): " (СтрСравнить "абв" "абг") пс) // ожидаем: -1
(Вывод "(СтрСравнить ""абг"" ""абв""): " (СтрСравнить "абг" "абв") пс) // ожидаем: 1
//Тест функции СтрСоединить: объединяет массив строк с указанным разделителем
(Перем Слова (Массив 2 Строка "да" "нет" "возможно"))
(Вывод "(СтрСоединить Слова): " (СтрСоединить Слова) пс) // ожидаем: "данетвозможно"
(Вывод "(СтрСоединить Слова "", ""): " (СтрСоединить Слова ", ") пс) // ожидаем: "да, нет, возможно"
(Уст Слова (ДЭЛ (Новый Массив) "да" "нет" "возможно"))
(Вывод "(СтрСоединить Слова): " (СтрСоединить Слова) пс) // ожидаем: "данетвозможно"
(Вывод "(СтрСоединить Слова "", ""): " (СтрСоединить Слова ", ") пс) // ожидаем: "да, нет, возможно"
(Уст Слова (Список "да" "нет" "возможно"))
(Вывод "(СтрСоединить Слова): " (СтрСоединить Слова) пс) // ожидаем: "данетвозможно"
(Вывод "(СтрСоединить Слова "", ""): " (СтрСоединить Слова ", ") пс) // ожидаем: "да, нет, возможно"
//--- Прочие функции ---
// Тест функции Формат: форматирование чисел, дат и значений типа Булево
(Вывод "(Формат 3.141528 ""0.00""): " (Формат 3.141528 "0.00") пс) // ожидаем: "3.14"
(Вывод "(Формат 3.141528 ""ЧЦ=8; ЧДЦ=3""): " (Формат 3.141528 "ЧЦ=8; ЧДЦ=3") пс) // ожидаем: "3.142"
(Вывод "(Формат (ТекущаяДата) ""ДФ=yyyy-MM-dd""): " (Формат (ТекущаяДата) "ДФ=yyyy-MM-dd") пс)
// ожидаем: "2025-07-20"
(Вывод "(Формат Истина ""БЛ=""Это ложь""; БИ=""Это правда""""): " (Формат Истина "БЛ=""Это ложь""; БИ=""Это правда""") пс)
// ожидаем: "Это правда"
(Вывод "(Формат Ложь ""БЛ=""Это ложь""; БИ=""Это правда""""): " (Формат Ложь "БЛ=""Это ложь""; БИ=""Это правда""") пс)
// ожидаем: "Это ложь"
К началу статьи
Вернуться в раздел:
Примеры по языку Перфо
Перейти в раздел:
Примеры