Jump to content

РЕпетитор

РЕпетитор
Парадигма императивный ( процессуальный )
Разработано Пол Тензар и Ричард Бломм [1]
Разработчик Пол Тензар и Университет Иллинойса в Урбана-Шампейн
Впервые появился 1969  ( 1969 )
Дисциплина набора текста никто
Основные реализации
РЕпетитор, Микро-репетитор
Под влиянием
TenCORE , USE ( Regency Systems )

TUTOR , также известный как PLATO Author Language , — это язык программирования , разработанный для использования в системе PLATO в Университете Иллинойса в Урбана-Шампейн примерно в 1965 году. Первоначально TUTOR был разработан Полом Тенчаром для использования в компьютерном обучении (CAI). и инструкции, управляемые компьютером (CMI) (в компьютерных программах, называемых «уроками»), и имеет множество функций для этой цели. Например, TUTOR имеет мощные команды для анализа и оценки ответов, графику и функции, упрощающие работу преподавателей и статистические данные учащихся. Гибкость TUTOR в сочетании с вычислительной мощностью PLATO (работавшей на том, что в 1972 году считалось суперкомпьютером) также сделала его подходящим для создания игр, включая авиасимуляторы, военные игры, многопользовательские ролевые игры в стиле подземелий, карточные игры, словесные игры. игры и игры по медицинским урокам, такие как «Ошибки и лекарства» ( BND ). TUTOR существует и сегодня как язык программирования для системы Cyber1 PLATO. [2] который использует большую часть исходного кода PLATO 1980-х годов и по состоянию на июнь 2020 года имеет около 5000 пользователей.

Истоки и развитие

[ редактировать ]

TUTOR изначально разрабатывался как авторский язык специального назначения для разработки учебных уроков, и его эволюция в язык программирования общего назначения была незапланированной. Название TUTOR впервые было применено к авторскому языку системы PLATO в последние дни Платона III. Первая документация языка под этим названием, по-видимому, была Авнер, Ричард Аллен; Тенчар, Пол (январь 1969 г.), Руководство для наставника. Отчет CERL X-4

Статья Обучение переводу русского языка с помощью компьютера [3] дает снимок TUTOR, сделанный незадолго до того, как PLATO IV был введен в эксплуатацию. Присутствовали основные элементы языка, но команды вводились в верхнем регистре, и вместо использования общего механизма поддержка альтернативных наборов символов осуществлялась через специальные имена команд, такие как WRUSS за «писать, используя русскую кодировку».

В 1970-х годах разработчики TUTOR воспользовались тем фактом, что весь корпус программ TUTOR хранился в режиме онлайн в одной и той же компьютерной системе. Всякий раз, когда они чувствовали необходимость изменить язык, они запускали программное обеспечение для преобразования корпуса кода TUTOR, чтобы пересмотреть весь существующий код, чтобы он соответствовал внесенным ими изменениям. [4] В результате после разработки новых версий TUTOR поддерживать совместимость с версией PLATO может быть очень сложно. [5]

Корпорация Control Data (CDC) к 1981 году практически удалила название TUTOR из своей документации PLATO. Сам язык они называли авторским языком PLATO . Однако фраза « файл TUTOR» или даже «файл урока TUTOR» сохранилась как название типа файла, используемого для хранения текста, написанного на авторском языке PLATO. [6]

Структура репетиторского занятия

[ редактировать ]

Урок TUTOR состоит из последовательности модулей , каждый из которых начинается с представления информации, а переход от одного модуля к другому зависит от правильного ответа на один или несколько вопросов. Как и в параграфах COBOL , элемент управления может войти в модуль TUTOR из предыдущего модуля и выйти в следующий, но модули также можно вызывать как подпрограммы с использованием do или join команды.

Вот пример единицы: [7]

unit    math
at      205
write   Answer these problems

        3 + 3 =

        4 × 3 =

arrow   413
answer  6
arrow   613
answer  12

Из этого примера должно быть сразу понятно несколько вещей.

  • Во-первых, TUTOR — это язык фиксированного формата. Каждая строка начинается с имени команды, которое должно помещаться в фиксированное 8-значное поле. Аргументы этой команды ( тег ) начинаются с 9-го символа. Хотя для перехода к 9-му столбцу использовалась клавиша табуляции, она создавала пробелы, поскольку в PLATO не было символа табуляции.
  • В некоторых случаях, таких как write приведенной выше команды, тег может состоять из нескольких строк. Строки продолжения либо пусты, либо имеют начальный табулятор.
  • Координаты экрана представлены в виде отдельных чисел, поэтому 205 относится к строке 2 столбца 5, а 413 относится к строке 4 столбца 13.

