Перфо. Пример 1

Материал из ТХАБ.РФ
Перейти к: навигация, поиск

Перфо. Пример 1

// *** Тестовый скрипт на языке Перфо ***

//(Отладка Ложь) //выключим режим отладки скрипта, когда он будет полностью отлажен

(Очистить) //очищаем экран консоли

  1. Область "Привет, МИР!"

(Вывод "Привет, МИР! Это программа на языке Перфо." ПС) //запросим у пользователя имя и сохраним в переменную (Перем Пользователь (Ввод "Введи своё имя: ")) (Вывод "Вас зовут " Пользователь ПС) (Пауза) (Вывод ПС) // ПС это символ перевода строки

  1. КонецОбласти
  1. Область "Арифметические выражения"

//попробуем вычислять арифметические выражения (Перем А 5.3) (Вывод "Перем А=" А ПС) //создадим переменную А и выведем её значение на экран //тут мы налету создадим идентификатор Б из строки "Б" (Перем (Идент "Б") 4.7) //после создания идентификатора (Идент "Б") сразу вычислим его значение ((Идент "Б")) (Вывод "Перем Б=" ((Идент "Б")) ПС) (Вывод "Выражение: (+ А Б)" ПС) (Вывод "Результат = " (+ А Б) ПС) (Вывод "Выражение: (* А (+ А Б))" ПС) (Вывод "Результат = " (* А (+ А Б)) ПС)

  1. КонецОбласти

//проверим разные типы чисел (Вывод "Сумма чисел разного типа = " (+ 2 2.12 255б8 4ц -3ч .25в -.015д 1.5Е-2ч -1Е-28 0xAF 0b101 0o2730 &HAF &B101 &O2730 -127ц8 ) пс) (Вывод "Произведение чисел разного типа = " (* 2б 2.12 255б8 4ц -3ч .25в -.015д 1.5Е-2ч -1Е-28 0xAF 0b101 0o2730 &HAF &B101 &O2730 -127ц8 ) пс)

//проверим оператор Если (если (> А 100) ( (Вывод "А=" А " больше 100!" ПС) (перем Б (* Б 2)) (вывод "Б умножилось на 2 = " Б ПС) ) ( (Вывод "А=" А " НЕ больше 100!" ПС) (перем Б (* Б 10)) (вывод "Б умножилось на 10 = " Б ПС) ) ) //оператор Если возвращает последнее значение из выбранной по условию последовательности (Вывод (Если (< А 100) "меньше 100" "больше 100") пс) (Пауза) (Вывод ПС)

//создадим функцию с одним аргументом (Функция (Квадрат х) (* х х))

//проверим функцию (Вывод "Выражение: (Квадрат А)" ПС) (Вывод "Результат = " (Квадрат А) ПС)

//создадим функцию с двумя аргументами (Функция (Множ х у) (* х у))

//проверим функцию (Вывод "Выражение: (Множ А Б)" ПС) (Вывод "Результат = " (Множ А Б) ПС) (Пауза) (Вывод ПС)

(Вывод "Отрицательное число -3 = " -3 ПС) (Вывод "Операция унарный минус (- 3) = " (- 3) ПС) (Вывод "Операция унарный минус (- -3) = " (- -3) ПС)


//определим функцию очень хитрым способом //условие возвращает действие + или -, которое затем применяется к х (функция (абс х)

   ((если (>= х 0) + -) х)

) (Вывод "Результат (абс 3) = " (абс 3) ПС) (Вывод "Результат (абс -3) = " (абс -3) ПС) (Вывод "Результат (абс (+ 4 6)) = " (абс (+ 4 6)) ПС) (Вывод "Результат (абс (- 4 6)) = " (абс (- 4 6)) ПС)

//определим факториал (функция (факториал х)

   (если (= х 0)
       1
       (* х (факториал (- х 1)))
   )

) (Вывод "Результат (факториал 0) = " (факториал 0) ПС) (Вывод "Результат (факториал 1) = " (факториал 1) ПС) (Вывод "Результат (факториал 2) = " (факториал 2) ПС) (Вывод "Результат (факториал 3) = " (факториал 3) ПС) (Вывод "Результат (факториал 10) = " (факториал 10) ПС)

