Разное

Программы паскаль абс: 404-Ошибка: 404

Содержание

Примеры программ

В данном разделе содержатся примеры программ на PascalABC.NET от элементарных до сложных. Часть из них посвящена алгоритмам, реализованным на языке Паскаль, другая часть — особенностям языка и библиотек PascalABC.NET.

Примеры разбиты на следующие группы:

Особенности языка

В данном разделе приводятся примеры, иллюстрирующие особенности языка PascalABC.NET.

Стандартные модули В данном разделе рассматриваются примеры использования графических модулей, модулей школьных исполнителей Робот и Чертежник, студенческих учебных модулей Arrays и Collections. Раздел также пока находится в разработке.
Начинающим
(программы и алгоритмы)
Данный раздел можно прекомендовать для начального изучения языка. Здесь приводятся простейшие классические алгоритмы с использованием основных конструкций языка Паскаль. Материалы раздела могут быть использованы для подготовки к ЕГЭ по информатике, для самостоятельного изучения, а также в качестве справочника.
Программы и алгоритмы для студентов Данный раздел предназначен для студентов и реализуется силами студентов 1 курса ИТ. В этом разделе будут располагаться программы и алгоритмы, возникающие в курсе «Основы программирования» (ИТ, 1 курс)
Алгоритмы средней сложности
Данный раздел находится в разработке.

 

Pascal abc обучение с нуля

Среда программирования PascalABC используется в качестве начального обучения программированию школьников на языке программирования Паскаль. Среда содержит мощную справочную систему и встроенный задачник с автопроверяемыми заданиями. Это позволит вам быстро научиться писать программы на паскале.

В бесплатной мини-версии задачника доступно 270 заданий по  всем основным разделам. Этого вполне достаточно для самостоятельного освоения начального уровня программирования.  Скачать паскаль бесплатно старую версию 3.0 можно здесь.  В настоящее время версия 3.0 больше не поддерживается и разработчики работают над PascalABC.Net. Рекомендую скачать последнюю. Итак, начинаем pascal abc обучение.

Внешний вид интерфейса программы PascalABC

Окно среды программирования выглядит стандартно. В нем присутствует строка меню (1), ниже располагается панель инструментов быстрого доступа (2). Далее расположена рабочая зона редактора кода.

Внешний вид интерфейса программы

Вверху отображены ярлыки открытых файлов с текстами программ (3). Одновременная работа с несколькими текстами значительно упрощает создание программ. Можно копировать и переносить участки кода из одного файла в другой (4).

В режиме выполнения программы можно увидеть зону ввода данных и вывода результатов (5).

Работа с PascalABC

После набора текста программы необходимо выполнить ее сохранение и задать имя. Для этого можно воспользоваться командой Файл-Сохранить как или соответствующей кнопкой на панели инструментов.

Давайте имя отличное от предлагаемого по умолчанию. Это облегчит вам в дальнейшем поиск нужного кода.

Запуск

Теперь можно запустить программу для проверки ее работы. Команда запуска Программа -Выполнить или кнопкой в виде зеленого треугольника на панели инструментов. Перед запуском выполняется компиляция кода. Если в коде есть ошибки, то появится красная строка с описанием ошибки.

Ошибки в программе

Курсор будет указывать место вероятной ошибки, но это не всегда совпадает с её описанием. Вот, например, на скриншоте выше курсор указывает на переменную Y, но ошибка содержится в строке выше. Там пропущен символ «точка с запятой», который обязательно должен быть по завершению каждой командной строки. После исправления ошибки, снова запускаем выполнение программы.

Остановка

Остановка программы происходит по ее завершению. Но возможны случаи, когда программу необходимо остановить принудительно. Для этого есть кнопка «Стоп» на панели инструментов или команда Программа — Завершить.

Настройка текстового редактора abc паскаль

По умолчанию в редакторе кода задан минимальный размер шрифта. Если вы испытываете дискомфорт при наборе текста, то зайдите в меню Сервис — Настройки редактора

. Установите желаемый размер шрифта.

Настройка редактора Pascal ABC

Работа с электронным задачником

Научиться писать программы pascal невозможно без практики. Система автоматического тестирования работы программы для паскаля поможет вам освоить программирование на языке pascal.
Зайдите в меню  Сервис — Создать шаблон программы. У вас откроется следующее окно (смотрите ниже)

Здесь нужно написать название группы заданий. Смотрим на список и вписываем нужную группу в точности как она записана в списке окна. После указания имени группы заданий, подсказка поменяется.

Теперь будет указано количество доступных заданий в этой группе или будут перечислены номера конкретных заданий. Вы добавляете номер к названию группы без пробела. Нажимаем кнопку Загрузка. Откроется вкладка с выбранным заданием. В новом файле будет присутствовать автоматически сгенерированный код. Его удалять нельзя.

Теперь для просмотра текста задания нажмем на кнопку запуска программы.

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

Запускаем на выполнение. Если нет ошибок, то получим окно.

Нужно провести несколько повторных запусков программы, чтобы пройти все тесты. И только после прохождения всех тестов задание получит статус «Задание выполнено!» Теперь можно переходить к выполнению следующего задания.

Следующая тема для изучения Линейные алгоритмы

Запуск и остановка программы — Студопедия

Лабораторная работа № 1

 

ИНТЕГРИРОВАННАЯ ИНСТРУМЕНТАЛЬНАЯ ОБОЛОЧКА Pascal ABC.

РАБОТА С ГЛАВНЫМ МЕНЮ СИСТЕМЫ PASCAL ABC

 

Система программирования Pascal ABC предстанет собой среду, включающую: экранный редактор, компилятор, редактор связей, отладчик.

Интегрированная среда позволяет набирать тексты программ с использованием встроенного редактора текстов, компилировать их, проводить отладку программ.

Запуск системы Pascal ABC осуществляется выполнением файла PascalABC.exe. На экране появляется главное меню системы (рис.1).

 

 

Рис. 1. Основной экран Паскаль ABC

 

Горячие клавиши

F2, Ctrl-S — сохранить файл.

F3, Ctrl-O — загрузить файл.

F12 — сохранить файл под новым именем.

Ctrl-Shift-S — сохранить все открытые файлы.

Ctrl-Shift-0 … Ctrl-Shift-9 — установить закладку с номером 0…9.

Ctrl-0 … Ctrl-9 — перейти к закладке с номером 0…9.

Ctrl-Tab, Ctrl-Shift-Tab — перейти к следующему/предыдущему окну редактора.

Ctrl-Shift-I — увеличить отступ выделенного блока.

Ctrl-Shift-U — уменьшить отступ выделенного блока.

 

Окно вывода

Под окном редактора расположено окно вывода. Оно предназначено для вывода данных процедурами write и writeln, а также для вывода сообщений об ошибках и предупреждений во время работы программы.


Окно вывода может быть скрыто. Клавиша F5 и кнопка показывают/скрывают окно вывода. Для скрытия окна вывода используется также клавиша Esc.

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

Для очистки окна вывода следует нажать комбинацию клавиш Ctrl-Del или кнопку .

 

Окно ввода

Окно ввода открывается при выполнении процедур read и readln в ходе работы программы:

 

Ввод данных в окно ввода сопровождается эхо-выводом в окно вывода (рис 2). После нажатия клавиши

Enter данные из окна ввода попадают в соответствующие переменные, окно ввода закрывается, и программа продолжает работать дальше.

 

Рис. 2. Окно ввода Паскаль ABC

 

Запуск и остановка программы

Для запуска программы в текущем окне редактора следует нажать клавишу F9 или кнопку панели инструментов.

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

Выполнение программы можно в любой момент прервать нажатием комбинации клавиш Ctrl-F2 или кнопки . При этом в окне вывода появится сообщение

• Программа прервана пользователем

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


При выводе в графическое окно модуля GraphABC программу можно прервать нажатием клавиши Esc, при этом графическое окно будет закрыто.

 

Анимация в PascalABC.NET | Творческие проекты и работы учащихся

В исследовательском проекте по информатике «Анимация в PascalABC.NET» автор дает справочное описание истории появления и развития программы PascalABC.NET, а также объясняет, как с помощью создания подобных программ можно привлечь к занятиям информатикой даже творческих людей, называет аналоги данной программы для создания анимаций.

Подробнее о проекте:


В процессе исследовательской работы по информатике «Анимация в PascalABC.NET» учеником 9 класса была поставлена цель, написать программу для создания анимации. Для этого ученик изучил графику PascalABC, написал программу анимирования в PascalABC.NET и проверил полученную программу в работе по созданию картинок.

В учебном проекте по информатике «Анимация в PascalABCNET» автор изучает теорию написания программ для творчества, выясняет, из чего состоит программа Pascal, а также анализирует, что он использовал при создании анимации. В завершении своего проекта ученик школы представил код готовой программы для создания анимации на персональном компьютере.

Оглавление

Введение
1. История Pascal.
2. Из чего состоит программа Pascal?
3. Что я использовал при создании анимации.
4. Получившийся код.
Список литературы

Введение

Цель: Написать программу анимации в среде

Актуальность: Некоторые люди думают, что программирование – это скучно и сложно. Данный проект призван показать, что программирование может быть площадкой для творчества, наподобие Paint, GIMP и другие.

Задачи:

  • Изучить графику PascalABC.
  • Написать программу анимирования в PascalABC.NET
  • Проверить программу на работу