Что может быть неочевидно, так это структура управления, заложенная в этом блоке. arrow Команда отмечает вход в судейский блок. Эта структура управления является одной из уникальных особенностей TUTOR.

Уникальные возможности

[ редактировать ]

TUTOR содержал ряд уникальных функций. Следующий список не заменяет руководство TUTOR, а просто выделяет наиболее интересные, инновационные, а иногда и запутанные особенности языка.

Ответить, оценивая

[ редактировать ]

Судейский блок в TUTOR — это структура управления, которая начинается с arrow команда и заканчивается следующей arrow, endarrow или unit команда. arrow Команда также запрашивает ввод, при этом специальный символ стрелки (напоминающий «▷») отображается в виде подсказки в указанных координатах экрана. По сути, блок оценки можно рассматривать как структуру управления возвратом, в которой учащийся может делать несколько попыток ответить на вопрос, пока правильный ответ не позволит продвинуться вперед.

Оценка соответствия шаблону

[ редактировать ]

Каждый блок оценки состоит из последовательности команд сопоставления с образцом , каждая из которых представляет (возможно, пустой) блок команд, которые должны быть выполнены, если этот шаблон соответствует. Двумя наиболее распространенными командами сопоставления с образцом были answer и wrong. Они имели идентичную семантику сопоставления с образцом, за исключением того, что answer считал ответ ученика правильным, если он совпадал, в то время как wrong посчитал ответ ученика неверным.

Поля тегов на answer и wrong команды состояли из списков необязательных, обязательных и альтернативных слов. рассмотрим этот пример: [8]

answer  <it, is,a, it's, figure,
        polygon>
        (right, rt) (triangle, triangular)

Это будет соответствовать таким ответам, как «это прямоугольный треугольник», «это треугольная фигура» или просто «rt треугольник». Оно не будет соответствовать слову «вроде треугольника», поскольку слова «вроде как» не указаны как игнорируемые, и оно не будет соответствовать слову «треугольник, верно?» потому что заказ неправильный.

Подсистема сопоставления шаблонов распознала орфографические ошибки, поэтому слова «triangel» или «triangl» будут соответствовать образцу примера. Автор урока может использовать specs команда, чтобы указать, насколько педантично система относится к орфографическим ошибкам.

Алгоритмы сопоставления с образцом, используемые в различных реализациях TUTOR, различались в деталях, но обычно каждое слово во входном тексте и каждое слово в шаблоне преобразовывались в битовые векторы . Чтобы увидеть, соответствует ли слово, введенное учеником, слову шаблона, расстояние Хэмминга между двумя битовыми векторами использовалось как мера степени различия между словами. Битовые векторы обычно имели длину 60 или 64 бита и имели поля для присутствия буквы, наличия пары букв и первой буквы. В результате количество одного бита в исключительном или двух таких битовых векторах аппроксимировало степень фонетической разницы между соответствующими словами. [9]

Оценка структур управления

[ редактировать ]

Все ранние презентации структуры управления судейским блоком TUTOR были запутанными. Однако, говоря современным языком, блок оценки можно описать как итеративную структуру управления , которая завершает работу, когда входные данные учащегося считаются правильными. Тело Эта структура управления состоит из ряда случаев , каждый из которых вводится командой сопоставления с образцом, такой как answer или wrong. Весь вывод, выдаваемый телом цикла оценки в предыдущий цикл удаляется с экрана перед началом следующего цикла.

Рассмотрим этот пример: [10]

wrong   <it, is,a> square
at      1501
write   A square has four
        sides.

В случае, если учащийся вводит «квадрат» или «квадрат», ответ считается неправильным и появляется текст «У квадрата четыре стороны». выводится, начиная со строки 15 столбца 1 на экране. Этот вывод остается на экране до тех пор, пока студент не начнет входить. новый ответ, после чего он стирается, чтобы можно было вычислить ответ на новый ответ. Механизм возврата экрана дисплея в предыдущее состояние варьируется от реализации к реализации. Ранние реализации работали путем переключения терминала в режим стирания и повторного выполнения всего совпавшего случая. Некоторые более поздние реализации буферизировали выходные данные, полученные во время оценки, чтобы их можно было стереть.

