i97A0

                    PS позволяет выполнять скрипты. Ура!
                    Делает он это с волшебного пендаля{*}. Неура..
                    ------
                    {*}. PS# set-executionpolicy remotesigned
                    ------
                    https://habr.com/post/113913/

## 1. DESTINATION UNKNOWN

Чтобы закончить школу нужно успешно защитить:

  0. Lõputöö

сдать экзамены EUCIP:

  1. A. Использование и управление информационной системы
  2. C. Эксплуатация и поддержка информационной системы

Материалы по темам (в том числе на русском языке) доступны здесь:

  http://www.e-uni.ee/e-kursused/eucip/haldus_vk/
  http://www.e-uni.ee/e-kursused/eucip/juhtimine_vk/

Список подтем по операционным системам доступен там же:

  C. Эксплуатация и поддержка информационной системы
   2 Операционные системы
   2.1    Основные понятия
   2.1.1  Функции операционной системы персонального компьютера
   2.1.2  Различные типы операционных систем
   2.1.3  Интерфейс прикладного программирования
   2.1.4  Процесс
   2.1.5  Выделение ресурсов процессам
   Вопросы для повторения
   2.2    Одновременные и параллельные процессы
   2.2.1  Причины одновременности
   2.2.2  Взаимное исключение
   2.2.3  Обработка и многопроцессорная обработка
   2.2.4  Поточность
   2.2.5  Переключение контекста
   Вопросы для повторения
   2.3    Управление основной и вторичной (массовой) памятью
   2.3.1  Виртуальная память
   2.3.2  Управление виртуальной памятью
   2.3.3   Нарушения распределения памяти
   2.3.4  Иерархия памяти
   2.3.5  Функции файловой системы
   Вопросы для повторения
   2.4    Безопасность и защита
   2.4.1  Необходимость безопасности и защиты
   2.4.2  Механизмы защиты в операционной системе
   2.4.3  Защита от компьютерных вирусов
   2.4.4  Идентификация и аутентификация
   2.4.5  Контроль доступа
   2.4.6  Резервное копирование данных
   Вопросы для повторения
   2.5    Распространённые операционные системы
   2.5.1 Linux
   2.5.2  Параматры операционной системы Microsoft Windows
   Вопросы для повторения
   Рекомендуемые практические упражнения
   Дополнительные материалы

Сгенерировать список тем в ОС Linux можно следующим образом:

  $ next=index.html; while [ $next != "" ]; do \
    next=`cat $next | grep Järgmine | \
    sed 's/.*<a href="//' | sed 's/"> Järgmine.*$//'`; \
    cat $next | grep '<title>' | \
    sed 's/<title>//' | sed 's/<\/title>//';
    done

Но это будет по окончании школы. Пока же займемся вещами более понятными.


## Знакомство с FLOWGORITHM

Для постройки программы достаточно 7 "кирпичей". Рекомендуемая последовательность изучения:

  1. declare
  2. assign
  3. output
  4. input
  5. call
  6. if
  7. while

Еще есть:

  8. comment

    Сюда пишут комментарии программиста. Они на работу программы никак не не влияют.

  9. for

    На всякий цикл for можно написать равноценный цикл while.

  10. do .. while

    При пошаговой отладке и чтении файла fprg заметны очевидные странности. Лучше не пользуйтесь (workaround), к тому же минималисты (Python, Tiobe рейтинг на 2018.9: Java, C, Python..) именно так и делают ( не пользуются)

      do              wa=true
        ..            while wa
        ..              ..
      while x < 5       if x >= 5
                          wa=false

Простейшая программа "elements" выглядит так

  main
  end

При сохранении этой программы в файл "elements.fprg" увидим нечто подобное:

  <?xml version="1.0"?>
  <flowgorithm fileversion="2.11">
      <attributes>
      </attributes>
      <function name="Main" type="None" variable="">
          <parameters/>
          <body/>
      </function>
  </flowgorithm>

Для программы из семи блоков:

  # Pythonic style
  main

    int    i
    real   r
    string s
    bool   b

    i = 123
    r = -0.5
    s = "Hi, World"
    b = true

    out i
    out r
    out s
    out b

    if b == true
      out "Really?"
    else
      out "I don't believe this!"

    input i
    while i < 5
      i = i + 1
      out i
      # end while

    foo( 3, false)
    i = foi()

  # end main

  def foo
    args
      int a
      bool f
    body
      # do nothing
    # end foo

  def foi returns int v
    int v
    v = 3

Посмотрите, что сохраняется в файл:

  my.fpgm

