Перфо. Пример 1 — различия между версиями
Материал из ТХАБ.РФ
Линукс (обсуждение | вклад) м |
Тест (обсуждение | вклад) м |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
'''Перфо. Пример 1''' | '''Перфо. Пример 1''' | ||
− | // *** Тестовый скрипт на языке Перфо *** | + | // *** Тестовый скрипт на языке Перфо *** |
+ | //(Отладка Ложь) //выключим режим отладки скрипта, когда он будет полностью отлажен | ||
+ | (Очистить) //очищаем экран консоли | ||
− | //( | + | #Область "Привет, МИР!" |
+ | (Вывод "Привет, МИР! Это программа на языке Перфо." ПС) | ||
+ | //запросим у пользователя имя и сохраним в переменную | ||
+ | (Перем Пользователь (Ввод "Введи своё имя: ")) | ||
+ | (Вывод "Вас зовут " Пользователь ПС) | ||
+ | (Пауза) | ||
+ | (Вывод ПС) // ПС это символ перевода строки | ||
+ | #КонецОбласти | ||
− | ( | + | #Область "Арифметические выражения" |
+ | //попробуем вычислять арифметические выражения | ||
+ | (Перем А 5.3) (Вывод "Перем А=" А ПС) //создадим переменную А и выведем её значение на экран | ||
+ | //тут мы налету создадим идентификатор Б из строки "Б" | ||
+ | (Перем (Идент "Б") 4.7) | ||
+ | //после создания идентификатора (Идент "Б") сразу вычислим его значение ((Идент "Б")) | ||
+ | (Вывод "Перем Б=" ((Идент "Б")) ПС) | ||
+ | (Вывод "Выражение: (+ А Б)" ПС) | ||
+ | (Вывод "Результат = " (+ А Б) ПС) | ||
+ | (Вывод "Выражение: (* А (+ А Б))" ПС) | ||
+ | (Вывод "Результат = " (* А (+ А Б)) ПС) | ||
+ | #КонецОбласти | ||
− | + | //проверим разные типы чисел | |
+ | (Вывод "Сумма чисел разного типа = " (+ 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) | ||
( | ( | ||
(Вывод "А=" А " больше 100!" ПС) | (Вывод "А=" А " больше 100!" ПС) | ||
Строка 49: | Строка 44: | ||
(вывод "Б умножилось на 10 = " Б ПС) | (вывод "Б умножилось на 10 = " Б ПС) | ||
) | ) | ||
− | ) | + | ) |
− | //оператор Если возвращает последнее значение из выбранной по условию последовательности | + | //оператор Если возвращает последнее значение из выбранной по условию последовательности |
− | (Вывод (Если (< А 100) "меньше 100" "больше 100") пс) | + | (Вывод (Если (< А 100) "меньше 100" "больше 100") пс) |
− | (Пауза) | + | (Пауза) |
− | (Вывод ПС | + | (Вывод ПС) |
− | |||
− | |||
− | |||
− | // | + | //создадим функцию с одним аргументом |
− | ( | + | (Функция (Квадрат х) (* х х)) |
− | |||
− | // | + | //проверим функцию |
− | ( | + | (Вывод "Выражение: (Квадрат А)" ПС) |
+ | (Вывод "Результат = " (Квадрат А) ПС) | ||
− | // | + | //создадим функцию с двумя аргументами |
− | ( | + | (Функция (Множ х у) (* х у)) |
− | |||
− | ( | ||
− | |||
− | (Вывод " | + | //проверим функцию |
− | (Вывод " | + | (Вывод "Выражение: (Множ А Б)" ПС) |
− | ( | + | (Вывод "Результат = " (Множ А Б) ПС) |
+ | (Пауза) | ||
+ | (Вывод ПС) | ||
+ | (Вывод "Отрицательное число -3 = " -3 ПС) | ||
+ | (Вывод "Операция унарный минус (- 3) = " (- 3) ПС) | ||
+ | (Вывод "Операция унарный минус (- -3) = " (- -3) ПС) | ||
− | //определим функцию очень хитрым способом | + | //определим функцию очень хитрым способом |
− | //условие возвращает действие + или -, которое затем применяется к х | + | //условие возвращает действие + или -, которое затем применяется к х |
− | (функция (абс х) | + | (функция (абс х) |
((если (>= х 0) + -) х) | ((если (>= х 0) + -) х) | ||
− | ) | + | ) |
− | (Вывод "Результат (абс 3) = " (абс 3) ПС) | + | (Вывод "Результат (абс 3) = " (абс 3) ПС) |
− | (Вывод "Результат (абс -3) = " (абс -3) ПС) | + | (Вывод "Результат (абс -3) = " (абс -3) ПС) |
− | (Вывод "Результат (абс (+ 4 6)) = " (абс (+ 4 6)) ПС) | + | (Вывод "Результат (абс (+ 4 6)) = " (абс (+ 4 6)) ПС) |
− | (Вывод "Результат (абс (- 4 6)) = " (абс (- 4 6)) ПС) | + | (Вывод "Результат (абс (- 4 6)) = " (абс (- 4 6)) ПС) |
− | //определим факториал | + | //определим факториал |
− | (функция (факториал х) | + | (функция (факториал х) |
(если (= х 0) | (если (= х 0) | ||
1 | 1 | ||
(* х (факториал (- х 1))) | (* х (факториал (- х 1))) | ||
) | ) | ||
− | ) | + | ) |
− | (Вывод "Результат (факториал 0) = " (факториал 0) ПС) | + | (Вывод "Результат (факториал 0) = " (факториал 0) ПС) |
− | (Вывод "Результат (факториал 1) = " (факториал 1) ПС) | + | (Вывод "Результат (факториал 1) = " (факториал 1) ПС) |
− | (Вывод "Результат (факториал 2) = " (факториал 2) ПС) | + | (Вывод "Результат (факториал 2) = " (факториал 2) ПС) |
− | (Вывод "Результат (факториал 3) = " (факториал 3) ПС) | + | (Вывод "Результат (факториал 3) = " (факториал 3) ПС) |
− | (Вывод "Результат (факториал 10) = " (факториал 10) ПС) | + | (Вывод "Результат (факториал 10) = " (факториал 10) ПС) |
− | //более эффективное вычисление факториала с помощью хвостовой рекурсии | + | //более эффективное вычисление факториала с помощью хвостовой рекурсии |
− | (функция (факториал2 х) | + | (функция (факториал2 х) |
(факториал2_хвост х 1) | (факториал2_хвост х 1) | ||
− | ) | + | ) |
− | (функция (факториал2_хвост х у) | + | (функция (факториал2_хвост х у) |
(если (= х 0) | (если (= х 0) | ||
у | у | ||
(факториал2_хвост (- х 1) (* х у)) | (факториал2_хвост (- х 1) (* х у)) | ||
) | ) | ||
− | ) | + | ) |
− | (Вывод "Результат (факториал2 0) = " (факториал2 0) ПС) | + | (Вывод "Результат (факториал2 0) = " (факториал2 0) ПС) |
− | (Вывод "Результат (факториал2 1) = " (факториал2 1) ПС) | + | (Вывод "Результат (факториал2 1) = " (факториал2 1) ПС) |
− | (Вывод "Результат (факториал2 2) = " (факториал2 2) ПС) | + | (Вывод "Результат (факториал2 2) = " (факториал2 2) ПС) |
− | (Вывод "Результат (факториал2 3) = " (факториал2 3) ПС) | + | (Вывод "Результат (факториал2 3) = " (факториал2 3) ПС) |
− | (Вывод "Результат (факториал2 10) = " (факториал2 10) | + | (Вывод "Результат (факториал2 10) = " (факториал2 10) ПС) |
− | |||
− | |||
− | |||
+ | (Пауза) | ||
+ | (Вывод ПС) | ||
− | //используем лямбду без параметров | + | //используем лямбду без параметров |
− | (перем ЛЯМ (функ () "значение лямбды")) | + | (перем ЛЯМ (функ () "значение лямбды")) |
− | (Вывод "Результат (лям) = " (лям) ПС) | + | (Вывод "Результат (лям) = " (лям) ПС) |
− | //используем лямбду с двумя параметрами | + | //используем лямбду с двумя параметрами |
− | (перем ЛЯМ2 (функ (х у) (+ х у))) | + | (перем ЛЯМ2 (функ (х у) (+ х у))) |
− | (Вывод "Результат (лям2 3 5) = " (лям2 3 5) ПС) | + | (Вывод "Результат (лям2 3 5) = " (лям2 3 5) ПС) |
− | // | + | // |
− | ////проверим область видимости | + | ////проверим область видимости |
− | (функция (ФА Б) (+ (* Б Б) 25)) | + | (функция (ФА Б) (+ (* Б Б) 25)) |
− | (функция (ФД Б) (+ (ФА (+ Б 1)) (ФА (- Б 1)))) | + | (функция (ФД Б) (+ (ФА (+ Б 1)) (ФА (- Б 1)))) |
− | (Вывод "(ФА 5)=" (ФА 5) пс) | + | (Вывод "(ФА 5)=" (ФА 5) пс) |
− | (Вывод "(ФБ 10)=" (ФА 10) пс) | + | (Вывод "(ФБ 10)=" (ФА 10) пс) |
− | //запомним встроенную функцию * в переменную УМН | + | //запомним встроенную функцию * в переменную УМН |
− | (Перем УМН *) | + | (Перем УМН *) |
− | (Вывод "(УМН 2 3 4)=" (УМН 2 3 4) пс) | + | (Вывод "(УМН 2 3 4)=" (УМН 2 3 4) пс) |
− | //создадим новое окружение и проверим, что переменные созданные в нем не доступны снаружи | + | //создадим новое окружение и проверим, что переменные созданные в нем не доступны снаружи |
− | (Окружение | + | (Окружение |
(Перем ВнутрПерем1 1) | (Перем ВнутрПерем1 1) | ||
(Перем ВнутрПерем2 2) | (Перем ВнутрПерем2 2) | ||
(Вывод "В окружении (+ ВнутрПерем1 ВнутрПерем2) = " (+ ВнутрПерем1 ВнутрПерем2) пс) | (Вывод "В окружении (+ ВнутрПерем1 ВнутрПерем2) = " (+ ВнутрПерем1 ВнутрПерем2) пс) | ||
− | ) | + | ) |
− | //проверим: | + | //проверим: |
− | //если раскомментировать следующую строку, то будет ошибка "Не найден идентификатор ВнутрПерем1" | + | //если раскомментировать следующую строку, то будет ошибка "Не найден идентификатор ВнутрПерем1" |
− | //(Вывод (+ ВнутрПерем1 ВнутрПерем2)) | + | //(Вывод (+ ВнутрПерем1 ВнутрПерем2)) |
− | //ещё одна проверка окружения | + | //ещё одна проверка окружения |
− | (Окружение | + | (Окружение |
(Перем Н 1) | (Перем Н 1) | ||
(Окружение | (Окружение | ||
Строка 158: | Строка 151: | ||
) | ) | ||
) | ) | ||
− | ) | + | ) |
− | //проверка встроенных функций: | + | //проверка встроенных функций: |
− | (Вывод "(ТекущаяДата) = " (ТекущаяДата) пс) | + | (Вывод "(ТекущаяДата) = " (ТекущаяДата) пс) |
− | (Вывод "(ТипЗнчСтр ""строка"") = " (ТипЗнчСтр "строка") пс) | + | (Вывод "(ТипЗнчСтр ""строка"") = " (ТипЗнчСтр "строка") пс) |
− | (Вывод "(Число? 45.54) = " (Число? 45.54) пс) | + | (Вывод "(Число? 45.54) = " (Число? 45.54) пс) |
− | (Вывод "(Вещ? 45.54) = " (Вещ? 45.54) пс) | + | (Вывод "(Вещ? 45.54) = " (Вещ? 45.54) пс) |
− | (Вывод "(ТипЗнчСтр 45.54) = " (ТипЗнчСтр 45.54) пс) | + | (Вывод "(ТипЗнчСтр 45.54) = " (ТипЗнчСтр 45.54) пс) |
− | (Перем Аня "Девочка Аня гуляет") | + | (Перем Аня "Девочка Аня гуляет") |
− | (Вывод "(Сред """ Аня """ 9) = " (Сред Аня 9) пс) | + | (Вывод "(Сред """ Аня """ 9) = " (Сред Аня 9) пс) |
− | (Вывод "(Сред ""Девочка Аня гуляет"" 9 3) = " (Сред Аня 9 3) пс) | + | (Вывод "(Сред ""Девочка Аня гуляет"" 9 3) = " (Сред Аня 9 3) пс) |
− | (Вывод "(Лев """ Аня """ 7) = " (Лев Аня 7) пс) | + | (Вывод "(Лев """ Аня """ 7) = " (Лев Аня 7) пс) |
− | (Вывод "(Прав """ Аня """ 6) = " (Прав Аня 6) пс) | + | (Вывод "(Прав """ Аня """ 6) = " (Прав Аня 6) пс) |
− | //проверим цикл Пока | + | //проверим цикл Пока |
− | (Перем Инд 0) | + | (Перем Инд 0) |
− | (Пока (< Инд 13) | + | (Пока (< Инд 13) |
(Если (= Инд 1) ((Вывод "Пропустили 1 с помощью оператора Продолжить!" ПС) (++ Инд) (Продолжить))) | (Если (= Инд 1) ((Вывод "Пропустили 1 с помощью оператора Продолжить!" ПС) (++ Инд) (Продолжить))) | ||
(Вывод "Пока Инд = " Инд пс) | (Вывод "Пока Инд = " Инд пс) | ||
(++ Инд) | (++ Инд) | ||
(Если (= Инд 3) ((Вывод "Сработала команда Прервать!" ПС) (Прервать))) | (Если (= Инд 3) ((Вывод "Сработала команда Прервать!" ПС) (Прервать))) | ||
− | ) | + | ) |
− | //проверим цикл Для | + | //проверим цикл Для |
(Перем Шаг -1.95) | (Перем Шаг -1.95) | ||
(Для (Инд 6.1 0 Шаг) | (Для (Инд 6.1 0 Шаг) |
Текущая версия на 20:14, 17 ноября 2020
Перфо. Пример 1
// *** Тестовый скрипт на языке Перфо *** //(Отладка Ложь) //выключим режим отладки скрипта, когда он будет полностью отлажен (Очистить) //очищаем экран консоли
#Область "Привет, МИР!" (Вывод "Привет, МИР! Это программа на языке Перфо." ПС) //запросим у пользователя имя и сохраним в переменную (Перем Пользователь (Ввод "Введи своё имя: ")) (Вывод "Вас зовут " Пользователь ПС) (Пауза) (Вывод ПС) // ПС это символ перевода строки #КонецОбласти
#Область "Арифметические выражения" //попробуем вычислять арифметические выражения (Перем А 5.3) (Вывод "Перем А=" А ПС) //создадим переменную А и выведем её значение на экран //тут мы налету создадим идентификатор Б из строки "Б" (Перем (Идент "Б") 4.7) //после создания идентификатора (Идент "Б") сразу вычислим его значение ((Идент "Б")) (Вывод "Перем Б=" ((Идент "Б")) ПС) (Вывод "Выражение: (+ А Б)" ПС) (Вывод "Результат = " (+ А Б) ПС) (Вывод "Выражение: (* А (+ А Б))" ПС) (Вывод "Результат = " (* А (+ А Б)) ПС) #КонецОбласти
//проверим разные типы чисел (Вывод "Сумма чисел разного типа = " (+ 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) ((Вывод "Сработала команда Прервать!" ПС) (Прервать))) (Вывод "Для Инд = " Инд пс) )
Перфо. Примеры
- Перфо. Пример 1
- Перфо. Пример 2
- Перфо. Пример 3
- Перфо - Списки
- Перфо - ПоВсем
- Перфо - ПоКаждому