The join команда была уникальной формой вызова подпрограммы. Это было определено как эквивалент текстовой замены тела присоединяемого модуля вместо самой команды соединения. [11] Таким образом, объединенный блок может содержать часть судейского блока. Таким образом, хотя блок оценки концептуально представляет собой итератор, охватывающий серию случаев , этот блок может быть произвольно разбит на подпрограммы. (Альтернативный вызов подпрограммы, do команда, соответствующая обычной семантике, связанной с вызовами подпрограмм в других языках программирования.)

Графические и отображающие команды

[ редактировать ]

Студенческий терминал PLATO IV [12] размером 512 на 512 пикселей имел плазменную панель , с аппаратной поддержкой построения точек , рисования линий и отображения текста. Каждый пиксель на терминале PLATO IV был либо оранжевым, либо черным. В терминале CDC PLATO V использовался монохромный черно-белый ЭЛТ для имитации плазменной панели. Встроенный набор символов имел 4 набора по 63 символа, каждый размером 8 на 16 пикселей, половина из них была фиксированной, половина — программируемой. Язык Tutor обеспечил полную поддержку этого терминала.

Было две системы координат. [13]

  • Грубые координаты задавались в виде строк и столбцов текста. Например, грубая координата 1501 была ссылкой на символ 1 строки 15, где верхний левый символ на экране находился в позиции 101, а нижний правый символ - в позиции 3264.
  • Точные координаты задавались в виде координат X и Y относительно левого нижнего угла экрана. Точная координата 0,511 задавала верхний левый угол экрана, а 0,496 была эквивалентна грубой координате 101, что учитывало высоту символа в 16 пикселей и тот факт, что символы отображались относительно их нижнего левого угла.

Команды рисования

[ редактировать ]

Следующий пример иллюстрирует некоторые команды рисования Tutor. [14]

draw    1812;1852;skip;1844;1544
circle  16,344,288
draw    1837;1537;1535;1633;1833

Обратите внимание на использование точек с запятой для разделения последовательных координат на draw команда. Это позволяет однозначно использовать точные координаты, разделенные запятыми. Обычно команда рисования соединяет последовательные точки отрезками линий, но, помещая skip в теге, draw можно заставить команду концептуально поднять перо.

Теги на circle Команда дает радиус и точные координаты центра. Дополнительные теги могут указывать начало и конечные углы для частичных кругов.

Составление команд рисования вручную затруднено, поэтому к 1974 году в систему PLATO был включен редактор изображений для автоматизации этой работы. [15] Это могло касаться только команд рисования с постоянными координатами.

Команды рендеринга текста

[ редактировать ]

В следующем примере показаны некоторые инструменты рендеринга текста Tutor. [16]

unit    title
size    9.5     $$ text 9.5 times normal size
rotate  45      $$ text rotated 45 degrees
at      2519
write   Latin
size    0       $$ return to normal writing
rotate  0
at      3125
write   Lessons on Verbs

Текст, отображаемый с нулевым размером и вращением, использовал встроенное оборудование для рендеринга символов терминала PLATO, тогда как рендеринг с ненулевым размером и вращением выполнялся с помощью сегментов линий и, следовательно, значительно медленнее из-за скорости канала связи с терминалом.

Структуры управления

[ редактировать ]

TUTOR Если не считать уникальных механизмов оценки ответов, первоначальный набор управляющих структур был довольно скудным. В середине 1970-х годов этот недостаток был устранен путем введения if, endif блоки с дополнительным elseif и else разделы. Семантика этих управляющих структур была рутинной, но синтаксис унаследовал обязательные отступы языка Tutor, предвосхищая синтаксис Python и добавляя уникальный непустой символ отступа, чтобы отличать отступы от строк продолжения.

Это проиллюстрировано в следующем примере: [17]

if      n8<4
.       write   first branch
.       calc    n9⇐34
elseif  n8=4
.       write   second branch
.       do      someunit
else
.       write   default branch
.       if      n8>6
.       .       write   special branch
.       endif
endif

