Как составить программу в бесике

Введите в синее поле этот исходный код (рисунок 1):


  1. ‘ Vyvod tekstovoy stroki
  2. PRINT «Hello, World!»

Рисунок 1 – Первая программа на языке Basic

Рисунок 1 – Первая программа на языке Basic

Нажмите клавишу F5, что бы запустить программу на выполнение (рисунок 2).

Рисунок 2 – Запуск программы на QB64

Рисунок 2 – Запуск программы на QB64

Любую команду в программе можно снабдить поясняющим текстом – комментарием, который начинается служебным словом REM или одинарной кавычкой ().

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

Например (рисунок 3):


  1. REM Tak pishetsya kommentariy
  2. ‘i eto tozhe kommentariy

Рисунок 3 – Комментарии в QBasic и QB64

Рисунок 3 – Комментарии в QBasic и QB64

Как уже говорилось выше, оператор REM может быть заменен апострофом (‘). Всё что после символа апостроф (‘) или ключевого слова REM – это комментарий.

Например:

REM комментарий к блоку программы
или
<команда> ‘ тоже комментарий к блоку программы

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

Примечание: Если комментарий, начинаемый апострофом, стоит в конце строки после исполняемых операторов, то перед апострофом двоеточие не ставится, а перед оператором REM ставится, например (рисунок 4):


  1. A = 0 ‘dvoetochie ne stavitsya
  2. B = 0: REM dvoetochie stavitsya

Рисунок 3 – Двоеточие и комментарии

Рисунок 4 – Двоеточие и комментарии

Такое правило требуется соблюдать в классическом QuickBasic 4.5. В QB64 двоеточие можно не ставить, так так программа отработает корректно как с ним так и без него.

Рассмотрим понятие «команда».

Команда (или оператор) – это ключевое слово, которое понимает язык программирования.

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

Формат (синтаксис) оператора (или команды) PRINT:

PRINT выражение[{;|,] [выражение…]

Смысл команды PRINT – это вывод на экран текстовой строки или значения переменной.

Если же написать пустую команду (без выражения) PRINT, то выполнится переход на новую строку.

Спасибо за прочтение этой статьи.

Прикрепленные файлы:

  • first_program.bas
  • comments.bas
  • comments_colon.bas

Языки программирования насчитывают несколько десятков вариантов. Какие-то из них подходят для нативной разработки, а какие-то – для кроссплатформенной. Visual Basic – язык программирования, который произошел от более старого языка – Basic.

В данной статье предстоит разобраться с особенностями составления Бейсик программ. Ориентироваться будем на VB, так как он встречается на практике чаще. А еще необходимо выяснить особенности выбранного ЯП и сферы его применения. Эта информация поможет понять, стоит ли вообще начинать изучение Visual Basic (далее он будет называться просто «Бейсик»).

VB – это…

Строки кода для работоспособного программного обеспечения удастся написать на любом выбранном языке. «Бейсик» — полноценный ЯП, а также специальная интегрированная среда разработки. Она была создана корпорацией Microsoft. Это – наследник BASIC с огромным количеством диалектов.

VB предусматривает:

  • процедурное программирование;
  • написание кода при помощи объектно-ориентированных принципов;
  • компонентно-ориентированность.

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

История развития

Сам BASIC появился в 1964 году. В 80-х он стал утрачивать свою актуальность ввиду сложности. Исходный код даже самого элементарного приложения по сравнению с «конкурентами» содержал множество строчек и не выделялся быстродействием.

Все это привело к тому, что разработчики начали задумываться над созданием диалектов BASIC. А компания Microsoft выпустила QBasic, а чуть позже – VB.

Популярность этот язык программирования получил, начиная с версии 3.0, которая позволила взаимодействовать с базами данных. Освоить такой «Бейсик» мог даже рядовой пользователь, далекий от вопросов разработки. Элементарное приложение можно было составить в несколько строк, половина из которых прописывалась автоматически во время использования встроенных инструментов.

Традиционный VB появился в 1998 году – это его последняя версия. Далее, после сборки 6.0, Майкрософт решили разделить язык на несколько векторов. Они стали развиваться VB на платформе .Net, а также адаптированные версии для решения задач локального характера.

Виды VB

Рассматривая Basic типа Visual, нужно понимать – у него существуют разновидности. В зависимости от выбранного варианта программист будет решать те или иные задачи. Поэтому перед непосредственным написанием Бейсик программы, нужно определиться, чем именно пользоваться.

Классика

Basic Classic – классический VB. Он ориентирован на разработку приложений под Windows. Используется преимущественно как инструмент написания строк кода для соответствующей операционной системы. Предусматривает широкий спектр возможностей и инструментов, ориентированных на программирование под Windows.

Сюда относят:

  • просмотр переменных и структур практически моментально;
  • встроенный отладчик;
  • отдельное удобное окно отладки;
  • всплывающие подсказки.

Classic не пишется в отличных от изначальной средах разработки.

VBA

Аналог предыдущего варианта, но направленный на то, чтобы пользователь мог создать макросы и прикладные утилиты для уже имеющихся приложений. Получил достаточно широкое распространение. Такой результат получен за счет совместимости с MS Office.

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

VBScript

Урезанный вариант Classic. Такой Basic является скриптовым. Он подходит для администрирования на базе Windows. Активно применяется для создания страниц ASP и всевозможных сценариев под IE.

Basic .NET

Вариант, появившийся после версии 6.0 классического VB. Совершенно новый вектор развития от Microsoft. Ориентирован на работу с платформой .NET. Он:

  • использует в работе библиотеку классов из .НЕТ;
  • имеет объектно-ориентированную парадигму;
  • обладает полиморфизмом и строгой типизацией.

Позволяет создавать крупномасштабные проекты с минимальным количеством строк исходного кода. Полученные на выходе утилиты отличаются скоростью работы, но они все равно уступают софту, составленному на C++ или C#.

Особенности

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

Составить элементарную утилиту сможет даже новичок, далекий от принципов разработки. Создание форм осуществляется через drag and drop, который отнимает минимум времени. Достаточно перетащить компонент на экран, а затем присвоить ему строки с теми или иными командами.

Компилятор VB включает в себя другие языки программирования Visual Studio, но ограничения в интегрированной среде не позволяют писать определенные разновидности контента. Также к особенностям ЯП относят:

  1. Объединение операторов. Принцип работает относительно логических и битовых вариантов.
  2. Автоматическое конвертирование целочисленных значений в вещественные. Это происходит после деления.
  3. Объявление массивов при помощи обозначения границ: верхних и нижних. Аналогичные принципы предусматривает Fortran и Pascal.
  4. Объединение VB с COM. Сюда также относится Windows.
  5. Наличие специального типа данных — variant. Он используется для переменных, в которых не указан тип данных.

Язык поддерживает статическую и динамическую строгую типизацию. Является компилируемым и интерпретируемым. За счет совместимости с Windows даже новичок сможет создавать программы с расширением .exe.

Преимущества и недостатки

Рассматриваемый «способ» создания программ – это интересный вариант для новичков. Минимум строк – максимум функциональности с упором на визуальные компоненты. Он обладает простым синтаксисом, с которым сможет справиться новичок. Является неплохим вариантом для тех, кто хочет попробовать собственные силы в разработке.

К преимуществам «Бейсика» относят:

  1. Быстрое написание контента, ориентированного на операционные системы Windows.
  2. Наличие защиты от ошибок. Она помогает делать программы стабильными. Этот момент до сих пор часто критикуют.
  3. Возможность применения WnAPI для расширения итогового функционала программ.
  4. Выбор типа компиляции. Строки программы можно скомпоновать в машинный код или P-код в несколько кликов.

А еще при написании программ предстоит работать с достаточно красивым и понятным интерфейсом редактора. В нем невозможно запутаться.

Недостатки тоже есть:

  1. Ориентированность преимущественно на Mac OS X и Windows. Другие системы не поддерживаются.
  2. Скорость работы. Если сравнивать программы на «Бейсике с визуализацией», то они будут уступать софту, написанному на других языках с ООП.
  3. Отсутствие механизмов наследования реализации имеющихся компонентов. Поддерживается лишь наследование интерфейсов. 

Для того, чтобы строки написанной программы работали на устройстве, потребуется установить на компьютер отдельную библиотеку. А именно – msvbvm.dll.

Основы языка

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

Комментарии

«Бейсик» поддерживает возможность вставки комментариев. Для этого можно использовать или новую строку, или уже имеющуюся. Во втором случае комментарий вставляется после основного кода.

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

Типы данных

Для того, чтобы задать тип данных, нужно использовать оператор Dim, после которого в строке приложения указывается имя. Далее следует ключевое слово As с типом переменной, в противном случае можно обойтись записью Dim имя_переменной. Соответствующий элемент получит тип variant.

Язык поддерживает автоматическое создание типов переменных. Для этого не нужно указывать в строках кода конструкцию Option Explicit в разделе деклараций. Подобный прием иногда приводит к снижению скорости работы полученного исходного контента.

В VB 6.0 поддерживаются следующие типы данных:

  1. Byte. Нужен для хранения чисел в диапазоне от 0 до 255.
  2. Integer. Целое. Обозначается суффиксом %. Хранит целочисленные от -32 768 до 2 767.
  3. Long. Обозначается в строке как &. Это – «длинное целое».
  4. Single (!). Позволяет задавать переменные с точкой одинарной точности.
  5. Double (#). Числа с плавающей точкой двойной точности.
  6. Decimal (CDec). Масштабируемое целое. Используется для того, чтобы применять десятичное представление чисел в строках.
  7. Boolean. Булевый тип. Хранит только «истину» и «ложь». Используется при работе с логическими операторами.
  8. String ($). Это – строка переменной длины. Помогает хранить строковые и символьные данные.
  9. String*N. Строка постоянной длины.
  10. Date. Тип данных, ориентированный на работу с датой и временем в программе.
  11. Object (Set). Помогает хранить ссылки на объект.
  12. Currency (@). Денежный тип. Имеет до 4 цифр после запятой и до 14 – перед ней.

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

Операторы

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

В данную категорию можно отнести:

  1. Присваивание (=). Помогает присваивать переменным те или иные значения. Может быть задан при помощи ключевого слова Let. Set используется для присвоения переменной объектного типа. ЯП поддерживает многократное присваивание.
  2. Сложение (+).
  3. Умножение (*).
  4. Деление (/).
  5. Вычитание (-).
  6. Степень (^).
  7. Целочисленное деление (). Первое число будет поделено на второе с отбрасыванием дробной части. Округление не производится.
  8. Деление по модулю (Mod). В ходе операции первое число делится на второе. Происходит возврат только остатка от выполненного действия.
  9. Равенство (=).
  10. Больше, чем. Сюда также относят «меньше, чем» (> и <).
  11. Больше или равно и меньше или равно (>= и <=).
  12. Не равно (<>).
  13. Сравнение объектов (Is). Будет определять, ссылаются ли переменные объектного типа на один и тот же элемент или на разные.
  14. Подобие (Like). При применении происходит сравнение строкового объекта с шаблоном. Далее система сообщает, подходит ли этот компонент.
  15. Логическое И (And), ИЛИ (or), отрицание (Not), исключение (Xor).
  16. Эквивалентность (Eqv). Производит оценку эквивалентности двух выражение. Если принцип соблюден, система вернет True.
  17. Импликация (Imp). False возвращается системой, если E1 = True, а E2 = False. В противном случае значение окажется True.

Также есть операторы конкатенации. + применяется для того, чтобы проводить операцию со строками. Когда обе части выражения – это символьный тип данных, операция «соединения» проходит успешно. Если одна – это число, а другая не может быть преобразована в соответствующий вариант, появляется ошибка.

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

О модулях и классах

Бейсик программы хранят исходные коды в виде модулей. Они бывают разного вида:

  1. Формы. Обладают расширением .frm. Выступает такой модуль «базовым» для большинства программ. Содержит процедуры обработки события, общие процедуры, переменные, константы и их виды, внешние операции. При раскрытии формы в обычном текстовом редакторе появляется описание, элементы управления и свойства.
  2. Стандартный. Расширение — .bas. Это – контейнер для операций, функций и объявлений, к которым чаще всего получают доступ другие модули программы. Содержат глобальные и иные переменные, а также соответствующие процедуры. Код, написанный внутри, может не иметь связи с конкретной программой.
  3. Класса (.cls). Это – основа объектно-ориентированной разработки. Позволяет создавать новые объекты. Полученные компоненты могут обладать собственными свойствами, методами, а также событиями.

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

Простая консольная программа

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

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

Начало проекта

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

  1. Запустить Visual Studio.
  2. Кликнуть по кнопке «Создать проект». Это делается в правой части открытого софта.
  3. Выбрать интересующий ЯП.
  4. Определиться с типом операционной системы. Пример – Windows. Далее предстоит указать вид проекта – «Консоль».
  5. Щелкнуть по надписи «Консольное приложение», а затем нажать на «Далее».
  6. Ввести имя проекта. Пример – WhatIsYourName.
  7. Выбрать в долгосрочной поддержке .Net 6.0. Обычно это происходит автоматически. Если нет – кликнуть по подходящему варианту вручную.

Как только все готово, можно нажать на «Создать». Через несколько секунд пользователь увидит на экране готовую форму. Остальные действия предстоит выполнять в ее пределах.

Запуск

После выбора подходящего шаблона и установки имени для него произойдет создание файла Program.vb. Имеющийся код изначально осуществляет вызов метода WriteLine. Он позволяет отобразить литеральную строчку «Привет, Мир!» в консольном окошке.

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

Запуск в отладке

Для этого необходимо:

  1. Нажать на кнопку WhatIsYourName в среде. Можно просто кликнуть по клавише F5.
  2. На экране появится консоль с соответствующей надписью. Это – режим отладки.
  3. Чтобы закрыть окно и вернуть в «прежнее состояние», потребуется нажать на любую клавишу.

Данный подход хорош для непосредственной проверки готовой утилиты или ее частей.

Автономный режим

А этот метод позволяет запускать программное обеспечение за пределами «Студии». Для этого потребуется сформировать самостоятельный контент с исполняемым файлом:

  1. Перейти в меню «Сборка».
  2. Кликнуть по надписи «Собрать решение».
  3. Выбрать ПКМ WhatIsYourName, а затем «Открыть в проводнике».
  4. Перейти к каталогу binDebugnet5.0.
  5. Запустить WhatIsYourName.exe.

Метод Main завершится после того, как произойдет выполнение одной инструкции. Окно консоли сразу же закроется. Но эту проблему удается решить. Рекомендация дана ниже.

Код для указания запроса

Теперь можно добавить фрагмент утилиты, которая запросит пользовательское имя. После обработки – выведет его на экран вместе с текущим временем и датой. А еще необходимо прописать команду, которая не позволит окну консоли закрываться до нажатия нужной кнопки:

  1. Ввести код после Sub Main и перед End Sub. В ходе операции требуется заменить WriteLine.
  2. Нажать на кнопку WhatIsYourName или на F5 на клавиатуре. Это поможет собрать утилиту.
  3. Ввести запрошенные данные. В рассматриваемой ситуации – имя.
  4. Щелкнуть по любой кнопке на клавиатуре.

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

Система управления с GIT

GIT – система управления контроля версий. Является одной из самых популярных. Можно связать получившийся контент с Git. У VStudio имеются встроенные инструменты для проведения операции.

Чтобы связать с системой контроля версий исходную утилиту, нужно:

  1. В строчке состояния в правом нижнем углу «Студии» щелкнуть по «Добавить в систему управления версиями».
  2. Щелкнуть по GIT.
  3. Войти в GitHub. Это потребуется проделать в окне «Создать репозиторий…». Имя будет присвоено автоматически. Репозиторий по умолчанию является частным.
  4. Нажать на кнопку «Создать и отправить».

В строчке состояния появится новая информация. Первый значок со стрелочками указывает на входящие и исходящие фиксации в текущей ветке. Его используют для получения соответствующих компонентов. Можно отобразить фиксации в первую очередь, нажав на значок, а после – по «Посмотреть входящие/исходящие…».

Второй знак (с карандашиком) демонстрирует незафиксированные корректировки. Если по нему нажать, соответствующие данные отобразятся в Git Changes.

Очистка

Когда работа с проектом завершена, утилита сформирована, а программист больше не планирует им пользоваться, нужно провести очистку ресурсов:

Перейти в «Обозреватель решений».

  1. ПКМ нажать по интересующему проекту. Откроется его контекстное меню. В нем нужно выбрать «Открыть в проводнике».
  2. Закрыть «Студию».
  3. Перейти на два уровня папок вверх. Делается это непосредственно в «Проводнике».
  4. Нажать ПКМ по имени имеющегося проекта и скомандовать «Удалить».

Basic программа стерта с устройства. Теперь можно начать полноценную разработку нового софта.

Интересные примеры

Далее будут приведены довольно интересные примеры контента на рассмотренном ЯП. Это – готовые решения для выполнения тех или иных задач:

  1. Форма входа с подтверждением. Не совсем полноценное приложение. Больше отражает функцию. В меню проекта нужно разметить на экране кнопку, а ей присвоить следующую запись:
  2. Пароль для запуска ПО. Полезная возможность, особенно если хочется обеспечить дополнительную защиту или скрыть приложение от посторонних глаз. Запись осуществляется в стандартном проекте: . Здесь «12345» — это пароль. Его можно задать по собственному усмотрению.
  3. Вывод сообщения. Элементарная возможность:
  4. Рисование. Это – своеобразный графический мини-редактор. Рисовать клиент сможет прямо в открывающейся форме. В стандартном проекте предстоит указать следующее:.Цвета меняются при помощи значения QBColor(0), где 0 – это любая другая желаемая цифра.
  5. Запуск только один раз. Если попытаться активировать соответствующий контент повторно, система выдаст специальное сообщение: .
  6. Перезагрузка устройства. Рекомендуется размещать запись «на кнопке»: .

А еще можно посмотреть, сколько работает устройство. Основан предложенный пример на библиотеке kernel32. За счет этого сначала необходимо подключить DLL-библиотеку:

Все это – элементарные возможности и функции, которые помогут дополнить практически любое программное обеспечение.

Изучение с нуля

Программы на Бейсике составлять не слишком сложно. Чтобы обучиться основам разработки на нем, можно смотреть разнообразные уроки. А еще можно поискать сопутствующую литературу по интересующему ЯП.

Чтобы быстрее добиться успеха «с нуля», рекомендуется обратить внимание на дистанционные онлайн курсы. Пример – от образовательного центра OTUS. Там есть программы, благодаря которым в сжатые сроки можно освоить любую инновационную IT-профессию.

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

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

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!

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

Программа
Оператор присваивания
Вычисления
Запуск программы
Работа со строками
Последовательность выполнения операторов
Логический тип
Сравнение строк

Программа

Программа – это предписание для компьютера, которое программист составляет на особом искусственном языке. А бейсик – это один из таких языков. У бейсика имеется несколько диалектов. Однако в данной статье мы будем пытаться излагать ту часть бейсика, которая относится ко всем вариантам языка. Кроме того мы постараемся, чтобы эта часть языка оказалась достаточно богатой для написания на ней работающих программ.

Программа на любом языке выглядит как обычный текст. В таком виде она может быть напечатана на бумаге. В таком же виде вы можете увидеть ее на экране компьютера. Для выполнения программа передается компьютеру, оснащенному специальной бейсик-средой. Конкретные варианты бейсик-среды мы будем обсуждать позже. Пока же программа для нас это просто некоторый текст, а бейсик-среда, которая, собственно, и может выполнять программу, – это просто бейсик. Таким образом, вы можете спросить приятеля: «А у тебя установлен бейсик?». А приятель может вам пожаловаться: «Бейсик выполнил мою программу до 120-й строки и остановился.»

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

Beep

заставляет компьютер выдать звуковой сигнал. Команды не всегда связаны с какими-то непосредственными действиями, поэтому их правильнее называть операторами бейсика. Имеется даже операторы, которые предназначены не для бейсика (бейсик их просто игнорирует), а для человека, читающего программу. Такие операторы называются комментариями, они начинаются с апострофа – «» или слова Rem. Если же апостроф встретился в середине строки, то все, что расположено после него, бейсик интерпретирует как комментарий.

' Это комментарий
Rem Это тоже комментарий
Beep ' А это комментарий, расположенный после оператора

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

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

A = 5

Этот оператор присваивает переменной с именем A значение 5. Оператор

B = A

берет значение из переменной A и присваивает его другой переменной B.

A = 7.5

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

A_Plus_B = A + B

Теперь у нас появилась переменная с именем A_Plus_B.
Имя переменной может состоять из нескольких символов. Оно всегда начинается с буквы и может включать в себя буквы, цифры и символы подчеркивания. Таким образом, можно использовать такое имя, которое напоминает читателю программы о назначении переменной. Здесь, однако, программист может сделать очень распространенную ошибку. Дело в том, что некоторые имена в бейсике уже заняты и их использование в качестве имен переменных приведет к ошибке. При этом бейсик выдаст сообщение об ошибке, совершенно непонятное для программиста. Пусть, к примеру, программист назвал свою переменную Beep. Он и понятия не имел о команде Beep. Бейсик же пытается помочь программисту с использованием именно этой команды, чем окончательно ставит программиста в тупик. Бейсик не различает в именах регистр букв, так что A_Plus_B и a_pluS_b – это просто разные написания одной и той же переменной. Конечно же, использовать разные написания следует, только если вы хотите затруднить чтение и понимание своей программы.

Тем временем у нас значение переменной A_Plus_B стало равным 12.5. Это бейсик сложил значения переменных A и B. Бейсик, оказывается, умеет еще и складывать.

A = 8

Значение переменной A опять изменилось, но это не вызвало изменения значения переменой A_Plus_B, несмотря на ее имя. Если мы однажды написали «A_Plus_B = A + B», это вовсе не означает что всегда будет выполняться равенство A_Plus_B = A + B. И вообще, оператор присваивания нельзя рассматривать как равенство. Иногда он действительно похож на равенство. Но вот другой пример: если мы хотим увеличить значение переменной A на единицу мы можем написать оператор

A = A + 1

Естественно, такой оператор нельзя рассматривать как равенство A = A + 1, ведь такое равенство никогда бы не выполнялось.

Итак, оператор присваивания предписывает вычислить выражение, которое находится справа от знака «=» и присвоить результат переменной, имя которой стоит слева от этого знака.

Вычисления

Как мы видим, справа от знака присваивания должно стоять выражение, которое бейсик должен вычислить. При помощи выражения программист указывает, какие вычисления и в какой последовательности должен произвести компьютер. В качестве выражения может выступать одиночная переменная или константа. Но выражение может быть произвольной сложности. В выражение могут входить числовые константы, переменные и знаки операций. Знаки операций и их старшинство в бейсике такие же, как и в математике, за исключением того, что для умножения используется знак «*», а для возведения в степень знак «^». Для указания порядка выполнения операций можно использовать круглые скобки. Имеется большой выбор стандартных математических функций. Например, Sqr – это извлечение квадратного корня, Sin – это взятие синуса.

Допустим, нам нужно вычислить длину гипотенузы c, при заданных длинах катетов 3 и 4. Мы можем выполнить следующие операторы:

a = 3
b = 4
c = Sqr(a ^ 2 + b ^ 2)

после чего переменная c будет содержать результаты вычислений. Конечно, для эффективности не следовало бы заводить лишних переменных a и b, а сразу написать

c = Sqr(3 ^ 2 + 4 ^ 2)

но мы пока больше думаем не об экономии, а о наглядности. Для вычисления угла, лежащего против катета a, можно воспользоваться функцией арктангенса Atn:

u = Atn(a / b)

Угол мы получили в радианах. Для перевода его в градусы нужно разделить его на пи и умножить на 180

u = u / 3.14159 * 180

Правда, число пи приведено не очень точно – всего 5 знаков после запятой, то есть в случае бейсика надо сказать – после десятичной точки. Но ведь мы пока и не знаем, сколько знаков при записи числа бейсик действительно проглотит. С другой стороны, цифры числа пи с большой точностью придется разыскивать в каком-нибудь справочнике. В языке паскаль имеется специальная функция для получения числа пи, а в бейсике такой функции нет. Зато в нашем распоряжении имеется функция Atn. Давайте запишем преобразование радианов в градусы следующим образом:

pi = Atn(1) * 4
u = u / pi * 180

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

Теперь, когда наши операторы стали, наконец, делать что-то полезное, возникает естественный вопрос: как сообщить внешнему миру результаты вычислений.

Запуск программы

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

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

Сохраните набранный текст на рабочий стол с расширением vbs. Операционная система знает, что файлы vbs содержат сценарий на одном из вариантов бейсика – языке VBScript, и показывает эти файлы в виде иконки, похожей на свиток. Теперь, если вы кликните на иконке (клик должен быть двойным или одинарным в зависимости от установок Windows), то ваша программа запустится. Язык VBScript – это упрощенный вариант бейсика. Например, команда Beep в этом языке отсутствует и, поэтому, работать не будет. Мы постараемся в дальнейшем не выходить за рамки языка VBScript, чтобы все примеры можно было запустить без особых хлопот.

Ваша программа сможет вводить данные при помощи функции InputBox, а выводить результаты при помощи функции MsgBox. Попробуйте выполнить следующую программу, содержащую две строки:

s = InputBox ("Введите значение")
MsgBox s

Параметр функции InputBox содержит строку, которая будет видна в окне, появившемся для ввода. Можете ответить на этот запрос вводом какой-нибудь абракадабры. Этот бред будет занесен в переменную s, а затем выдан вам в качестве результата в окне вывода.

Хранение в переменной не числа, а произвольного набора символов – это нечто новое. Работе со строками символов нам сейчас и предстоит научиться.

Работа со строками

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

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

Программа может сохранить строку в переменной. Иными словами, значение переменной может быть не только числовым, но и строковым. Например, оператор

a_plus_b = "ABCDE"

присваивает переменной a_plus_b соответствующее строковое значение. Справа от знака присваивания «=» мы видим строковую константу. Строковая константа получается, если последовательность некоторых символов заключить в двойные кавычки. Двойные кавычки служат для бейсика признаком и ограничителем строковой константы, но не включаются в значение константы. Чтобы получить значение строковой константы, следует отбросить ограничивающие её кавычки. Таким образом, в нашем случае переменная a_plus_b получит строковое значение, состоящее из пяти символов ABCDE. Символы, которые находятся внутри кавычек, бейсик старается не анализировать. К примеру, если внутри строки встретится символ апострофа «», то остаток программной строки не будет рассматриваться бейсиком как комментарий. Однако бейсику, конечно, приходится при анализе внутренности строки реагировать на символ двойной кавычки, ведь этот символ по идее должен служить признаком окончания строки. Для того чтобы символ двойной кавычки всё же мог являться частью строки, в бейсике договорились удваивать этот символ, если он содержится в строковой константе. Например, константа «»»A»»» содержит три символа, а именно: «A». Одинарная кавычка – апостроф – не удваивается. Например, мы можем записать такую константу: «can’t». В отличие от написания имен, при написании текстовых констант приходится обращать внимание на регистр букв, поскольку «ABCDE» и «Abcde» – это разные константы.

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

Но продолжим обсуждение строкового типа. Основная, и пожалуй, единственная операция над текстовыми значениями – это сцепление текстов или конкатенация. Все остальные действия над строками осуществляются при помощи стандартных функций. Для конкатенации рекоменднуется использовать знак «&», хотя чаще всего можно вместо него пользоваться знаком «+». Разберем ряд примеров.

a = "ABC" & "DEF"
b = "ABC" + "DEF"

В данном случае обе переменные a и b получают одно и то же значение «ABCDEF». Нюансы возникают, когда в операции участвуют числа. Вот что будет при выполнении следующих операторов:

a = "111" & 222 ' результат "111222"
b = 111 & 222 ' результат "111222"
c = "111" + 222 ' результат 333
d = "AAA" + 222 ' ошибочный оператор

Бейсик исходит из того, что программист всегда прав. В первом и втором случаях он видит строковую операцию «&» и поэтому пытается преобразовать числа в строку. Если же он увидит операцию «+» а один из операндов числовой, тогда он полагает, что второй операнд также должен быть числом, и пытается провести соответствующее преобразование. Понятно, что такое либеральное отношение бейсика к тому что пишет программист, чревато тем, что возможная ошибка программиста не будет вовремя замечена. Поэтому безопаснее обозначать конкатенацию знаком «&» а не «+».

Теперь рассмотрим некоторые нюансы, связанные с преобразованием данных. Дело в том, что преобразование числа в строку и обратно происходит в соответствии с локальными установками Windows. Эти установки в частности конкретизируют символ, который используется при отделении дробной части числа от целой. На большинстве компьютеров этот символ – запятая. Бейсик же предполагает, что программу пишет программист, приверженный общемировым программистским ценностям, и изображающий число в программе с использованием точки. А вот, преобразуя число в строку, бейсик предполагает, что результат такого преобразования будет читать обычный бухгалтер, и здесь вполне оправдано применить локальные установки. Надо сказать, что не каждый программист подозревает о такой услужливости бейсика. Чтобы не попадать в таких случаях впросак, подробно разберем следующий пример:

a = "111" & 2.22 ' результат "1112,22"
b = 1.11 & 2.22 ' результат "1,112,22"
c = "1,11" + 2.22 ' результат 3.33
d = "1.11" + 2.22 ' ошибочный оператор

В последнем случае бейсик отказался преобразовывать строку в число, поскольку дробная часть в записи числа отделена точкой, а не запятой. Так что запомним: числа в программе пишет программист, и поэтому, там всегда нужно использовать точку. Числа в строке обычно попадают в программу после ввода строк рядовым пользователем программы. И поэтому в этих числах используются региональные установки.

Рассмотрим теперь строковые функции.

Функция Len(str) возвращает длину строки str. Если строка пустая, то есть не содержит ни одного символа, то возвращается ноль.

Функция Left(str, count) принимает два параметра: строковый str и числовой count. Она отсчитывает с левой стороны строки str ровно count символов, формирует из них строку и возвращает ее значение. Если строка str содержит менее чем count символов, то возвращается вся строка str.

Функция Right(str, count) работает также как и функция Left, только отсчет идет с правой стороны строки.

Функция Mid(str, position, count) возвращает «середину» строки str, начиная с позиции position (нумерация символов строки ведется с единицы) и длиной count. Если параметр count не задан (то есть указано только два первых параметра), то возвращается часть строки начиная со стартовой позиции и до конца строки. Строка str может оказаться недостаточно длинной. В этом случае функция ведет себя довольно логично. Если указанная начальная позиция больше чем длина строки, то будет возвращена пустая строка. Если параметр count требует выхода за пределы исходной строки, то возвращаются те символы, которые имеются в наличии, то есть с начальной позиции position и до конца строки. Кстати, Mid – это сокращение от Middle – середина.

Приведем несколько примеров работы этих функций.

s = "12345678"
s1 = Left(s, 3) ' "123"
s2 = Left(s, 10) ' "12345678"
s3 = Left(s, 0) ' ""
s4 = Left(s, -1) ' Произойдет ошибка при выполнении
s5 = Right(s, 4) ' "5678"
s6 = Mid(s, 5, 2) ' "56"
s7 = Mid(s, 5) ' "5678"
s8 = Right(s, Len(s) - 4) ' "5678"

В бейсике имеются функции для поиска в строке. В качестве результата поиска эти функции возвращают позицию найденного фрагмента. Одна из этих функций функция InStr(start, str, pattern) ищет в строке str строку pattern и возвращает позицию найденного вхождения. Если вхождение не найдено, то возвращается 0. Направление поиска – слева направо. Если задан параметр start, то поиск осуществляется начиная с позиции start, иначе поиск ведется с начала строки.
Пример: пусть у нас имеется строка вида

s = "содержание1 <!-- комментарий --> содержание2"

в которой комментарий заключен в своеобразные многосимвольные скобки <!— —>. (Так принято в языке HTML-разметки.) Определить, где находится комментарий можно операторами

pos1 = InStr(s, "<!--") ' ищем начало комментария
pos2 = InStr(pos1, s, "-->") ' ищем конец комментария

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

cont = Left(s, pos1 - 1) & Mid(s, pos2 + 3)
comm = Mid(s, pos1 + 4, pos2 - pos1 - 4)

Мы пока не рассматриваем случай, когда комментария в строке s на самом деле нет.
Другая функция поиска InStrRev(str, pattern, start), так же как и функция InStr, ищет в строке подстроку, начиная с позиции start. Только поиск происходит в обратном направлении – от конца строки к ее началу. Если параметр start опущен, то поиск начинается с конца строки. Другой способ задать поиск с конца строки это задать параметр start равным -1. Обратите внимание, что в отличие от функции InStr для обратного поиска параметр start задается не в начале, а в конце списка параметров.

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

p = "C:Program FilesVB_6.0uninstall.exe"

применяем обратный поиск

pos1 = InStrRev(p, "")
' выделяем имя файла "uninstall.exe"
fnm = Mid(p, pos1 + 1)
pos2 = InStrRev(fnm, ".")
' выделяем расширение, включая точку
ext = Mid(fnm, pos2)

Замену подстроки в строке проще всего осуществлять функцией, которая так и называется – Replace (заменить). Эта функция не просто заменяет, она ищет и заменяет найденное. Например, строку

s = "Не имей сто рублей, а имей сто друзей."

после скачка цен можно «индексировать» так

t = Replace(s, "сто", "сто двадцать")

Теперь строка t будет иметь следующее значение:

"Не имей сто двадцать рублей, а имей сто двадцать друзей."

Функция нашла все вхождения подстроки «сто» и заменила их на строку «сто двадцать». Саму строку s функция оставила нетронутой. Так же как и функция InStr функция Replace может осуществлять поиск не с начала строки, а с указанного места. Позицию начала поиска можно указать в 4-м параметре. Единственное неудобство это то, что возвращаемое значение будет при этом начинаться с этого же места, то есть начало строки будет обрезано. Например:

t = Replace("12345678", "5", "*", 3) ' возвращается "34*678"

Функция Replace может иметь пятый параметр – максимальное количество замен. Понятно, что если вы задали пятый параметр, то четвертый параметр также должен присутствовать. Например, возвращаясь к нашим рублям и друзьям мы можем поправить оператор «индексации» следующим образом

t = Replace(s, "сто", "сто двадцать", 1, 1)

Теперь мы учли, что дружба инфляции не подверглась, и получили окончательное значение строки t

"Не имей сто двадцать рублей, а имей сто друзей."

Если пятый параметр не задан или равен -1, то заменяются все вхождения, сколько бы их ни было найдено. Еще пара примеров. Следующий оператор удалит все пробелы из строки s:

s = Replace(s, " ", "")

а следующий оператор удалит пробел в конце строки, если он есть:

p = Left(p, Len(p) - 1) & Replace(Right(p, 1), " ", "")

Последовательность выполнения операторов

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

If условие Then
    ... ' здесь расположена
    ... ' група операторов
End If

Как вы видите, это не совсем оператор, а какая-то непонятная конструкция, расположенная на нескольких строках. Первую строку этой конструкции и занимает, собственно, оператор If. Этот оператор открывает собой группу операторов. Признаком конца этой группы служит строка «End If». Операторы группы выполняются только в том случае, если условие оператора If истинно. В противном случае бейсик пропускает эти операторы и переходит к выполнению того, что следует за строкой «End If». В качестве условия должно выступать, выражение, истинность которого бейсик может проверить.

Например, нам надо вычислить максимум из значений переменных a и b. Сначала мы пробовали написать что-то вроде c = Max(a, b), но обнаружили, что функция Max среди стандартных функций бейсика отсутствует. Следующие операторы решили проблему

c = a
If a < b Then
    c = b
End If

Здесь в качестве условия выступает сравнение «a < b», смысл которого понятен из написания. Вычисление максимума можно записать по-другому:

If a < b Then
    c = b
Else
    c = a
End If

Здесь в составе условного оператора появилась еще одна группа, тоже состоящая из единственного оператора. Эта группа начинается после строки «Else». Слово else означает «иначе», «в противном случае». Операторы, следующие после «Else» выполняются только в том случае, если условие «a < b» не выполняется.
Сравнивать можно не только числа, но и строки. Здесь возникает много нюансов и мы в свое время будем о них говорить. Следующий условный оператор удаляет пробел в конце строки, если строка кончается пробелом:

If Right(p, 1) = " " Then
    p = Left(p, Len(p) - 1)
End If

Рассмотрим еще один пример: переменная s должна получить значение -1, если a < 0, значение 0, если a = 0, и значение 1, если a > 0. Мы можем записать следующую конструкцию:

If a < 0 Then
    s = -1
Else
    If a = 0 Then
        s = 0
    Else
        s = 1
    End If
End If

Здесь вам всё должно быть понятно: один оператор If находится внутри другого. Для того, чтобы логика вложенности была ясней мы выделили группы операторов отступами. Пробелы в начале строк никак не влияют на выполнение операторов, однако они помогают человеку понять логику программы.

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

If a < 0 Then s = -1 ElseIf a = 0 Then s = 0 Else s = 1

Как видите, запись сократилась еще и за счет того, что пропали операторы End If. Отсутствие оператора End If, как вы знаете, чревато некоторыми недоразумениями. Например, в следующем варианте того же самого примера два слова If, но одно слово Else:

s = 1
If a <= 0 Then If a < 0 Then s = -1 Else s = 0

Непонятно, к которому из двух слов If бейсик отнесет слово Else. Эта двусмысленность решается стандартным образом: встретив слово Else, бейсик просматривает строку влево до первого If, который не имеет своего Else.

Вы можете подумать, что однострочный If можно применять только с такими группами операторов, которые состоят из одиночного оператора. Это не так. Группа может состоять из нескольких операторов, только между ними нужно поставить разделитель «:». Допустим, вам надо обменять значения переменных a и b, если а>b, тогда можно выполнить следующий оператор:

If a > b Then t = a : a = b : b = t

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

If a < 0 Then : s = -1 : Else : If a = 0 Then : s = 0 : Else : _
s = 1 : End If : End If

Ясно, что слова End If при этом пропускать нельзя. Можно ли при этом говорить о наглядности? Ответ на этот вопрос зависит от того, что вам нужно. Если вам нужна обозримая программа, которая помещается на одном экране, то за наглядность ее деталей наверно можно и не бороться.

Вернемся, однако к первоначальной записи нашего примера. Она ведь тоже не очень наглядна. Понятно, что вложенность операторов If не отражает сути дела, а вызвана только тем, что мы пытаемся выбирать из трех вариантов при помощи двухальтернативного If. Однако ведь у оператора If есть в распоряжении не только Else. Можно ведь использвать еще и ElseIf. Вот как будет выглядеть наш If, если его «разлить на троих».

If a < 0 Then
    s = -1
ElseIf a = 0 Then
    s = 0
Else
    s = 1
End If

Здесь внутри одного и того же оператора If уже три группы операторов. Вторая из них начинается со строки «ElseIf». А выполнение такого оператора происходит следующим образом: проверяется условие в строке «If» и если оно истинно, выполняется первая группа операторов. Если же это условие ложно, то проверяется условие в строке «ElseIf». При истинности этого условия выбор делается в пользу второй группы. Группа операторов после строки «Else» выполняется только в том случае, если оба условия ложны.

Оператор If может содержать несколько строк «ElseIf», каждая со своим условием и группой операторов. Бейсик будет проверять условия последовательно сверху вниз, пока не натолкнется на истинное. Группа с истинным условием и будет выполняться. Если все условия ложны то выполнится группа «Else». Если же «Else» отсутствует, а такое тоже возможно, то не будет выполнена ни одна из групп. После выполнения операторов любой из групп бейсик переходит к операторам, следующим непосредственно за строкой «End If», таким образом, различные группы операторов взаимоисключают друг друга.

Если проверяется много условий, каждое из которых сравнивает значение одного и того же выражения, то можно использовать оператор Select. Например, мы хотим проанализировать значение переменной a, и в соответствии с этим анализом присвоить текстовые значения переменным s и t. Оператор Select будет выглядеть так:

Select Case a
Case 0
    s = "Ноль"
    t = "Никого"
Case 1, 2
    s = "Один или два"
    t = "Нормально"
Case Else
    s = "Больше двух"
    t = "Многовато будет"
End Select

Разберем подробнее этот оператор. Строки «Select Case» и «End Select» ограничивают начало и конец оператора. Внутри оператора имеются несколько строк «Case», которые разбивают содержимое оператора Case на группы операторов. Здесь так же как и в операторе If, бейсик может выполнить только одну группу операторов или не выполнить ни одной. Выполнение оператора начинается с вычисления контрольного выражения, которое стоит после слов «Select Case». В нашем случае это будет просто значение переменной a. Далее бейсик перебирает строки «Case» и проверяет, не равно ли контрольное выражение одному из выражений, которые перечислены после слова «Case». Первое же совпавшее выражение приводит к выполнению соответствующей группы операторов. Если ни одно из выражений не совпало, то выполняется группа, стоящая после строки «Case Else». Если же такой строки нет, то бейсик переходит к операторам, стоящим после «End Select», так и не выполнив ни одной группы.
Другой пример. Оператор анализирует первую букву строки s и присваивает переменной p значение «З», если эта буква звонкая и значение «Г», если эта буква глухая. Если первая буква строки не является согласной русской буквой, то оператор ничего не делает.

Select Case UCase(Left(s, 1))
Case "Б", "В", "Г", "Д", "Ж", "З", "Л", "М", "Н", "Р"
    p = "З"
Case "К", "П", "С", "Т", "Ф", "Х", "Ц", "Ч", "Ш", "Щ"
    p = "Г"
End Select

Для того, чтобы не дублировать сравнения для больших и маленьких букв, анализируемая буква была преобразована в верхний регистр при помощи функции UCase (Upper case – верхний регистр). Эта функция принимает один строковый аргумент и возвращает его с буквами преобразованными в верхний регистр. При этом русские буквы преобразуются тоже, (конечно, если в системе есть поддержка русского языка). Имеется аналогичная функция LCase (Lower case – нижний регистр) для преобразования букв в нижний регистр. Обращаем ваше внимание, что обе функции оставляют неизменным сам аргумент, а результат преобразования только «возвращают».

Вернемся к задаче выделения комментариев из строки вида

s = "содержание1 <!-- комментарий --> содержание2"

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

pos1 = InStr(s, "<!--")
If pos1 > 0 Then
    pos2 = InStr(pos1, s, "-->")
    If Pos2 > 0 Then
        cont = Left(s, pos1 - 1) & Mid(s, pos2 + 3)
        comm = Mid(s, pos1 + 4, pos2 - pos1 - 4)
    Else
        cont = s
        comm = ""
    End If
Else
    cont = s
    comm = ""
End If

Здесь вас должно смутить то, что один и тот же фрагмент программы, повторяется дважды. Мы имеем ввиду два оператора после строки «Else». Когда это только два оператора, то об экономии можно было бы и не заботиться. Ну а если бы это был обширный фрагмент, да в добавок его было бы нужно модифицировать от запуска к запуску? Универсальный способ избежать дублирования кода – это вынос этого кода в подпрограмму, и мы обязательно научимся это делать. Но в нашем случае можно просто немного изменить логику сравнений:

pos1 = InStr(s, "<!--")
If pos1 > 0 Then
    pos2 = InStr(pos1, s, "-->")
End If
If pos1 > 0 And pos2 > 0 Then
    cont = Left(s, pos1 - 1) & Mid(s, pos2 + 3)
    comm = Mid(s, pos1 + 4, pos2 - pos1 - 4)
Else
    cont = s
    comm = ""
End If

Во втором операторе «If» мы видим два сравнения, между которыми стоит слово «And.» В данном случае нам понятно, что это такое, ведь «And» переводится как «и». То есть первая группа операторов выполняется только если истинны оба сравнения. Но стоило бы узнать подробнее о тех возможностях, которые может предоставить нам оператор «If».

Логический тип

На самом деле, после слова «If» или «ElseIf» может стоять произвольное выражение, которое бейсик попытается привести к логическому типу. Выражение логического типа может принимать два значения True – «истина» и False – «ложь». Сравнение – это как раз и есть выражение логического типа, точнее говоря, – выражение, которое при вычислении дает значение логического типа.

Имеется шесть операций сравнения:

  • = – «равно»,
  • <> – «не равно»,
  • > – «больше»,
  • < – «меньше»,
  • >= – «больше или равно»,
  • <= – «меньше или равно»,

Над значениями логического типа возможны математические действия – это так называемые логические связки:

  • Not – «не»
  • And – «и»
  • Or – «или»

Первая связка – не совсем связка, в том смысле, что она не связывает два выражения, как And и Or, а ставится перед некоторым выражением и делает из него отрицание, то есть из True делает False, из FalseTrue. Эта связка аналогична операции смены знака в арифметике «–». Связки And и Or часто называют логическим умножением и логическим сложением. Старшинство этих операций соответствует их арифметическим аналогам – сначала Not, потом And, потом Or.

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

((2 * (A ^ 2)) > 6.2) Or ((c < (3 + (5 * A))) And (s <> " "))

Если же старшинство нескольких стоящих рядом операций одно и то же, то операции выполняются последовательно слева направо:

A * B / C * D

эквивалентно

(((A * B) / C) * D)

Мы уже сталкивались с подобным выражением, когда переводили угол из радианов в градусы:

u = u / 3.14159 * 180

Мы не хотим здесь погружаться в эту нудную тему. Логические связки мы намеренно перечислили не все, имеются также неизвестные нам арифметические операции. Мы хотим лишь подчеркнуть, что логический тип, ничем не хуже арифметического. В частности, логическое значение можно сохранять в переменной.

Оператор

A = B = C

присваивает переменной A значение True, если переменные B и C равны между собой, и False в противном случае. Теперь вместо оператора

If B = C Then

можно написать – не пугайтесь

If A Then

Для тренировки рассмотрим следующий замысловатый оператор присваивания

A = B = C = D

Он выполняется по общим правилам. Здесь операция сравнения «=» выполняется справа налево, т. е.:

A = ((B = C) = D)

Иными словами, переменной A присваивается значение True, когда B равно C, а D равно True, либо B не равно C, а D равно False. В противном случае переменной A присваивается значение False.
Теперь разберемся, как бейсик приводит к логическому типу числовые и строковые выражения. Правила здесь очень простые: ноль приводится к значению False, не ноль – к True. Строковое значение может быть приведено к логическому значению только если это строка «true» или строка «false», при этом регистр букв безразличен. Несколько иллюстрирующих примеров:

n = 5
s = "tRU"
If n Then ' условие удовлетворяется
If n - 5 Then ' условие не удовлетворяется
If s Then ' вызовет ошибку выполнения
If s + "e" Then ' условие удовлетворяется

Бейсик может произвести и обратное преобразование

s = "Begin" & trUE ' даст нам "BeginTrue"
s = 4 + trUE ' даст нам 3

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

Если вы не поняли предыдущего предложения, то данный абзац можно пропустить. Логические операции Not, Or, And (и другие), примененные к числам, не вызывают преобразования этих чисел к логическому типу, а применяются к этим числам «побитово», то есть каждый бит числа рассматривается как логическое значение: 0 — False, 1 — True, а операция производится параллельно над всеми битами. 3 Or 5 дает нам 7, а (Not 0) + 5 дает 4. Скобки в последнем случае обязательны.

Сравнение строк

Строки мы уже сравнивали, и смысл сравнения понятен, когда происходит сравнение строк на равенство или неравенство. Но как поступает бейсик, когда строки сравниваются на «больше» или «меньше»? Например мы написали так:

s = "F"
If s < "G" Then

Здесь придется напомнить вам о том, что каждый символ строки запоминается в компьютере в виде кода – небольшого целого числа от 0 до 255. А числа уже можно сравнивать. Символ «F» меньше символа «G» просто потому что код символа «F» меньше чем код символа «G». Мы не будем здесь приводить коды символов. Скажем лишь, что коды букв соответствуют их алфавитному порядку – чем дальше буква от начала алфавита, тем ее код больше. Код строчных букв больше кода прописных. Код русских букв больше кода латинских. Коды цифр меньше чем коды букв, коды служебных символов (пробел, запятая) еще меньше.

Существует функция Asc, которая позволяет по символу определить код этого символа, например Asc(«F») вернет нам 70, Asc(«G») – 71. Функция Asc применима также к строке, состоящей из нескольких символов. В этом случае она возвращает код первого символа, а остальные символы игнорирует. Таким образом, если вы хотите узнать код второго символа в строке s, вам придется написать что-то вроде Asc(Mid(s, 2, 1)). Если вы примените функцию Asc к пустой строке, то получите ошибку выполнения.

В бейсике имеется функция Chr, которая решает обратную задачу – по коду символа определяет сам символ, точнее возвращается строка, состоящая из одного этого символа. Например, оператор

s = Chr(70) & "-" & Chr(71)

присвоит строке s значение «F-G». Без функции Chr бывает трудно обойтись, когда требуется включить в строку символы, не имеющие графического представления, например, символ табуляции или перевода строки.

Но вернемся к сравнению строк. Как бейсик поступит, если строки состоят из нескольких символов? В этом случае сначала сравниваются первые символы строк. Если они равны, то сравниваются вторые символы и так до тех пор пока будет получено несовпадение, либо одна из строк не кончится. При несовпадении символов бейсик сравнит коды этих символов – и вопрос решен. А если одна из строк кончится раньше, то бейсик будет полагать, что именно эта строка меньше.

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

Для упорядочения фамилий нам надо научиться сравнивать строки без учета регистра букв. Мы уже один раз решали такую задачу и использовали при этом функцию приведения к верхнему регистру Upper. Можно использовать эту функцию и сейчас. Пусть, например,

s = "ИГНАТОВ"
t = "Иванов"

тогда вместо

If s < t Then

нужно написать

If UCase(s) < UCase(t) Then

Еще одну возможность предоставляет нам функция StrComp. Функция StrComp(s, t) сравнивает две строки s и t и возвращает 1, если первая строка меньше второй; возвращает 0, если строки равны; и возвращает 1 если первая строка больше второй. Первые два параметра функции представляют собой сравниваемые строки. Но у функции может быть и третий параметр – тип сравнения. Если третий параметр не задан, то предполагается, что он равен 0, то есть сравнение происходит обычным образом – так называемое двоичное сравнение. Если третий параметр равен единице, то сравнение происходит без учета регистра, точнее говоря, происходит сравнение строк, преобразованных в верхний регистр – так называемое текстовое сравнение. Таким образом, в нашем случае возможен еще и такой вариант:

If StrComp(s, t, 1) = -1 Then

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

s ="XXpXXpXXPXXP"
p = "P"
n = InStr(4, s, p, 1)
' Текстовое сравнение начиная с позиции 4 возвращает 6.
n = InStr(1, s, p, 0)
' Двоичное сравнение начиная с позиции 1 возвращает 9.
n = InStr(s, p)
' Двоичное сравнение (тип сравнения не указан) возвращает 9.
n = InStr(1, s, "W")
' Двоичное сравнение возвращает 0 ("W" не найдено).
n = InstrRev(s, p, 10, 0)
' Двоичное сравнение начиная с позиции 10 возвращает 9.
n = InstrRev(s, p, -1, 1)
' Текстовое сравнение начиная с последней позиции
' возвращает 12.
n = InstrRev(s, p, 8)
' Двоичное сравнение (тип сравнения не указан) возвращает 0.
ss = Replace("XXpXXPXXp", "p", "Y")
' Двоичное сравнение, начиная с позиции 1
' возвращает "XXYXXPXXY".
ss = Replace("XXpXXPXXp", "p", "Y", 3, -1, 1)
' Текстовое сравнение, начиная с позиции 3
' возвращает "YXXYXXY".

Основные операторы языка программирования

Microsoft Quick Basic

Арифметические действия, функции

Математика

Microsoft Quick Basic

сложение    

+

вычитание  

умножение

*

деление

/

возведение в степень (x2)

Х^2

извлечение квадратного корня

SQR(x)

sin(a)

sin(a)

cos(a)

cos(a)

tg(a)

tg(a)

ctg(a)

ctg(a)

ln(a)

ln(a)

абсолютное значение числа

ABS(a)

целая часть числа

INT(a)

Операторы ввода-вывода

INPUT – ввод информации

PRINT – вывод информации

INPUT A – ввод числовой переменной А

PRINT A — вывод числовой переменной А

INPUT B$ — ввод символьной переменной B$ 

PRINT B$ — вывод символьной переменной B$

INPUT “Введите число”; C – ввод числовой переменной C с подсказкой

PRINT “Результат -”; C – вывод числовой переменной C с подсказкой

INPUT “Введите слово”; L$ — ввод символьной переменной L$ с подсказкой

PRINT “Результат -”; ”; L$ — вывод символьной переменной L$ с подсказкой

Операторы ветвления

IF

если

THEN

то (оператор условного перехода)

ELSE

Иначе

GOTO

оператор безусловного перехода

Структура использования операторов ветвления

Вариант 1 (Простое ветвление)

IF <условие>  THEN <действие1> ELSE <действие2>

Вариант 2 (Сложное ветвление)

      IF <условие>  THEN 1 ELSE  2

  1  <действие1>

      GOTO 3

  2  <действие2>

  3  …продолжение программы

Циклы

FOR

для (начало цикла)

TO

до

STEP

шаг (по умолчанию =1)

NEXT

следующий (конец цикла)

 Среди циклических алгоритмов различают:

  1. Цикл со счетчиком
  2. Цикл «Пока»
  3. Вложенный цикл (цикл в цикле)

Организация цикла со счетчиком

FOR I=1 TO 100 STEP 4

<тело цикла>                        — повторяющиеся действия

NEXT I

Организация цикла «Пока»

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

  1. выполнение цикла в случае выполнения условия;
  2. выполнение цикла в случае не выполнения условия

Вариант 1 (условие выполняется)

  1. IF <условие> THEN 2  ELSE  3
  2. <тело цикла>

GOTO 1

  3  <конец цикла>

Вариант 2 (условие не выполняется)

  1. IF <условие> THEN 3  ELSE  2
  2. <тело цикла>

GOTO 1

  1. <конец цикла>

Организация вложенного цикла

        Для организации вложенного цикла используют два цикла со счетчиком.

FOR I=1 TO 7

FOR J=1 TO 4

<тело вложенного цикла>

NEXT J

NEXT I

        Необходимо помнить, что закрывается сначала вложенный (внутренний цикл), затем закрывается внешний цикл.

Массивы

Это упорядоченная последовательность элементов

        Различают одномерные и двумерные, числовые и символьные массивы.

DIM

оператор объявления массива

DIM A(5)

объявление одномерного числового массива А, состоящего из 5 элементов

DIM B(2,3)

объявление двумерного числового массива В, состоящего из 2 строк и 3 столбцов

DIM C$(4)

объявление одномерного символьного массива С, состоящего из 4 элементов

DATA

описание данных массива

READ

чтение данных

Оператор SOUND

SOUND C, D – звуковой оператор, воспроизводящий частотный         звук

                                        C- звуковая частота (не ниже 37)

                                        D – длительность звучания

Возрастающая частота звука

FOR I =37 TO 2000 STEP 20

SOUND I, 1

LOСATE 12,20:PRINT “Звуковая частота”;I

NEXT I

Случайная звуковая частота

A=37:B=2000

FOR I=1 TO 100

X=(B-A)*RND (1)+A

SOUND X, 1

LOСATE 12,20:PRINT “Звуковая частота=”; X

NEXT I

Оператор  «PLAY»

Играет музыкальные ноты.

  1. Команды октавы и тона:

(О) октава — задает текущую октаву (0-6)

<или> — переходит на одну октаву вверх или вниз

A – G – играет определенную ноту текущей октавы

(N)нота – играет определенную ноту (0-84) в диапазоне семи октав (0-сброс)

2. Команды длительности и темпа:

(L)размер – задает длительность каждой ноты (1-64):L1 – целая нота, L2 – 1/2ноты

ML – вид исполнения legato

MN – вид исполнения normal

MS – вид исполнения staccato
(P)пауза – задает паузу (1-64).P1 – пауза в целую ноту, P2 – ½ ноты и т.д.

(T) темп – задает темп исполнения в четвертях в минуту (32-255)

3.Команды режима:

MF – основное звучание

MB – фоновое звучание

4. Команды изменения ноты:

+(плюс) или # — диез

-(минус)          — бемоль

.(точка)           — длительность 3/2 от размера ноты.

Для выполнения подстрок команды PLAY из строки команды PLAY используйте команду «X»: PLAY «XA$ ;XB$»

Пример:

1 PLAY “T70 MN MB 03 L8EGL16EL32EL16AED”

   PLAY “L8EGL16EL32EL16>C<BA”

   PLAY “L16EA>E<L32A>116D<L32AL16GF+E…PS”

  1. GOTO 1

ГРАФИКА

CLS                                        .…………………….очистка экрана            

SCREEN  n                                …………………графический экран

n=0     текстовый экран (40 на 24)

n=1     текст 40 на 24, графика 320 на 190

n=2     текст 80 на 24, графика 620 на 190

n=12   цветной экран, текст 40 на 24

           графика 640 на 450

LINE(X1,Y1)-(X2,Y2),1        ……….……….…рисование линии

LINE(X1,Y1)-(X2,Y2),1,B        ……………………рисование рамки

LINE(X1,Y1)-(X2,Y2),1,BF        ..……………….закрашенная рамка

CIRCLE(X,Y),R,1                ..………………..………окружность

           R – радиус окружности

CIRCLE(X,Y),R,1,,,K                …………..……..сжатая окружность

          K            –  коэффициент сжатия

          K>1        – сжатие по вертикали

          0 < K<1  — сжатие по горизонтали            

CIRCLE(X,Y),R,1,Nd,Kd        ……………………………..…дуга

          Nd, Kd – начало и конец дуги в радианах

PSET(X,Y),1                ..……………………………………..точка

PAINT(X,Y),1                …………………….………закрашивание

                                                                                     ограниченной    

                                                                                     области

DRAW: ОСНОВНЫЕ КОМАНДЫ

Графические команды

BM…….…….сместиться в точку

B………….….передвигает в текущую точку,

                         но не чертит

M…………….перемещает в точку и рисует

N……………..рисует и возвращает курсор в

                         первоначальную позицию

Команды управления

      Am ………….. задает угол поворота

       m=0……….. нормальная ориентация

       m=1……….. поворот на 900

       m=2……….. поворот на 1800

       m=3……….. поворот на 2700

      Sm ………… изменяет масштаб черчения

m/4………. коэффициент увеличения

S1…………4-кратное уменьшение

S12………. 3-кратное увеличение

     Cm ………… рисует цвет    

     Pn1,n2 …….. цвет заполнения и граница объекта

n1……….. атрибут цвета заполнения

n2……….. атрибут цвета границы

Символьные величины

A$, DD$, MIN$

символьные переменные

LEN(A$)

длина символьной переменной A$

MID$(A$,n,d)

вырезка из символьной переменной A$ с позиции номер n длиной d

LEFT$(A$,3)

вырезка из символьной переменной A$ слева первые три символа

RIGHT$(A$,2)

вырезка из символьной переменной A$ справа первые два символа

CHR$(n)

обращение к соответствующему коду символа клавиатуры

INKEY$

считывание символа от клавиатуры

Другие операторы

GOSUB  N

обращение к подпрограмме, находящейся на строке N

RETURN

выход из подпрограммы

RANDOMIZE

случайный выбор числа

END

конец программы

STOP

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

NOT

отрицание

AND

конъюнкция (и)

OR

дизъюнкция (или)

XOR

исключение или

LOCATE Y,X

локализация курсора (вывод подсказок операторов PRINT, INPUT в нужном месте экрана

Ветвление в языке Бейсик

        Составить блок-схему и программу на языке Бейсик для перехода улицы по сигналу светофора.

Блок-схема

    Н

                                                Введите сигнал светофора

                                                          Зеленый ?

        Стоим на месте                                                переходим улицу

                                                                 К

        CLS

        REM Переход улицы по сигналу светофора

         1 INPUT “Введите сигнал светофора”; A$

        IF A$= “зеленый” THEN  2 ELSE 3

         2 PRINT “Переходим улицу”

        END

         3 PRINT “Стоим на месте”

        GOTO 1                

        Написать игру «Угадай число» на языке BASIC.

CLS

RANDOMIZE TIMER

a = INT(RND(1) * 100)

INPUT «Введите количество попыток»; n

FOR i = 1 TO n

INPUT «Введите число»; b

IF b > a THEN PRINT «Много»

IF b < a THEN PRINT «Мало»

IF b = a THEN

  LOCATE 20, 30: PRINT «Вы угадали!»

  IF i < 5 THEN

    LOCATE 21, 21: PRINT «Вам потребовалось»; i; «попытки»

  ELSE

    LOCATE 21, 21: PRINT «Вам потребовалось»; i; «попыток»

  END IF

  END

END IF

NEXT i

        Составьте программу-тест с использование операторов ветвления

    CLS

    LOCATE 10, 10: INPUT «Умеете ли Вы управлять машиной»; a$

    IF a$ = «y» THEN 1 ELSE 9

1  LOCATE 12, 10: INPUT «А есть ли она у Вас»; a$

    IF a$ = «y» THEN 2 ELSE 6

2  LOCATE 14, 10: INPUT «Ваша машина — иномарка»; a$

    IF a$ = «y» THEN 3 ELSE 4

3  CLS : LOCATE 14, 10: PRINT «Дружок, так это Вас и вашу машину разыскивает Интерпол»

    GOTO 5

4  CLS : LOCATE 14, 10: PRINT «Надеемся, что это не запорожец»

5  END

6  LOCATE 14, 10: INPUT «А велосипед у Вас хоть есть»; a$

    IF a$ = «y» THEN 7 ELSE 8

7 CLS : LOCATE 14, 10: PRINT «Не забывай одевать шлем и кожанную куртку»: END

8 CLS : LOCATE 14, 10: PRINT «Купи фанту и выиграй самокат»: END

9    LOCATE 12, 10: INPUT «А управлять коляской можете»; a$

      IF a$ = «y» THEN 10 ELSE 13

10  LOCATE 14, 10: INPUT «А водительские права у Вас есть»; a$

      IF a$ = «y» THEN 11 ELSE 12

11  CLS : LOCATE 14, 10: PRINT «Надеюсь, что Вы перевезли не одну сотню своих детей»: END

12  CLS : LOCATE 14, 10: PRINT «Обязательно сходите в ГАИ и сдайте экзамен»: END

13  LOCATE 14, 10: INPUT «А руки у Вас хоть есть»; a$

      IF a$ = «y» THEN 14 ELSE 15

14 CLS : LOCATE 14, 10: PRINT «Выньте руки из карманов и займитесь делом»: END

15 CLS : LOCATE 14, 10: PRINT «Хорошо, что голова у Вас еще есть пока»: END

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

  CLS

  INPUT «ВВЕДИТЕ КОЭФФИЦИЕНТ a»; a

  INPUT «ВВЕДИТЕ КОЭФФИЦИЕНТ b»; b

  INPUT «ВВЕДИТЕ КОЭФФИЦИЕНТ c»; c

  IF a = 0 THEN 2 ELSE 3

2 PRINT «Коэффициент а не введен, повторите ввод»

  INPUT «ВВЕДИТЕ КОЭФФИЦИЕНТ «; a

3 D = b ^ 2 — 4 * a * c

  PRINT «D=»; D

  IF D > 0 THEN 4 ELSE 5

4 x1 = (-b + SQR(D)) / 2 * a

  x2 = (-b — SQR(D)) / 2 * a

  PRINT «корень х1=»; x1

  PRINT «корень х2=»; x2

  END

5 IF D = 0 THEN 6 ELSE 7

6 x = -b / 2 * a

  PRINT «корень х=»; x

  END

7 PRINT «корней нет»

        Составить  блок-схему и программу на языке Бейсик для   решения  системы:

        x2     ,   x >=15

A=   x3     ,    x<=0

        x+7  ,    0<x<5

        x      ,   5<=x<15

     Вычислить Z, где Z=A+4

Н

   Введите Х

`

      Х<=0

        A=X^3                                                

                                                                X<5

                                        A=X+7

                                                                                        X<15

                                                                        A=X                                      A=X^2

                                                Z=A+4

                                                Вывод Z

                                                   K

        CLS

        INPUT “Введите Х”; X

        IF X<=0  THEN 1 ELSE 2

  1. A=X^3

GOTO  7

      2   IF X<5 THEN 3 ELSE 4

      3   A=X+7

        GOTO 7

  1. IF X<15 THEN 5 ELSE 6
  2. A=X

GOTO 7

  1. A=X^2
  2. Z=A+4

PRINT “Z=”; Z

END

Циклические алгоритмы

Цикл со счетчиком

        Дано N произвольных чисел. Определите сумму всех чисел и разделите её на 2.

CLS

INPUT “Введите кол-во чисел”; N

FOR I=1 TO N

INPUT “Введите число”; A

S=S+A

NEXT I

PS=S/2

PRINT “Сумма всех чисел=”; S

PRINT “Полусумма чисел=”;PS

        Дано N произвольных чисел. Определите среднее арифметическое всех чисел.

CLS

INPUT “Введите кол-во чисел”; N

FOR I=1 TO N

INPUT “Введите число”; A

S=S+A

NEXT I

SR=S/N

PRINT “Среднее арифметическое=”; SR

        Дано N произвольных чисел. Найдите разность всех отрицательных чисел и возведите её в квадрат.

CLS

INPUT “Введите кол-во чисел”; N

FOR I=1 TO N

INPUT “Введите число”; A

IF A<0 THEN 1  ELSE 2

        1  R=R-A

        2  NEXT I

KR=R^2

PRINT “Разность отрицательных=”; R

PRINT “Квадрат разности=”; KR

        Дано N произвольных чисел. Возведите каждое в квадрат и найдите их сумму.

CLS

INPUT “Введите кол-во чисел”; N

FOR I=1 TO N

INPUT “Введите число”; A

S=S+A^2

NEXT I

PRINT “Сумма квадратов чисел=”; S

        Выведите на экран по возрастающей числа до опредленного  числового предела:

А) четные числа ( в столбик, в строку)

Б) нечетные числа ( в столбик, в строку)

А) в столбик                                                А) в строку

CLS                                                        CLS

INPUT “Введите числовой предел”; P                INPUT “Введите числовой предел”; P

FOR I=2 TO P STEP 2                                FOR I=2 TO P STEP 2

PRINT “Четное число”; I                                PRINT “Четное число”; I;

NEXT I                                                NEXT I

Б) в столбик                                                Б) в строку

CLS                                                        CLS

INPUT “Введите числовой предел”; P                INPUT “Введите числовой предел”; P

FOR I=1 TO P STEP 2                                FOR I=1 TO P STEP 2

PRINT “Нечетное число”; I                        PRINT “Нечетное число”; I;

NEXT I                                                NEXT I

        Дано N различных чисел. Найти: а)максимальное; б) минимальное

А) максимальное                                        Б) минимальное

CLS                                                        CLS

INPUT “Введите кол-во чисел”; N                        INPUT “Введите кол-во чисел”; N

FOR I=1 TO N                                        FOR I=1 TO N

INPUT “Введите число”; A                                INPUT “Введите число”; A

IF A>MAX THEN MAX=A                                IF A<MIN THEN MIN=A

NEXT I                                                NEXT I

PRINT “Максимальное=”; MAX                        PRINT “Минимальное=”; MIN

Примечание: данные алгоритмы нахождение максимального и минимального несовершенные. Так, например, если при нахождении максимального будем вводить только отрицательные числа, то в результате максимальное будет – 0. Или при нахождении минимального будем вводить только положительные числа – результат будет 0.

        Дано N различных чисел. Найти:

А) произведение положительных элементов и сумму отрицательных

Б) кол-во положительных и кол-во отрицательных элементов

А)                                                                 Б)

        CLS                                                                 CLS

        P=1                                                                 INPUT “Введите кол-во чисел”; N

INPUT “Введите кол-во чисел”; N                         FOR I=1 TO N

FOR I=1 TO N                                                 INPUT “Введите число”; A

INPUT “Введите число”; A                                         IF A<0 THEN 1  ELSE 2

        IF A<0 THEN 1  ELSE 2                                         1  OTR=OTR+1

        1  S=S+A                                                         GOTO 3

        GOTO 3                                                                2  POL=POL+1

        2  P=P*A                                                               3  NEXT

        3  NEXT I                                                         PRINT “Кол-во отрицательных=”; OTR

PRINT “Сумма отрицательных=”; S                         PRINT “Кол-во положительных=”; POL

PRINT “Произведение положительных=”; P

        Используя цикл со счетчиком создать движение букв на экране. Должно собраться некоторое слово. Буквы вылетают из разных углов.

CLS

FOR i = 1 TO 10

LOCATE 24 — i, 1 + i * 2: PRINT «А»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 1 + i * 2: PRINT » «

NEXT i

LOCATE 14, 21: PRINT «А»

FOR i = 1 TO 10

LOCATE 24 — i, 2 + i * 2: PRINT «н»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 2 + i * 2: PRINT » «

NEXT i

LOCATE 14, 22: PRINT «н»

FOR i = 1 TO 10

LOCATE 24 — i, 3 + i * 2: PRINT «я»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 3 + i * 2: PRINT » «

NEXT i

LOCATE 14, 23: PRINT «я»

FOR i = 1 TO 10

LOCATE 24 — i, 4 + i * 2: PRINT «-«: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 4 + i * 2: PRINT » «

NEXT i

LOCATE 14, 24: PRINT «-«

FOR i = 1 TO 10

LOCATE 24 — i, 5 + i * 2: PRINT «п»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 5 + i * 2: PRINT » «

NEXT i

LOCATE 14, 25: PRINT «п»

FOR i = 1 TO 10

LOCATE 24 — i, 6 + i * 2: PRINT «у»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 6 + i * 2: PRINT » «

NEXT i

LOCATE 14, 26: PRINT «у»

FOR i = 1 TO 10

LOCATE 24 — i, 7 + i * 2: PRINT «л»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 7 + i * 2: PRINT » «

NEXT i

LOCATE 14, 27: PRINT «л»

FOR i = 1 TO 10

LOCATE 24 — i, 8 + i * 2: PRINT «е»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 8 + i * 2: PRINT » «

NEXT i

LOCATE 14, 28: PRINT «е»

FOR i = 1 TO 10

LOCATE 24 — i, 9 + i * 2: PRINT «м»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 9 + i * 2: PRINT » «

NEXT i

LOCATE 14, 29: PRINT «м»

FOR i = 1 TO 10

LOCATE 24 — i, 10 + i * 2: PRINT «ё»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 10 + i * 2: PRINT » «

NEXT i

LOCATE 14, 30: PRINT «ё»

FOR i = 1 TO 10

LOCATE 24 — i, 11 + i * 2: PRINT «т»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 11 + i * 2: PRINT » «

NEXT i

LOCATE 14, 31: PRINT «т»

FOR i = 1 TO 10

LOCATE 24 — i, 12 + i * 2: PRINT «ч»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 12 + i * 2: PRINT » «

NEXT i

LOCATE 14, 32: PRINT «ч»

FOR i = 1 TO 10

LOCATE 24 — i, 13 + i * 2: PRINT «и»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 13 + i * 2: PRINT » «

NEXT i

LOCATE 14, 33: PRINT «и»

FOR i = 1 TO 10

LOCATE 24 — i, 14 + i * 2: PRINT «ц»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 14 + i * 2: PRINT » «

NEXT i

LOCATE 14, 34: PRINT «ц»

FOR i = 1 TO 10

LOCATE 24 — i, 15 + i * 2: PRINT «а»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 15 + i * 2: PRINT » «

NEXT i

LOCATE 14, 35: PRINT «а»

FOR i = 1 TO 10

LOCATE 24 — i, 16 + i * 2: PRINT «!»: FOR j = 1 TO 3500: NEXT j

LOCATE 24 — i, 16 + i * 2: PRINT » «

NEXT i

LOCATE 14, 36: PRINT «!»

Цикл «Пока»

        К числу меньшему 1000 прибавлять по 15 до тех пор, пока сумма не станет больше 1000. Определить количество слагаемых.

        CLS

        INPUT “Введите число меньше 1000”; C

        1  IF C>1000 THEN 3 ELSE 2

        2  C=C+15

        H=H+1

        GOTO 1

        3  PRINT “Число увеличилось до -”; C

            PRINT “Кол-во слагаемых=”; H

        От числа большего 200 отнимать по 25 до тех пор, пока оно не станет меньше 200. Определить количество вычитаний.

CLS

        INPUT “Введите число больше 200”; C

        1  IF C<200 THEN 3 ELSE 2

        2  C=C-25

        H=H+1

        GOTO 1

        3  PRINT “Число уменьшилось до -”; C

            PRINT “Кол-во вычитаний =”; H

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

CLS

P=1

        FOR I=2 TO 100 STEP 2

        PRINT “Четное число-”;I

        P=P*I

        H=H+1

            IF P>3000 THEN 2 ELSE 1

        1        NEXT  I

        2  PRINT “Произведение четных -”; P

PRINT “Кол-во шагов  -”; H

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

CLS

        FOR I=1 TO 1000 STEP 2

        PRINT “Нечетное число-”;I

        S=S+I^2

        H=H+1

            IF S>10000 THEN 2 ELSE 1

        1        NEXT  I

        2  PRINT “Сумма квадратов нечетных -”; S

PRINT “Кол-во шагов  -”; H

Вложенный цикл (цикл в цикле)

        Бригада из 3 рабочих работала 2 дня. Каждый рабочий в день зарабатывал разную зарплату. Найти: общий заработок бригады за каждый день, общий заработок за весь период, среднюю зарплату бригады за два дня.

        CLS

        FOR I=1 TO 2

        D=0

PRINT “День №”; I

        FOR J=1 TO 3

        INPUT “Введите зарплату рабочего”; A

        D=D+A

        S=S+A

        NEXT J

PRINT “Общий заработок бригады за день=”;D

        NEXT I

        SR=S/6

        PRINT “Общий заработок бригады за два дня=”; S

        PRINT “Средняя зарплата бригады=”; SR

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

CLS

FOR i = 1 TO 5: s = 0

PRINT «Прозводительность рабочего №»; i

FOR j = 1 TO 3

INPUT «Произвел за час»; a

s = s + a

d = d + s

NEXT j

PRINT «Итого за 3 часа=»; s

NEXT i

PRINT «Всего=»; d

Массивы

Одномерный массив

        Сформируйте одномерный символьный массив F$, состоящий из 7 фамилий студентов. Затем выведете этот массив на экран монитора.

   CLS

   DIM F$(7)

   FOR I = 1 TO 7

   INPUT «Введите фамилию и имя студента»; F$(I)

   NEXT I

   PRINT «Cписок введенных студентов»

   FOR I = 1 TO 7

   PRINT F$(I)

   NEXT I

        Имеется одномерный числовой массив М(3) определите произведение всех отрицательных элементов массива

CLS

p = 1

DIM M( 3)

FOR I = 1 TO 3

INPUT «Введите элемент»; M(i)

IF M(i) < 0 THEN p = p * M(i)

NEXT  I

PRINT «Произведение отрицательных эл-тов=»; p

        Имеется одномерный массив А(7). Найти:

А) максимальный элемент

Б) минимальный элемент

В) разность между максимальный и минимальным элементами

А)                                                                                    Б)

CLS                                                         CLS

DIM a(7)                                                 DIM a(7)

FOR i = 1 TO 7                                                FOR i = 1 TO 7

INPUT «ввести элементы массива»; a(i)                INPUT «ввести элементы массива»; a(i)

NEXT i                                                         NEXT i

max = a(1)                                                 min = a(1)

FOR i = 2 TO 7                                         FOR i = 2 TO 7

IF a(i) > max THEN max = a(i)                        IF a(i) < min THEN min = a(i)

NEXT i                                                         NEXT  i

PRINT «max =»; max                                         PRINT «min =»; min

В)

CLS

DIM a(7)

FOR i = 1 TO 7

INPUT «ввести элементы массива»; a(i)

NEXT i

max = a(1)

FOR i = 2 TO 7

IF a(i) > max THEN max = a(i)

NEXT  i

PRINT «max =»; max

min = a(1)

FOR i = 2 TO 7

IF a(i) < min THEN min = a(i)

NEXT i

PRINT «min =»; min

s = max — min

PRINT «разность =»; s

        Написать программу сортировки одномерного массива.

CLS

INPUT n

DIM a(n)

RANDOMIZE (TIMER)

FOR i = 1 TO n

 a(i) = INT(RND * 100)

NEXT i

FOR j = 1 TO n

 FOR k = 1 TO j

  IF a(j) > a(k) THEN SWAP a(j), a(k)

  NEXT k

NEXT j

FOR i = 1 TO n

 PRINT a(i)

NEXT i

Дан массив одномерный числовой массив М из 8 элементов. Посчитать сумму и произведение всех элементов массива, сумму отрицательных элементов.

CLS

K = 0

S = 1

R = 0

DIM M(8)

FOR I = 1 TO 8

 INPUT M(I)

NEXT

FOR I = 1 TO 8

S = S * M(I)

IF M(I) < 0 THEN R = R + M(I)

K = K + M(I)

NEXT

PRINT S; «произведение элементов массива»

PRINT R; «сумма отрицательных элементов»

PRINT K; «сумма всех элементов массива»

        Написать программу, определяющую нечетные элементы массива и их сумму.      

CLS

INPUT «Введите число»; N

DIM a(N)

RANDOMIZE (TIMER)

FOR i = 1 TO N

 a(i) = INT(RND * 100)

 PRINT a(i)

NEXT i

PRINT

PRINT «Нечетные элементы массива:»

FOR j = 1 TO N

 IF a(j) / 2 <> INT(a(j) / 2) THEN

   b = b + a(j)

   PRINT a(j)

 END IF

NEXT j

PRINT

PRINT «Сумма нечетных элементов массива=»; b

        Имеется одномерный числовой массив G из семи элементов. Найдите среднее арифметическое всех элементов и сумму квадратов отрицательных чисел.

   CLS

   PRINT «Вводим массив G»

   DIM G(7)

   FOR I = 1 TO 7

   INPUT «Ввести элементы массива»; G(I)

   S = S + G(I)

   IF G(I) < 0 THEN K = K + G(I) ^ 2

   NEXT I

   PRINT «Выводим массив n»

   FOR I = 1 TO 7

   PRINT G(I)

   NEXT I

   C = S / 7

   PRINT «Среднее арифметическое равно»; C

   PRINT «Сумма квадратов отрицательных чисел равна»; K

        Вывести список 5 учащихся с оценками с учетом их успеваемости в убывающем порядке и среднюю успеваемость по группе.

CLS

DIM f$(5), o(5)

s = 0

FOR i = 1 TO 5

  PRINT «Введите фамилию»; i; «студента»;

  INPUT f$(i)

  INPUT «Введите его оценку»; o(i)

  s = s + o(i)

  b = s / 5

  FOR j = 1 TO i

    IF o(i) > o(j) THEN SWAP o(i), o(j)

  NEXT

NEXT

FOR i = 1 TO 5

  PRINT f$(i), o(i)

NEXT

PRINT «Средний балл=»; b

        Написать программу, которая вычисляет кол-во лет и дней между 2 датами.

CLS

INPUT «Введите первую дату (дд.мм.гггг)»; a$

INPUT «Введите вторую дату (дд.мм.гггг)»; b$

PRINT

DIM s(12)

DATA 31,28,31,30,31,30,31,31,30,31,30,31

FOR i = 1 TO 12

   READ s(i)

NEXT

g1 = VAL(MID$(a$, 7, 4))

g2 = VAL(MID$(b$, 7, 4))

m1 = VAL(MID$(a$, 4, 2))

m2 = VAL(MID$(b$, 4, 2))

d1 = VAL(MID$(a$, 1, 2))

d2 = VAL(MID$(b$, 1, 2))

IF LEN(a$) <> 10 OR LEN(b$) <> 10 THEN

   LOCATE 4, 10

   PRINT «Неверный формат ввода!»

   END

END IF

IF MID$(a$, 3, 1) <> «.» OR MID$(a$, 6, 1) <> «.» THEN

   LOCATE 4, 10

   PRINT «Неверный формат ввода!»

   END

END IF

IF MID$(b$, 3, 1) <> «.» OR MID$(b$, 6, 1) <> «.» THEN

   LOCATE 4, 10

   PRINT «Неверный формат ввода!»

   END

END IF

FOR i = 1 TO 12

   IF d1 > s(m1) OR d2 > s(m2) THEN

      LOCATE 4, 5

      PRINT «Дата, которую вы ввели не существует!»

      END

   END IF

NEXT

‘Рассчет количеcтва лет

IF g1 > g2 THEN

   g = g1 — g2

   IF g2 > g1 AND m1 > m2 THEN g = g — 1

   IF g1 > g2 AND m2 > m1 THEN g = g — 1

ELSE

   g = g2 — g1

   IF g2 > g1 AND m1 > m2 THEN g = g — 1

   IF g1 > g2 AND m2 > m1 THEN g = g — 1

END IF

IF g = 0 THEN GOTO 1

FOR i = 2 TO 4

   IF VAL(RIGHT$(STR$(g), 1)) = i THEN p$ = «года»

NEXT

IF VAL(RIGHT$(STR$(g), 1)) = 1 THEN p$ = «год»

IF VAL(RIGHT$(STR$(g), 1)) > 4 OR VAL(RIGHT$(STR$(g), 1)) = 0 THEN p$ = «лет»

IF VAL(RIGHT$(STR$(g), 2)) >= 10 AND VAL(RIGHT$(STR$(g), 2)) <= 14 THEN p$ = «лет»

PRINT g; p$

1 ‘Рассчет количеcтва месяцев

IF g1 = g2 THEN

   IF m1 > m2 THEN m = m1 — m2 ELSE m = m2 — m1

ELSE

   IF g1 < g2 AND m1 > m2 THEN m = 12 — m1 + m2

   IF g1 > g2 AND m1 < m2 THEN m = 12 — m2 + m1

   IF g1 < g2 AND m1 < m2 THEN m = m2 — m1

   IF g1 > g2 AND m1 > m2 THEN m = m1 — m2

END IF

IF m1 = m2 THEN GOTO 2

FOR i = 2 TO 4

   IF VAL(RIGHT$(STR$(m), 1)) = i THEN p$ = «месяца»

NEXT

IF VAL(RIGHT$(STR$(m), 1)) = 1 THEN p$ = «месяц»

IF VAL(RIGHT$(STR$(m), 1)) > 4 OR VAL(RIGHT$(STR$(m), 1)) = 0 THEN p$ = «месяцев»

IF VAL(RIGHT$(STR$(m), 2)) >= 10 AND VAL(RIGHT$(STR$(m), 2)) <= 14 THEN p$ = «месяцев»

PRINT m; p$

2 ‘Рассчет количеcтва дней

IF g = 0 AND m1 = m2 THEN

   IF d1 > d2 THEN dn = d1 — d2 ELSE dn = d2 — d1

END IF

IF g1 < g2 THEN

  IF m1 < m2 AND d1 < d2 THEN dn = d2 — d1

  IF m1 < m2 AND d1 > d2 THEN dn = d2 — d1

END IF

FOR i = 2 TO 4

   IF VAL(RIGHT$(STR$(dn), 1)) = i THEN p$ = «дня»

NEXT

IF VAL(RIGHT$(STR$(dn), 1)) = 1 THEN p$ = «день»

IF VAL(RIGHT$(STR$(dn), 1)) > 4 OR VAL(RIGHT$(STR$(dn), 1)) = 0 THEN p$ = «дней»

IF VAL(RIGHT$(STR$(dn), 2)) >= 10 AND VAL(RIGHT$(STR$(dn), 2)) <= 14 THEN p$ = «дней»

IF g = 0 AND m = 0 AND dn = 0 THEN

   LOCATE 4, 20

   PRINT «Вы ввели две одинаковые даты!»

   END

END IF

PRINT dn; p$

Двумерный массив

Имеется двумерный числовой массив М(2,3) определите произведение всех отрицательных элементов массива

CLS

p = 1

DIM M(2, 3)

FOR i = 1 TO 2

FOR j = 1 TO 3

INPUT «Введите элемент»; M(i, j)

IF M(i, j) < 0 THEN p = p * M(i, j)

NEXT j, i

PRINT «Произведение отрицательных эл-тов=»; p

Имеется двумерный числовой массив А(2,4) требуется определить сумму всех положительных элементов массива

CLS

DIM a(2, 4)

FOR i = 1 TO 2

FOR j = 1 TO 4

INPUT «Введите элемент»; a(i, j)

IF a(i, j) > 0 THEN s = s + a(i, j)

NEXT j, i

PRINT «Сумма положительных эл-тов=»; s

Имеется двумерный числовой массив А(3,4). Найти:

А) максимальный элемент

Б) минимальный элемент

В) разность между максимальный и минимальным элементами

А)                                                                         Б)

CLS                                                                 CLS

DIM a(3, 4)                                                         DIM a(3, 4)

FOR i = 1 TO 3                                                         FOR i = 1 TO 3

FOR j = 1 TO 4                                                         FOR j = 1 TO 4

INPUT «ввести элементы массива»; a(i, j)                         INPUT «ввести элементы массива»; a(i, j)

NEXT j, i                                                                 NEXT j, i

max = a(1, 1)                                                        min = a(1, 1)

FOR i = 1 TO 3                                                         FOR i = 1 TO 3

FOR j = 1 TO 4                                                         FOR j = 1 TO 4

IF a(i, j) > max THEN max = a(i, j)                                 IF a(i, j) < min THEN min = a(i, j)

NEXT j, i                                                                 NEXT j, i

PRINT «max =»; max                                                 PRINT «min =»; min

В)

CLS

DIM a(3, 4)

FOR i = 1 TO 3

FOR j = 1 TO 4

INPUT «ввести элементы массива»; a(i, j)

NEXT j, i

max = a(1, 1)

FOR i = 1 TO 3

FOR j = 1 TO 4

IF a(i, j) > max THEN max = a(i, j)

NEXT j, i

PRINT «max =»; max

min = a(1, 1)

FOR i = 1 TO 3

FOR j = 1 TO 4

IF a(i, j) < min THEN min = a(i, j)

NEXT j, i

PRINT «min =»; min

s = max — min

PRINT «разность =»; s

        Имеется двумерный числовой массив F(3,2) Определить максимальный элемент

и его номер

CLS

DIM f(3, 2)

LOCATE 1, 30: PRINT «Ввод массива»

FOR i = 1 TO 3

a = 24

FOR j = 1 TO 2

LOCATE i + 1, j * a — 22: PRINT «Эл-нт(«; i; «,»; j; «)=»

LOCATE i + 1, j * a — 6: INPUT f(i, j)

NEXT j, i

max = f(1, 1)

FOR i = 1 TO 3

FOR j = 1 TO 2

IF f(i, j) > max THEN max = f(i, j): LOCATE 6, 30: PRINT «(«; i; «,»; j; «)»

NEXT j, i

LOCATE 6, 5: PRINT «max=»; max; «Это элемент -«

        Имеется двумерный числовой массив состоящий из 2 столбцов и 3 строк найдите кол-во положительных элементов массива

CLS

DIM M(3, 2)

FOR i = 1 TO 3

FOR j = 1 TO 2

INPUT «Введите элемент»; M(i, j)

IF M(i, j) > 0 THEN h = h + 1

NEXT j, i

PRINT «Количество положительных эл-тов=»; h

        Имеется двумерный числовой массив F(3,2) Сформировать новый массив в котором к элементам 1 столбца прибавляется по 5, а элементы 2 столбца возводятся в квадрат

CLS

DIM f(3, 2)

LOCATE 1, 30: PRINT «Ввод массива»

FOR i = 1 TO 3

a = 24

FOR j = 1 TO 2

LOCATE i + 1, j * a — 22: PRINT «Эл-нт(«; i; «,»; j; «)=»

LOCATE i + 1, j * a — 6: INPUT f(i, j)

NEXT j, i

LOCATE 6, 30: PRINT «Вывод нового массива»

FOR i = 1 TO 3

a = 24

FOR j = 1 TO 2

IF j = 1 THEN f(i, j) = f(i, j) + 5

IF j = 2 THEN f(i, j) = f(i, j) ^ 2

LOCATE i + 7, j * a — 22: PRINT «Эл-нт(«; i; «,»; j; «)=»

LOCATE i + 7, j * a — 6: PRINT f(i, j)

NEXT j, i

        Написать программу, выводящую по спирали все числа от 1 до 19^2 и вычисляющую площадь квадрата по его стороне.

CLS

COLOR 15

INPUT «Введите сторону квадрата»; n

DIM s(n, n), b$(n, n), cv(n, n)

c = 1

b = 1

FOR i = 1 TO n ^ 2

10 IF a = n AND c = 1 THEN c = 2

   IF b = n AND c = 2 THEN c = 3

   IF a = 1 AND c = 3 THEN c = 4

   IF b = 1 AND c = 4 THEN c = 1

   IF c = 1 THEN a = a + 1

   IF c = 2 THEN b = b + 1

   IF c = 3 THEN a = a — 1

   IF c = 4 THEN b = b — 1

   IF s(a, b) > 0 THEN

     IF c = 1 THEN a = a — 1

     IF c = 2 THEN b = b — 1

     IF c = 3 THEN a = a + 1

     IF c = 4 THEN b = b + 1

     c = c + 1

     IF c = 5 THEN c = 1

     GOTO 10

   END IF

   cw = cw + 1

   IF cw = 15 THEN cw = 1

   cv(a, b) = cw

   s(a, b) = i

NEXT

cv(a, b) = 31

FOR i = 1 TO n

  FOR j = 1 TO n

    b$(j, i) = STR$(s(j, i))

    IF LEN(b$(j, i)) < 4 THEN

      b$(j, i) = SPACE$(4 — LEN(b$(j, i))) + b$(j, i)

    END IF

    COLOR cv(j, i): PRINT b$(j, i);

  NEXT

  PRINT

NEXT

COLOR 15

Графика

        Нарисовать снеговика

CLS

SCREEN 12

CIRCLE (295, 154), 55, 1

CIRCLE (295, 64), 35, 1

CIRCLE (295, 284), 75, 1

CIRCLE (225, 154), 15, 1

CIRCLE (365, 154), 15, 1

CIRCLE (225, 350), 20, 1

CIRCLE (365, 350), 20, 1

PAINT (295, 154), 1

PAINT (295, 64), 1

CIRCLE (280, 59), 3, 0

PAINT (280, 59), 0

CIRCLE (305, 59), 3, 0

PAINT (307, 59), 0

PAINT (295, 284), 1

PAINT (225, 154), 1

PAINT (365, 154), 1

PAINT (225, 350), 1

PAINT (365, 350), 1

        Нарисовать цветной ковер из линий

CLS

SCREEN 12

FOR i = 1 TO 15

LINE (10 + i * 35, 10)-(20 + i * 35, 450), i, BF

NEXT i

FOR i = 1 TO 15

LINE (10, 10 + i * 26)-(600, 20 + i * 26), i, BF

NEXT i

        Нарисовать дом по следующим параметрам: ширина, высота дома; кол-во этажей и подъездов, высота крыши.

   REM строим дом

  CLS

  SCREEN 12

  INPUT «введите ширину дома»; h1

  INPUT «введите высоту дома»; h2

  INPUT «введите кол-во этажей»; k

  INPUT «введите кол-во подъездов»; p

  INPUT «введите высоту крыши»; l

  FOR i = 1 TO k

  x = 0

  y = y + h2

  FOR j = 1 TO p

  x = x + h1

  GOSUB 1

  NEXT j, i

  LINE (100, 400 — y)-(100 + x / 2, 400 — y — l), 5

  LINE (100 + x, 400 — y)-(100 + x / 2, 400 — y — l), 5

  END

1 LINE (100 + x — h1, 400 — y + h2)-(100 + x, 400 — y), 5, B

  RETURN

        Задать вращение линии на экране

CLS

  SCREEN 12

1 c = 1

2 FOR c = 1 TO 15

  FOR i = 1 TO 35

  LINE (320 + i * 5, 50 + i * 5)-(320 — i * 5, 400 — i * 5), c

  FOR k = 1 TO 6000: NEXT k

  LINE (320 + i * 5, 50 + i * 5)-(320 — i * 5, 400 — i * 5), 0

  SOUND 37 + i * 30, 1

  NEXT i

  FOR i = 1 TO 35

  LINE (495 — i * 5, 225 + i * 5)-(145 + i * 5, 225 — i * 5), c

  FOR k = 1 TO 6000: NEXT k

  LINE (495 — i * 5, 225 + i * 5)-(145 + i * 5, 225 — i * 5), 0

  SOUND 1200 — i * 30, 1

  NEXT i

  NEXT c

  IF c = 15 THEN 1

  GOTO 2

        Нарисовать чертика с рогами, которые светятся

SCREEN 9

   dx = .1

   dy = .1

   x1 = 350

   x = 250

   y = 120

   LINE (1, 1)-(630, 340), 13, B

   CIRCLE (300, 170), 90, 14

      CIRCLE (250, 150), 10, 9

      CIRCLE (250, 150), 5, 1

   CIRCLE (350, 150), 10, 9

   CIRCLE (350, 150), 5, 1

      CIRCLE (300, 170), 20, 4

      PAINT (300, 170), 4

   CIRCLE (300, 210), 20, 4, , , .5

   WHILE INKEY$ = «»

         CIRCLE (x, y), 5, 1

         x = x + dx

         y = y + dy

         FOR i = 1 TO 500: NEXT

         IF x < 200 + 10 THEN dx = .1

         IF x > 200 — 10 THEN dx = -.1

         IF y < 100 + 10 THEN dy = .1

         IF y > 100 — 10 THEN dy = -.1

        CIRCLE (x1, y), 5, 1

         x = x + dx

         y = y + dy

         FOR i = 1 TO 500: NEXT

         IF x < 300 + 10 THEN dx = .1

         IF x > 300 — 10 THEN dx = -.1

         IF y < 100 + 10 THEN dy = .1

         IF y > 100 — 10 THEN dy = -.1

   WEND

   x2 = 1

   dx2 = 2

   INPUT «Включить электричество»; z$

   IF z$ = «да» THEN 10 ELSE 20

10 WHILE INKEY$ = «»

         x2 = x2 + dx2

         CIRCLE (350, 85), 10, 4

         PAINT (350, 85), x2, 4

         CIRCLE (250, 85), 10, 4

         PAINT (250, 85), x2, 4

         IF x2 >= 16 THEN x2 = 1

      FOR i = 1 TO 500 STEP .1: NEXT

   WEND: GOTO 30

20 CLS

30  PRINT «Ну что, пора прощаться»

        Написать программу, вычерчивающую оси координат и графики различных функций.

        CLS

        mas = 30’Масштаб системы координат

        PI = 3.141592654#

        INPUT «x1:», a

        INPUT «x2:», b

        INPUT «Шаг:», h

        IF h = 0 THEN h = .001

        SCREEN 9

        ‘Рисование системы координат

        LINE (290, 310)-(290, 10), 1

        LINE (10, 175)-(620, 175), 1

        FOR x = 290 TO 600 STEP mas

          LINE (x, 173)-(x, 177), 7

        NEXT x

        FOR x = 290 TO 10 STEP -mas

          LINE (x, 173)-(x, 177), 7

        NEXT x

        FOR y = 175 TO 25 STEP -mas

          LINE (288, y)-(292, y), 7

        NEXT y

        FOR y = 175 TO 300 STEP mas

          LINE (288, y)-(292, y), 7

        NEXT y

        LOCATE 19, 5: COLOR 10: PRINT «y=1/x»

        FOR x = a TO b STEP h

          IF x <> 0 THEN

           y = 1 / x

           y = y * mas

           y = 175 — y

           x1 = x * mas

           IF x1 > 640 THEN EXIT FOR

           PSET (x1 + 290, y), 10

          END IF

        NEXT x

        LOCATE 20, 5: COLOR 11: PRINT «y=arctg(x)»

        FOR x = a TO b STEP h

          y = ATN(x)

          y = y * mas

          y = 175 — y

          x1 = x * mas

          IF x1 > 640 THEN EXIT FOR

          PSET (x1 + 290, y), 11

        NEXT x

        LOCATE 21, 5: COLOR 12: PRINT «y=x^2»

        FOR x = a TO b STEP h

          y = x ^ 2

          y = y * mas

          y = 175 — y

          x1 = x * mas

          IF x1 > 640 THEN EXIT FOR

          PSET (x1 + 290, y), 12

        NEXT x

        LOCATE 22, 5: COLOR 9: PRINT «y=log(x)»

        FOR x = a TO b STEP h

          IF x > 0 THEN

           y = LOG(x)

           y = y * mas

           y = 175 — y

           x1 = x * mas

           IF x1 > 640 THEN EXIT FOR

           PSET (x1 + 290, y), 9

          END IF

        NEXT x

        LOCATE 23, 5: COLOR 13: PRINT «y=sqr(x)»

        FOR x = a TO b STEP h

          IF x >= 0 THEN

           y = SQR(x)

           y = y * mas

           y = 175 — y

           x1 = x * mas

           IF x1 > 640 THEN EXIT FOR

           PSET (x1 + 290, y), 13

          END IF

        NEXT x

        Нарисовать на экране коробку с катающимся внутри шаром.

SCREEN 12

x = 20

y = 20

CIRCLE (20, 20), 10, 5

LINE (10, 10)-(630, 430), , B

10

x = x + 1

y = y + 1

CIRCLE (20 + x1, 20 + y1), 10, 0

CIRCLE (20 + x, 20 + y), 10, 5

FOR i = 1 TO 100

NEXT i

x1 = x

y1 = y

IF x >= 600 THEN GOTO 60

IF y >= 430 THEN GOTO 40

GOTO 10

40

x = x + 1

y = y — 1

CIRCLE (20 + x1, 20 + y1), 10, 0

CIRCLE (20 + x, 20 + y), 10, 5

FOR i = 1 TO 100

NEXT i

x1 = x

y1 = y

IF x >= 600 THEN GOTO 80

IF y <= 0 THEN GOTO 10

GOTO 40

60

x = x — 1

y = y + 1

CIRCLE (20 + x1, 20 + y1), 10, 0

CIRCLE (20 + x, 20 + y), 10, 5

FOR i = 1 TO 100

NEXT i

x1 = x

y1 = y

IF x <= 0 THEN GOTO 10

IF y >= 430 THEN GOTO 80

GOTO 60

80

x = x — 1

y = y — 1

CIRCLE (20 + x1, 20 + y1), 10, 0

CIRCLE (20 + x, 20 + y), 10, 5

FOR i = 1 TO 100

NEXT i

x1 = x

y1 = y

IF x < 0 THEN GOTO 40

IF y < 0 THEN GOTO 60

GOTO 80

        Написать программу, выводящую на экран n шаров, движущихся в пространстве.

INPUT n

DIM a(n, 7)

SCREEN 12

time = 100

FOR z = 1 TO n

 a(z, 1) = INT(RND(1) * 600)

 a(z, 2) = INT(RND(1) * 400)

 a(z, 7) = INT(RND(1) * 4)

 a(z, 6) = INT(RND(1) * 10)

 a(z, 5) = INT(RND(1) * 20)

NEXT z

10

FOR z = 1 TO n

  SELECT CASE a(z, 7)

    CASE 1

        a(z, 1) = a(z, 1) + 1

        a(z, 2) = a(z, 2) + 1

        CIRCLE (a(z, 3), a(z, 4)), a(z, 5), 0

        CIRCLE (a(z, 1), a(z, 2)), a(z, 5), a(z, 6)

        a(z, 3) = a(z, 1)

        a(z, 4) = a(z, 2)

        FOR i = 1 TO time

        NEXT i

        IF a(z, 1) >= 640 — a(z, 5) THEN a(z, 7) = 2

        IF a(z, 2) >= 480 — a(z, 5) THEN a(z, 7) = 3

    CASE 2

        a(z, 1) = a(z, 1) — 1

        a(z, 2) = a(z, 2) + 1

        CIRCLE (a(z, 3), a(z, 4)), a(z, 5), 0

        CIRCLE (a(z, 1), a(z, 2)), a(z, 5), a(z, 6)

        a(z, 3) = a(z, 1)

        a(z, 4) = a(z, 2)

        FOR i = 1 TO time

        NEXT i

        IF a(z, 1) <= a(z, 5) THEN a(z, 7) = 1

        IF a(z, 2) >= 480 — a(z, 5) THEN a(z, 7) = 4

    CASE 3

        a(z, 1) = a(z, 1) + 1

        a(z, 2) = a(z, 2) — 1

        CIRCLE (a(z, 3), a(z, 4)), a(z, 5), 0

        CIRCLE (a(z, 1), a(z, 2)), a(z, 5), a(z, 6)

        a(z, 3) = a(z, 1)

        a(z, 4) = a(z, 2)

        FOR i = 1 TO time

        NEXT i

        IF a(z, 1) >= 640 — a(z, 5) THEN a(z, 7) = 4

        IF a(z, 2) <= a(z, 5) THEN a(z, 7) = 1

    CASE 4

        a(z, 1) = a(z, 1) — 1

        a(z, 2) = a(z, 2) — 1

        CIRCLE (a(z, 3), a(z, 4)), a(z, 5), 0

        CIRCLE (a(z, 1), a(z, 2)), a(z, 5), a(z, 6)

        a(z, 3) = a(z, 1)

        a(z, 4) = a(z, 2)

        FOR i = 1 TO time

        NEXT i

        IF a(z, 1) <= a(z, 5) THEN a(z, 7) = 3

        IF a(z, 2) <= a(z, 5) THEN a(z, 7) = 2

  END SELECT

NEXT z

GOTO 10

        Написать программу, выводящую на экран 50 шаров, движущихся в пространстве.

n = 50

maxx = 640

maxy = 460

r = 5

c = 15

ugx = 15

ugy = 15

DIM a(n, 7)

SCREEN 12

RANDOMIZE (TIMER)

FOR i = 1 TO n

 a(i, 1) = INT(RND(1) * maxx)

 a(i, 2) = INT(RND(1) * maxy)

 a(i, 3) = INT(RND(1) * 10)

 IF a(i, 3) > 5 THEN a(i, 3) = 1 ELSE a(i, 3) = -1

 a(i, 3) = a(i, 3) * INT(RND(1) * 10)

 a(i, 4) = INT(RND(1) * ugx)

 IF a(i, 4) > 5 THEN a(i, 4) = 1 ELSE a(i, 4) = -1

 a(i, 4) = a(i, 4) * INT(RND(1) * ugy)

 a(i, 6) = INT(RND(1) * c)

 a(i, 7) = INT(RND(1) * r)

 a(i, 7) = r

NEXT i

10

FOR z = 1 TO n

     CIRCLE (a(z, 1), a(z, 2)), a(z, 7), 0

     a(z, 1) = a(z, 1) + a(z, 3)

     a(z, 2) = a(z, 2) + a(z, 4)

     IF a(z, 1) + a(z, 7) > maxx THEN a(z, 3) = a(z, 3) * (-1)

     IF a(z, 1) — a(z, 7) < 1 THEN a(z, 3) = a(z, 3) * (-1)

     IF a(z, 2) + a(z, 7) > maxy THEN a(z, 4) = a(z, 4) * (-1)

     IF a(z, 2) — a(z, 7) < 1 THEN a(z, 4) = a(z, 4) * (-1)

     CIRCLE (a(z, 1), a(z, 2)), a(z, 7), a(z, 6)

NEXT z

GOTO 10

        Написать программу, выводящую часы с 3 стрелками (час., мин., сек.) согласно текущему времени.

CONST pi = 3.141593

  ro = 230

  rs = ro — 10

  rm = rs — 10

  rc = rm — 10

  xx = 320

  yy = 240

  SCREEN 12

  CIRCLE (xx, yy), ro, 15

  FOR i = 1 TO 12

    rr = (i * 30) * (pi / 180)

    IF i / 3 = INT(i / 3) THEN

      CIRCLE (xx + COS(rr) * ro, yy + SIN(rr) * ro), 10, 14

      PAINT (xx + COS(rr) * ro, yy + SIN(rr) * ro), 10, 14

    ELSE

      CIRCLE (xx + COS(rr) * ro, yy + SIN(rr) * ro), 5, 14

      PAINT (xx + COS(rr) * ro, yy + SIN(rr) * ro), 9, 14

    END IF

  NEXT

WHILE INKEY$ <> » «

  TIM$ = TIME$

  LOCATE 1, 1: PRINT TIM$

   IF VAL(MID$(TIM$, 7, 2)) <> sec THEN

     LINE (xx, yy)-(xx + COS(ts) * rs, yy + SIN(ts) * rs), 0

     LINE (xx, yy)-(xx + COS(tm) * rm, yy + SIN(tm) * rm), 0

     LINE (xx, yy)-(xx + COS(th) * rc, yy + SIN(th) * rc), 0

     sec = VAL(MID$(TIM$, 7, 2))

     ts = (sec * 6 * (pi / 180))

     ts = ts — pi / 2

     min = VAL(MID$(TIM$, 4, 2))

     tm = (min * 6 * (pi / 180)) + (.1 * sec * (pi / 180))

     tm = tm — pi / 2

     ch = VAL(MID$(TIM$, 1, 2))

     th = (ch * 30 * (pi / 180)) + (.5 * min * (pi / 180))

     th = th — pi / 2

     LINE (xx, yy)-(xx + COS(th) * rc, yy + SIN(th) * rc), 14

     LINE (xx, yy)-(xx + COS(tm) * rm, yy + SIN(tm) * rm), 10

     LINE (xx, yy)-(xx + COS(ts) * rs, yy + SIN(ts) * rs), 11

  END IF

 WEND

        Часы идущие в разных часовых поясах.

DECLARE SUB clock (xx!, yy!, ro!, co!, cs!, cm!, cc!, cn!, timnew$, timold$, timeclock$)

DECLARE FUNCTION newtime$ (tim$, ch!)

timeold$ = TIME$

timeclock$ = «16:12»

WHILE INKEY$ <> » «

  IF timeold$ <> TIME$ THEN

      LOCATE 1, 1: PRINT TIME$

      CALL clock(100, 100, 70, 0, 13, 11, 10, 10, TIME$, timeold$, timeclock$)

      CALL clock(250, 100, 70, 0, 13, 11, 10, 10, newtime$(TIME$, 1), newtime$(timeold$, 1), timeclock$)

      CALL clock(400, 100, 70, 0, 13, 11, 10, 10, newtime$(TIME$, 2), newtime$(timeold$, 2), timeclock$)

      CALL clock(550, 100, 70, 0, 13, 11, 10, 10, newtime$(TIME$, 3), newtime$(timeold$, 3), timeclock$)

      CALL clock(100, 250, 70, 0, 13, 11, 10, 10, newtime$(TIME$, 4), newtime$(timeold$, 4), timeclock$)

      CALL clock(250, 250, 70, 0, 13, 11, 10, 10, newtime$(TIME$, 5), newtime$(timeold$, 5), timeclock$)

      CALL clock(400, 250, 70, 0, 13, 11, 10, 10, newtime$(TIME$, 6), newtime$(timeold$, 6), timeclock$)

      CALL clock(550, 250, 70, 0, 13, 11, 10, 10, newtime$(TIME$, 7), newtime$(timeold$, 7), timeclock$)

      timeold$ = TIME$

    END IF

WEND

SUB clock (xx, yy, ro, co, cs, cm, cc, cn, timnew$, timold$, timeclock$)

  CONST PI = 3.141592654#

  rs = ro — 20

  rm = rs — 10

  rc = rm — 15

  SCREEN 12

  CIRCLE (xx, yy), ro, co

  FOR i = 1 TO 12

    u = i * 30 * PI / 180

    CIRCLE (xx + (COS(u) * (rs + 5)), yy + (SIN(u) * (rs + 5))), 10, 12

    PSET (xx + (COS(u) * (rs + 5)) — 2, yy + (SIN(u) * (rs + 5)) + 5), 0

    IF i <= 9 THEN f = i + 3 ELSE f = i — 9

    SELECT CASE f

      CASE 1

        DRAW «c» + LTRIM$(STR$(cn)) + «br3 u10 g4»

      CASE 2

        DRAW «c» + LTRIM$(STR$(cn)) + «br5 l5 u5 r5 u5 l5»

      CASE 3

        DRAW «c» + LTRIM$(STR$(cn)) + «bu10 r5 g5 r5 g5»

      CASE 4

        DRAW «c» + LTRIM$(STR$(cn)) + «bu10 d5 r5 u5 d10 «

      CASE 5

        DRAW «c» + LTRIM$(STR$(cn)) + «br5 bu10 l5 d5 r5 d5 l5»

      CASE 6

        DRAW «c» + LTRIM$(STR$(cn)) + «br5 bu10 g5 r5 d5 l5 u5»

      CASE 7

        DRAW «c» + LTRIM$(STR$(cn)) + «bu10 r5 g4 d5»

      CASE 8

        DRAW «c» + LTRIM$(STR$(cn)) + «bu5 u5 r5 d5 l5 d5 r5 u5»

      CASE 9

        DRAW «c» + LTRIM$(STR$(cn)) + «e5 u5 l5 d5 r5»

      CASE 10

        PSET (xx + (COS(u) * (rs + 5)) — 5, yy + (SIN(u) * (rs + 5)) + 5), 0

        DRAW «c» + LTRIM$(STR$(cn)) + «br3 u10 g4 e4 d10 br3 u10 r5 d10 l5»

      CASE 11

        PSET (xx + (COS(u) * (rs + 5)) — 5, yy + (SIN(u) * (rs + 5)) + 5), 0

        DRAW «c» + LTRIM$(STR$(cn)) + «br3 u10 g4 e4 d10 br7 u10 g4»

      CASE 12

        PSET (xx + (COS(u) * (rs + 5)) — 5, yy + (SIN(u) * (rs + 5)) + 5), 0

        DRAW «c» + LTRIM$(STR$(cn)) + «br3 u10 g4 e4 d10 br7 l5 u5 r5 u5 l5»

    END SELECT

  NEXT

‘ “бв ­®ўЄ  бв५ЄЁ Ўг¤Ё«м­ЁЄ 

      ti$ = timeclock$

      min = VAL(MID$(ti$, 4, 2))

      um = (min * 6 * PI / 180) + (.1 * sec) * PI / 180

      um = um — PI / 2

      ch = VAL(MID$(ti$, 1, 2))

      uc = (ch * 30 * PI / 180) + (.5 * min) * PI / 180

      uc = uc — PI / 2

      LINE (xx, yy)-(xx + (COS(uc) * rc), yy + (SIN(uc) * rc)), 14

      IF LEFT$(timnew$, 5) = LEFT$(timeclock$, 5) THEN

        SOUND 440, 10

        SOUND 0, 50

        SOUND 440, 10

      END IF

‘******************************

      ti$ = timold$

      sec = VAL(MID$(ti$, 7, 2))

      us = sec * 6 * PI / 180

      us = us — PI / 2

      min = VAL(MID$(ti$, 4, 2))

      um = (min * 6 * PI / 180) + (.1 * sec) * PI / 180

      um = um — PI / 2

      ch = VAL(MID$(ti$, 1, 2))

      uc = (ch * 30 * PI / 180) + (.5 * min) * PI / 180

      uc = uc — PI / 2

      LINE (xx, yy)-(xx + (COS(uc) * rc), yy + (SIN(uc) * rc)), 0

      LINE (xx, yy)-(xx + (COS(um) * rm), yy + (SIN(um) * rm)), 0

      LINE (xx, yy)-(xx + (COS(us) * rs), yy + (SIN(us) * rs)), 0

      ti$ = timnew$

      sec = VAL(MID$(ti$, 7, 2))

      us = sec * 6 * PI / 180

      us = us — PI / 2

      min = VAL(MID$(ti$, 4, 2))

      um = (min * 6 * PI / 180) + (.1 * sec) * PI / 180

      um = um — PI / 2

      ch = VAL(MID$(ti$, 1, 2))

      uc = (ch * 30 * PI / 180) + (.5 * min) * PI / 180

      uc = uc — PI / 2

      LINE (xx, yy)-(xx + (COS(uc) * rc), yy + (SIN(uc) * rc)), cc

      LINE (xx, yy)-(xx + (COS(um) * rm), yy + (SIN(um) * rm)), cm

      LINE (xx, yy)-(xx + (COS(us) * rs), yy + (SIN(us) * rs)), cs

END SUB

FUNCTION newtime$ (tim$, ch)

  newtime$ = LTRIM$(STR$(VAL(LEFT$(tim$, 2)) + ch)) + RIGHT$(tim$, 6)

END FUNCTION

        Написать программу, вычерчивающую оси координат и графики различных функций.

        CLS

        mas = 30’Масштаб системы координат

        PI = 3.141592654#

        INPUT «x1:», a

        INPUT «x2:», b

        INPUT «Шаг:», h

        IF h = 0 THEN h = .001

        SCREEN 9

        ‘Рисование системы координат

        LINE (290, 310)-(290, 10), 1

        LINE (10, 175)-(620, 175), 1

        FOR x = 290 TO 600 STEP mas

          LINE (x, 173)-(x, 177), 7

        NEXT x

        FOR x = 290 TO 10 STEP -mas

          LINE (x, 173)-(x, 177), 7

        NEXT x

        FOR y = 175 TO 25 STEP -mas

          LINE (288, y)-(292, y), 7

        NEXT y

        FOR y = 175 TO 300 STEP mas

          LINE (288, y)-(292, y), 7

        NEXT y

        LOCATE 19, 5: COLOR 10: PRINT «y=1/x»

        FOR x = a TO b STEP h

          IF x <> 0 THEN

           y = 1 / x

           y = y * mas

           y = 175 — y

           x1 = x * mas

           IF x1 > 640 THEN EXIT FOR

           PSET (x1 + 290, y), 10

          END IF

        NEXT x

        LOCATE 20, 5: COLOR 11: PRINT «y=arctg(x)»

        FOR x = a TO b STEP h

          y = ATN(x)

          y = y * mas

          y = 175 — y

          x1 = x * mas

          IF x1 > 640 THEN EXIT FOR

          PSET (x1 + 290, y), 11

        NEXT x

        LOCATE 21, 5: COLOR 12: PRINT «y=x^2»

        FOR x = a TO b STEP h

          y = x ^ 2

          y = y * mas

          y = 175 — y

          x1 = x * mas

          IF x1 > 640 THEN EXIT FOR

          PSET (x1 + 290, y), 12

        NEXT x

        LOCATE 22, 5: COLOR 9: PRINT «y=log(x)»

        FOR x = a TO b STEP h

          IF x > 0 THEN

           y = LOG(x)

           y = y * mas

           y = 175 — y

           x1 = x * mas

           IF x1 > 640 THEN EXIT FOR

           PSET (x1 + 290, y), 9

          END IF

        NEXT x

        LOCATE 23, 5: COLOR 13: PRINT «y=sqr(x)»

        FOR x = a TO b STEP h

          IF x >= 0 THEN

           y = SQR(x)

           y = y * mas

           y = 175 — y

           x1 = x * mas

           IF x1 > 640 THEN EXIT FOR

           PSET (x1 + 290, y), 13

          END IF

        NEXT x

        Нарисовать звездное небо

CLS

     o = 1

     kt = 500

     SCREEN 9

     DIM x(kt), y(kt), t(kt), c(kt), r(kt), m(kt)

     dp = 1

WHILE INKEY$ = «»

   IF dp > 0 THEN

          x = INT(RND * 639) + 1

          y = INT(RND * 349) + 1

          t = INT(RND * 70) + 1

          x(dp) = x

          y(dp) = y

          t(dp) = t

          c(dp) = INT(RND * 14) + 1

          r(dp) = INT(RND * 9) + 1

          m(dp) = INT(RND * 14) + 1

          END IF

     FOR i = 1 TO kt

       IF t(i) < 1 THEN

          dp = i: EXIT FOR

       ELSE

          dp = -1

       END IF

     NEXT

     FOR i = 1 TO kt

          IF t(i) > 0 THEN

               CIRCLE (x(i), y(i)), r(i), c(i)

               PAINT (x(i), y(i)), m(i), c(i)

               t(i) = t(i) — 1

  ELSE

               CIRCLE (x(i), y(i)), r(i), 0

               PAINT (x(i), y(i)), 0, 0

          END IF

     NEXT

WEND

Символьные величины

        Сколько раз во втором слове встречается первая буква первого слова

  CLS

  INPUT «Введите первое слово «; a$

  INPUT «Введите второе слово «; b$

  FOR i = 1 TO LEN(b$)

  f$ = MID$(a$, 1, 1)

  c$ = MID$(b$, i, 1)

  IF c$ = f$ THEN p = p + 1

  NEXT i

  PRINT «Встречается «; p; » раз(а)»

        Программа, определяющая слова перевертыши

  CLS

  INPUT «Введите слово «; a$

  FOR i = LEN(a$) TO 1 STEP -1

  f$ = MID$(a$, i, 1)

  c$ = c$ + f$

  NEXT i

  PRINT «Новое слово -«; c$

  IF c$ = a$ THEN 1 ELSE 2

1 PRINT a$; «- это слово перевертыш!»

  END

2 PRINT a$; «- это слово не перевертыш!»

        Программа составляет из двух одинаковых по длине слов новое слово, где буквы чередуются  —  1 буква одного слова + 1 буква второго слова и тд

CLS

INPUT «Введите слово №1»; a$

INPUT «Введите слово №2»; b$

FOR i = 1 TO LEN(a$)

f$ = MID$(a$, i, 1)

g$ = MID$(b$, i, 1)

c$ = c$ + f$ + g$

NEXT i

PRINT «Новое слово «; c$

        Программа подсчета вхождения буквы «а» в данный текст

CLS

INPUT «Введите слово»; a$

FOR i = 1 TO LEN(a$)

d$ = MID$(a$, i, 1)

IF d$ = «а» THEN p = p + 1

NEXT i

PRINT «буква ‘а’ повторяется «; p; » раз(а)»

        Выпадающие буквы

CLS

A$ = «Собака-друг человека»

FOR q = 1 TO LEN(A$): FOR J = 1 TO 2000: NEXT J

e = e + 1

FOR w = 22 TO 2 STEP -1: FOR h = 1 TO 2000: NEXT h

LOCATE w, e

PRINT MID$(A$, q, 1)

LOCATE w + 1, e

PRINT CHR$(32)

NEXT w, q

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

DIM a$(18)

FOR j = 1 TO 18

READ a$(j)

NEXT j

INPUT «введите текст»; d$

FOR i = 1 TO LEN(d$)

FOR j = 1 TO 18

IF MID$(d$, i, 1) = a$(j) THEN g = g + 1

NEXT j, i

PRINT «количество гласных букв в тексте =»; g

END

DATA «у»,»У»,»е»,»Е»,»ы»,»Ы»,»а»,»А»,»О»,»о»,»э»,»Э»,»я»,»Я»,»И»,»и»,»Ю»,»ю»

        Программа замены всех букв «а» на буквы «б»

CLS

INPUT «Введите слово»; a$

FOR i = 1 TO LEN(a$)

d$ = MID$(a$, i, 1)

IF d$ = «а» THEN d$ = «б»

c$ = c$ + d$

NEXT i

PRINT «новое слово «; c$

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

CLS

INPUT a$

FOR i = LEN(a$) TO 1 STEP -1

  b$ = MID$(a$, i, 1)

  c$ = c$ + b$

NEXT

PRINT c$

        Программа, определяющая кол-во гласных и согласных букв в тексте

DIM a$(9)

FOR i = 1 TO 9

READ a$(i)

NEXT i

DATA «а»,»у»,»е»,»ы»,»о»,»э»,»я»,»и»,»ю»

DIM d$(21)

FOR j = 1 TO 21

READ d$(j)

NEXT j

DATA «й»,»ц»,»к»,»н»,»г»,»ш»,»щ»,»з»,»х»,»ф»,»в»,»п»,»р»,»л»,»д»,»ж»,»ч»,»с»,»м»,»т»,»б»

INPUT «введите текст»; f$

FOR r = 1 TO LEN(f$)

FOR i = 1 TO 9

IF MID$(f$, r, 1) = a$(i) THEN g = g + 1

NEXT i, r

FOR r = 1 TO LEN(f$)

FOR j = 1 TO 21

IF MID$(f$, r, 1) = d$(j) THEN c = c + 1

NEXT j, r

PRINT «количество гласных=»; g

PRINT «количество согласных=»; c

        Программа подсчета вхождения слова Х в слово У

CLS

INPUT «Введите слово Х»; a$

INPUT «Введите слово У»; b$

FOR i = 1 TO LEN(b$)

d$ = MID$(b$, i, LEN(a$))

IF d$ = a$ THEN h = h + 1

NEXT i

PRINT «Число вхождений слова Х в слово У =»; h; «раза»

Задачи для самостоятельной работы

Нестандартные задачи на программирование

  1. Написать программу, которая спрашивает: «Сколько стоит один самовизг?», затем спрашивает: «Сколько у вас денег?», и получив ответы, делит одно число на другое и сообщает сколько «самовизгов» может купить пользователь.
  2. Написать программу, которая спрашивает: «Сколько у вас бензина?», а потом сообщает, сколько километров пользователь может проехать на «Жигулях», сколько на «Запорожце», сколько на «ИЛ-62» и в конце добавляет, что на велосипеде можно проехать сколько захочется.
  3. Кошки-мышки. Полторы кошки съедают за один час одну мышку. Сколько мышек съедят сто кошек за 50 часов?
  4. N пиратов разделили между собой поровну К пленниц, а остаток посадили в лодку и отправили домой к родителям. Сколько пленниц поплыло домой?(Составить программу и вычислить при N=10, К=129).
  5. На прямоугольном поле брани, длина одной стороны которого 120м, а другой — 50м, стоят наши и враги. Враги занимают четвертую часть площади, а наши — 1300 м2. На остальной площади поля брани мирно пасутся козлы — по X козлов на1м2. Сколько козлов пасется?
  6. Составьте программу проверки: пройдет ли мяч диаметром D через прямоугольную форточку, размеры которой А и В.
  7. Ракета запускается с точки на экваторе Земли со скоростью Vв направлении движения Земли по орбите вокруг Солнца. Составьте программу проверки результата запуска ракеты в зависимости от скорости.
  1. Vl=7,9 км/ч — станет спутником Земли
  2. V2=ll,2 км/ч — станет спутником Солнца
  3. V3=16,67 км/ч — уйдет в межзвездное пространство.
  1. Учитель решил проверить у учеников знание таблицы умножения. Помогите ему в этом, составьте программу проверки с оценкой.
  2. Составьте программу упорядочения трех любых человек по росту.
  3. Ване дали N-e количество денег и сказали купить 6 порций мороженного, а если денег не хватит, то две бутылки лимонада. Составьте программу, которая определит, что купил Ваня и осталась ли у него сдача.
  4. Составьте программу игры «Угадай число от 1 до 100» (числа выбираются программой случайно)
  5. Составьте программу игры «Ипподром». Играющий ставит на одну из трех лошадей, состязающихся на бегах, и выигрывает, если лошадь приходит первой. Скорость передвижения лошадей выбирается программой с помощью датчика случайных чисел.
  6. Составьте программу, имитирующую гадание на ромашке:«Любит — не любит». Число лепестков на ромашке выбирается случайным образом.
  7. Спортсмен в первый день пробежал 10 км. Каждый следующий день он увеличивал дневную норму на 10% от нормы предыдущего дня. Составьте программу, которая позволит определить: а) какой путь пробежит спортсмен в 7-й день; 6) через сколько дней спортсмен будет пробегать более 20 км.
  8. Некоторое количество денег положили в банк под проценты. Составьте программу, определяющую, сколько денег будет по окончании N лет.
  9. Леспромхоз ведет заготовку древесины. Ее первоначальный объем на территории леспромхоза был равен 120 000 м3. Ежегодный прирост составляет 5,5% от объема. Годовой план заготовки древесины — 9 500 м3. Какой объем древесины будет через 2,5 года; до тех пор, пока этот. объем станет меньше 23 000 м3?
  10. Ивана Александровича Хлестакова пригласили управлять департаментом. В первый день ему прислали 1000 курьеров, а каждый последующий день присылали в два раза больше, чем в предыдущий. Иван Александрович согласился тогда, когда к нему прибыло сразу больше 30000 курьеров. На какой день это произошло?
  11. В сказочной стране Лукоморье все тяжелые грузы перевозят на Змеях Горынычах. Они имеют бортовые номера от 1 до 100. Их грузоподъемность определяется числом их голов (3,6,9,12). Однажды грузовым Змеем Горынычем была сбита гражданка Баба Яга. Нарушитель скрылся, но свидетели показали, что бортовой номер кратен его числу голов. Помогите следователю Д.Никитичу выявить потенциальных нарушителей.
  12. В компьютер князя Владимира поступили сведения о количестве Змеев Горынычей, заполонивших землю Киевскую, и количестве голов у каждого из них. Илья Муромец срубает 3 головы за один час. Сколько нужно таких богатырей, чтобы за одни сутки очистить от погани землю?
  13. В компьютер заложены данные о возрасте и росте каждого игрока баскетбольной команды. Напишите программу, которая позволит определить самого молодого игрока с самым большим ростом.
  14. Напишите программу игры «Поле чудес», которая позволит угадать слово за 10 попыток.
  15. Напишите диалоговую программу «Эллочка — людоедка». Воспользуйтесь    функцией RND(l). Словарь Эллочки:
  1. Хамите.
  2. Хо-хо!
  3. Знаменито.
  4. Мрачно.
  5. Мрак.
  6. Жуть.
  7. Не учите меня жить.
  8. Кр-р-расота!
  9. У вас вся спина белая. (Шутка)
  10. Подумаешь.
  11. Ого!
  1. В рисованных мультфильмах иллюзия движения создается последовательной сменой кадров, каждый из которых фиксирует очередное положение движущегося объекта. Используя этот принцип, получить мультфильм, показывающий:

а) идущего человечка;

б) приседающего человечка;

в) человечка, машущего флажком.

  1. Для построения отдельных кадров мультфильма воспользоваться фигурками, описанными в рассказе А. Конан Доила «Пляшущие человечки».
  2. Составьте программу, определяющую, с какой силой два соседа по парте притягивают друг друга.,  G=6,67 10-» Нм2/кг2.
  3. Однажды встретились три толстяка и начали спорить: кто из них самый толстый? Составьте программу для определения этого.
  4. Каждый будний день недели рыбак ходил ловить рыбу. Количество пойманных рыб было случайным, но не более 10 рыб в день. Составьте программу, которая моделирует этот процесс и подсчитывает сколько рыб поймал рыбак.
  5. У бабушки спрятана банка вишневого варенья, в банке 5 кг.Внук Коля разведал, где спрятана банка и съел 1 ложку варенья. Затем осмелел и стал съедать на одну ложку больше каждый день. Сколько варенья обнаружит в банке бабушка через 20 дней, если известно, что в одной ложке помещается 20 г варенья?
  6. Получить звуковой мультфильм «Танцующий НЛО». Координаты очередного положения НЛО на экране выбираются с помощью датчика случайных чисел. Каждый раз, когда величина координаты Y окажется кратной 12, НЛО должен издавать звуковой сигнал.

Понравилась статья? Поделить с друзьями:
  • Как найти дисперсию в статистике с примерами
  • Как найти диагональ на координатной плоскости
  • Сталкер как найти принца
  • Как найти количество запросов в гугле
  • Как найти захоронение погибшего в сталинграде