История Pascal


Язык программирования Pascal был создан в 1968-1969 годах швейцарским ученым Никлаусом Виртом. Язык назван в честь французского математика, физика, литератора и философа Блеза Паскаля, который создал первую в мире механическую машину, складывающую два числа.

В настоящее время Pascal — один из наиболее известных языков программирования, который используется для обучения программированию в старших классах и на первых курсах вузов, и является базой для ряда других языков.

Pascal ABC разработан в 2002 году сотрудниками факультета математики, механики и компьютерных наук Южного федерального университета (Ростов-на-Дону) во главе со Станиславом Станиславовичем Михалковичем. Целью авторов было создание обучающей среды программирования, более современной, чем Borland Pascal и Turbo Pascal, более простой для изучения.

Из чего состоит программа Pascal?

  • заголовок программы;
  • раздел описания переменных;
  • раздел действий;
  • точка.

Что я использовал при создании анимации

  • Модуль GraphABC
  • Графический примитив Circle (x, y, r)
  • Операторы цикла с условием repeat…until…
  • Операторы Lockdrawing…Redraw
  • Оператор ClearWindow(clColor)
  • Оператор SetBrushColor/SetPenColor(clColor)

Получившийся код (продукт)

Список литературы

  1. Паскаль для школьников. Д. М. Ушаков Т. А. Юркова – СПб.: Лидер, 2010
  2. PascalABC.NET: Введение в современное программирование. А. Осипов – Ростов-на-Дону, 2019– 572с. : ил.
  3. Информатика.: учебник для 9 класса. Л. Л. Босова А. Ю. Босова. – 3-е изд. – М. БИНОМ. Лаборатория знаний, 2015.
  4. Интернет-ресурсы.

Если страница Вам понравилась, поделитесь в социальных сетях:

Язык программирования Паскаль ABC, структура окна, комбинации клавиш

Урок из серии: «Язык программирования Паскаль»

На предыдущем уроке было показано, как использовать оператор Select Case для выбора из нескольких вариантов.

В этом уроке будет описана среда программирования Pascal ABC.

Вы познакомитесь со структурой окна, горячими клавишами, которые можно использовать при работе с текстом программы, узнаете как выполняется запуск и остановка программы.

Система программирования Pascal ABC  ориентирована на школьников и студентов младших курсов.  Это в достаточно простая и дружественная среда программирования. Во время работы используются три основных окна: окно редактора кода, окно ввода и окно вывода.

Окно редактора кода

Большую часть рабочей области, её верхнюю часть  занимает окно редактора кода. В него вводится исходный текст программы.

Горячие клавиши, которые можно использовать при работе с текстом программы:

F2, Ctrl-S- сохранить файл.

F3, Ctrl-O- загрузить файл.

F12- сохранить файл под новым именем.

Ctrl-Shift-S- сохранить все открытые файлы.

Ctrl-Tab, Ctrl-Shift-Tab — перейти к следующему/предыдущему окну редактора.

Ctrl-Shift-I- увеличить отступ выделенного блока.

Ctrl-Shift-U — уменьшить отступ выделенного блока.

Окно вывода

Под окном редактора расположено окно вывода. Оно предназначено для вывода данных процедурами write и writeln, а также для вывода сообщений об ошибках и предупреждений во время работы программы.

Окно вывода может быть скрыто. Клавиша F5 показывают/скрывают окно вывода. Для скрытия окна вывода используется также клавиша Esc.

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

Для очистки окна вывода следует нажать комбинацию клавиш Ctrl-Del или кнопку  .

Окно ввода

Окно ввода открывается при выполнении процедур read и readlnв ходе работы программы:

Ввод данных в в окно ввода сопровождается эхо-выводом в окно вывода (см. рис). После нажатия клавиши Enter данные из окна ввода попадают в соответствующие переменные, окно ввода закрывается, и программа продолжает работать дальше.

Запуск и остановка программы

Для запуска программы в текущем окне редактора следует нажать клавишу F9 или кнопку  панели инструментов.

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

Выполнение программы можно в любой момент прервать нажатием комбинации клавиш Ctrl-F2 или кнопки   При этом в окне вывода появится сообщение: • Программа прервана пользователем.


На этом уроке Вы познакомились со средой программирования Pascal ABC.

На следующем уроке начнем изучать операторы цикла.

Следующий урок: Оператор цикла с параметром For

Программа загрузки языка программирования Паскаль. Обзор бесплатной версии Pascal ABC. Что нового в приложении

PascalaBC.net — Система программирования Pascal ABC и система программирования

Паскаль ABC. ( Pascal ABS ) — Бесплатная и мощная среда разработки среды с системой обучения языку Pascal, подробной справочной информацией, инструментами для подсказки кода, автоформатированием, встроенным отладчиком и конструктором форм.

Основные возможности Pascalabc.сеть (Pascal ABS)

Pascalabc.net — мощный и современный язык программирования, который превосходит язык программирования Delphi и содержит почти все возможности языка C #.

Язык Pascalabc.net содержит все основные элементы современных языков программирования: модули, классы, операции перегрузки, интерфейсы, исключения, обобщенные классы, сборку мусора, лямбда-выражения, а также некоторые параллельные средства, включая директивы OpenMP. Система Pascal ABC Net также включает простую интегрированную среду, ориентированную на эффективное обучение современному программированию.

Pascal ABC — Уроки языка программирования Pascal ABS

Среда разработки опирается на платформу Microsoft .NET с ее языковыми возможностями и библиотеками, что делает ее гибкой, эффективной и постоянно развивающейся. Кроме того, вы можете легко комбинировать библиотеки, разработанные на Pascal ABC NET и других языках .Net.

Компилятор ABC Pascal генерирует код, который используется так же быстро, как код на C #, но несколько медленнее, чем код на C ++ и Delphi.

Язык программирования Pascal был разработан швейцарским ученым Никлаусом Вирутом в 1970 году как язык со строгой типизацией и интуитивно понятным синтаксисом. В 80-х наиболее известной реализацией был компилятор Borland Turbo Pascal, в 90-х была заменена среда программирования Delphi, которая стала одной из лучших сред быстрого создания приложений.

Среда программирования Delphi представила ряд успешных объектно-ориентированных расширений Pascal, обновленный язык получил название Object Pascal.Начиная с Delphi 7, Delphi Object Pascal стал известен как Delphi. Следует отметить альтернативные реализации Object Pascal как многоплатформенный проект с открытым исходным кодом.

Обратите внимание, что Pascal ABC включает уроки, примеры программ и задания для изучения этого замечательного языка программирования.

Предустановленный пакет

Вы можете бесплатно скачать и скачать Pascal ABC по официальной ссылке под Windows XP, 7, 8, 10 легко и быстро. Программа Pascal ABS напишет вам любую программу бесплатно с вашим знанием языка.

— это специальный инструмент с открытым исходным кодом Language Pascal, к тому же он не должен платить разработчику ни копейки, так как он бесплатный. На таком популярном языке, как Паскаль, сейчас масса программ и обычно привлекаются студенты некоторых университетов. Плюсы этого языка — его простота и доступность, что позволит не только повысить квалификацию в некоторых случаях, но и заставит думать программиста, а не расчетами из раздела математики.
Те, кто занимается написанием программ на Pascal ABS — с легкостью смогут использовать Turbo Pascal и Delphi по отдельности и совмещая, создавая с помощью этой улучшенной программы. Один и тот же компилятор может использоваться в 32- и 64-битных системах, в которых возможны различные операции.


Скачать Pascal ABS с полной совместимостью с Delphi Ver. +7 И Barland Turbo от Паскаля такая же, седьмая версия. Внешний вид Документ, предоставленный, в отличие от устаревшей версии, предоставляется вам в виде стандартного текста.Если вы работали с Borland или Turbo Pascal, то некоторые сходства и пересечения вы обязательно обнаружите. Каждую дополнительную опцию стоит рассматривать отдельно. Программа отличается тем, что не требует многого от оператора, все переменные загружаются в регистры и отображаются там, реализованы оптимизатор кода, отладчик и даже ассемблер. Все это только для удобства использования всевозможных функций утилит и написания на нем новых программ.


Поскольку написание программ здесь осуществляется с помощью процедурных переменных, устройство очень удобно использовать его своими модулями.Он встроен во встроенную задачу, где устанавливаются задачи разного плана. Для учителя можно разработать задание, которое должны выполнять ученики.
В итоге — мы получаем хорошую основу для повышения навыков написания программного обеспечения, а с другой стороны, программы-помощника в проведении пар и заданий.


Стандартный
установщик
Бесплатно!
чек. Официальное распространение Pascal ABC чек.
закрыть. Тихая установка без диалоговых окон чек.
закрыть. Рекомендации по установке необходимых программ чек.
закрыть. Пакетная установка нескольких программ чек.

Загрузите Pascalabc.net + Microsoft .NET Framework v4.0 бесплатно. Загрузите последнюю версию среды разработки для своего компьютера с нашего сайта.

Паскаль ABC. — Современная многообещающая система программирования, которая объединила Паскаль и Miscrosoft.net в одну программу, включая функции одной и другой утилиты, что дало пользователям дополнительный набор функций бесплатно. Да, это бесплатно, поскольку среда программирования даже не условно бесплатна, она без Pro версий и других платных расширений.