( Стрелка назначения в calc оператор отображается неправильно в некоторых браузерах. Он похож на <=, но состоит из одного символа. На клавиатуре PLATO IV у него была специальная клавиша.)

Тот же синтаксис использовался для loop, endloop блоки с семантикой, сравнимой с циклами while в обычных языках программирования. Это проиллюстрировано в следующем примере [18]

loop    n8<10
.       write   within loop
.       sub1    n8
reloop  n8≥5
.       write   still within loop
.       do      someunit
outloop n8<3
.       write   still within loop
endloop
write   outside of loop

Обратите внимание, что reloop и outloop команды чем-то аналогичны continue и break операторы языков, основанных на C , за исключением того, что они должны находиться на уровне отступов изменяемого ими цикла, и у них есть тег условия, который указывает, когда должна произойти указанная передача управления. Это делает конструкцию более мощной, чем в других языках, поскольку любая строка внутреннего цикла может завершить или повторно зациклить несколько внешних циклов одним оператором.

Синтаксис выражения

[ редактировать ]

Синтаксис выражений TUTOR не был похож на синтаксис FORTRAN и не был ограничен плохо спроектированными наборами символов той эпохи. Например, набор символов PLATO IV включал управляющие символы для нижнего и верхнего индекса , и TUTOR использовал их для возведения в степень. Рассмотрим эту команду [19]

circle  (412+72.62)1/2,100,200

Набор символов также включал традиционные символы умножения и деления. × и ÷, но в более радикальном отходе от соглашений, установленных ФОРТРАНом, он допускал неявное умножение, поэтому выражения (4+7)(3+6) и 3.4+5(23-3)/2 были действительными со значениями 99 и 15,9 соответственно (цит. выше). Эта функция считалась важной. Когда учащиеся вводили числовой ответ на вопрос, они могли использовать операторы и переменные, а также стандартные алгебраические обозначения, а программа использовала команду «вычислить» TUTOR для компиляции и запуска формулы и проверки ее числового эквивалента (или внутри заданных значений). ошибка округления с плавающей запятой) к правильному ответу.

Язык включал заранее определенную константу, названную греческой буквой пи (π) и имеющую соответствующее значение, которое можно было использовать в расчетах. Таким образом, выражение πr2 может использоваться для вычисления площади круга, используя встроенную константу π, неявное умножение и возведение в степень, обозначенные верхним индексом.

В TUTOR сравнение чисел с плавающей запятой x=y определялось как истинное, если x и y были примерно равны. [20] Это упрощало жизнь математически наивным разработчикам учебных уроков, но иногда вызывало головную боль у разработчиков сложного численного кода, поскольку было возможно, что оба x<y и x≥y может быть правдой одновременно. [21]

Управление памятью

[ редактировать ]

Как авторский язык, TUTOR начинался с минимальных ресурсов памяти и только самых грубых инструментов для управления ими. Каждый пользовательский процесс имел частный сегмент данных из 150 переменных, и к ним можно было присоединять общие общие блоки , что позволяло осуществлять взаимодействие между пользователями через общую память.

В системе PLATO IV слова имели длину 60 бит, что соответствовало CDC 6600 семейству компьютеров . В некоторых более поздних реализациях это значение было изменено на 64 бита. [22]

Основные ресурсы памяти

[ редактировать ]

Частная область памяти каждого процесса состояла из 150 слов каждое, называемых переменными студента; значения этих переменных были постоянными и следовали за отдельным пользователем от сеанса к сеансу. Они были адресованы как n1 через n150 когда используется для хранения целочисленных значений или как v1 через v150 при использовании для хранения значений с плавающей запятой. [23]

Урок TUTOR может прикрепить одну область общей памяти объемом до 1500 слов, используя common команда. Каждый урок может иметь безымянный временный общий блок, содержащий переменные, общие для всех пользователей этого урока. Такие блоки создавались, когда урок начинал использоваться, и удалялись, когда урок становился неактивным. Напротив, именованные общие блоки были связаны с блоком урока (файлом на диске). Общая память рассматривалась как nc1 через nc1500 (для целых чисел) или vc1 через vc1500 (для чисел с плавающей запятой). [24]

Если 150 переменных учащихся недостаточно, на уроке можно использовать storage команда для создания дополнительного сегмента частной памяти объемом до 1000 слов. Этот сегмент существовал только в пространстве подкачки, но его можно было сопоставить с переменными ученика или общими переменными. Например [25]