Ура, возможен построчный перевод (нравится на AWK).

  пример на AWK                      он же на Perl

  BEGIN   { print "We started" }     BEGIN { print "We started" }
  /[0-9]/ { print "Digit in :" $0 }  print "Digit in :", $_ if /[0-9]/;
  END     { print "We finished" }    END   { print "We finished" }

Хорошая статья на эту тему здесь:

  https://lifecs.likai.org/2008/10/using-perl-like-awk-and-sed.html

Чтобы попасть в Linux Bash на компьютере с Windows 10:

  1. В поиске Windows найти и запустить Powershell
  2. pin Powershell to taskbar
  3. B Properties поправить
    + фонт (крупный, например Consolas 24),
    + цвета (Screen Text: White
             Screen Background: Black
             Popup Text: White
             Popup Background: Black)
      Убедитесь что все видно, скажем для
        PS> grep a *
    + размеры окна (помещается на экране, скажем 120х40)
  4. Убедитесь, что
        PS > Get-ExecutionPolicy
        Unrestricted
  5. В контрольной панели (которая в стиле "Метро") включите:
     Для устаревших релизов{*} (старше чем 1709 "Fall Update")
        Use Developer features
          (*) Developer mode
        Turn Windows Features On or Off
          [v] Windows subsystem for Linux
  6. Установите Ubuntu в контейнере:
     Для устаревших релизов (старше чем 1709 "Fall Update")
       PS> lxrun /install
     Для современных релизов выберите дистрибутив из Windows Store.

--------
{*} https://en.wikipedia.org/wiki/Windows_10_version_history
    1507,  1511 (November Update), 1607 (Anniversary Update),
    1703 (Creators Update), 1709 (Fall Creators Update),
    1803 (April 2018 Update), 1809 (October 2018 Update), 1903
--------


Сеанс:

  $ find .
  .
  ./awktest
  ./perltest
  ./UnoMoralez
  ./UnoMoralez/1.png
    ...
  ./UnoMoralez/9.png
  ./UnoMoralez/A.png
  ./UnoMoralez/B.jpg
  ./UnoMoralez/C.jpg
  ./UnoMoralez/D.jpg

  $ find . | perl -lan perltest
  We started
  Found digit in :./UnoMoralez/1.png
    ...
  Found digit in :./UnoMoralez/9.png
  We finished


## Советы

1. Bводите только строки (а не числа). Это полезно от злобных инъекций кода, Упрощает валидацию ввода,..

2. Познакомьтесь c автопереводом на разные языки программирования:

C#, C++, Java, JavaScript, Lua, Pascal, Perl, PHP, Powershell, Python, QBasic, Ruby, Scala, Smalltalk, Swift, TypeScript, VBA, Visual Basic .NET, Caddis Pseudocode, IBO Pseudocode, Auto Pseudocode, Custom

Слово custom означает, что вы и сами можете написать автопереводчик. Инструкции и примеры на сайте:

  http://www.flowgorithm.org/documentation/templates/index.htm


## Упражнения

1. Написать валидатор для одного числа типа int

2. Написать валидатор для одного числа типа real

3. Разбить введенную строку на слова (раделитель -- пробелы)

   Пример:

   воробей перелетел с ветки на ветку

   воробей
   перелетел
   с
   ветки
   на
   ветку

4. Перевести число с основанием 1 в десятичное. (длина строки)

5. Перевести число с основанием 2 в десятичное. (полином)

6. Перевести число с основанием 3 в десятичное. (полином)

7. Перевести число с основанием 4 в десятичное. (полином)

8. Перевести число с основанием 8 в десятичное. (полином)

9. Перевести число с основанием 16 в десятичное. (полином)

