Справочник по языку C++ | Microsoft Docs
- Чтение занимает 2 мин
В этой статье
Эта ссылка посвящена языку программирования C++, реализованному в компиляторе Microsoft C++. Организация основана на справочном руководстве по C++ с заметками , Margaret Ellis) и Бьерном Страуструп и на стандарт ANSI/ISO C++ International (ISO/IEC фдис 14882). Включены реализации компонентов языка С++ корпорацией Майкрософт.
Общие сведения о современных методиках программирования C++ см. в статье Добро пожаловать в C++.
Для быстрого поиска ключевого слова или оператора обращайтесь к следующим таблицам:
в этом разделе
Лексические соглашения
Основные лексические элементы программ на C++: токены, комментарии, операторы, ключевые слова, знаки пунктуации, литералы. Кроме того, трансляция файлов, приоритет и ассоциативность операторов.
Основные понятия
Область, компоновка, запуск и завершение программы, классы хранения и типы.
Встроенные типы Фундаментальные типы, встроенные в компилятор C++, и их диапазоны значений.
Стандартные преобразования
Преобразование типов между встроенными типами. Кроме того, арифметические преобразования и преобразования между типами указателей, ссылочными типами и типами указателей на члены.
Объявления и определения Объявление и определение переменных, типов и функций.
Операторы, приоритет и ассоциативность
Операторы в C++.
Выражения
Типы выражений, семантика выражений, справочные разделы по операторам, приведению типов и операторам приведения, сведения о типах времени выполнения.
Лямбда-выражения
Метод программирования, с помощью которого неявно определяется класс объекта функции и создается объект функции этого типа класса.
Операторы
Операторы выражений, пустые операторы, составные операторы, операторы выбора, операторы итераций, операторы перехода и операторы объявления.
Классы и структуры
Вводные сведения о классах, структурах и объединениях. Кроме того, функции элементов, Специальные функции элементов, элементы данных, битовые поля, this
указатель, вложенные классы.
Объединения
Определяемые пользователем типы, в которых все члены совместно используют одно и то же расположение в памяти.
Производные классы
Одиночное и множественное наследование, virtual
функции, несколько базовых классов, абстрактные классы, правила области. Кроме того, __super
__interface
Ключевые слова и.
Управление доступом к членам
Управление доступом к членам класса: public
private
и protected
ключевым словам. Дружественные функции и классы.
Перегрузка
Перегруженные операторы, правила перегрузки операторов.
Обработка исключений
Обработка исключений в C++, структурированная обработка исключений (SEH), ключевые слова, используемые при написании операторов обработки исключений.
Утверждения и User-Supplied сообщения#error
, static_assert
ключевое слово, assert
макрос.
Шаблоны
Спецификации шаблонов, шаблоны функций, шаблоны классов, typename
ключевое слово, шаблоны и макросы, шаблоны и смарт-указатели.
Обработка событий
Объявление событий и обработчиков событий.
Модификаторы, специфичные для Майкрософт
Модификаторы, используемые в Microsoft C++. Адресация памяти, соглашения о вызовах, naked
функции, расширенные атрибуты класса хранения ( __declspec
), __w64
.
Встроенный ассемблер
Использование языка ассемблера и C++ в __asm
блоках.
Поддержка COM компилятором
Справочник по характерным для систем Microsoft классам и глобальным функциям, используемым для поддержки типов модели COM.
Расширения Майкрософт
Расширения Майкрософт для C++.
Нестандартное поведение
Сведения о нестандартном поведении компилятора Microsoft C++.
Добро пожаловать в C++
Общие сведения о современных методиках программирования на C++ для написания безэффективных и правильных программ.
Расширения компонентов для платформ среды выполнения
Справочные материалы по использованию компилятора Microsoft C++ для платформы .NET.
Справочные сведения о сборке C/C++
Параметры компилятора, параметры компоновщика и другие средства сборки.
Справочник по препроцессору C/C++
Библиотеки Visual C++
Список ссылок на начальные страницы ссылок для различных библиотек Microsoft C++.
См. также
Справочник по языку C
Лого (язык программирования) — это… Что такое Лого (язык программирования)?
У этого термина существуют и другие значения, см. Лого. Рабочая область программы LogoWriterЛо́го (англ. Logo) — язык программирования высокого уровня, разработанный в 1967 году Сеймуром Пейпертом и Идит Харель в образовательных целях для обучения детей дошкольного и младшего школьного возраста основным концепциям программирования (рекурсии, расширяемости и пр.).
Logo также обеспечивает среду, в которой дети могут развивать свои навыки рассуждений и решений задач.
Общие сведения
Типичной и ожидаемой частью языка и среды программирования Лого являются средства черепашьей графики, которые, с одной стороны, позволяют придать наглядность обучению программированию, а с другой — очень органично сочетаются с широким использованием рекурсии.
Интерпретаторы Лого существуют для различных платформ и операционных систем: Windows, DOS, Linux, Mac OS, Unix и др. Существует также множество объектно-ориентированных диалектов Лого, таких как Object Logo, вышедший в 1986 году. В 1997 году вышла российская версия — ЛогоМиры.
Брайн Харви, автор трехтомника о стиле программирования на Лого («Computer Science Logo Style») создал Berkeley Logo. Мультиагентные версии Лого — StarLogo и NetLogo.
Типичные реализации Лого (от LCSI, например) предоставляют программисту библиотеку встроенных команд, текстовую консоль интерпретатора и «лист программ», на котором можно разместить инструкции регистрации новых функций. Так же обеспечивается как минимум один графический экран, как минимум с одной «черепашкой».
Во многих реализациях поддерживается многопоточность — на уровне выполнения команд черепашками и на уровне возможности запустить команду асинхронно и в дальнейшем проверять, завершилась ли она. Есть возможность передать на выполнение интерпретатору программно сформированный список слов.
Лого более прогрессивен, чем процедурные языки программирования Бейсик и Фортран, которые обычно используются для обучения программированию. Однако, реализации Лого, как правило, не имеют достаточно хорошо разработанных программ для работы с файлами, и это мешает ему получить широкое распространение в качестве языка программирования.
По сути, язык Лого является адаптацией языка Лисп (некоторые даже называют его «Лиспом без скобок»).
Синтаксис и интерпретация
В языке Лого программа представляет собой список «слов».
Как правило, реализации Лого слабо ограничивают перечень допустимых в слове символов, поэтому команды можно называть и по-русски. Более того, многие русскоязычные реализации Лого имеют русскоязычные команды или встроенные русскоязычные синонимы для всех встроенных команд.
Слова в списке разделяются пробелами.
Слово может быть либо командой, либо литералом одного из трёх видов — строковым, числовым или литералом списка. Команда может возвращать значение, тогда она считается функцией. Литералы возвращают своё значение непосредственно. Строковой литерал — оформляется как слово, перед которым ставят двойную кавычку. Слова, состоящие из цифр, интерпретируются как числовые литералы. Для формирования списка из слов в тексте программы их окружают квадратными скобками.
Так же есть команды сохранения и получения значения по имени, но многие реализации дополняют его понятием переменной — вводя компактный синтаксис команды для получения значения переменной. Поэтому обычно для получения значения переменной достаточно написать её имя, предварив его двоеточием.
Имеется специальный синтаксис для передачи в некоторые встроенные команды заранее не фиксированного количества параметров. Для этого предлагается заключать команду и все её параметры в круглые скобки, например:
Для пользовательских команд такой синтаксис не применим, потому что не предусмотрено синтаксиса для описания обработки переданных таким образом параметров.
Переданный на выполнение интерпретатору список команд выполняется по очереди. Очередное слово интерпретируется как команда из текущего словаря системы. Если она принимает параметры, то интерпретатор выполняет следующее слово из списка, с целью получить значение для передачи его в качестве первого параметра.
Если команда стоит на месте параметра, ожидается что эта команда вернёт значение. А если возвращаемое очередной командой значение не предусмотрено передавать другой команде, система сообщает об ошибке, если такой вызов встретился в тексте программы, либо отображает значение, если вызов команды произведён в интерактивном режиме.
Поддерживается использование привычной инфиксной формы выражений математики и логики на привычных операторах, типа «(2 + 3) * 5» и «2 > 5». Но в связи с тем, что по основным правилам языка сначала идёт команда, а потом её параметры, для базовых арифметических и логических операций в некоторых диалектах (LCSI ЛогоМиры и LogoWriter, например) также существуют команды, с использованием которых выражения принимают вид «умножь сложи 2 3 5» и «больше? 2 5».
Есть команда для расширения словаря пользовательскими командами, она принимает имя новой команды, список параметров и список команд.
Предусмотрены два основных механизма управления ходом выполнения программы: оператор цикла с фиксированным числом повторений и рекурсия.
TO HELLO PRINT [Hello, World!] END
В русской версии языка Лого:
ЭТО ПРИВЕТ ВЫВЕДИ [Привет, мир!] КОНЕЦ
Реализации
По состоянию на июнь 2010 года насчитывалось не менее 246 реализаций Лого[1] с момента создания языка.
В настоящее время не имеется единого стандарта языка Лого, хотя широко приняты определённые соглашения о базовых аспектах языка. Диалекты Лого имеют значительные отличия. Ситуация усложняется наличием ряда программ черепашьей графики, которые ошибочно называются «Лого».
Наиболее широко использовавшейся и доминировавшей в своё время реализацией языка была система Apple Logo, разработанная фирмой LCSI для компьютера Apple II и распространённая в 1980-е годы. В Болгарии была произведена локализация этого продукта на болгарский и русский языки для совместимых с Apple II компьютеров серии Правец 8, распространявшаяся под названием «Лого 2.0» и широко использовавшаяся в учебном процессе в Болгарии и СССР. В дальнейшем в России была выпущена русская локализация продукта LCSI для MS-DOS под названием LogoWriter.
На сегодняшний день распространена свободная кроссплатформенная реализация UCBLogo[2], также известная как Berkeley Logo, недостатком которой, однако, является рудиментарный графический интерфейс пользователя.
Для Microsoft Windows доступна система MSWLogo[3] и её более новая версия FMSLogo[4], которые широко используются в школах Великобритании и Австралии. Также в западных школах используются коммерческие реализации MicroWorlds Logo[5] и Imagine Logo.[6]
MSWLogo и FMSLogo поддерживают использование нескольких черепах и трёхмерную графику, а также расширенные возможности ввода-вывода и другие расширения.
Для Mac OS X доступна бесплатная реализация ACSLogo[7], имеющая достаточно развитый графический интерфейс, локализацию на нескольких языках и позволяющая добавлять собственные локализации.
В России в учебном процессе используются русские локализации LCSI MicroWorlds для Windows и Mac OS X под названием ЛогоМиры и ПервоЛого[8].
См. также
Примечания
Ссылки
Литература
- Николов Р., Сендова Е. Начала информатики. Язык Лого / Под ред. Б. Сендова, Пер. c болг. Под ред. А. В. Гиглавого. М.: Гл. ред. физ.-мат. лит., 1989. ISBN 5-02-013998-X
ВВЕДЕНИЕ
Программирование – разработка программ управления
компьютером с целью решения различных информационных задач.
Программирование бывает системным (операционные системы, утилиты и пр.) и прикладным (редакторы, табличные процессоры, игры, обучающие программы и пр.).
Для составления программ существуют разнообразные языки программирования.
Язык программирования – это фиксированная система обозначений для описания алгоритмов и структур данных.
Система программирования – это программное обеспечение компьютера, предназначенное для разработки, отладки и исполнения программ, записанных на определенном языке программирования.
Разработка любой программы начинается с построения алгоритма решения задачи.
Всякий алгоритм составляется для конкретного исполнителя. В качестве исполнителя мы будем рассматривать компьютер, оснащенный системой программирования на языке Паскаль.
Команду алгоритма, записанную на языке программирования, принято называть оператором.
Компьютер–исполнитель работает с определенными данными по определенной программе. Данные – это множество величин.
Компьютер работает с информацией, хранящейся в его памяти. Отдельный информационный объект (число, символ, строка, таблица и пр.) называется величиной.
Существуют три основных типа величин, с которыми работает компьютер: числовой, символьный и логический.
Числовые величины делятся на переменные и константы.
Константы записываются своими десятичными значениями, например: 23; 3,5; 34. Значение константы остается неизменным в течение работы программы.
Переменные обозначаются символическими именами. Эти имена называют идентификаторами. Идентификатор может быть одной буквой, множеством букв, сочетанием букв и цифр и т.д. Примеры: A, X, B3, prim, r25 и т.п.
Всякий алгоритм строится исходя из системы команд исполнителя, для которого он предназначен.
Любой алгоритм работы с величинами может быть составлен из следующих команд:
· Присваивание;
· Ввод;
· Вывод;
· Обращение к вспомогательному алгоритму;
· Цикл;
· Ветвление.
Команда присваивания
Переменная величина получает свое значение в результате выполнения команды присваивания или команды ввода.
Записывать её будем так:
<переменная>:=<выражение>
Значок «:=» читается «присвоить».
Например: z:=x+y
Компьютер сначала вычисляет выражение, затем результат присваивает переменной, стоящей слева от знака «:=».
Пример:
А:=1
В:=2
С:=А С:=1
А:=В А:=2
В:=С В:=1
Результат выполнения команд присваивания:
А=2, В=1, С=1
Свойства операции присваивания:
· Пока переменной не присвоено значение, она остается неопределенной;
· Значение, присвоенное переменной, сохраняется вплоть до выполнения следующего присваивания этой переменной нового значения;
· Новое значение, присвоенной переменной, заменяет её предыдущее значение.
Команда ввода
Значения переменных, являющихся исходными данными решаемой задачи, как правило, задаются вводом.
Команда ввода в описаниях алгоритмов выглядит так:
ввод <список переменных>
Например: ввод А, В, С
При вводе с клавиатуры необходимых данных пользователь должен отделять их друг от друга пробелами.
Команда вывода
Результаты решения задачи сообщаются компьютером пользователю путем выполнения команды вывода.
Команда вывода в алгоритмах записывается так:
вывод <список вывода>
например: вывод X1, X2
При этой команде значения переменных Х1 Х2 будут вынесены на устройство вывода (экран).
Пример простой программы
Необходимо создать алгоритм для вычисления площади прямоугольно треугольника, если известны длины его катетов.
На алгоритмическом языке это будет выглядеть так:
Программа начинается с заголовка т.е. слова алг и названия алгоритма площадь.
В этом алгоритме строка, стоящая после начала программы, т.е. вещ а, б, п называется описанием переменных. Служебное слово вещ означает вещественный тип переменных.
Описание переменных
В алгоритмах указываются типы всех переменных.
Описание переменных имеет вид:
<тип переменных><список переменных>
Список переменных включает все переменные величины данного типа, обрабатываемые в алгоритме.
Далее в нашей программе с помощью оператора ввода пользователь определяет значения катетов, компьютер обрабатывает информацию, считает значение площади по формуле и с помощью оператора вывода выводит значение на экран.
Внутренний язык программирования 1С 8.3 для начинающих программистов: условная команда в 1С
Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.
Войдите на сайт как ученик
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 1С 8.3 для начинающих программистов: условная команда в 1САвтор уроков и преподаватель школы: Владимир Милькин
На прошлом занятии мы познакомились со сложными логическими выражениями, которые образуются из простых при помощи логических операций И, Или, Не.
В этом уроке мы разберемся зачем эти логические выражения вообще нужны и научимся применять их на практике.
А понадобятся они нам при изучении новой команды языка программирования 1С, которая называется Условная команда.
Условная командаЕсли коротко, то правила и суть этой команды можно представить так:
Более подробно:
- Частью условной команды являются следующие три слова: Если, Тогда и КонецЕсли.
- Между словами Если и Тогда всегда находится некоторое логическое выражение, которое принимает значение Истина или Ложь (логические выражения уже должны быть вам понятны по предыдущим урокам, если это не так — изучите их повторно).
- Между словами Тогда и КонецЕсли может находиться любое количество команд компьютеру (например Сообщить, ВвестиЧисло, ОткрытьЗначение и другие).
- И, наконец, самое главное: команды компьютеру, заключенные между словами Тогда и КонецЕсли выполняются только в том случае, если логическое выражение, заключенное между Если и Тогда принимает значение Истина.
И если раньше: сколько мы написали команд — столько и выполнилось, то, с появлением условной команды, это оказывается не так. Теперь мы можем составлять условия для выполнения тех или иных команд компьютеру. Проявите терпение, скоро всё прояснится. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Приведу примеры использования условной команды с подробным объяснением.
Пример №1.
ЧислоОтПользователя = 0; ВвестиЧисло(ЧислоОтПользователя); Если ЧислоОтПользователя < 0 Тогда ОткрытьЗначение("Вы ввели отрицательное число."); КонецЕсли; |
Что делает этот код?
- Попытайтесь разобраться сами.
- Затем вставьте его в свою программу и попробуйте выполнить, вводя то положительные, то отрицательные числа.
- И, наконец, загляните в объяснение, чтобы узнать — верно ли вы догадались.
Объяснение
Первые две строчки вам должны быть знакомы по прошлым занятиям.Дальше следует условная команда, условием которой является логическое выражение ЧислоОтПользователя < 0. Если число, введенное пользователем, действительно меньше нуля, то это выражение принимает значение Истина, иначе Ложь.
Идем дальше. Между словами Тогда и КонецЕсли находится всего одна команда ОткрытьЗначение, которая, как следует из правила для условной команды, выполнится только в том случае, если логическое выражение окажется верным.
А значит, сообщение для пользователя «Вы ввели отрицательное число» выведется только, если значение, введенное пользователем, окажется отрицательным. Иначе ничего не выведется. Что и требуется логикой программы.
Пример №2.
ИмяПользователя = ""; ВвестиСтроку(ИмяПользователя); Если ИмяПользователя = "Александр" Тогда ОткрытьЗначение("Вас зовут Александр!"); КонецЕсли; |
В этом примере мы вводим имя пользователя и, если оно равно «Александр», то выводим сообщение «Вас зовут Александр!».
Пример №3.
ИмяПользователя = ""; ВвестиСтроку(ИмяПользователя); Если ИмяПользователя <> "Александр" Тогда ОткрытьЗначение("Ваше имя точно не Александр!"); ОткрытьЗначение("На самом деле, вас зовут " + ИмяПользователя); КонецЕсли; |
В этом примере мы вводим имя пользователя и, если оно не равно «Александр», то выводим сообщение «Ваше имя точно не Александр!» и следом выводим настоящее имя пользователя.
Не правда ли здорово!? Вот так потихоньку мы научили компьютер не просто складывать и умножать. Мы дали возможность ему «думать» и принимать решения. Это, конечно, ещё не искусственный интеллект, но всё же
Продолжим разбирать примеры. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Не забывайте выполнять их на компьютере.
Пример №4.
ЧислоОтПользователя = 0; ВвестиЧисло(ЧислоОтПользователя); Если (ЧислоОтПользователя > 0) И (ЧислоОтПользователя < 10) Тогда ОткрытьЗначение("Вы ввели число между 0 и 10."); КонецЕсли; |
Отличие этого примера лишь в том, что тут используется сложное логическое выражение, составленное при помощи логической команды И.
Таким образом, сообщение «Вы ввели число между 0 и 10.» будет выведено пользователю тогда и только тогда, когда введенное число одновременно и больше нуля и меньше десяти.
Расширенная форма условной командыРазберём расширенную форму условной команды на примере.
Пример №5.
ЧислоОтПользователя = 0; ВвестиЧисло(ЧислоОтПользователя); Если ЧислоОтПользователя > 0 Тогда ОткрытьЗначение("Вы ввели положительное число."); Иначе ОткрытьЗначение("Вы ввели 0 или отрицательное число."); КонецЕсли; |
Пользователь вводит число. И в случае, если введенное значение больше нуля, программа выводит строку «Вы ввели положительное число», иначе «Вы ввели 0 или отрицательное число».
Запустите этот пример на компьютере несколько раз. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Вводите то положительные, то отрицательные значения. Как видите, компьютер прекрасно справляется с задачей определения знака введенного числа. И всё это благодаря использованию нами логических выражений!
А теперь пройдите тест по примеру №5, описанному выше:
Задание №18. Напишите программу, которая вводит от пользователя два числа. Если первое число больше или равно второму, то выводит «Первое число больше или равно второму», иначе «Второе число больше первого».
Язык программирования FOCAL | GeekBrains
https://gbcdn.mrgcdn.ru/uploads/post/2659/og_image/66a74e175a249209371e13971a75fb20.jpeg
FOCAL – это интерактивный интерпретируемый язык программирования, основанный на JOSS, который использовался в основном на компьютерах серии PDP компании Digital Equipment Corporation (DEC). Название языка является аббревиатурой Formulating Online Calculations in Algebraic Language.
FOCAL очень похож на JOSS с точки зрения поддерживаемых команд и общего синтаксиса языка. Многие возможности JOSS, такие как диапазоны и пользовательские функции, удалены для упрощения анализатора. Некоторые операторы были переименованы так, чтобы они начинались с уникальной буквы. Это позволило писать программы, используя однобуквенные команды, сокращая таким образом потребности в памяти. Для компьютеров PDP-8, память которых часто ограничивалась несколькими килобайтами, это было важно. Поэтому FOCAL стал популярен на машинах DEC.
Подобно JOSS и поздним версиям BASIC, FOCAL на PDP-8 представлял собой законченную среду, включающую редактор строк, интерпретатор и процедуры ввода/вывода. Пакет назывался FOCAL-8, который также работал на PDP-5 и PDP-12. При портировании на PDP-11 полученный FOCAL-11 полагался на базовую операционную систему RT-11 для обеспечения работы с файлами. Определение языка обновлялось дважды, до FOCAL-69 и слегка измененного FOCAL-71. Существовала и версия для Intel 8080.
Исторически FOCAL известен как язык оригинальных версий ранних видеоигр Hamurabi и Lunar Lander. Позднее они были перенесены на BASIC, где стали более известными. FOCAL не был популярен за пределами платформы PDP и фактически исчез при переходе на VAX-11. На некоторое время он был возрожден в Советском Союзе, где клоны PDP-11 использовались как учебные и домашние компьютеры.
Немного истории
JOSSJOSS был выпущен в мае 1963 года на несерийном компьютере JOHNNIAC в корпорации RAND. Потребности в вычислениях быстро росли, и машина, изначально построенная в 1953 году, быстро исчерпала свои возможности. JOHNNIAC «вышел на пенсию» в 1966 году, и JOSS был перенесён на недавно приобретенную PDP-6, первую «большую» машину DEC. Потребности в вычислениях продолжали расти, и к 1970 году систему использовали от 500 до 600 пользователей по всей стране. Появился ряд инноваций, например мобильные компьютерные терминалы, которые можно было переносить из комнаты в комнату и подключать для мгновенного доступа.
JOSS оказал серьезное влияние на компьютерную сферу. Он возник именно когда была представлена концепция time-sharing (разделения времени), появился существенный интерес к взаимодействию человека с вычислительной машиной и компьютеры стали использоваться более широко. В то время большинство операционных систем с разделением времени концентрировались на управлении учетными записями пользователей и файлами, оставляя пользователей без поддержки, когда дело доходило до программирования. JOSS же предоставил как эти функции, так и легко используемый язык программирования в одном пакете. А RAND представила эту систему множеству людей в компьютерной отрасли.
FOCALВарианты JOSS для других платформ стали появляться вскоре после выхода версии для PDP-6. FOCAL стал одним из этих многочисленных ответвлений.
Написанный Ричардом Мерриллом, FOCAL отказался от некоторых возможностей JOSS, чтобы работать в более ограниченном пространстве памяти PDP-8 и других 12-битных машин в линейке DEC. С этой целью было сделано серьезное изменение чтобы уменьшить количество временных данных, или «состояние», необходимое для анализа операторов. Одним из заметных результатов такого решения стало то, что условные выражения использовались теперь только для ветвлений, в отличие от JOSS, где условные выражения можно было применять в любом выражении.
Другим заметным изменением стала реорганизация ключевых слов с тем, чтобы каждое начиналось с уникальной буквы. Это упростило синтаксический анализатор, который читал только первую букву команды, а затем переходил к следующему пробелу. Список потенциальных команд содержал по одной букве для каждой. Напротив, JOSS должен был продолжать чтение, пока не прочтет целиком командное слово, а затем сравнивать его со списком, содержащим полные слова.
Первая версия FOCAL была выпущена в 1968 году для PDP-8. Обновленная версия вышла в следующем году, позднее её назвали FOCAL-69. Система в целом, независимо от версии, была известна как FOCAL-8, при портировании на другие машины 12-битной серии, включая PDP-5 и PDP-12. FOCAL был популярен, поскольку эффективно использовал память, которая в этих машинах обычно ограничивалась несколькими килобайтами. FOCAL-11 работал на PDP-11 под управлением операционной системы RT-11.
Корпорация Processor Technology также предложила версию 8k FOCAL, в комплекте с игрой Lunar Lander, для системы Altair 8800 на базе Intel 8080. Это предлагалось для копирования с ленты, в то время как исходный код предоставлялся бесплатно с другими покупками.
BASICВ то время как FOCAL обретал популярность на машинах DEC, BASIC становился ещё более популярной альтернативой на других платформах. К концу 1960-х годов ряд компаний конкурировали с DEC, продавая аналогичные машины, работающие с BASIC версиями с разделением времени. Среди них следует отметить серию HP 2100 с ОС HP Time-Shared BASIC.
Дэвид Х. Ахл присоединился к группе DEC PDP-8 когда компания заинтересовалась продажей машины в образовательные учреждения. Из-за популярности BASIC на рынке образования, особенно с растущей библиотекой программ от Minnesota Educational Computing Consortium, Ахл обнаружил, что продать машины с FOCAL было трудно, несмотря на его преимущества. Как он отметил позже:
– Язык FOCAL DEC во многих аспектах был равен BASIC, а кое в чём был даже лучше, но имел один огромный недостаток: DEC не желал его лицензировать для других производителей компьютеров. FOCAL вел тяжелую борьбу против BASIC, который был доступен на GE, Honeywell, HP и других компьютерах.
Я думаю, что это привело к такой же ситуации, как Sony и Betamax. Sony говорит: «Betamax наш, и это лучший формат, чем VHS». Но потом JVC говорит: «У нас есть VHS и Toshiba. Эй, вы хотите их использовать? Хорошо, мы предоставим вам лицензию на это практически даром».
Ахл взял на себя задачу создать систему BASIC для PDP платформы, наняв компанию, которая, как он узнал позже, состояла из одного программиста в Бруклине, чтобы создать версию для 4 килобайтной PDP-8. DEC начала продавать версии PDP-8 с терминалами и BASIC в качестве линейки «EduSystem», причем более крупные системы этой серии имели расширенные версии BASIC, а в некоторых случаях ещё и FOCAL и FORTRAN. Некоторые EduSystem были созданы также на базе PDP-11.
Затем Ахл начал переносить программы с FOCAL на BASIC, в частности, The Sumer Game (которую он переименовал в Hamurabi), версию Lunar Lander и несколько небольших FOCAL демо-программ. Объединив свои версии с работами сторонних программистов, ему удалось собрать достаточно материала, чтобы DEC опубликовал “101 BASIC Computer Games” в 1973 году. Книга имела моментальный успех и в итоге выдержала три издания к 1975 году.
К середине 1970-х годов BASIC стал стандартной опцией всех машин DEC, а использование FOCAL прекратилось.
Возрождение в Советском СоюзеPDP-11 был клонирован в Советском Союзе в 1970-х годах для военных целей. В 1980-х годах были выпущены одночиповые версии, подобные LSI-11, которые дали начало серии домашних компьютеров, совместимых с PDP-11. Наиболее заметной среди нескольких моделей была серия Электроника BK, выпущенная в 1985 году. Они изначально поставлялись с FOCAL в ПЗУ-картридже, а картридж с BASIC был опциональным дополнением. Более поздние модели поставлялись с BASIC по умолчанию.
Описание языка
Следующее описание основано на FOCAL-69, как видно из справочного руководства по языку FOCAL-8.
Директивный и недирективный режимыFOCAL следует модели JOSS для взаимодействия с пользователем с помощью командной строки. Это позволяет вводить команды, которые будут выполнены немедленно (директивный режим). Или добавлять к ним номер строки (недирективный режим). В этом случае они добавляются в программу, если номер уникальный, или заменяют уже существующую строку с таким же номером.
Такой метод работы аналогичен «непосредственному режиму» BASIC и «программному режиму». Что отличается от JOSS, в котором все команды, как программные, так и прямые, были сохранены и загружены как часть рабочей области пользователя. Это позволяло JOSS иметь команды без номеров строк, которые использовались для определений форм и других задач. У FOCAL такой возможности не было, поэтому инструкции, которые нужно было загрузить и сохранить, стали опциями для других команд режима программы, таких как Type.
Операторы программыКаждая строка в программе FOCAL должна начинаться с номера строки. Как и в JOSS, номера строк – это числа с фиксированной запятой, состоящие из двух двузначных чисел, разделенных точкой. В FOCAL-8 номера строк варьируются от 1.01 до 31.99. При распечатке командой WRITE добавляются ведущие нули, так что все номера строк будут содержать пять символов, включая точку, например строка 1.10 будет напечатана как 01.10. Операторы, обращающиеся к этим строкам, не нуждаются в ведущих нулях, например, GOTO 1.10.
Число слева от точки называется «номером группы». Группы обеспечивают определённый уровень организации кода, которого не хватает в таких языках, как Fortran или BASIC. Основное их применение в том, чтобы использовать группу в качестве подпрограммы, которую можно вызывать с помощью DO. Например, DO 5 обеспечит переход к подпрограмме, записанной в группе 5. Редактор также использовал их во время редактирования, например, можно было написать WRITE 2, чтобы показать список строк в группе 2, или ERASE 4, чтобы удалить все строки в группе 4.
Каждая строка должна начинаться с ключевого слова команды, следующего за номером строки. Не существует «команды по умолчанию», как в BASIC с его необязательным LET. Несколько операторов могут быть помещены в одну строку, разделённые точкой с запятой. Обычно это поведение ничем не отличается от того, если бы операторы были в отдельных строках, за исключением ситуации с циклом FOR.
КомандыASK. Команда ASK (сокращённо A) берет список строк и переменных, выводит строки на экран и сохраняет введенные пользователем данные в переменных. Эквивалентна команде INPUT в BASIC.
01.01 ASK "NAME", N 01.02 ASK "COORDINATES", X, Y 01.03 ASK "A1",A1,"OMEGA",W,"T0",T0,"DAMPING FACTOR",DAMPINGFACTOR
Если пользователь вводит не число, а текст, система преобразует начальный символ в число с «A» = 1, «B» = 2 и т.д.
COMMENT. Команда COMMENT (сокращённо C) создаёт комментарий. Эквивалентна REM в BASIC.
01.01 COMMENT: THE SUMER GAME, BY RICHARD MERRILL
DO. Команда DO (сокращённо D) создаёт ветвь для выполнения подпрограммы. Это эквивалент BASIC команды GOSUB. На подпрограмму ссылается либо номер группы, либо номер строки. Если указан номер строки, эта строка выполняется и затем происходит возврат к оператору после DO. Если номер строки не указан, выполнение начинается с первой строки группы и продолжается, пока не будет достигнут конец группы или не встретится RETURN. RETURN требуется только для раннего возврата, в конце группы он не нужен.
01.15 DO 7.24 01.16 DO 8
FOR. Команда FOR (сокращённо F) реализует цикл for. Когда заданы три аргумента, первый – это начальное значение переменной цикла, второй – приращение, а третье – это конечное значение цикла. Если указаны два значения, первое – это начальное значение, а второе – конечное значение, а приращение устанавливается равным 1.
В отличие от других частей языка, где несколько операторов в строке независимы, FOR всегда выполняет операторы, следующие за ним в строке, до того, как будет выполнено завершение, а затем переходит к следующей строке. Таким образом, циклы должны быть в одной строке или вызывать подпрограмму с DO. Эквивалента BASIC команды NEXT нет.
01.01 FOR X=1,10; TYPE X,! 01.02 FOR X=0,10,100; DO 2
Простой цикл for:
01.10 ASK "HOW MUCH MONEY DO YOU WANT TO BORROW ?",PRINCIPAL 01.20 ASK "FOR HOW MANY YEARS ?",TERM 01.30 FOR RATE=4.0,.5,10; DO 2.0 01.40 QUIT 02.10 SET INTEREST=PRINCIPAL*(RATE/100)*TERM 02.20 TYPE "RATE",RATE," ","INTEREST",INTEREST,!
GOTO. Команда GOTO (сокращённо G) переводит выполнение программы на указанный номер строки. Он идентичен одноименной команде в BASIC. В отличие от GO, используемой из командной строки, которая запускает программы, эквивалент RUN в BASIC.
01.05 GOTO 1.01 02.90 TYPE !!,"TRY AGAIN.",!!!!!; GOTO 1.1
IF. Команда IF (сокращённо I) обеспечивает ветвление по условию, основанному на знаке выражения. После этого выражения команда IF может содержать список от одного до трех номеров строк. Если результат выражения меньше нуля, выполнение переходит к первому номеру; если равен нулю, на второй номер; если больше нуля, номер третьей строки. В языке отсутствуют относительные операторы, такие как «больше чем», «равно» или «меньше». Для ветвления по условию IF X>5, нужно проверить результат выражения X-5.
02.20 IF (25-25) 2.4,2.3,2.4 03.01 IF (X) 3.1,3.02,3.1
IF может быть в сокращенной форме, если поставить точку с запятой (или конец строки) после номера первой строки. Например:
02.20 IF (X)1.8; TYPE "Q" 02.30 IF (X)1.8,2.50 02.40 TYPE "P"
В этом случае проверка в 2.20 заставит программу перейти на строку 1.8, если значение X отрицательное, в противном случае она продолжится и выведет «Q» на консоли. В строке 2.30 произойдет переход к 1.8 или 2.5, если значение будет отрицательным или нулевым, а в противном случае выведет «P» в консоли.
QUIT. Команда QUIT (сокращённо Q) останавливает программу и возвращает управление среде редактирования. Эквивалентно END или STOP в BASIC.
01.10 FOR X=-10,1,10;TYPE X 01.20 QUIT
RETURN. Команда RETURN (сокращённо R) выполняет возврат из подпрограммы к месту её вызова. Использование RETURN является необязательным в последней строке, подпрограмма в любом случае возвращается из последней строки в группе. Ниже приведен пример подпрограммы для преобразования ответа YES/NO в значение.
22.78 COMMENT: 'YES OR NO' SUBROUTINE 22.80 ASK "ANSWER YES OR NO ?",AN 22.82 IF (AN-YES)22.84,22.86 22.84 IF (AN-NO)22.8,22.88,22.8 22.86 SET X=2;RETURN 22.88 SET X=1;RETURN
SET. Команда SET (сокращённо S) присваивает результат выражения указанной переменной. Эквивалентна команде LET в BASIC.
01.30 SET PI=3.14156 01.60 SET INTEREST=PRINCIPAL*(RATE/100)*TERM
TYPE. Команда TYPE (сокращённо T) обеспечивает вывод одного или нескольких элементов, разделенных запятыми. Эквивалентна PRINT в BASIC.
Элементы могут быть переменными, строками символов, заключенными в двойные кавычки, или различными управляющими символами. Управляющие символы включают в себя ! для вывода возврата каретки и перевода строки, # только для возврата каретки и : для символа табуляции. Управляющие символы могут быть записаны вместе, например, !!! выведет три CR/LF без необходимости разделять их запятыми.
TYPE [NUMBERS, E1, "TEXT", !, #, :, $ OR %] .2," ","SQRT",FSQT(X) 03.20 TYPE ".",# 02.20 TYPE !!!!!
TYPE также может иметь необязательный спецификатор формата, указанный в виде %x.yz, где x – это число цифр до точки, а yz – это число цифр справа от точки. Формат по умолчанию %8.4, что означает максимум восемь цифр до и четыре справа от точки. Например:
SET A=67823 TYPE %6.01,A = 67823.0 TYPE %5,A = 67823 TYPE %8.03,A = 67823.000 TYPE %,A = 6.7823E4
Обратите внимание на дополнительные начальные пробелы в некоторых примерах. Использование только % привело к выводу в «формате с плавающей запятой» с использованием E.
Специальным управляющим символом был $, который вызывает вывод таблицы всех определенных переменных и их значений. Будут напечатаны только первые две буквы имени, дополненные нулями, если необходимо. Элементы массивов печатаются в отдельных строках, а переменным, в которых только один элемент, будет присвоен индекс (00). Например:
TYPE $ A0(00)=67823Переменные
Имена переменных могут начинаться с любой буквы, кроме F (F зарезервирована для функций) и могут содержать любую последовательность букв и цифр. для возведения в степень – показатель степени преобразуется в 12-разрядное целое число
Любопытно, что все операторы FOCAL имеют независимый приоритет, как в указанном выше порядке. Это означает, что формула SET T=2-3+1, будет рассчитана в порядке 2-(3+1) и, следовательно, даст -2. Это сильно отличается от большинства языков, где + и — имеют одинаковый приоритет и оцениваются (2-3) +1 что в результате даёт 0. Это может вызвать незначительные ошибки при переносе исходного кода FOCAL на другие языки.
FOCAL необычен в том смысле, что математические выражения могут использовать (), [] и <> взаимозаменяемо в согласованных парах, чтобы установить приоритет. Например, допустимо следующее:
01.30 SET A=<10*[5+1]*(1+5)>
Все скобки имеют одинаковый уровень приоритета и читаются слева направо, когда находятся на одном уровне, поэтому сначала будет вычислен результат в [], затем (), затем <>, в результате получим число 360.
FOCAL содержит следующие встроенные функции:
- FABS() – абсолютное значение
- FATN() – арктангенс
- FCOS() – косинус от аргумента в радианах
- FEXP() – возвращает число e, возведенное в указанную степень
- FITR() – целая часть аргумента
- FLOG() – натуральный логарифм
- FRAN() – случайное число
- FSGN() – знак аргумента; FSGN(0)=1 в FOCAL-69, но FSGN(0)=0 в FOCAL-71, как и в более поздних версиях
- FSIN() – синус от аргумента в радианах
- FSQT() – квадратный корень
FOCAL также содержит ряд специальных функций:
- FDIS берёт два значения и рисует точку на экране графического терминала
- FADC читает значение из пронумерованного аналогового входа и возвращает целочисленное значение
Команды окружения
Запуск программFOCAL использовал GOTO в редакторе для запуска программы. Тем не менее, на практике это было сокращено до GO. Это эквивалент команды RUN в BASIC. GOTO можно также использовать в редакторе для запуска программы с указанной строки.
Команды редактированияНовые строки добавляются в программу, просто когда команда начинается с номера строки. Команды редактирования: ERASE (сокращённо E), MODIFY (сокращённо M) и WRITE (сокращённо W).
- ERASE – удаляет все переменные. Это может быть в начале программы
- ERASE <номер строки> – удаляет строку с заданным номером
- ERASE <номер группы> – удаляет все строки в заданной группе
- ERASE ALL – удаляет всю программу
- MODIFY <номер строки> – позволяет редактировать указанную строку
- WRITE <номер строки> – отображает строку с заданным номером
- WRITE <номер группы> – отображает все строки заданной группы
- WRITE ALL – отображает всю программу
Работу с файлами обеспечивает команда OPEN (сокращённо O):
- OPEN INPUT [device:][file][,ECHO] – подготовка к чтению с начала файла
- OPEN OUTPUT [device:][file][,ECHO] – подготовка к записи с начала файла
- OPEN RESTORE INPUT[,ECHO] – возобновить ввод
- OPEN RESTORE OUTPUT[,ECHO] – возобновить вывод
- OUTPUT CLOSE – вывести буфер и закройте файл
FOCAL включает возможность управлять коллекциями программ FOCAL в виде библиотеки кодов. Программы могут вызывать другие программы по цепочке, используя LIBRARY CALL, или вызывать одну подпрограмму в другой программе, используя LIBRARY GOSUB. Имена программ могут быть длиной шесть символов. Команда LIBRARY (сокращенно L) имеет следующие подкоманды:
- LIBRARY DELETE [device:]<program name> – удалить программу
- LIBRARY LIST [device:][file name] – список программ
- LIBRARY RUN [device:]<program name>; [line number] – связать программы, возможно, выполнение по указанному номеру строки
- LIBRARY SAVE [device:]<program name> – сохранить программу
- LIBRARY EXIT – возврат в программу мониторинга PDP-8
FOCAL-71 добавил:
- LIBRARY CALL [device:]<program name> – загрузить программу
- LIBRARY GOSUB [device:]<program name> [group number] – вызвать подпрограмму из внешней программы
Поскольку интерпретатору не хватало места в памяти для хранения сообщений об ошибках или даже таблицы номеров ошибок, FOCAL использовал обходной путь, сообщая адрес кода, обнаружившего ошибку, как число с фиксированной точкой. Например, если была обнаружена ошибка деления на ноль, появляется сообщение [email protected], где 28.73 представляет проверку кода для этой ошибки на странице 28 памяти плюс смещение 73 слова, а 01.10 – номер строки, в которой произошла ошибка. Страницы в PDP-8 имели размер 128 байт, поэтому этот адрес преобразуется в местоположение 3657.
Различия между версиями
DEC выпустила три версии FOCAL для серии PDP-8, оригинальную, известную просто как FOCAL, и две обновленные версии, FOCAL, 1969 и FOCAL, 1971. FOCAL 1969 был в значительной степени идентичен оригиналу, но FOCAL, 1971 был главным обновлением, которое добавило обработку файлов, новые математические функции и множество других изменений. В отличие от первых двух версий, которые были автономными системами, FOCAL 1971 года был основан на новой OS/8 (тогда еще называемой PS/8) и больше полагался на эту операционную систему для обработки и редактирования файлов.
FOCAL, 1971Одним из изменений в новой версии стал 10 значный пакет математических функций для дополнительной точности. Функция FSGN стала возвращать ноль, если входное выражение равно нулю. Предыдущая версия возвращала 1. FRAN стал использовать лучший алгоритм, который производил больше случайно распределенных чисел. Были также добавлены новые функции FIN, которая принимает строку и возвращает ее значение ASCII (сродни ASC BASIC) и FOUT, которая принимает число и возвращает строку с этим символом ASCII (подобно CHR в BASIC).
Поскольку все эти дополнения использовали ограниченную память, при старте FOCAL 1971 выводит диалог, с вопросом пользователю: какие функции он хотел бы использовать.
Сравнение с JOSS
FOCAL – это, по большому счету, очищенная версия JOSS с изменениями, делающими синтаксис более понятным и более простым для анализа. Почти все команды FOCAL имеют непосредственное соответствие в JOSS и отличаются только деталями. Некоторые особенности JOSS отсутствуют в FOCAL.
Одно из главных отличий состоит в том, что JOSS включает в себя полный набор операций сравнения и систему логики, которая работает в конструкциях if и for. Кроме того, if и циклы могут применяться к любому выражению, в отличие от FOCAL, где единственная операция, которую можно было выполнить, была эквивалентна goto. Например, в JOSS можно было бы:
1.10 Type A if X>10. 1.20 Type i for i=1(1)10.
Где опционально будет выведено значение A в зависимости от условия, а затем выведены числа от 1 до 10. В отличие от этого, в FOCAL нет возможности сравнивать значения, и циклы используются для перехода к следующей строке после их завершения. Эквивалентный код FOCAL будет выглядеть так:
1.10 IF (X-10) ,,1.30 1.20 TYPE A,! 1.30 FOR I=1,1,10;TYPE I,!
Реализация JOSS облегчает создание общих конструкций и более точно соответствует намерениям программиста за счет усложнения среды выполнения. Например, JOSS допускает гибкое описание диапазонов в циклах, например, 1,2,3,10 (5) 50,75,78. Эта гибкость имеет цену; в FOCAL начало, остановка и шаг могут быть записаны в пользовательской структуре в памяти и легко обновляться по мере выполнения цикла. Напротив, система JOSS требует указателя на то, что может быть, но часто не является, более сложным выражением, которое нужно обойти с помощью более сложного кода синтаксического анализа.
С точки зрения того, чтобы сделать код более кратким, изменения были относительно незначительными. Например, Do part 20. в JOSS становится немного меньше в FOCAL – DO 20, а Do step 20.1 становится DO 20.1. Командные ключевые слова были также сокращены, где это возможно, поэтому Demand в JOSS становится ASK в FOCAL, чтобы сделать его и короче, и позволить уникально использовать букву D для DO. Период, необходимый для указания конца строки в JOSS, был удален.
Чтобы упростить анализатор, некоторые опции в FOCAL были удалены. Например, JOSS может выполнять несколько присвоений с помощью Set S=P, P=Q, Q=S, в то время как в FOCAL это должны были быть отдельные команды, SET S=P; SET P=Q; SET Q=S. Аналогично, Form в JOSS, используемая для форматирования вывода, объединён в FOCAL в TYPE %.
Сравнение с BASIC
Сравнения FOCAL c BASIC неизбежно, поскольку оба языка были распространены на мини-компьютерах той эпохи, и эти два языка имеют много общего с точки зрения синтаксиса и структуры. В большинстве случаев происходит прямое преобразование кода FOCAL в и из BASIC. Например, чтобы попросить пользователя ввести значение в FOCAL можно так:
ASK "What is your age?",AGE
эквивалент в BASIC:
INPUT "What is your age?",AGE
За исключением нескольких функций, отсутствующих в том или другом языке, и некоторых небольших различий в синтаксисе, эти два языка очень похожи.
Заметным исключением является IF в BASIC, который позволяет размещать любое выражение после THEN, делая его более похожим на структуры управления JOSS. BASIC изменил порядок кода по сравнению с JOSS, поместив условное выражение в начале строки, а не в конце; в BASIC каждый использует IF this THEN that, в отличие от that IF this JOSS. Преимущество BASIC в том, что среда выполнения может немедленно прервать чтение остальной части оператора, если выражение не соответствует действительности. Напротив, IF FOCAL больше походит на вычисленное goto BASIC, ON X GOTO 10,20,30, но ON … GOTO допускал любое количество строк в качестве целей, в отличие от только трех для отрицательных, нулевых и положительных, как в JOSS и FOCAL.
Другое важное различие между состоит том, что у FOCAL отсутствует встроенная поддержка строк как данных, которые можно присваивать переменным. Как и в ранних версиях BASIC или FORTRAN до добавления строк (в F77), этого ограничения обычно избегали используя строки символов в командах ввода и вывода. Только когда потребовалось манипулировать строками или символами внутри них, это стало серьёзной проблемой.
Поскольку строковые переменные не поддерживаются, при вводе строки используется метод, который преобразует любые символы, введенные пользователем, в их числовое значение. Например, если ввести «HELLO», FOCAL преобразует H в «8», числовое значение «H» в шестибитовых кодах PDP-8 («H» — восьмая буква), затем интерпретирует «E» как начальную экспоненту, а затем попытается вычислить «8» в степени «LLO», что займет несколько секунд процессорного времени и приведет к значению 0,76593020E + 103, что не будет особо полезным ответом. Тем не менее, задавая вопросы, на которые можно было бы ответить, используя однобуквенные ответы, такие как «Нужны ли вам инструкции, Y или N», программисты могли проверить результат по известным значениям символов, чтобы получить то, что выглядело как ввод символов.
В реализации FOCAL PDP-8 использовалось представление с плавающей запятой, которое хранило числа в виде четырех 12-битных слов, всего 48 бит, с 36 битами мантиссы и 12 экспоненты. Это позволило получить значительно более высокую точность и значительно более широкий диапазон значений, чем большинство современных интерпретаторов, что делало FOCAL разумным выбором для серьезной работы с числами. Эта высокая точность и хороший выбор для стандартного десятичного форматирования вывода означали, что проблемы двоично-десятичного округлением не беспокоили начинающих пользователей. Для сравнения, Microsoft BASIC первоначально использовал 32-битный формат, более поздние версии расширили его до 40-бит. У большинства BASIC были проблемы с округлением, что приводило к крошечным ненулевым остаткам в простых выражениях.
Общепринято, что FOCAL более эффективно использовал ресурсы, чем сопоставимые системы BASIC. На типичной машине того времени, часто с 6–24 килобайтами памяти на магнитных сердечниках, FOCAL мог выполнять более крупные и сложные задачи программирования, чем BASIC.
Версии и ответвления
Корпорация Coca-Cola использовала индивидуальную версию FOCAL под названием COKE.
FOCAL был позднее реализован на PDP-7, PDP-9, PDP-10, PDP-11, PDP-12, PDP-5 и LINC-8.
Руководство FOCAL показало, как добавлять команды в анализатор FOCAL, поэтому многие сайты добавили специальные команды для работы с пользовательским оборудованием.
Группа Digital Equipment Computer Users’ Society собрала много патчей и улучшений для FOCAL. Там присутствовали основные улучшенные ответвления FOCAL, такие как FOCAL-W, которые добавили множество функций, в том числе улучшенный ввод-вывод файлов и даже работу с виртуальной памятью.
В России FOCAL появился в начале 1990-х годов в серийных домашних компьютерах серии Электроника BK.
Пример кода
В качестве примера можно рассмотреть реализацию игры “Угадай число”. В строке 1.30 генерируется случайное число. В строке 2.10 пользователь вводит свой вариант. Если угадать удалось, происходит переход на строку 6.10, где выводится сообщение о победе. Если не удалось – выводится подсказка и запрос числа повторяется. Количество попыток ограничено тремя.
1.10 COMMENT GUESS THE NUMBER 0..9 IN 3 ATTEMPTS 1.20 SET C=1 1.30 SET N=FITR(FRAN(1)*10) 2.10 ASK "GUESS THE NUMBER 0..9",G 2.20 IF (G-N) 3.3,6.1 3.10 TYPE "YOUR NUMBER IS GREATER",! 3.20 GOTO 4.1 3.30 TYPE "YOUR NUMBER IS LESS",! 4.10 SET C=C+1 4.20 IF (C-3) 2.1,2.1 5.10 TYPE "YOU LOSE... IT WAS ",%1.0,N,! 5.20 QUIT 6.10 TYPE "YOU WON! COOL!",! 6.20 QUIT
Подведём итог
В Советском Союзе FOCAL сыграл менее заметную роль, нежели в Америке, поскольку появился значительно позже пика своей популярности, которая пришлась на конец 60-х годов. Тем не менее этот интерпретатор может представлять интерес для всех, кто интересуется историей развития языков программирования.
Реализация такого простого интерпретатора может стать интересным вызовом для программиста. Версию FOCAL, разработанную на Java, вы можете найти в моём git репозитории.
Как работает язык программирования bash: разбираемся в основах
Перевели статью, которая поможет лучше понять, как работает bash, а значит, сэкономить время и уменьшить количество ошибок. Далее текст от лица автора.
Недавно я проводила рефакторинг установки для разнообразного набора приложений. Это была большая куча образов Docker, которые должны быть гибкими, но стабильными. Некоторые веб-приложения также необходимо перезапускать удобным для пользователя способом, который отображает полезные сообщения об ошибках для разработчиков различной квалификации.
Эта задача потребовала большой работы, но я уверена, что стала лучше разбираться в сценариях bash. Мне легко писать эту статью, потому что я записывала все странные мелочи, которые требовали времени на отладку.
Bash настолько странный, что не все из этих мелочей можно подробно разобрать в одной статье, поэтому в каждом разделе я даю ссылки на статьи или учебные пособия, где все эти моменты подробно расписаны.
Язык программирования, на котором писала ваша бабушка
Bash создан Брайаном Фоксом (легендарный и недооцененный парень) и выпущен в 1989 году как open source замена для Bourne Shell, вышедшей в 1976 году. Его название является аббревиатурой от Bourne Again SHell.
Если вы привыкли писать на любом другом языке программирования, bash (и сценарии оболочки в целом) не будут для вас интуитивно понятными. Синтаксис не запоминающийся, переменные странные, область видимости — полная дичь, и поток управления никогда не делает то, что вы думаете.
Как и в случае с CSS, я перестала бояться писать сценарии bash, когда узнала о нем несколько ключевых моментов: как он работает, в чем действительно хорош и как заставить его делать то, что мне нужно. Я также столкнулась с множеством глупых маленьких ошибок, которые мне просто пришлось заучить.
Написание скриптов командной оболочки — это очень весело, если вы овладеете основами! Ничто не заставит вас почувствовать себя более опытным хакером, чем написание дикого однострочника, который запускается с первой попытки.
Примечание: я предполагаю, что вы обладаете некоторыми предварительными знаниями в программировании и сценариях командной оболочки. Если вы только начинаете изучение — вот хороший ресурс для начала. Я предполагаю, что вы, по крайней мере, знаете, как использовать терминал и следующие команды: ls, cd, pwd, cat, grep и написали (или попытались написать) один или два сценария.Кстати, поскольку эта статья относится к миру Linux и операционных систем, у меня есть примечание для тех, кто занимается этими вопросами дольше меня: нормально (даже рекомендуется!) исправлять меня, если я ошибаюсь, просто будьте вежливы.
Версии
Язык сценариев оболочки, c которым большинство из нас работает в настоящее время, — это версия bash для Mac и Linux, используемая для эмуляции терминала в /bin/bash.
Debian (и, соответственно, Ubuntu и Linux Mint) теперь использует другой, но в основном совместимый язык сценариев оболочки (dash) для системных задач. Прим. переводчика: так утверждает автор статьи, но я везде вижу использование bash.
Вы также можете установить zsh в качестве основной оболочки, который в целом похож на bash, но имеет и отличия.
Из-за всех этих небольших вариаций хорошей идеей будет поместить #!/bin/bash (или какой-либо другой язык сценариев оболочки, который вы хотите использовать) вверху файлов, чтобы указать, что сценарий оболочки должен использовать конкретно этот язык, а не какой-либо еще из установленных на сервере.
Указание языка оболочки в заголовке файла сделает его поведение более предсказуемым. Например, ответы на Stack Overflow обычно предполагают, что вы используете именно bash.
Основы
Давайте сначала рассмотрим несколько фундаментальных вещей.
Сценарии оболочки, по сути, представляют собой текстовые потоки, которые передают данные между собой. Они используют философию Unix, заключающуюся в том, чтобы хорошо выполнять одну задачу и объединять крошечные инструменты в более крупные программы по принципу работы конвейера в промышленности. Результат выполнения каждый инструмента передается на вход следующему по порядку.
Синтаксис
Bash использует нестрогий синтаксис; вы можете использовать точку с запятой в конце строки, если хотите, и отступы не влияют на выполнение кода. В нестрогости синтаксиса кроется ловушка. Синтаксис bash важен и очень специфичен. Вдобавок, по сравнению с другими языками, ошибки в синтаксисе трудно диагностировать.
Очень важно правильно использовать пробелы и точки с запятой.
Например, можно получить ошибку “[grep isn’t a valid command”, если забыть поставить пробел внутри квадратных скобок [] или “Unexpected end of file”, когда вы забыли точку с запятой после {}.
При определении переменной пробел между переменной и знаком = и между знаком = и значением приводит к разным результатам. Существует важное различие между одинарными кавычками и двойными.
Синтаксические ошибки всегда выглядят как логические ошибки, что затрудняет выявление опечаток.
Структура
Сценарии оболочки понимают операторы управления выполнением: операторы if, циклы while, циклы for, операторы case и так далее.
Отличие bash от других языков — это условия и области видимости. Однако, поскольку bash в большей степени ориентирован на однострочные и одноразовые сценарии, условия используются не так часто, как в других языках.
Вот пример однострочника, который использует управление выполнением без каких-либо операторов if:
Создан универсальный язык программирования. Он позволяет писать одновременно на С, Python, JavaScript и так далее
| ПоделитьсяРазработчик из Польши Петр Фусик создал язык программирования Ć. Его код можно в два счета транслировать на С, С++, Java, Python и ряд других языков. Синтаксис нового языка похож на C#.
Один язык для всех
Польский программист Петр Фусик (Piotr Fusik) создал новый язык программирования Ć, своего рода универсальный язык написания кода. Со слов автора, его творение позволяет писать код, который в дальнейшем можно будет без труда использовать в других языках.
В качестве примера Фусик привел C, C++, C#, Java, JavaScript, Python, Swift и OpenCL. Все детали своего языка Ć, который пока находится на одном из этапов разработки, он опубликовал в открытом виде на GitHub (принадлежит Microsoft).
Петр Фусик не уточнил, почему назвал свое творение именно так, и не сообщил, как правильно его произносить. «Апостроф» над буквой С называется «акут», то есть, с учетом этого, название языка может звучать как «Си с акутом». Также это буква польского алфавита, которая называется «Че» и читается приблизительно как «Ч».
Универсальность языка
Своей универсальностью язык Ć обязан транслятору cito. Обработанный с его помощью код можно читать на любом их перечисленных Фусиком языках программировании.
Петр Фусик, автор языка Ć (фоточка из аккаунта GitHub)
«В отличие от большинства языков, которые вы изучали раньше, Ć не претендует на звание лучшего универсального языка программирования. Вместо этого он решает одну конкретную проблему: как писать код, который можно удобно использовать одновременно на языках C, C++, C #, Java, JavaScript, Python, Swift и OpenCL. Например, если вы изобрели новый формат сжатия, вы можете реализовать его в Ć и заставить автоматический переводчик cito сгенерировать исходный код на упомянутых языках, чтобы программисты этих языков могли использовать ваш код», – описывает свое творение Петр Фусик.
Петр Фусик не уточняет, как долго он работал над Ć, и кто, помимо него, входит в команду разработчиков. Известно лишь, что создание языка длится как минимум с лета 2013 г. – этим днем датирована публикация на YouTube записи ранней презентации языка.
Сходство с другими языками
По утверждению создателя, синтаксис Ć во многом напоминает C#.
Фусик создал Ć объектно-ориентированным. Он объяснил свой выбор тем, что большинство целевых языков объектно-ориентированы.
Пример кода на Ć. Нажмите для увеличения
Фусик утверждает, что подсветка синтаксиса C# вполне подходит и для его творения. При этом, с его слов, Ć нельзя считать ни клоном C#, ни его подмножеством. Различия между ними все же есть, и продиктованы они, по словам Фусика, «необходимостью полностью автоматической трансляции кода на Ć в эффективный код C и JavaScript».
Библиотеки не нужны
В описании к Ć сказано, что в его случае зависимости от библиотек рантайма (runtime libraries) сведены к минимуму. В качестве примера Фусик привел вывод кода, для использования в программах на С – в большинстве случаев пользователь получает автономную пару файлов .c/.h с удобочитаемым кодом С99.
Презентация Ć в 2013 году
Автор утверждает, то это в равной степени относится и к другим поддерживаемым языкам – C++, C#, Java, JavaScript, Python, Swift и OpenCL. В то же время он упоминает о нескольких исключениях. Одно из них касается необходимости использования библиотеки GLib для вывода кода на C в случае, когда программист, пишущий на Ć, использует выражения List, Dictionary или SortedDictionary.
Реакция сообщества
Релиз языка Ć активно обсуждается как на профильных сайтах, посвященных программированию, так и на ресурсах, никак не связанных с ним. Редакция CNews обнаружила посвященные ему темы на YCombinanor и на Reddit.
Как оптимизировать затраты на команду и систему управления тестированием
БизнесТопик на YCombinanor был создан 9 октября 2021 г. и за это время собрал почти 300 комментариев. На Reddit существует как минимум две темы для обсуждения Ć, датированных тем же днем. В одной из них набралось около 290 ответов, в другой – 33.
Пользователи разделились на два лагеря – одни считают, что язык имеет право на существование, другие же сомневаются в его практической пользе. К примеру, пользователь Reddit под псевдонимом bladehaze написал, что Ć пригодится лишь в том случае, если писать код без использования библиотек, что не всегда представляется возможным.
Что такое C? — Основы программирования на C
C — это компьютерный язык программирования . Это означает, что вы можете использовать C для создания списков инструкций, которым должен следовать компьютер. C — один из тысяч языков программирования, используемых в настоящее время. C существует уже несколько десятилетий и завоевал широкое признание, поскольку дает программистам максимальный контроль и эффективность. C — простой язык для изучения. По своему стилю он немного более загадочен, чем у некоторых других языков, но вы довольно быстро выходите за его рамки.
C — это то, что называется скомпилированным языком . Это означает, что после того, как вы напишете свою программу на C, вы должны запустить ее через компилятор C , чтобы превратить вашу программу в исполняемый файл , который компьютер может запускать (выполнять). Программа на C — это форма, удобочитаемая человеком, а исполняемый файл, который выходит из компилятора, — это машиночитаемая и исполняемая форма. Это означает, что для написания и запуска программы на C у вас должен быть доступ к компилятору C. Если вы используете машину UNIX (например, если вы пишете сценарии CGI на языке C на компьютере UNIX вашего хоста, или если вы студент, работающий на машине UNIX в лаборатории), компилятор C доступен бесплатно.Он называется «cc» или «gcc» и доступен в командной строке. Если вы студент, то школа, скорее всего, предоставит вам компилятор — узнайте, что школа использует, и узнайте об этом. Если вы работаете дома на компьютере с Windows, вам нужно будет загрузить бесплатный компилятор C или приобрести коммерческий компилятор. Широко используемый коммерческий компилятор — это среда Microsoft Visual C ++ (она компилирует программы как на C, так и на C ++). К сожалению, эта программа стоит несколько сотен долларов.Если у вас нет сотен долларов, которые можно потратить на коммерческий компилятор, вы можете использовать один из бесплатных компиляторов, доступных в Интернете. См. Http://delorie.com/djgpp/ в качестве отправной точки для поиска.
Мы начнем с очень простой программы на языке C и продолжим ее работу. Я предполагаю, что вы используете командную строку UNIX и gcc в качестве среды для этих примеров; в противном случае весь код по-прежнему будет работать нормально — вам просто нужно будет понять и использовать любой доступный компилятор.̋Y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼof {ofofofofofofofofofofofofofofofofofofofofofof конечный поток эндобдж 13062 0 объект > транслировать xil] Ͻ ~; w {-; I (! Q0!
ОСНОВНЫЕ команды
Этот документ любезно воспроизведен Томасом Курцем.
Оригинальная оригинальная версия
Dartmouth BASIC произвел революцию в компьютерном программировании для неспециалистов, которых намного больше, чем экспертов! Это был простой язык, в нем использовались английские слова, и он давал почти мгновенный ответ в те дни, когда изменение часов или даже дней было нормой.
В этой заметке дается краткое описание языка для тех из вас, кто знаком с программированием.
Thomas E. Kurtz
26 октября 2005 г.
Заявления
В исходном BASIC было пятнадцать типов операторов.
LET Представляет оператор присваивания и является обязательным.
PRINT Обеспечивает вывод произвольной формы.
END Требуется
READ Присваивает значения переменным из внутренних данных
DATA Вводит внутренние данные
GOTO Делает именно это, передает в другой оператор с пронумерованной строкой
IF Дает условный GOTO
FOR Представляет конструкцию цикла
NEXT Завершает конструкцию цикла
GOSUB выполняет переход к подпрограмме
RETURN Возврат с конца подпрограммы
DEF Представляет функции, определяемые программистом
DIM Позволяет определять размеры массивов
REM Предоставляет комментарии
STOP То же, что и выполнение оператора END
Кроме того, немного более новая версия BASIC, которую мы используем, включает оператор INPUT.x
INT Целая часть (с усечением в сторону 0)
LOG Натуральный логарифм
RND Следующее случайное число
SIN Синус
SQR Корень квадратный
TAN Тангенс
Предполагается, что аргументы для SIN, COS, TAN и значение из ATN указаны в радианах.
Сообщения об ошибках выдаются для аргументов, выходящих за пределы диапазона функций LOG и SQR, хотя SQR затем предоставляет SQR абсолютного значения.
Функция RND нуждалась в фиктивном аргументе, чтобы обойти сканер синтаксиса.То есть RND (0). Аргумент игнорируется.
Переменные
Имена переменных могут состоять из одной буквы или одной буквы, за которой следует одна цифра. Это обеспечивает 286 возможных имен переменных.
Массивы
Одна буква, за которой следует «(», обозначает элемент массива, который может быть одно- или двумерным. Без оператора DIM размеры по умолчанию составляют от 0 до 10 для каждого измерения.
Оператор DIM допускает другие верхние пределы, но всегда предоставляется нулевой элемент.
ПЕЧАТЬ Заявлений
Оператор PRINT допускает использование нескольких величин, включая строки в кавычках, разделенных запятыми (,) или точками с запятой (;). Если через запятую, БЕЙСИК переходит в начало следующей зоны. Зоны имеют ширину 15 знаков. Если поставить точку с запятой, BASIC не перемещается, а начинает следующий элемент с следующего пробела.
Числовые значения печатаются либо с пробелом в начале, либо со знаком минус, а также с пробелом в конце. Таким образом, числовые значения в операторе PRINT с точкой с запятой в качестве разделителя будут иметь хотя бы один пробел между значениями.Кроме того, числовые значения всегда будут давать количество символов, кратное трем. Таким образом,
PRINT 12; 34; 56
произведет
12 34 56
Хотя строкового типа данных нет, строки в кавычках разрешены в операторах PRINT. Если строка в кавычках и числовое значение разделены точкой с запятой в операторе PRINT, точку с запятой можно опустить.
Если длина печатной строки превышает 75 символов, автоматически вводится конец строки.Иногда мы говорим, что МАРЖА 75.
Определяемые функции
Пользователь может определить до 26 новых функций, дав им имена от FNA до FNZ. Каждая такая функция представлена ключевым словом DEF. Аргумент должен быть ровно один. Имя переменной, используемое в качестве аргумента, отличается от переменной с таким же именем в остальной части программы. Определение функции должно быть одной строкой следующего вида:
DEF FNX (X) = <выражение>
Выражение должно содержать X, если значение функции не зависит от аргумента; выражение может содержать другие переменные из программы.2/2)) / SQR (2 * 3,14159265)
130
140 ДЛЯ X = -2 К 2 ШАГУ. 1
150 ПОЗВОЛЯТЬ Y = FNN (X)
160 ПОЗВОЛЯТЬ Y = INT (100 * Y)
170 ДЛЯ Z = 1 ДО Y
180 ПЕЧАТЬ «»;
190 СЛЕДУЮЩИЙ Z
200 ПЕЧАТЬ «*»
210 СЛЕДУЮЩИЙ X
220 КОНЕЦ
100 УГАДАЙТЕ ИГРУ
110
120 ПЕЧАТЬ «УГАДАЙТЕ ЧИСЛО ОТ 1 ДО 100».
130
140 ПОЗВОЛЯТЬ X = INT (100 * RND (0) +1)
150 ПОЗВОЛЯТЬ N = 0
160 ПЕЧАТЬ «ВАША УГАДА»;
170 ВВОД G
180 ПОЗВОЛЯТЬ N = N + 1
190 ЕСЛИ G = X ТО 300
200 ЕСЛИ G
230
250 ПЕЧАТЬ «СЛИШКОМ МАЛЕНЬКИЙ , УГАДАЙТЕ СНОВА «
260 GOTO 160
270
300 ПЕЧАТЬ» ВЫ УГАЛИ, В «; N; «ПЫТАЕТСЯ»
310 ПЕЧАТЬ «ДРУГАЯ ИГРА (ДА = 1, НЕТ = 0)»;
320 INPUT A
330 ЕСЛИ A = 1 ТО 140
340 ПЕЧАТЬ «СПАСИБО ЗА ИГРУ»
350 КОНЕЦ
Команды
Хотя это и не является частью BASIC, команды операционной системы включают следующее:
HELLO Начать новый сеанс, ввести свой номер пользователя
NEW Начать новую программу
OLD Получить программу из хранилища
SAVE Сохранить текущую программу в хранилище
REPLACE Сохранить текущую программу в хранилище, перезаписав старую версию
RENAME Переименовать текущую программу
CAT Перечислить имена ваших сохраненных программ (сокращенно CATALOG)
LIST Перечислить текущую программу
RUN Запустить текущую программу
STOP Остановить текущий запуск программы (в случае бесконечного цикла)
UNSAVE Отменить сохранение текущей программы
СИСТЕМА Присвойте системе имя — только BASIC (по умолчанию) или ALGOL
BYE Завершить сеанс
GOODBYE То же, что BYE
Все команды могут быть сокращены до первых трех букв.
За командами NEW, OLD и RENAME может следовать имя программы. В противном случае операционная система запросит у вас название программы. За командой SYSTEM может следовать BASIC или ALGOL. В противном случае операционная система запросит имя системы. (Как и команды, имена систем могут быть сокращены до трех букв.)
Кроме того, команда SPEED позволяет вам указать скорость телетайпа для более реалистичного моделирования. Таким образом, SPEED 10 замедлит работу примерно до 10 символов в секунду.
Заявление об ограничении ответственности
Это краткое руководство описывает версию BASIC, включенную в эмуляцию. Межстрочный интервал и ответ «ГОТОВ», предоставляемый Datanet-30, могут быть не совсем правильными. DTSS также поддерживает Algol.
Программирование C — Язык программирования C и C ++
<< Назад
Вперед >>
Давайте изучим основные фундаментальные концепции языка программирования C. Мы изучим ключевые слова на языке C, синтаксис на языке C, набор символов на языке C, разделители и идентификаторы на языке C
Если вы хотите изучить язык C с самого начала, начните с этого — языка программирования C.
Команды на языке C, ключевые слова и символы на языке программирования C
Программа — это набор инструкций. Инструкции составляются с использованием определенных слов и символов. C поддерживает данные, используемые для записи слов и символов, таких как числа, символы, строки и т. Д. Обычно слова и символы пишутся на основе синтаксиса или грамматических правил языка. Как правило, программисты должны следовать синтаксическим правилам языка, чтобы писать программу. Давайте посмотрим на основной синтаксис языка программирования C.
Набор символов C
Набор символов C используется для формирования слов, чисел и выражений. Набор символов C подразделяется на различные категории:
- Буквы в языке программирования C
C использует английский алфавит в обеих формах — заглавные буквы от A до Z и строчные буквы от a до z.
- Цифры
C включает все десятичные цифры от 0 до 9.
- Пробелы в C
C позволяют использовать пробелы в операторе.Пробелы используются для разделения слов и утверждений и для лучшей читаемости. Полезные пробелы, включенные в C, — это пустое пространство, горизонтальная табуляция, вертикальная табуляция и новая строка.
- Специальные символы в программировании на C
C поддерживает некоторые специальные символы или символы. Ниже приведен список специальных символов:
Символ Значение Символ Значение , запятая . период или точка ; точка с запятой : двоеточие ‘ апостроф „ кавычка ! восклицательный знак | вертикальная черта / косая черта \ обратная косая черта ~ тильда _ подчеркивание доллар доллар вопросительный знак & амперсанд ^ каретка * звездочка — минус 4 902 902 902 902 плюс 902 902 + 902 > больше, чем () скобка [] скобка {} скобка % процент 2 # Hash число Hash @со скоростью = равно
Разделители в программировании на C
C использует символы особого типа:
Разделители | Используйте |
---|
; точка с запятой | Завершает оператор |
() скобка | Используется в функции и выражении |
[] квадратная скобка | Используется для объявления массива |
{} фигурная скобка | Область | # hash | Директива препроцессора |
, запятая | Разделитель переменных |
Ключевые слова
C имеет некоторые зарезервированные слова, которые используются компилятором и имеют фиксированное значение.Мы не можем использовать эти ключевые слова в качестве имени переменной, константы или функции. Для использования этих ключевых слов мы не включаем в нашу программу заголовочный файл. Ниже приводится список ключевых слов; вы должны заметить, что все эти ключевые слова используют строчные буквы.
auto | do | int | struct | |||||
break | else | long | switch | |||||
case | extern | case | extern | return | return | регистр | без знака | |
const | с плавающей запятой | выстрел | typedef | |||||
продолжить | для | подписанный | void | 902 902 902 902двойной размер | 902 902 902||||
defualt | if | static | while |
Идентификаторы в программировании на C
В C идентификаторы используются для обозначения нескольких вещей; имя переменной, имя функции и массивы.Идентификаторы в C — это определенные пользователем имена, которые состоят из последовательности букв, цифр и символа подчеркивания ‘_’ .
Правила определения идентификатора:
- Первый символ должен быть алфавитом.
- Имена переменных могут начинаться с ‘_’ , но это может использоваться только для реализации библиотеки.
- Идентификатор может содержать подчеркивание и цифры.
- Зарезервированные ключевые слова не могут использоваться в качестве идентификатора.
- Используйте строчные буквы для имени переменной и прописные буквы для символьной константы.
- C — это язык программирования с учетом регистра, поэтому идентификатор «Женщина» отличается от идентификатора «женщина» .
Примеры
Факт, моя функция, а, текст, текст, _abc, сумма, ДОБАВИТЬ, мульти
<< Назад
Вперед >>
Основная функция — cppreference.com
Каждая программа C, закодированная для запуска в размещенной среде выполнения, содержит определение (не прототип) функции с именем main
, которая является назначенным началом программы.
внутренний основной (пусто) { корпус } | (1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
int main ( int argc , char * argv [] ) { body 4 |