common  1000
storage 75
stoload vc1001,1,75

Этот пример определяет nc1 к nc1000 как общий безымянный общий блок, в то время как nc1001 к nc1075 являются частным хранилищем.

Определение символических имен

[ редактировать ]

Репетитор define команда была очень похожа на C #define директива препроцессора . Это был единственный способ связать мнемонические имена с переменными. Программист должен был статически выделять память и присваивать имена переменным. Рассмотрим этот пример: [26]

define  mynames
        first=v1, second =v2
        result=v3

Это создает набор определений с именем mynames определение трех переменных с плавающей запятой. Пользователям было сообщено, что « на вашем уроке не должно быть никаких версий v3 или v26, кроме define само заявление . Поместите все свои определения в самом начале урока, где у вас будет готовая ссылка на то, какие переменные вы используете». [27]

Функции могут быть определены с семантикой макроподстановки, как показано на этом рисунке: [28]

define  cotan(a)=cos(a)/sin(a)

В отличие от C, исходные правила области действия TUTOR были чистым «определением перед использованием» без каких-либо положений для локальных определений. Таким образом, формальный параметр a используемый выше, не должен иметь какого-либо предыдущего определения.

Позже в разработке TUTOR, с введением нескольких именованных наборов определений, программист получил явный контроль над тем, какие наборы определений действуют в данный момент. Например, define purge, setname отбросит все определения в именованном наборе. [29]

Массивы, упакованные массивы и манипуляции с текстом

[ редактировать ]

Оригинальные инструменты TUTOR для манипулирования текстом были основаны на командах для определенных текстовых операций, например, pack поместить упакованную строку символов в последовательные переменные в памяти, search для поиска одной строки внутри другой и move для перемещения строки из памяти в память. [30] К 1975 году были добавлены более общие инструменты для массивов целых чисел и упакованных массивов. Например: [31]

define  segment, name=starting var, num bits per byte, s
        array, name(size)=starting var
        array, name (num rows, num columns)=starting var

Сегментированные массивы , определяемые ключевым словом segmentбыли сравнимы с упакованными массивами в Паскале . Размер байта и то, следует ли рассматривать элементы массива как знаковые или беззнаковые, полностью контролировались пользователем. Произвольные манипуляции с текстом можно выполнить, установив размер байта равный машинному размеру байта: 6 бит в реализациях, использующих код отображения , 8 бит в некоторых более поздних ASCII и расширенных реализациях . Обратите внимание на отсутствие какой-либо спецификации размерности для сегментированных массивов.

Передача параметров

[ редактировать ]

Общий механизм передачи параметров был добавлен в TUTOR в начале эпохи PLATO IV. Например: [32]

define  radius=v1,x=v2,y=v3
unit    vary
do      halfcirc(100,150,300)
do      halfcirc(50)
*
unit    halfcirc(radius, x,y)
circle  radius, x,y,0,180
draw    x-radius, y;x+radius, y

Обратите внимание, что формальные параметры, перечисленные в списке аргументов unit Команда — это просто определенные имена для статически выделенных глобальных переменных. Семантика передачи параметров задавалась как эквивалентная присвоению в момент передачи управления целевому блоку, а если фактические параметры были опущены, как во втором do приведенной выше команды, в результате предыдущие значения соответствующих формальных параметров остались неизменными.

Локальные переменные

[ редактировать ]

Локальные переменные были добавлены в TUTOR примерно в 1980 году. Авторы уроков, желающие использовать локальные переменные, должны были использовать lvars команда для объявления размера буфера, используемого для локальных переменных, до 128 слов. [33] Сделав это, модуль, использующий локальные переменные, может начинаться следующим образом: [34]

unit    someu
        NAME1,NAME2,NAME3(SIZE)
        NAME4=CONSTANT
        floating:NAME5,NAME6,NAME7(SIZE)
        integer, NUM BITS:NAME8,NAME9
        integer, NUM BITS,signed:NAME10
        integer:NAME11

Линии продолжения unit приведенная выше команда воспринимается как строки неявного define команда с локальной областью действия . Традиционные определения в терминах переменных студента, таких как n150 можно использовать в таком локальном define, но все показанные здесь формы автоматически привязывают имена к местам в блоке памяти, выделенном lvars команда. В доступной документации TUTOR не обсуждается, как распределяются локальные переменные.