В предоставленной среде программирования может выполняться разработка и «написание» специального программного обеспечения на основе Delphi (язык программирования). Программный пакет полностью поддерживает наиболее популярные и наиболее часто используемые специальные языки, включает их основные элементы, в том числе: модули, настраиваемые интерфейсы, специальные и обобщенные классы, операции перегрузки, исключения и т. Д.

Pascal ABS обеспечивает использование параллелизма, по крайней мере, для директивы OpenMP. Утилита имеет удобный и простой интерфейс, который способствует привыканию пользователя к рабочему пространству.Расположение кнопок и дополнительных функций установлено в логическом порядке для улучшения знаний в области программирования и параллельного обучения пользователей.

Что нового в приложении?

  1. Доступно максимально возможное количество элементов рефакторинга.
  2. Реализованы подсказки по точке или параметрам подпрограмм.
  3. Реализована подсветка ошибок в синтаксисе программы (выделение определенным цветом).
  4. Всплывающие подсказки появляются в том случае, если пользователь ошибается.
  5. Полная обработка ПО и кастомных комментариев.

Специально для высокой скорости написания программ на FreePascal и Delphi, компилирует оптимальный код для Microsoft. ПРИМЕЧАНИЕ: для использования необходимой базы данных и библиотек для разработки программ потребуется Pascal ABC, после чего он начнет работу программного обеспечения для своих собственных целей.

Pascal ABC — Объединение одновременно двух программ Pascal и Microsoft. Примечание. Полученная программа используется
программистами для написания собственных утилит, программного обеспечения, скриптов и прочего.

JPG «Data-Category =» «Data-Promo =» system https://ubar-pr4.ru/promo/bnr/download3..html «target =» _ blank «> скачать Pascal abc. нетто

Официальный дистрибутив
Стандартный
установщик
Бесплатно!
чек. Загрузить Pascal ABC.NET чек.
закрыть. Тихая установка без диалоговых окон чек.
закрыть. Рекомендации по установке необходимых программ чек.
закрыть. Пакетная установка нескольких программ чек.

Тех, кто знаком с языком программирования Object Pascal, вероятно, преследуют и что существует разновидность — Pascal ABC.СЕТЬ. Вы можете скачать ABC Pascal для Windows 10 и использовать этот язык, созданный для платформ операционной системы Microsoft.net. Программа включает в себя большое количество Важных компонентов:

  • Всевозможные модули, а также классы;
  • Функция перезагрузки операций;
  • Множество удобных интерфейсов;
  • Различные исключения;
  • Возможность строить «мусор».

Отличительной стороной программы можно назвать простое визуальное расположение окружения, которое способствует эффективному обучению работе с языком программирования.На своей простате софт даже превосходит почти идеальный.

Благодаря тому, что этот язык был интегрирован в систему Microsoft .NET, он дополнен и оснащен самыми разными базовыми библиотеками и базами данных. Они прекрасно сочетаются друг с другом и с другими языками, которые также работают на базе платформы .Net.

Скачать Pascal ABC для Windows 10 стоит и для тех, кто знаком с другим, похожим языком программирования — Delphi. Хотя по сути ваши языки похожи, они все же разные, и набор инструментов для программирования также разнообразен.

Помимо этого, следует отметить, что в последнюю версию разработчики внесли довольно большое количество полезных нововведений. Все это сделало программу еще более удобной и практичной в программировании.

Программа, обучающая программированию

Скачать Pascal для Windows 10 бесплатно могут даже те пользователи, которые относятся к новичкам в области программирования. Дело в том, что в программу встроено огромное количество модулей, направленных на изучение тех, кто не знаком со всеми функциями и возможностями этого языка программирования.Главное, чтобы вы установили раздачу на русском языке, иначе работать с ней будет не так комфортно.

Изначально язык программирования Паскаль был создан, чтобы школьники и студенты могли изучать программирование. Он довольно простой, но в то же время мощный — позволяет использовать рекурсию, получая объектно-ориентированное программирование.

В результате многие, кто его освоил, продолжали применять — в будущем появились такие мощные системы, как Borland Delphi, которые также использовали Паскаль.

Но для обучения школьников эта мощность была совершенно не нужна, а старые системы на базе DOS уже не соответствовали требованиям времени, работа в них приводила к формированию некорректных навыков. В результате появилась эта программа — вы можете скачать Pascal ABC с 2002 года, когда вышла его первая версия.

Данная система позволяет обучать школьников с нуля, начиная от концепции алгоритмов, переменных, циклов и ветвей. В то же время «продвинутые» студенты тоже найдут, как взять себя в руки — в этом им помогут специально созданные учебные модули:

  • Graphabc — создание растровой 2D графики, функционал не хуже, чем в Borland Delphi, но без использования объектов, что позволяет использовать его в школьной программе
  • Модули, такие как Таймер и Звуки, позволяют использовать звуки и обратный отсчет даже в программах без графической оболочки
  • Модуль
  • СОБЫТИЯ позволяет использовать простые события, а также без использования ООП
  • Контейнеры — Контейнерные классы этого модуля позволяют удобно работать с динамическими структурами данных
  • Векторная графика в abcobjects предназначена для изучения основ объектно-ориентированного программирования, само построение визуальных объектов предназначено только для учебных целей, но возможность создавать сложные программы с ее помощью составляет
  • VCL — это библиотека, содержащая визуальные компоненты, с ее помощью вы можете создавать формы приложений, начиная с главного окна и заканчивая диалогами.


Как видите, Pascal ABC можно бесплатно скачать в один клик, получилась очень удачная, простая, но в то же время мощная и гибкая программа. Более того, для обучения программированию есть встроенная комната задач — более тысячи задач от самых простых до сложных для работы с файлами и объектами.

Более того, для того, чтобы обучить задание, вы можете создать и добавить его самостоятельно, это довольно удобно для учителей информатики.Есть даже готовые обучающие инструменты для младших школьников — встроенные ящики исполнителей и робот, которые включены в школьную программу.

Кстати, если вы решили заняться установкой программного обеспечения, почему бы вам не скачать Alcohol 120 бесплатно? На мой взгляд, в этой программе должна быть каждая — с ее помощью можно имитировать наличие диска в DVD приводе. Очень часто онлайн-софт распространяется именно в виде образов дисков, поэтому без установки этой утилиты установить многие программы будет очень сложно.Скоро увидимся!

Abs, Cos, Exp, Ln, Odd, Round, Sin, Sqr, Sqrt, Trunc

PASCAL: Abs, Cos, Exp, Ln, Odd, Round, Sin, Sqr, Sqrt, Trunc

ОБЩИЕ ФУНКЦИИ
Язык Паскаль предоставляет ряд функций для обработки данных преобразование и расчеты. В следующем разделе представлены объяснение часто используемых функций,

  • ABS
    Функция ABSolute возвращает абсолютное значение целое или действительное число, например
     
          ABS (-21) возвращает 21
          АБС (-3.5) возвращает 3.5000000000E + 00
      
  • COS
    Функция COSine возвращает значение косинуса в радианах, аргумента, например,
     
          COS (0) возвращает 1.0
      
  • EXP
    Экспоненциальная функция вычисляет e в степени числа, например,
     
          EXP (10) возвращает e в степени 10
      

    В Паскале нет функции для вычисления такие выражения, как an, т.е.

          23 равно 2 * 2 * 2 = 8
     

    Рассчитываются по формуле

         ан = ехр (п * ln (а))
     
  • LN
    Функция логарифма вычисляет натуральный логарифм число больше нуля.
  • ODD
    Нечетная функция определяет, когда заданное число нечетное или четное, возвращение истины, если число нечетное, ложное когда это не так.
  • ROUND
    Функция round округляет свое число (аргумент) до ближайшее целое число. Если аргумент положительный
        округление в большую сторону для дробей, большей или равной 0,5.
        округление в меньшую сторону для дробей меньше 0,5
     

    Если число отрицательное

         округление в меньшую сторону (от нуля) для дробей> =.5
         округление вверх (в сторону нуля) для дробей
     
  • SIN
    Функция синуса возвращает синус своего аргумента, например,
     
          SIN (PI / 2) возвращает 1.0
      
  • SQR
    Функция square возвращает квадрат (т. Е. Аргумент умноженное на себя) предоставленного аргумента,
     
          SQR (2) возвращает 4
      
  • SQRT
    Эта функция возвращает {всегда возвращает вещественное число} квадрат корень аргумента, например,
     
          SQRT (4) возвращает 2.0000000000E + 00
      
  • TRUNC
    Эта функция возвращает всю часть (без десятичных знаков) действительного числа.
     
          TRUNC (4.87) возвращает 4
          TRUNC (-3.4) возвращает 3
      

ПРОГРАММА ЧЕТЫРНАДЦАТЬ
Учитывая следующий список заработной платы, хранящийся в массиве,

210,33 119,78 191,05 222,94

рассчитать общую разбивку требуемых монет (игнорировать долларов) на 50c, 20c, 10c, 5c, 2c и 1c.

Нажмите здесь, чтобы ответить


Авторские права Б. Браун / П. Генри, 1988–1999. Все права защищены.

Образцы

Операторы + =, * =

 var a: integer: = 1;
начинать
 а + = 2;
 а * = 2;
конец.

