Перфо. Пример 1 — различия между версиями

Материал из ТХАБ.РФ
Перейти к: навигация, поиск
м
м
Строка 1: Строка 1:
 
'''Перфо. Пример 1'''
 
'''Перфо. Пример 1'''
  
// *** Тестовый скрипт на языке Перфо ***
+
// *** Тестовый скрипт на языке Перфо ***
  
//(Отладка Ложь) //выключим режим отладки скрипта, когда он будет полностью отлажен
+
//(Отладка Ложь) //выключим режим отладки скрипта, когда он будет полностью отлажен
  
(Очистить) //очищаем экран консоли
+
(Очистить) //очищаем экран консоли
  
#Область "Привет, МИР!"
+
#Область "Привет, МИР!"
  
(Вывод "Привет, МИР! Это программа на языке Перфо." ПС)
+
(Вывод "Привет, МИР! Это программа на языке Перфо." ПС)
//запросим у пользователя имя и сохраним в переменную
+
//запросим у пользователя имя и сохраним в переменную
(Перем Пользователь (Ввод "Введи своё имя: "))
+
(Перем Пользователь (Ввод "Введи своё имя: "))
(Вывод "Вас зовут " Пользователь ПС)
+
(Вывод "Вас зовут " Пользователь ПС)
(Пауза)
+
(Пауза)
(Вывод ПС) // ПС это символ перевода строки
+
(Вывод ПС) // ПС это символ перевода строки
  
#КонецОбласти   
+
#КонецОбласти   
  
#Область "Арифметические выражения"
+
#Область "Арифметические выражения"
  
//попробуем вычислять арифметические выражения
+
//попробуем вычислять арифметические выражения
(Перем А 5.3) (Вывод "Перем А=" А ПС) //создадим переменную А и выведем её значение на экран
+
(Перем А 5.3) (Вывод "Перем А=" А ПС) //создадим переменную А и выведем её значение на экран
//тут мы налету создадим идентификатор Б из строки "Б"
+
//тут мы налету создадим идентификатор Б из строки "Б"
(Перем (Идент "Б") 4.7)  
+
(Перем (Идент "Б") 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 ) пс)
(Вывод "Произведение чисел разного типа = " (* 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: Строка 50:
 
(вывод "Б умножилось на 10 = " Б ПС)
 
(вывод "Б умножилось на 10 = " Б ПС)
 
)
 
)
)
+
)
//оператор Если возвращает последнее значение из выбранной по условию последовательности
+
//оператор Если возвращает последнее значение из выбранной по условию последовательности
(Вывод (Если (< А 100) "меньше 100" "больше 100") пс)
+
(Вывод (Если (< А 100) "меньше 100" "больше 100") пс)
(Пауза)
+
(Пауза)
(Вывод ПС)
+
(Вывод ПС)
  
//создадим функцию с одним аргументом
+
//создадим функцию с одним аргументом
(Функция (Квадрат х) (* х х))
+
(Функция (Квадрат х) (* х х))
  
//проверим функцию
+
//проверим функцию
(Вывод "Выражение: (Квадрат А)" ПС)
+
(Вывод "Выражение: (Квадрат А)" ПС)
(Вывод "Результат = " (Квадрат А) ПС)
+
(Вывод "Результат = " (Квадрат А) ПС)
  
//создадим функцию с двумя аргументами
+
//создадим функцию с двумя аргументами
(Функция (Множ х у) (* х у))
+
  (Функция (Множ х у) (* х у))
  
//проверим функцию
+
//проверим функцию
(Вывод "Выражение: (Множ А Б)" ПС)
+
  (Вывод "Выражение: (Множ А Б)" ПС)
(Вывод "Результат = " (Множ А Б) ПС)
+
  (Вывод "Результат = " (Множ А Б) ПС)
(Пауза)
+
  (Пауза)
(Вывод ПС)
+
  (Вывод ПС)
  
(Вывод "Отрицательное число -3 = " -3 ПС)
+
(Вывод "Отрицательное число -3 = " -3 ПС)
(Вывод "Операция унарный минус (- 3) = " (- 3) ПС)
+
(Вывод "Операция унарный минус (- 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: Строка 159:
 
         )
 
         )
 
     )
 
     )
)
+
)
  
//проверка встроенных функций:
+
//проверка встроенных функций:
(Вывод "(ТекущаяДата) = " (ТекущаяДата) пс)
+
(Вывод "(ТекущаяДата) = " (ТекущаяДата) пс)
(Вывод "(ТипЗнчСтр ""строка"") = " (ТипЗнчСтр "строка") пс)
+
(Вывод "(ТипЗнчСтр ""строка"") = " (ТипЗнчСтр "строка") пс)
(Вывод "(Число? 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:13, 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) ((Вывод "Сработала команда Прервать!" ПС) (Прервать)))
   (Вывод "Для Инд = " Инд пс)
) 

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