Другие реализации

[ редактировать ]

Существует значительное семейство языков, связанных с TUTOR, каждый из которых похож на исходный язык TUTOR, но имеет различия. В частности, TUTOR был компонентом системы (компьютерной образовательной системы PLATO), которая работала на определенном аппаратном обеспечении мэйнфрейма CDC. Для повышения эффективности в TUTOR были некоторые элементы, специфичные для аппаратного обеспечения (например, переменные, которые представляли собой 60-битные слова, которые можно было использовать как массивы по 60 бит или как 10 шестибитных символов и т. д.). Кроме того, TUTOR был разработан до появления графического пользовательского интерфейса (GUI), ориентированного на Windows.

Язык microTutor был разработан в рамках проекта PLATO в UIUC, чтобы позволить выполнять части урока на терминалах, содержащих микрокомпьютеры, с подключением к коду TUTOR, работающему на мэйнфрейме. Диалект microTutor также был языком программирования системы Cluster, разработанной в UIUC и лицензированной для TDK в Японии; Кластерная система состояла из небольшой группы терминалов, подключенных к мини-компьютеру, который обеспечивал хранение и компиляцию. Tencore Language Authoring System — это производная версия TUTOR, разработанная Полом Тенчаром для ПК и продаваемая Computer Teaching Corporation. cT был производным от TUTOR и microTutor, разработанных в Карнеги-Меллоне, которые позволяли программам запускаться без изменений в оконных средах графического интерфейса в системах Windows, Mac и Unix/Linux.

Эмулятор терминала Pterm, разработанный Cyber1, поддерживает язык microTutor, начиная с версии 6. [35] [36]

  1. ^ Шервуд 1974 , с. 4.
  2. ^ «Компьютерная система Cyber1 PLATO» . Проверено 6 июня 2020 г.
  3. ^ Кертин и др. 1972 год .
  4. ^ Шервуд 2000 .
  5. ^ Джонс 1976 , раздел 7.2.
  6. ^ См., например, руководство пользователя PLATO 1981 г. , стр. 4-56
  7. ^ Из памятки пользователя TUTOR 1973 , с. 5
  8. ^ Из памятки пользователя TUTOR 1973 г. , упражнение 4-1.
  9. ^ Тензар и Голден 1972 .
  10. ^ Из памятки пользователя TUTOR 1973 г. , упражнение 4-1.
  11. ^ Памятка пользователя TUTOR 1973 , с. 21.
  12. ^ Задушить 1974 .
  13. ^ Шервуд 1974 , с. II-1.
  14. ^ Из Шервуда 1974 , с. II-11
  15. ^ Шервуд 1974 , с. II-9.
  16. ^ Из Шервуда 1974 , с. II-3
  17. ^ Из Авнера 1981 , S5.
  18. ^ Из Авнера 1981 , с. S6
  19. ^ Из Шервуда 1974 , с. IV-1
  20. ^ Авнер 1975 , стр. C5.
  21. ^ Шервуд 1974 , с. IX-3.
  22. ^ Джонс 1976 .
  23. ^ Шервуд 1974 , стр. IV-2, IX-17.
  24. ^ Шервуд 1974 , стр. от X-1 до X-3 и X-6.
  25. ^ Из Шервуда 1974 , с. Х-11
  26. ^ Из памятки пользователя TUTOR 1973 , с. 17
  27. ^ Подчеркивание из оригинала, Шервуд 1974 , с. ИВ-5
  28. ^ Из Шервуда 1974 , с. IX-2
  29. ^ Авнер 1975 , стр. 15.
  30. ^ Шервуд 1974 , стр. с VII-52 по VII-55.
  31. ^ Из Авнера 1975 , стр. 14.
  32. ^ Из Шервуда 1974 , с. ИВ-10
  33. ^ Авнер 1981 , стр. C3.
  34. ^ Из Авнера 1981 , стр. C2.
  35. ^ Синдер 2018 .
  36. ^ Синдер без даты.

Дальнейшее чтение

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8ce7e9febeda76776c997bb13e37ec85__1718928960
URL1:https://arc.ask3.ru/arc/aa/8c/85/8ce7e9febeda76776c997bb13e37ec85.html
Заголовок, (Title) документа по адресу, URL1:
TUTOR - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)