Переменные локального блока

 начало
  var n: = 10000;
  var s: = 0,0;
  для var i: = от 1 до n сделать
  для var j: = от 1 до n сделать
    s + = 1,0 / (i * j);
  Println (Миллисекунды);
конец.

Использование foreach

 начало
  var arr: = Arr (1,2,3,4);
  foreach var x в arr do
    Печать (х);
конец.

BigInteger

 начало
  var p: BigInteger: = 1;
  для var i: = от 2 до 100 сделать
    р * = я;
  Println ('100! =', Р);
конец.

Краткие функции

 функция CircleLen (r: real): = 2 * Pi * r;

начинать
  Println (CircleLen (2.3));
конец.

Создание динамических массивов с помощью функции Arr

 начало
  var a: = Arr (2,5,3,1,9,7);
  Сорт (а);
  а.Println;
  Реверс (а);
  a.Println;
конец. 

Динамические матрицы

 функция Transpose (a: массив [,] целых чисел): массив [,] целых чисел;
начинать
  var m: = Length (a, 0);
  var n: = Длина (a, 1);
  Результат: = новое целое число [n, m];
  для var i: = от 0 до n-1 сделать
  для var j: = от 0 до m-1 делать
    Результат [i, j]: = a [j, i]
конец;

начинать
  var a: = MatrixRandom (3,4);
  a.Println;
  var b: = транспонировать (a);
  a.Println;
конец. 

Словари

 начало
  var Capital: = Dict (('Россия', 'Москва'), ('Германия', 'Берлин'), ('Франция', 'Париж'), ('Италия', 'Ром'));
  Println (Капитал ['Франция'], Капитал ['Германия']);
конец.

Простые файловые операции

 var
  f: текст;
  s: строка;
начинать
  Assign (f, '13_Files1.pas');
  Сброс (f);
  в то время как не eof (f) делать
  начинать
    readln (ж, с);
    Writeln (s);
  конец;
  Закрыть (f);
конец.

или

 начало
  var f: = OpenRead ('13_Files2.pas');
  в то время как не f.Eof делать
  начинать
    var s: = f.ReadlnString;
    Writeln (s);
  конец;
  е. закрыть;
конец.

или

 начало
  foreach var s в ReadLines ('13_Files4.pas') делать
    Writeln (s);
конец.

или

 начало
  ReadLines ('13_Files4.pas'). Println (Новая строка)
конец. 

Чертеж синуса с лямбдой

 использует GraphABC;

начинать
  Нарисуйте (x-> x * sin (x));
конец.

Моделирование Монте-Карло

 начало
  var n: = 10000000;
  var pp: = Range (1, n)
    .Select (x-> Rec (Случайный (), Случайный ()))
    .Где (p-> sqr (p.Item1) + sqr (p.Item2) <1)
    .Count / n * 4;
  Печать (пп);
конец.

Quicksort с LINQ

 функция QuickSort (a: последовательность целых чисел): последовательность целых чисел: = a.Счетчик = 0? a: QuickSort (a.Skip (1) .Where (x-> x <= a.First ())) + a.First () + QuickSort (a.Skip (1) .Where (x-> x> a .Первый()));

начинать
  var a: = ArrRandom (20);
  a.Println;
  QuickSort (a) .Println;
конец.

% PDF-1.2 % 1270 0 объект > эндобдж xref 1270 93 0000000016 00000 н. 0000002215 00000 н. 0000002676 00000 н. 0000002964 00000 н. 0000003525 00000 н. 0000003549 00000 н. 0000005086 00000 н. 0000005110 00000 н. 0000006509 00000 н. 0000007603 00000 н. 0000007875 00000 п. 0000007899 00000 н. 0000009331 00000 п. 0000009355 00000 н. 0000010811 00000 п. 0000010835 00000 п. 0000012340 00000 п. 0000012364 00000 п. 0000013766 00000 п. 0000013790 00000 п. 0000015255 00000 п. 0000015279 00000 н. 0000016744 00000 п. 0000016787 00000 п. 0000016809 00000 п. 0000017092 00000 п. 0000017114 00000 п. 0000017397 00000 п. 0000017422 00000 п. 0000031931 00000 п. 0000031954 00000 п. 0000033105 00000 п. 0000033127 00000 п. 0000033410 00000 п. 0000033432 00000 п. 0000033715 00000 п. 0000033738 00000 п. 0000034966 00000 п. 0000034989 00000 п. 0000036211 00000 п. 0000036235 00000 п. 0000037676 00000 п. 0000037699 00000 н. 0000038432 00000 п. 0000038455 00000 п. 0000039256 00000 п. 0000039278 00000 п. 0000039562 00000 п. 0000039584 00000 п. 0000039868 00000 п. 0000039891 00000 п. 0000040651 00000 п. 0000040674 00000 п. 0000041524 00000 п. 0000041546 00000 п. 0000041830 00000 п. 0000041852 00000 п. 0000042136 00000 п. 0000042161 00000 п. 0000053078 00000 п. 0000053102 00000 п. 0000058403 00000 п. 0000058427 00000 н. 0000062792 00000 п. 0000062816 00000 п. 0000066672 00000 п. 0000066696 00000 п. 0000069422 00000 п. 0000069446 00000 п. 0000072443 00000 п. 0000072467 00000 п. 0000075188 00000 п. 0000075212 00000 п. 0000078886 00000 п. 0000078910 00000 п. 0000082720 00000 н. 0000082744 00000 н. 0000085421 00000 п. 0000085445 00000 п. 0000089316 00000 п. 0000089340 00000 п. 0000093967 00000 п. 0000093991 00000 п. 0000097899 00000 н. 0000097923 00000 п. 0000101602 00000 н. 0000101625 00000 н. 0000102760 00000 н. 0000102782 00000 н. 0000103124 00000 п. 0000103147 00000 п. 0000002274 00000 н. 0000002653 00000 п. трейлер ] >> startxref 0 %% EOF 1271 0 объект > эндобдж 1361 0 объект > ручей H

Произошла ошибка при настройке пользовательского файла cookie

Этот сайт использует файлы cookie для повышения производительности.Если ваш браузер не принимает файлы cookie, вы не можете просматривать этот сайт.


Настройка вашего браузера для приема файлов cookie

Существует множество причин, по которым cookie не может быть установлен правильно. Ниже приведены наиболее частые причины:

  • В вашем браузере отключены файлы cookie. Вам необходимо сбросить настройки своего браузера, чтобы он принимал файлы cookie, или чтобы спросить вас, хотите ли вы принимать файлы cookie.
  • Ваш браузер спрашивает вас, хотите ли вы принимать файлы cookie, и вы отказались.Чтобы принять файлы cookie с этого сайта, нажмите кнопку «Назад» и примите файлы cookie.
  • Ваш браузер не поддерживает файлы cookie. Если вы подозреваете это, попробуйте другой браузер.
  • Дата на вашем компьютере в прошлом. Если часы вашего компьютера показывают дату до 1 января 1970 г., браузер автоматически забудет файл cookie. Чтобы исправить это, установите правильное время и дату на своем компьютере.
  • Вы установили приложение, которое отслеживает или блокирует установку файлов cookie.Вы должны отключить приложение при входе в систему или проконсультироваться с системным администратором.

Почему этому сайту требуются файлы cookie?

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


Что сохраняется в файле cookie?

Этот сайт не хранит ничего, кроме автоматически сгенерированного идентификатора сеанса в cookie; никакая другая информация не фиксируется.

Как правило, в cookie-файлах может храниться только информация, которую вы предоставляете, или выбор, который вы делаете при посещении веб-сайта. Например, сайт не может определить ваше имя электронной почты, пока вы не введете его. Разрешение веб-сайту создавать файлы cookie не дает этому или любому другому сайту доступа к остальной части вашего компьютера, и только сайт, который создал файл cookie, может его прочитать.

Шесть практических правил для Rexx

РЕФЕРАТ

Дата: пн, 7 июня 1993 г., 02:55:41 по Гринвичу
Раджа Тиагараджан / sthiagar @ bronze.ucs.indiana.edu / 6-6-93
(Авторские права (c) 1993, Raja Thiagarajan. Этот файл может быть скопирован для любых НЕкоммерческих цель, если она остается неизменной.)

Поскольку существует множество книг, статей и даже файлов справки OS / 2, которые учат REXX, зачем нам эта статья? Потому что эти книги, статьи и т. Д. В основном нацелен на людей, которые никогда не программировали раньше. Таким образом, у них есть два основных недостатки. Во-первых, они останавливаются на вещах, которые программисты уже знают, например на том, что переменная есть.Во-вторых, они не предупреждают потенциальных программистов REXX о том, что некоторые вещи * разные * в REXX, и некоторые из «привычек», которые вы можете перенести из других языков может доставить вам неприятности.

В этой статье приведены шесть практических правил, которые помогут вам начать REXX, если вы уже знаете C или Pascal (или, на самом деле, любого из потомков Algol).

РЕФЕРАТ МСЖД