//более эффективное вычисление факториала с помощью хвостовой рекурсии (функция (факториал2 х)

   (факториал2_хвост х 1)

) (функция (факториал2_хвост х у)

   (если (= х 0)
       у
       (факториал2_хвост (- х 1) (* х у))
   )

) (Вывод "Результат (факториал2 0) = " (факториал2 0) ПС) (Вывод "Результат (факториал2 1) = " (факториал2 1) ПС) (Вывод "Результат (факториал2 2) = " (факториал2 2) ПС) (Вывод "Результат (факториал2 3) = " (факториал2 3) ПС) (Вывод "Результат (факториал2 10) = " (факториал2 10) ПС)

(Пауза) (Вывод ПС)


//используем лямбду без параметров (перем ЛЯМ (функ () "значение лямбды")) (Вывод "Результат (лям) = " (лям) ПС)

//используем лямбду с двумя параметрами (перем ЛЯМ2 (функ (х у) (+ х у))) (Вывод "Результат (лям2 3 5) = " (лям2 3 5) ПС) // ////проверим область видимости (функция (ФА Б) (+ (* Б Б) 25)) (функция (ФД Б) (+ (ФА (+ Б 1)) (ФА (- Б 1)))) (Вывод "(ФА 5)=" (ФА 5) пс) (Вывод "(ФБ 10)=" (ФА 10) пс)

//запомним встроенную функцию * в переменную УМН (Перем УМН *) (Вывод "(УМН 2 3 4)=" (УМН 2 3 4) пс)

//создадим новое окружение и проверим, что переменные созданные в нем не доступны снаружи (Окружение

   (Перем ВнутрПерем1 1)
   (Перем ВнутрПерем2 2)
   (Вывод "В окружении (+ ВнутрПерем1 ВнутрПерем2) = " (+ ВнутрПерем1 ВнутрПерем2) пс)

) //проверим: //если раскомментировать следующую строку, то будет ошибка "Не найден идентификатор ВнутрПерем1" //(Вывод (+ ВнутрПерем1 ВнутрПерем2))

//ещё одна проверка окружения (Окружение

   (Перем Н 1)
   (Окружение
       (Перем ЛямН (функ (х) (+ х Н))) //здесь Н из внешнего окружения
       (Окружение
           (Перем Н 10) //переопределим Н
           (Вывод "Н во внутреннем окружении = " Н пс) //получим 10
           (Вывод "ЛямН во внутреннем окружении = " (ЛямН 1) пс) //получим 2, а не 11
       )
   )

)

//проверка встроенных функций: (Вывод "(ТекущаяДата) = " (ТекущаяДата) пс) (Вывод "(ТипЗнчСтр ""строка"") = " (ТипЗнчСтр "строка") пс) (Вывод "(Число? 45.54) = " (Число? 45.54) пс) (Вывод "(Вещ? 45.54) = " (Вещ? 45.54) пс) (Вывод "(ТипЗнчСтр 45.54) = " (ТипЗнчСтр 45.54) пс) (Перем Аня "Девочка Аня гуляет") (Вывод "(Сред """ Аня """ 9) = " (Сред Аня 9) пс) (Вывод "(Сред ""Девочка Аня гуляет"" 9 3) = " (Сред Аня 9 3) пс) (Вывод "(Лев """ Аня """ 7) = " (Лев Аня 7) пс) (Вывод "(Прав """ Аня """ 6) = " (Прав Аня 6) пс)

//проверим цикл Пока (Перем Инд 0) (Пока (< Инд 13)

   (Если (= Инд 1) ((Вывод "Пропустили 1 с помощью оператора Продолжить!" ПС) (++ Инд) (Продолжить)))
   (Вывод "Пока Инд = " Инд пс)
   (++ Инд)
   (Если (= Инд 3) ((Вывод "Сработала команда Прервать!" ПС) (Прервать)))

)

//проверим цикл Для

(Перем Шаг -1.95)
(Для (Инд 6.1 0 Шаг)
   (Если (< Инд 1) ((Вывод "Сработала команда Прервать!" ПС) (Прервать)))
   (Вывод "Для Инд = " Инд пс)
) 

Перфо. Примеры