10. Перевести римское число (MDCLXVI) в десятичное. (постепенно усложняйте 1..3 1..8 1..39,.. MMMCMXCIX

11. Перевести десятичное число в число с основанием 1. (цикл)

12. Перевести десятичное число в число с основанием 2. (весы с гирьками)

13. Перевести десятичное число в число с основанием 3. (весы с гирьками)

14. Перевести десятичное число в число с основанием 4. (весы с гирьками)

15. Перевести десятичное число в число с основанием 8. (весы с гирьками)

16. Перевести десятичное число в число с основанием 16. (весы с гирьками)

17. Перевести десятичное число в римское (MDCLXVI).

Для всех задач сгенерировать скрипт powershell. Перевод чисел можно проверять с помощью Powershell:

   [Convert]::ToInt32("1234", 8)
   [Convert]::ToString(101, 8)

18. На flowgorithm написать программу выводящую дни недели
    Создать файлы с выводимым текстом в разных кодировках

    1. воскресенье   sunday      pühapäev
    2. понедельник   monday      esmaspäev
    3. вторник       tuesday     teisipäev
    4. среда         wednesday   kolmapäev
    5. четверг       thursday    neljapäev
    6. пятница       friday      reede
    7. суббота       saturday    laupäev

    Powershell: command | out-file somefile -encoding ASCII

19. На flowgorithm написать программу выводящую названия месяцев

    1. январь     january     jaanuar
    2. февраль    february    veebruar
    3. март       march       märts
    4. апрель     april       аprill
    5. май        may         mai
    6. июнь       june        juuni
    7. июль       july        juuli
    8. август     august      august
    9. сентябрь   september   september
    a. октябрь    october     oktoober
    b. ноябрь     november    november
    c. декабрь    december    detsember

    Создать файлы с выводимым текстом в разных кодировках
    Powershell: command | out-file somefile -encoding ASCII

20. 12 животных китайского зодиака:

    1. крыса      rat       rott
    2. бык        bull      pull
    3. тигр       tiger     tiiger
    4. кролик     rabbit    jänes
    5. дракон     dragon    draakon
    6. змея       snake     madu
    7. лошадь     horse     hobune
    8. коза       goat      kits
    9. обезъяна   monkey    ahv
    A. петух      rooster   kukk
    B. собака     dog       koer
    C. свинья     pig       siga

    Создать файлы с выводимым текстом в разных кодировках
    Powershell: command | out-file somefile -encoding ASCII

21. Пять цветов:
    Дерево (зеленый), Вода (синий), Металл (белый),
    Земля (желтый), Огонь (красный)
    Создать файлы с выводимым текстом в разных кодировках
    Powershell: command | out-file somefile -encoding ASCII

22. Знаки Зодиака

    Aquarius      Veevalaja   Водолей    (January 20 - February 18)
    Pisces        Kalad       Рыбы       (February 19 - March 20)
    Aries         Jäär        Овен       (March 21 - April 19)
    Taurus        Sõnn        Телец      (April 20 - May 20)
    Gemini        Kaksikud    Близнецы   (May 21 - June 20)
    Cancer        Vähk        Рак        (June 21 - July 22)
    Leo           Lõvi        Лев        (July 23 - August 22)
    Virgo         Neitsi      Дева       (August 23 - September 22)
    Libra         Kaalud      Весы       (September 23 - October 22)
    Scorpio       Skorpion    Скорпион   (October 23 - November 21)
    Sagittarius   Ambur       Стрелец    (November 22 - December 21)
    Capricorn     Kaljukits   Козерог    (December 22 - January 19)

    Создать файлы с выводимым текстом в разных кодировках
    Powershell: command | out-file somefile -encoding ASCII

23. Цвета радуги:

    красный оранжевый желтый зеленый голубой синий ---    фиолетовый
    red     orange    yellow green   ---     blue  indigo violet
    rot     orange    gelb   grün    ---     blau  ---    violett

    Создать файлы с выводимым текстом в разных кодировках
    Powershell: command | out-file somefile -encoding ASCII

24. Написать словами введенное Unix-время в формате по-русски.

25. Написать словами введенное Unix-время по-английски.

26. Написать словами введенное Unix-время по-эстонски.


## Приложение А. Flowgorithm API

Math (signature: real math( real n))

  Abs(n)     Absolute Value
  Arcsin(n)  Trigonometric Arcsine
  Arccos(n)  Trigonometric Arccos
  Arctan(n)  Trigonometric Arctangent
  Cos(n)     Trigonometric Cosine
  Int(n)     Integer part of the real number
  Log(n)     Natural Log
  Log10(n)   Log Base 10
  Sgn(n)     Mathematical sign (return values -1, 0, 1)
  Sin(n)     Trigonometric Sine
  Sqrt(n)    Square Root
  Tan(n)     Trigonometric Tangent

Strings

  Len(s)     Length of a string
  Char(s, i) Returns a character from string s at index i starting at 0.

Data Type Conversion

  ToChar(n)     Convert a character code n into a character.
  ToCode(c)     Convert a character c into a character code (integer).
  ToInteger(n)  Convert a string to an integer
  ToReal(n)     Convert a string to an real
  ToString(n)   Convert a number to a string

Other (returns integer)

  Random(n)     A random number between 0 and (n - 1)
  Size(a)       The size (number of elements) in an array