Обратите внимание, что в этом документе предполагается, что вы используете реализацию OS / 2 Rexx. Большинство из приведенных здесь советов столь же актуальны при использовании Регины на Рабочие станции ACCC UNIX.Для получения дополнительной информации о Rexx и другом программировании языки, доступные через ACCC, см. Программирование Языки в ACCC .
ШЕСТЬ ПРАВИЛ БОЛЬШЕГО ПАЛЬЦА ДЛЯ REXX
- ЗАПУСКАТЬ КАЖДУЮ ПРОГРАММУ REXX С КОММЕНТАРИИ!
Вы это уже знаете.У меня не должно быть причин повторять это ... за исключением того, что это легко сделать ошибку, и это связано с важное понятие, к которому мы дойдем согласно второму правилу.
Вот "привет, мир" на языке REXX:
/ * hello.cmd - программа для приветствия * /
скажи "Привет, мир"
 

Введите эти две строки в своем любимом редакторе, сохраните результат как HELLO.CMD, и введите HELLO в командной строке OS / 2. Ваш компьютер должен ответить «Привет, мир».
В OS / 2 от вас * требуется * запускать * каждую * программу REXX с комментариями.И я * действительно * имею в виду * начало *; если в перед этим комментарием - ну почему бы вам не попробовать это сейчас? Вставить пробел в перед комментарием и попробуйте снова запустить программу. Вы увидите большой жир сообщение об ошибке. Итак: ЗАПУСКАЙТЕ КАЖДУЮ ПРОГРАММУ REXX С КОММЕНТАРИИ.

(Кстати, соглашения для комментариев в REXX просты. Каждый комментарий начинается с «/ *» и заканчивается «* /». Комментарии могут быть распределены по нескольким линий. В отличие от ANSI C или Pascal, REXX позволяет вам вкладывать комментарии, поэтому * много * проще закомментировать куски кода для тестирования.)

- БУДЬТЕ ОСТОРОЖНЫ ПРИ ИСПОЛЬЗОВАНИИ ПРОСТРАНСТВ В ОПРЕДЕЛЕННЫХ МЕСТАХ!
Вы уже попробовали это в предыдущем правиле: если вы поставите пробел перед вступительным комментарием, ваша программа взорвется. Но есть еще два места, где значение пространств кого-то сбивает с толку кто привык программировать на C или Паскале.В REXX все в конечном итоге строка. Если вы хотите объединить две строки, вы можете сделать поэтому, поместив между ними явный оператор строкового упора ("||"). Вы можете * также * объединить их, просто написав один за другим (это известно как «подразумеваемый упор»). Пожалуйста, введите и запустите следующая программа.
/ * hello2.cmd - Еще одна программа, чтобы поздороваться * /
приветствие = "Привет"
скажи приветствие "мир"
скажи приветствие "мир"
 
Вы должны увидеть "Hello world" в одной строке, а затем "Helloworld" на вторая строка.Ваше первое предположение может заключаться в том, что СКАЗАТЬ в REXX похоже на PRINTF на C или WRITELN на Паскале; что он может принимать произвольное число аргументов. Но ты ошибаешься. SAY может сопровождаться только * single * выражение: отображаемая строка. Однако, поскольку приветствие содержит строку, а "мир" - строку, и поскольку вы написанные один за другим, REXX рассматривает это как подразумеваемый абатмент. Тот есть, REXX объединяет две строки, чтобы сформировать * одну * строку, которую он затем переходит в SAY. Таким образом, третья строка в приведенной выше программе - эквивалентно
скажи "привет" "мир"
 
или
скажи "Привет, мир"
 
С другой стороны, последняя строка программы эквивалентна
скажи "Привет" "мир"
 
(В REXX строки могут быть разделены одинарными или двойными кавычками.Как и в Паскале, вы можете «удвоить» разделитель, чтобы он отображался в строковый литерал. Если бы я не поменял местами разделители, строка имела бы был тем, который отображается как "Hello" world.) Поскольку между строки, REXX упирается в строки * без * вставки пробела между их. Таким образом, эта строка эквивалентна
скажи "Helloworld"
 

и отображает то, что вы видели при запуске программы.

Возвращаясь к третьей строке: вы ввели ее с одним пробелом между переменная "приветствие" и строка "мир".Что, если бы вы использовали * два * пробела? Попробуй это сейчас. Отредактируйте программу и перезапустите ее.

Удивлен? В REXX более одного пробела всегда обрабатываются так же, как один пробел (кроме строковых литералов). Вот почему вы можете написать

если приветствие = 'привет', тогда
  сказать "Привет"
 
вместо того, чтобы всегда писать
если приветствие = 'привет', тогда
сказать "Привет"
 

Некоторые из вас начинают зевать. Таким образом, пробелы важны, когда вы делаете строку конкатенация; Ну и что? Как часто вы * выполняете * конкатенацию строк? Ну в REXX, ты делаешь это * много *.В конце концов, это самый простой способ вывести больше, чем по одному, используя "предпочтительную" инструкцию вывода! Но есть серьезное значение здесь, которое вызовет у вас бесконечное горе, пока вы не поймете это из. Это * только * проблема для людей, которые выучили другой язык, например C или Паскаль и те, кто ожидают, что REXX будут работать одинаково. Выше я написал "Ты может * также * объединить [строки], просто написав одну за другой. "Вы видите проблему?

Нет? Введите следующую программу:

/ * func.cmd - программа для демонстрации "проблемы"
   с вызовами функций * /
скажите абс (-3) "* не *" абс (-3)
 

Прежде чем запускать его, попробуйте предсказать, что он будет отображать. Теперь запустите его.

Ну, как бы вы ни предсказывали, вероятно, это был не

3 * не * ABS -3
 

, что у вас действительно есть. Что произошло?

"Проблема" вот в чем. Когда вы пишете abs (-3), REXX интерпретирует это как вызов в функцию абсолютного значения с -3 в качестве аргумента. Однако, когда вы положите пробел перед круглыми скобками, REXX интерпретирует это как неявный упор; предполагается, что вы хотите объединить строковое значение переменной 'abs' со строкой "-3".(Значение по умолчанию «abs» - «ABS», так как по умолчанию значение * каждой * переменной REXX - это строка, состоящая из ее имени, записанного в верхний регистр. Кстати, как и Pascal, но в отличие от C, REXX игнорирует верхний / нижний регистр различие вне строковых литералов.) Конечно, поскольку между элементы, вы получите пробел между «ABS» и «-3».

Некоторые из вас в ужасе отшатнутся от этого: Как посмели REXX потребовать, чтобы вы * не могли * ставьте пробел между именем функции и ее аргументами! Со своей стороны, я могу только сказать, что это разумно, когда к этому привыкнешь.И если бы REXX был первый язык, который вы выучили, в противном случае это могло бы показаться странным. Так что улыбайтесь и терпите это, и БУДЬТЕ ОСТОРОЖНЫ ПРИ ИСПОЛЬЗОВАНИИ ПРОСТРАНСТВ В ОПРЕДЕЛЕННЫХ МЕСТАХ.

Важное отступление: эти первые два практических правила поднимают очень важные разница между REXX и Паскалем, C или многими другими языками программирования. А именно: REXX не совсем язык свободной формы . Иногда, вы должны быть осторожны с тем, где вы помещаете пробелы в REXX.А иногда ты нужно быть осторожным с тем, где вы разделяете линии. Например, в то время как Паскаль или У C не возникнет проблем, если вы поместите аргументы в процедуру в другую строку, отличную от название процедуры, REXX * не * щадящий. Используя SAY в качестве примера,

сказать
"Привет мир"
 
* не * то же самое, что
скажи "Привет, мир"
 
Последний отображает «Hello world»; первый отображает пустую строку и затем взрывается, когда пытается выполнить «Hello world» как команду OS / 2.Если вам нужно продолжить предложение через разрыв строки, используйте запятую. В запятая будет заменена пробелом, а затем REXX продолжит работу, как если бы символ конца строки не существует. Так, например,
сказать ,
"Привет мир"
 

* отобразит * «Hello world».

Достаточно отступить и перейти к третьему эмпирическому правилу -

.
- НЕ ПУТЕШЕСТВУЙТЕ ПОДПРОЧНЫЕ ВЫЗОВЫ С ФУНКЦИОНАЛЬНЫМИ ВЫЗОВАМИ!
В C или Pascal вы используете практически один и тот же синтаксис, независимо от того, используете ли вы вызов функции (т.е. подпрограммы, возвращающей значение) или процедуры (процедура, которая * не * возвращает значение).Фактически, C размывает различие, позволяя вам "игнорировать" возвращаемое значение функции, если ты хочешь. Но в REXX способ вызова подпрограммы (то есть в REXX термин для процедуры) * полностью * отличается от того, как вы называете функция. Вот пример вызова функции в REXX:
длина = макс (x_coord, y_coord)
 
а вот пример вызова подпрограммы:
вызов charout myFile, dist
 

В REXX функция вызывается путем указания ее имени, за которым следует * непосредственно * левая скобка (пробелы запрещены! Помните второе правило!), за которым следует ноль или более аргументов (разделенных запятыми), а затем правая скобка.

Напротив, подпрограмма вызывается с использованием ключевого слова CALL, за которым следует имя подпрограммы, за которым следует список из нуля или более аргументов, разделенных запятыми. Скобки не используются.

(Отступление: я единственный, кто заметил, что последняя версия Visual Microsoft Базовые продукты, кажется, переняли это различие * и * синтаксис от REXX?)

Сказав все это, позвольте мне признаться, что вы * можете * вызывать функции, как если бы они были подпрограммы.В этом случае возвращаемое значение попадает в специальную переменную РЕЗУЛЬТАТ. Например:

/ * subr.cmd - вызывает функцию как подпрограмму * /
вызов абс -3
скажите "abs (-3) is" результат
 
отобразит «абс (-3) равно 3». Вызов подпрограммы, как если бы это был функция - это упражнение в тщетности. Таким образом, * не * делайте что-то вроде
charout (myFile, "foo") / * НЕПРАВИЛЬНО! * /
 

И всегда помните: НЕ ПУТЕШЕСТВУЙТЕ ПОДПРОЧНЫЕ ЗВОНКИ С ФУНКЦИОНАЛЬНЫМИ ЗВОНКАМИ!

Переходим к следующему практическому правилу, а именно:

- ЗАПРЕЩАЕТСЯ ОБРАЩАТЬСЯ С СОСТАВНЫМИ ПЕРЕМЕННЫМИ REXX КАК Массивы!
В Паскале и C вы объявляете массивы и ссылаетесь на их элементы, используя скобки ("[]").В REXX вы * не * объявляете массивы для двух хороших причины: во-первых, вы не можете объявлять переменные, а во-вторых, REXX не * иметь * массивы. Хорошо, если серьезно: составные переменные REXX могут * часто * использовать как массивы. Например, попробуйте следующую программу:
/ * comp1.cmd - первая программа для проверки составных переменных * /
сделать j = от 1 до 3
   квадрат. j = j * j
конец j
 
do i = от 1 до 3 скажите "квадрат". i "это" квадрат. i конец я
Вы получите «квадрат 1 равен 1», «квадрат 2 равен 4» и «квадрат 3 равен 9». В в этом случае мы могли бы рассматривать составную квадратную переменную, как если бы она была множество.Но в других случаях мы не можем. Например, попробуйте удалить последние три строки в приведенной выше программе и замените их на следующий:
сделать я = от 2 до 4
   скажите "квадрат". i-1 "это" квадрат. i-1
конец я
 

Если точки в REXX работали как скобки в C или Pascal, эта программа должна отображать то же самое, что и раньше, не так ли? Ну попробуйте.

Вы получили «квадрат 1 равен 3», «квадрат 2 равен 8», а затем ошибка «Плохая арифметика». сообщение. Что произошло? Ну, "square.i-1" * не * означает "вычислить i-1 и затем укажите ссылку на этот элемент квадратного массива ".Это скорее означает "вычислить i, укажите ссылку на этот элемент квадратного массива и вычтите из него 1. "( "плохая арифметика" возникает, когда вы пытаетесь вычесть 1 из значения square.4, что есть "КВАДРАТ.4".) На самом деле, это даже не значит, потому что REXX не * иметь * массивы - о, я уже говорил это раньше.

"Ага!" ты говоришь. "Есть простой способ исправить это! Мы можем использовать круглые скобки и написать

сделать я = от 2 до 4
   скажите "квадрат". i-1 "это" квадрат. (i-1)
конец я
 

и * это * будет работать! "Угу.Попробуй это сейчас.

На этот раз программа сразу взорвется. Проблема в том, что "квадрат. (I-1)" означает «Вызвать функцию с именем 'square'. с аргументом 'i-1' ". Поскольку ты не объявили функцию с именем 'square.', REXX жалуется, что "Routine не был найден ".

(Подождите! Не * не * говорите мне, что мы можем исправить это, поставив пробел перед круглых скобок! Это разбило бы мне сердце, узнав, что ты проспал второе правило. 😉

Как мы можем это исправить? Как мы можем легко ссылаться на элемент массива в REXX используя произвольное выражение? Достаточно просто: мы * не можем *.Если вы хотите сослаться на составная переменная, использующая произвольное выражение, вы должны установить переменную к этому выражению, а затем используйте переменную. Так, например, заменив те три линии с

сделать я = от 2 до 4
   j = я - 1
   скажите "квадрат". j "квадрат".
конец я
 

сделает свое дело.

В случае, если некоторые из вас могут * все еще * надеяться, что вы можете думать о составные переменные в REXX как массивы в C или Pascal, давайте попробуем запустить другой программа.Введите и запустите следующее:

/ * comp2.cmd - 2-я программа для проверки составных переменных * /
j = 3
к = 4
ary.j.k = "один"
м = 34/10
скажем, ary.3.4 "то же самое, что" ary.j.k "то же самое, что" ary.m
 

Если вы хотите убедить меня, что составные переменные REXX - это то же самое, что массивы на C или Pascal, вам нужно будет объяснить, как работает приведенная выше программа. Любой волонтеры?

* * *
На самом деле, тот факт, что составные переменные REXX - это не то же самое, что массивы, является отличная * возможность *, а не трудность.Попробуйте программу ниже:

/ * comp3.cmd - 3-е использование составных переменных * /
считать. = 0
textWords = ''
скажите "Введите строку текста ниже:"
анализировать верхний текст строки
сделать я = 1 для слов (textLine)
   ш = слово (текстовая строка, я)
   count.w = count.w + 1
   если count.w = 1, то
      textWords = textWords w
конец я
 
do i = 1 to words (textWords) w = слово (текстовые слова, я) скажите: "Вы использовали слово" w "" count.w 'time (s) ". конец я

Уф! Хорошо, теперь запустим эту программу. Enter "Быстрая коричневая лисица перепрыгивает через Лентяй".Ваш компьютер сообщит вам каждое слово, появившееся в строке текст и сколько раз появлялось каждое слово. Что касается * этого * практического правила идет, в этой программе нужно отметить два важных момента:

Сначала идет строка «count. = 0». Это показывает использование переменной * stem * в REXX. Когда вы инициализируете основную переменную, * любая * переменная, начинающаяся с этот стержень установлен на это значение. Итак, после этой строки переменные count., Count.1, count.57, count.foo и count.все дракулы имеют нулевое значение. (Вас также может использовать инструкцию DROP для переменной основы, чтобы вернуть все эти составные переменные в исходное состояние.)

Секунда: Грубо говоря, мы меняем счет. в «массив». Но что есть индексы? Функция REXX "words" возвращает количество разделенных пробелами слов в строке, а "word (str, j)" возвращает j-е такое слово в строке. Так w - это слово, а индексы на счетчике - это фактические слова, которые появляются в строка! Так, например, посчитайте."the" содержит количество раз, которое "the" появляется в строке - для нашего пробного запуска это было 2.

Поэтому важно НЕ ОБРАБОТАТЬ СОСТАВНЫЕ ПЕРЕМЕННЫЕ REXX КАК АРАЙМЫ, потому что это может доставить вам неприятности, и поскольку вы упустите шанс написать что-нибудь * очень * мощные и гибкие программы.
* * *

- СДЕЛАЙТЕ ВНЕШНЮЮ ОЧЕРЕДЬ ВНЕШНИХ ДАННЫХ!
Войдите в следующую программу:
/* скажи привет.cmd - программа для приветствия * /
скажите "Пожалуйста, введите ваше имя ниже:"
разобрать имя пулла
если name = "" то
   name = "Незнакомец"
скажи «Привет, имя».
 

и запустите его, указав свое имя. Ваш компьютер поздоровается с вами. Хорошо, это не очень потрясающе. Но хочу обратить ваше внимание на третий строка программы: "синтаксический анализ имени пулла". Это строка, которая принимает ввод с клавиатуры. * Однако * это не его «основное» использование. Инструкция PARSE PULL удаляет строку из очереди внешних данных, возвращаясь к стандартному вводу только если очередь пуста.

Чтобы продемонстрировать это, введите и запустите следующую программу:

/ * push2.cmd - программа для помещения элемента во внешнюю очередь данных * /
толкать "Жан-Люк"
 

и запустите его. Что произошло?

Ладно, ничего не произошло. Получите каталог, очистите экран и сделайте что-нибудь другие домашние дела. * Теперь * введите "сайхи" в командной строке.

Если * это * вас не впечатлит, ничего не впечатлит. Внешняя очередь данных REXX может использоваться для связи между удаленными программами, и на него не влияют любые промежуточные программы, не относящиеся к REXX.Это также полезно * внутри * программы; один подпрограмма может помещать во внешнюю очередь данных столько, сколько захочет, а другая подпрограмма может вернуть его с помощью PARSE PULL.

Вы можете поместить вещи во внешнюю очередь данных, используя PUSH или QUEUE. PUSH ставит их в начале очереди, а QUEUE помещает их в конец. (То есть НАЖАТЬ обрабатывает очередь как стек LIFO, а QUEUE рассматривает ее как очередь FIFO.) Вы снимать элементы с начала очереди с помощью PARSE PULL.Наконец, вы используете функция REXX ОЧЕРЕДИ, чтобы найти количество элементов, которые находятся во внешнем очередь данных. Итак, один из быстрых способов очистить очередь -

.
/ * flush.cmd - Программа для очистки внешней очереди данных * /
сделать в очереди ()
   анализировать манекен
конец
 

(Если вы хотите увидеть, что промываете, вставьте строку «скажи пустышку» после синтаксического анализа оттянутой строки.) К настоящему времени я надеюсь, что я убедил вас СДЕЛАТЬ БОЛЬШИНСТВО ОЧЕРЕДЬ ВНЕШНИХ ДАННЫХ.

Хорошо, время для шестого и последнего практического правила:

- ИСПОЛЬЗУЙТЕ ШАБЛОНЫ ПАРСА!
Введите эту примерную программу:
/ * temp1.cmd - первая программа для использования шаблона * /
разобрать arg i j k
скажите 'i' i ', j' j 'и k' k '
 
и запустите его, введя
temp1 Альфа Браво Чарли Дельта
 
в приглашении OS / 2. Ваш компьютер ответит
i - это «Альфа», j - «Браво», а k - «Чарли Дельта».
 

Разберем вторую строку подробнее. Когда OS / 2 вызывает эту программу, все после "temp1" в командной строке будет упакован в строку. ПАРС Инструкция ARG используется для «разделения» этой строки и помещения ее частей в указанные вами переменные.В этом случае вы использовали шаблон синтаксического анализа "i j k", что означает поместить первое слово из строки аргумента в i, поместить второе слово в j, а остальное - в k. Эти слова разделяются пробелами. отбрасывается, хотя любые завершающие пробелы * сохраняются и помещаются в последнюю переменную. (Как и в comp3.cmd, «слово» - это любая последовательность непробельных символов, разделенных на один или несколько пробелов.) Если в этой программе передается более трех слов (как в нашем примере) все дополнительные функции становятся частью k.Если * меньше * трех слов заданы, то "лишние" переменные устанавливаются в пустую строку. Попробуйте войти "temp1 hello world", чтобы увидеть последнее правило в действии.

Если вы программист на C, вы уже можете убедиться в удобстве синтаксического анализа. шаблоны поверх argc и argv []; конечно приятно, что аргументы идут в переменные, * которые вы * хотите, без необходимости делать много вызовов strcpy. Но ждать, есть больше! Во-первых, PARSE ARG - это * инструкция *, а не декларация.Добавьте следующие две строки в конец temp1.cmd:

разобрать аргумент m
скажи "м"
 

и перезапустите его с "temp1 Alfa Bravo Charlie Delta". Вы получите такие же результаты как указано выше, * и * компьютер также сообщит вам, что это "Alfa Bravo Charlie". Дельта "". Итак, если вы "передумаете" о том, какие значения должны быть куда, или если вы хотите использовать значения по-разному, вы можете сделать это легко.

Но подождите, это еще не все! Предположим, вас интересуют только первые и третьи слова, данные вашей программе.Вы можете использовать точку в качестве заполнителя в шаблоне. Добавьте следующие строки в temp1:

разобрать аргумент w1. w3.
скажем, 'w1 - это «w1», а w3 - это «w3'» '
 

Верхняя строка означает: «Поместите первое слово в w1, отбросьте второе слово, положите третье слово в w3 и отбросьте остальную часть строки. "Вы должны быть в состоянии чтобы легко предсказать, что произойдет, когда вы войдете в "temp1 Alfa Bravo Charlie Дельта ". Попробуйте, чтобы проверить, правы ли вы.

Если * этого * недостаточно, вы также можете использовать номера столбцов в шаблонах синтаксического анализа.Попробуйте добавить эти строки в свой (теперь довольно большой!) Temp1.cmd:

синтаксический анализ аргумента c1 5 c5 10
скажем, "c1 равно" c1 ", а c5 равно" c5 "" "
 

и запустите его через "temp1 Alfa Bravo Charlie Delta". (Обратите внимание на написание «Альфа».) Вам скажут, что c1 - это «Альфа», а c5 - «Брав». Эта новая линейка PARSE ARG означает "Поместите символы из столбцов 1-4 в переменную c1, поместите символы в столбцах 5-9 в переменную c5 и отбросить символы из столбца 10 на (если есть). "Столбец 1 - это первый символ после пробела, который следует за ним. название вашей программы.Попробуйте предсказать, что произойдет, если вы добавите дополнительный пробел перед словом "Alfa" при выполнении temp1 с теми же аргументами еще раз и попробуйте проверить, верен ли ваш прогноз.

(Кстати, вы также можете использовать «паттерны относительного позиционирования»; например, в строке PARSE ARG можно было бы написать «+5» вместо «10».)

Мы исчерпали возможности синтаксического шаблона? НЕТ! Однако я просто покажу еще один пример. Я уверен, что вам надоел temp1, так что давайте попробуем новый программа, а именно:

/ * vcopy.cmd - команда подробного копирования * /
проанализировать верхний аргумент "FROM:" srcFile "TO:" destFile
"копировать" srcFile destFile
 
Введите эту программу и сохраните ее как vcopy.cmd. (Обратите внимание, что мы добавили новое ключевое слово, «верхний». Это ключевое слово преобразует все в прописными буквами, поэтому программа будет работать независимо от комбинации прописных букв. или строчные буквы наших пользователей). Теперь запустите его, введя
скопировать из: temp1.cmd в: boring.cmd
 
OS / 2 скопирует файл temp1.cmd в boring.cmd. (Ставим копию OS / 2 заключена в кавычки, чтобы REXX не принял ее за имя переменной.) приятно то, что следующая команда даст такие же результаты:
vcopy это игнорируется из: temp1.cmd в: boring.cmd
 

Подводя итог, вы можете использовать строковые литералы в шаблоне синтаксического анализа, и REXX будет проделайте всю тяжелую работу по сопоставлению аргументов с вашим шаблоном. Ясно, что ты следует ИСПОЛЬЗОВАТЬ ШАБЛОНЫ ПАРАМЕТРОВ, потому что они значительно облегчат вашу работу.

(Вот упражнение для читателя: измените vcopy.cmd так, чтобы пользователь вводил более одного слова после "FROM:" или "TO:", лишние слова игнорируются.Контрольная работа ваша измененная программа, введя

v скопируйте из: temp1.cmd через OS / 2 в: boring.cmd наконец
 

и увидев, что он * все еще * копирует temp1.cmd в boring.cmd. Подсказка: вам нужно только добавить два символа!)

КУДА ПОЕХАТЬ ОТ ЗДЕСЬ

Если вы серьезно относитесь к REXX, я настоятельно рекомендую вам купить Майкла Ф.Cowlishaw's Язык REXX. TRL - это стандартная книга, определяющая REXX; это как "K&R" для C. Мне было приятно читать эту книгу, потому что Коулишоу многое объясняет * почему * за особенностями REXX, и потому что он хорошо разбирается в юмор, который он * никогда * не использует, чтобы подавить другие компьютерные языки (или людей кто в них программирует). Моя единственная претензия к книге - это цена; делает Прентис-Холл * действительно * нужно брать 38 долларов за 200-страничную книгу в мягкой обложке?

Полное название: Язык REXX: практический подход к программированию, Второе издание .Он публикуется издательством Prentice Hall, а номер ISBN - 0-13-780651-5.

Другая книга, которую я нашел весьма полезной, - это «Программирование в REXX » Чарльза Дэйни, опубликовано McGraw-Hill, Inc. и с ISBN 0-07-015305-1. Хотя не так кратко (и иногда не так ясно), как TRL, он предоставляет * много * интересных примеров программ и подробное обсуждение различных советов и приемов REXX, позволяющих сэкономить время. я действительно понравилось обсуждение написания фильтров в REXX (стр. 187).Книга Дэйни составляет 44,95 доллара США.

Есть несколько групп новостей и списков рассылки, которые содержат много полезной информации. Если у вас есть доступ в Интернет, я настоятельно рекомендую вам проверить Группа новостей comp.lang.rexx. Люди на c.l.r - одни из самых дружелюбных, которых я «встретились» в Интернете. По вопросам, относящимся к OS / 2 REXX, также стоит прочитать comp.os.os2.misc и comp.os.os2.programmer. Если у вас есть доступ к BITNet, отметьте из списка обсуждения REXXLIST.

Наконец, комп.На lang.rexx есть FAQ, который ведет Эрик Жигерре. Вы можете получить это как файл rexxfaq в каталоге pub / ftp-сайта rexx.uwaterloo.ca. Этот FAQ включает в себя библиографию книг REXX, подробную информацию о Списки BITnet, ftp-сайты для информации, связанной с REXX, и многое другое.

Раджа Тиагараджан / [email protected] / 6-6-93

Daily Builds - ваш друг - Joel on Software

В 1982 году моя семья получила самый первый IBM-PC в Израиле.Мы действительно спустились на склад и ждали, пока наш компьютер будет доставлен из порта. Каким-то образом я убедил своего отца получить полностью укомплектованную версию с , двумя дискетами , памятью 128 КБ, а также точечно-матричным принтером (для быстрых черновиков) и принтером Brother Letter-Quality Daisy Wheel, что звучит так. точно как пулемет, когда он работает, только громче. Я думаю, у нас есть почти все доступные аксессуары: PC-DOS 1.0, техническое справочное руководство за 75 долларов с полным списком исходного кода BIOS, Macro Assembler и потрясающий монохромный дисплей IBM с полными 80 столбцами и ... строчными буквами! Все это стоило около 10 000 долларов, включая нелепые на тот момент израильские налоги на импорт.Экстравагантно!

Итак, «все» знали, что BASIC - это детский язык, который требует от вас писать код спагетти и превращает ваш мозг в сыр камамбер. Итак, мы выложили 600 долларов на IBM Pascal, который был выпущен на трех дискетах. Первый проход компилятора был на первой дискете, второй проход был на второй дискете, а компоновщик был на третьей дискете. Я написал простую программу «привет, мир» и скомпилировал ее. Общее время: 8 минут.

Хм. Это долго.Я написал командный файл для автоматизации процесса и сократил его до 7 1/2 минут. Лучше. Но когда я пытался писать длинные программы, такие как моя потрясающая версия Othello, которая всегда превосходила меня , я большую часть времени проводил в ожидании компиляции. «Ага, - сказал мне профессиональный программист, - мы обычно держали в офисе доску для приседаний и выполняли приседания, пока мы занимались компиляцией. После нескольких месяцев программирования у меня был потрясающий пресс ».

Однажды из Дании появилась изящная программа под названием Compas Pascal, которую Филипп Кан купил и переименовал в Borland Turbo Pascal.Turbo Pascal был своего рода шокирующим, поскольку он в основном делал все, что делал IBM Pascal, только он работал примерно в 33 КБ памяти , включая текстовый редактор . Это было просто поразительно. Еще более удивительным было то, что вы могли скомпилировать небольшую программу менее чем за одну секунду. Это как если бы компания, о которой вы никогда не слышали, представила клон Buick LeSabre, который мог разогнаться до 1000000 миль в час и ездить по миру на таком небольшом количестве бензина, что муравей мог бы его выпить, не заболевая.

Внезапно я стал намного продуктивнее .

Именно тогда я узнал о концепции цикла REP . REP расшифровывается как «Read, Eval, Print» и описывает, что интерпретатор Lisp зарабатывает на жизнь: он «читает» ваш ввод, оценивает его и печатает результат. Пример цикла REP показан ниже: я что-то печатаю, а интерпретатор lisp читает это, оценивает и распечатывает результат.

В чуть большем масштабе, когда вы пишете код, вы находитесь в макро-версии цикла REP, называемом циклом Edit-Compile-Test.Вы редактируете свой код, компилируете его, тестируете и смотрите, насколько хорошо он работает.

Важнейшее наблюдение здесь состоит в том, что вам нужно снова и снова проходить цикл, чтобы написать программу, и, следовательно, чем быстрее цикл Edit-Compile-Test, тем более продуктивным вы будете, вплоть до естественного предела мгновенные компиляции. Это формальная компьютерная причина, по которой программисты хотят действительно быстрого оборудования , а разработчики компиляторов сделают все возможное, чтобы получить сверхбыстрые циклы редактирования-компиляции-тестирования.Visual Basic делает это путем синтаксического анализа и лексирования каждой строки по мере ее ввода, так что окончательная компиляция может быть очень быстрой. Visual C ++ делает это, предоставляя инкрементные компиляции, предварительно скомпилированные заголовки и инкрементное связывание.

Но как только вы начинаете работать в более крупной команде с несколькими разработчиками и тестировщиками, вы снова сталкиваетесь с той же петлей, даже более крупной (это фрактал, чувак!). Тестировщик находит ошибку в коде и сообщает об ошибке. Программист исправляет ошибку. Сколько времени пройдет, прежде чем тестировщик получит исправленную версию кода? В некоторых организациях-разработчиках цикл «Отчет-Исправление-Повторное тестирование» может занять пару недель, что означает, что вся организация работает непродуктивно.Чтобы весь процесс разработки шел гладко, вам нужно сосредоточиться на ужесточении цикла Report-Fix-Retest.

Хороший способ сделать это - ежедневных сборок . Ежедневная сборка - это автоматическая, ежедневная, полная сборка всего дерева исходных текстов.

Автоматически , потому что вы настраиваете код для компиляции в фиксированное время каждый день, используя задания cron (в UNIX) или службу планировщика (в Windows).

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

Complete - вероятность , ваш код имеет несколько версий. Несколько языковых версий, несколько операционных систем или версия высокого / низкого уровня. Ежедневная сборка должна собрать всех из них. И ему необходимо создавать каждый файл с нуля, не полагаясь на возможно несовершенные возможности инкрементного перестроения компилятора.

Вот некоторые из многих преимуществ ежедневных сборок:

  1. Когда ошибка исправлена, тестировщики быстро получают новую версию и могут повторно протестировать, чтобы увидеть, действительно ли ошибка была исправлена.
  2. Разработчики могут чувствовать себя более уверенно, потому что внесенные ими изменения не повредят ни одной из 1024 выпускаемых версий системы, если на самом деле не будет иметь OS / 2 на своем столе для тестирования.
  3. Разработчики, которые проверяют свои изменения прямо перед запланированной ежедневной сборкой, знают, что они не собираются обманывать всех остальных, проверяя что-то, что «нарушает сборку», то есть что-то, из-за чего никто не сможет скомпилировать . Это эквивалент «синего экрана смерти» для всей команды программистов, и он часто случается, когда программист забывает добавить новый файл, который они создали, в репозиторий.Сборка работает нормально на их машинах , но когда кто-то другой проверяет, они получают ошибки компоновщика и останавливаются при выполнении какой-либо работы.
  4. Внешние группы, такие как маркетинг, сайты бета-клиентов и т. Д., Которым необходимо использовать незрелый продукт, могут выбрать сборку, которая, как известно, является достаточно стабильной, и продолжать ее использовать в течение некоторого времени.
  5. Поддерживая архив всех ежедневных сборок, когда вы обнаруживаете действительно странную новую ошибку и не знаете, что ее вызывает, вы можете использовать двоичный поиск в историческом архиве, чтобы точно определить, когда ошибка впервые появилась в коде.В сочетании с хорошим контролем версий вы, вероятно, сможете отследить, какая регистрация вызвала проблему.
  6. Когда тестировщик сообщает о проблеме, которую программист считает исправленной, он может сказать, в какой сборке он обнаружил проблему. Затем программист смотрит, когда он проверял исправление, и выясняет, действительно ли это , исправлено.

Вот как это сделать. Вам нужен сервер ежедневной сборки, который, вероятно, будет самым быстрым компьютером, который вы можете получить. Напишите сценарий, который проверяет полную копию текущего исходного кода из репозитория (вы - используете систему управления версиями, не так ли?), А затем строит с нуля каждую версию кода, который вы отправляете.Если у вас есть установщик или программа установки, создайте и ее. Все, что вы отправляете клиентам, должно производиться в процессе ежедневной сборки. Поместите каждую сборку в отдельный каталог с указанием даты. Запускайте ваш скрипт каждый день в определенное время.

  • Крайне важно, чтобы все, , что нужно для окончательной сборки, выполнялось сценарием ежедневной сборки, от проверки кода до размещения битов на веб-сервере в нужном месте для всеобщего скачивания ( хотя в процессе разработки это будет конечно же тестовый сервер).Это единственный способ убедиться, что ничего о процессе сборки «задокументировано» только в голове одного человека. Вы никогда не попадете в ситуацию, когда не сможете выпустить продукт, потому что только Шаниква знает, как создать установщик, и ее сбил автобус. В команде Juno единственное, что вам нужно было знать для создания полной сборки с нуля, - это где находится сервер сборки и как дважды щелкнуть его значок «Daily Build».
  • Нет ничего хуже для вашего рассудка тогда, когда вы пытаетесь отправить код, а одна крошечная ошибка , поэтому вы исправляете эту крошечную ошибку прямо на сервере ежедневной сборки и отправляете ее.Золотое правило: вы должны отправлять только тот код, который был создан в результате полной чистой ежедневной сборки, которая началась с полной проверки.
  • Установите для компиляторов максимальный уровень предупреждений (-W4 в мире Microsoft; -Wall в мире gcc) и настройте их на остановку, если они обнаружат даже самое маленькое предупреждение.
  • Если ежедневная сборка не работает, вы рискуете остановить всю команду. Остановите все и продолжайте перестраивать, пока это не будет исправлено. В некоторые дни у вас может быть несколько ежедневных сборок.
  • Ваш ежедневный сценарий сборки должен сообщать об ошибках по электронной почте всей команде разработчиков.Нетрудно найти в журналах «ошибку» или «предупреждение» и также включить их в электронное письмо. Сценарий также может добавлять отчеты о состоянии к HTML-странице, видимой для всех, чтобы программисты и тестировщики могли быстро определить, какие сборки были успешными.
  • Одно правило, которому мы следовали в команде Microsoft Excel, с большим эффектом, заключалось в том, что тот, кто нарушил сборку, становился ответственным за присмотр за сборками до тех пор, пока кто-то другой не сломал ее. Помимо того, что он служил разумным стимулом для поддержания работоспособности сборки, он поменял почти всех на должность мастера сборки, чтобы все узнали о том, как создаются сборки.
  • Если ваша команда работает в одном часовом поясе, хорошее время для сборки - обеденное время. Таким образом, все проверяют свой последний код прямо перед обедом, сборка выполняется, пока они едят, а когда они вернутся, если сборка не работает, все будут рядом, чтобы исправить это. Как только сборка заработает, каждый может проверить последнюю версию, не опасаясь, что они будут потеряны из-за неработающей сборки.
  • Если ваша команда работает в двух часовых поясах, запланируйте ежедневную сборку, чтобы люди в одном часовом поясе не обижали людей в другом часовом поясе.В команде Juno жители Нью-Йорка проверяли все в 7 вечера по нью-йоркскому времени и отправлялись домой. Если они сломают конструкцию, команда из Хайдарабада, Индия, приступит к работе (примерно в 20:00 по нью-йоркскому времени) и полностью застрянет на целый день.

Добавить комментарий

Ваш адрес email не будет опубликован.