106
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ _______________ СЫКТЫВКАРСКИЙ ЛЕСНОЙ ИНСТИТУТ АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ИНЖЕНЕРНЫХ ЗАДАЧ СЫКТЫВКАР 2004 Да Нет Начало Ввод X X 0 Y = COS(X) Y = SIN(X) Конец Вывод X, Y

АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

_______________

СЫКТЫВКАРСКИЙ ЛЕСНОЙ ИНСТИТУТ

АЛГОРИТМИЗАЦИЯ

И ПРОГРАММИРОВАНИЕ

ИНЖЕНЕРНЫХ ЗАДАЧ

СЫКТЫВКАР 2004

Да

Нет

Начало

Ввод X

X ≥ 0

Y = COS(X) Y = SIN(X)

Конец

Вывод X, Y

Page 2: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

2

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

СЫКТЫВКАРСКИЙ ЛЕСНОЙ ИНСТИТУТ (ФИЛИАЛ)

ГОСУДАРСТВЕННОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКАЯ ГОСУДАРСТВЕННАЯ ЛЕСОТЕХНИЧЕСКАЯ АКАДЕМИЯ ИМ. С. М. КИРОВА»

АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ИНЖЕНЕРНЫХ ЗАДАЧ

Учебное пособие по курсу «Информатика»

для студентов технических специальностей всех форм обучения

СЫКТЫВКАР 2004

Page 3: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

3

УДК 004 А 45

Рассмотрено и рекомендовано к изданию решением кафедры информационных систем Сыктывкарского лесного института 16 июня 2003 г.

Утверждено к изданию решением учебно-методического совета технологическо-

го факультета Сыктывкарского лесного института 23 сентября 2003 г.

Со с т а в и т е л ь : кандидат технических наук, доцент Н. М. Третьякова

Р е ц е н з е н ты : кандидат физико-математических наук,

доцент кафедры математического моделирования и кибернетики Сыктывкарского государственного университета Д. В. Холмогоров;

кафедра прикладной математики Сыктывкарского государственного университета

УДК 004 А 45 Алгоритмизация и программирование инженерных задач: Учеб. пособие по курсу «Информатика» для студентов техн. спец. всех форм обучения / Сост. Н. М. Третья-кова; СЛИ. – Сыктывкар, 2004. – 104 с.

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

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

Табл. 16. Рис. 45. Библиогр. 5 назв.

Н. М. Третьякова, составление, 2004 Сыктывкарский лесной институт (филиал)

государственного образовательного учреждения высшего профессионального образования

«Санкт-Петербургская государственная лесотехническая академия им. С. М. Кирова», 2004

Page 4: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

4

ПРЕДИСЛОВИЕ

Учебное пособие выполнено в соответствии с государственными образова-тельными стандартами и рабочей программой дисциплины «Информатика» для технических специальностей.

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

Достоинством пособия является его насыщенность множеством примеров, простота и сжатость изложения.

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

Page 5: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

5

ВВЕДЕНИЕ

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

Page 6: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

6

1. ОБЩИЕ ПОЛОЖЕНИЯ

1.1. ВВЕДЕНИЕ В QBASIC

Название языка программирования BASIC – это аббревиатура английских слов Beginners All-purpose Symbolic Instruction Code (всецелевой язык програм-мирования для начинающих).

BASIC (БЕЙСИК) был разработан в 1963 г. профессорами Дортмундского колледжа Дж. Кемени и Т. Куртцом. Сегодня BASIC превратился в современ-ный язык высокого уровня, хотя продолжает оставаться простым и доступным для всех пользователей.

Самое широкое распространение получили версии, разработанные фирмой Microsoft. Существуют три поколения языка, разработанные этой фирмой:

• поколение интерпретаторов (GWBASIC, BASICa); • поколение QuickBASIC; • поколение Visual BASIC. Начиная с версии MS DOS 5.0, фирма Microsoft поставляет интерпретатор

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

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

программы; • поддерживает программные процедуры, вызываемые из основной про-

граммы; • позволяет использовать локальные переменные. Помимо этого, если вы собираетесь овладеть современными методами

объектно-ориентированного программирования, то вам не обойтись без знания QBASIC, поскольку он является базовым языком для Visual BASIC.

Переход от работы в среде DOS к работе в среде Windows еще более воз-вышает язык BASIC как базовый язык программирования. Такие популярные приложения под Windows, как Word и Excel используют язык BASIC (Word BASIC и Visual BASIC, Applications Editor) в качестве языка управления.

Page 7: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

7

1.2. ЭТАПЫ ПОДГОТОВКИ ЗАДАЧИ К РЕШЕНИЮ НА КОМПЬЮТЕРЕ

В процессе подготовки задачи к ее решению на ЭВМ можно выделить ряд последовательных этапов:

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

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

Таблица 1

Пример описания данных

Параметр (данное) Обозначение Размерность Тип переменной

Формат Имя в программе

Входные данные Марка M строковая \ \ MAR$ Количество k шт. числовая целая ## KOL%

Начальная скорость Vн м/с числовая

вещественная ##.## VN

. . . . . . . . . . . . . . . . . . Промежуточные данные

. . . . . . . . . . . . . . . . . . Выходные данные

Время t с числовая

вещественная ##.# T

Скорость V м/с числовая

вещественная ###.## V

. . . . . . . . . . . . . . . . . . Выбор или разработка метода решения задачи. Этот этап тесно связан с

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

Разработка алгоритма. Алгоритм – это конечная однозначная последо-вательность действий (шагов), которые нужно выполнить, чтобы из исходных данных получить результаты решения задачи (см. раздел 2).

Page 8: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

8

Написание программы. Под программированием понимается процесс ко-дирования составленного алгоритма на одном из языков программирования.

Программа – это окончательный вариант алгоритма. При составлении ал-горитма учитываются особенности языка программирования.

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

Тестирование – это проверка правильности функционирования программы во всем диапазоне допустимых значений исходных данных. Как правило, одно-временно с программой разрабатывается и набор тестов для ее проверки.

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

Второе требование вытекает из первого: тестовый набор должен включать и такие исходные данные, для которых решение задачи невозможно, т. е. программа должна проверять исходные данные на допустимость (Fool proof – "защита от дурака"). В этом случае программа должна вежливо сообщить об ошибке в исход-ных данных и запросить другие данные, пояснив причину ошибки.

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

На отладку программы затрачивается 20–40 % времени разработки про-граммы. Исправляются не только формальные ошибки этапа программирова-ния, но и ошибки всех предыдущих этапов.

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

1.3. СРЕДА QBASIC 1.3.1. Запуск среды QBASIC и выход из нее Запуск QBASIC можно осуществить следующим образом: • на Рабочем столе Windows выбрать пиктограмму QuickBASIC; • запустить в среде Мой компьютер или Проводник Windows файл

C:\QBASIC\Qb.exe;

Page 9: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

9

• отыскать папку QBASIC (Меню Пуск → Найти → Файлы и папки → QBASIC) и запустить файл Qb.exe.

Для выхода из среды необходимо выбрать команду Exit из меню File. Если вы забыли сохранить свою программу, QBASIC напомнит вам об этом. В поя-вившемся окне можно выбрать Yes/Да и сохранить текст программы или вы-брать No/Нет и отказаться от предложения.

Свернуть окно и вернуться на Рабочий стол Windows можно с помощью клавиш Alt + Esc.

В среде QBASIC клавиша Esc (escape – убегать) – это стандартная клавиша отмены какого-либо действия, клавиша Enter – клавиша согласия или выбора.

1.3.2. Ввод и редактирование программ

На экране среды QBASIC можно выделить четыре элемента: строку меню (File, Edit, View,…); окно текстового редактора; окно быстрого просмотра Im-mediate и строку-подсказку.

Все возможные операции в QBASIC можно осуществить либо через систе-му меню (приложение 1), либо нажав «горячую клавишу» – клавишу или две клавиши одновременно (приложение 2).

Окно текстового редактора Editing Windows с именем программы или сло-вом Untitled (программа без названия) служит для ввода и редактирования тек-ста программы.

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

В строке-подсказке можно увидеть перечень некоторых "горячих" клавиш и их значение.

Текст программы вводится в окно текстового редактора последовательно строка за строкой. Строки не нумеруются. Ввод строки заканчивается нажатием клавиши Enter или ↓ . Enter предпочтителен тем, что переводит курсор в нача-ло следующей строки. В тексте программы используются операторы, функции и служебные слова языка программирования QBASIC (приложение 3).

1.3.3. Запуск программы на выполнение и просмотр результатов Запуск набранной программы осуществляется командой Start из меню Run

или одновременным нажатием "горячих" клавиш Shift + F5. При обнаружении ошибки QBASIC откроет окно, содержащее сообщение о

сделанной ошибке. Если нажать Enter или щелкнуть по Ok, то курсор вернется

Page 10: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

10

в программу в то место, где обнаружена ошибка, чтобы можно было исправить ее. Сообщения об ошибках с пояснениями приведены в приложении 4.

Результаты работы программы выводятся на экран. Просмотр результатов производится командой Output Screen меню View или путем нажатия клавиши F4. Для возврата в окно редактора нужно нажать любую клавишу (Press any key to continue). При необходимости можно прервать исполнение программы, на-жав клавиши Ctrl + Pause.

Page 11: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

11

2. ОСНОВЫ АЛГОРИТМИЗАЦИИ

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

2.1. ОСНОВНЫЕ СВОЙСТВА АЛГОРИТМА

Алгоритм должен обладать следующими четырьмя свойствами: • дискретностью; • определенностью; • результативностью; • массовостью. Дискретность. Задача должна быть разбита на конечное число действий

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

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

Результативность (конечность). Алгоритм должен обязательно приво-дить к решению задачи (к получению результата), причем за конечное число ша-гов, или сообщить через определенное число шагов о невозможности дальней-шего решения задачи.

Массовость. Алгоритм разрабатывается в общем виде, чтобы его можно было применить для различных исходных данных (область применимости алго-ритма).

2.2. ГРАФИЧЕСКИЙ СПОСОБ ПРЕДСТАВЛЕНИЯ АЛГОРИТМОВ

Алгоритм решения задачи можно описать различными способами: • на естественном языке (словесный и формульно-словесный); • в виде схемы (графический способ); • на языке операторных схем; • на алгоритмическом языке. Наиболее распространенным благодаря своей наглядности является графи-

ческий способ. При этом способе каждому типу действий соответствует геомет-рическая фигура определенной конфигурации – блок (символ действия).

Page 12: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

12

Блоки соединяются линиями переходов, указывающими последователь-ность (очередность) выполнения действий – линии потока.

Совокупность блоков и линий потока образует схему алгоритма (блок-схему) решения задачи.

Полный перечень символов, их наименование, отображаемые ими функции, форма и размеры определяются ГОСТ 19.003-80, ГОСТ 19.002-80 и ГОСТ 19701-90.

Перечень основных блоков, которые будут использованы в данном курсе, приведен в таблице 2.

Таблица 2 Перечень основных блоков

Название блока Блок (обозначение) Действие (пояснение)

1. Пуск – останов

Начало, конец, остановка, начало и конец подпрограммы.

2. Ввод – вывод

Обобщенный ввод или вывод данных. Преобразование данных в форму, пригодную для обработки (ввод), и отображение резуль-татов обработки (вывод).

3. Процесс

Вычислительное действие или последова-тельность вычислительных действий. Действие по изменению значения, формы представления или расположения данных.

4. Решение

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

5. Модификация

Начало цикла, организация цикла.

6. Предопределен-ный процесс

Вычисления по подпрограмме. Обращение к подпрограмме (стандартной подпрограмме).

7. Документ

Вывод на бумагу, печать.

8. Комментарий

Пояснение, содержание, формулы.

9. Соединитель

Разрыв линии потока.

Да

Нет

Начало

Конец

Текст

1

1

Page 13: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

13

10. Линия потока

Указывает последовательность выполнения действий.

3. ОСНОВНЫЕ ПОНЯТИЯ QBASIC

3.1. АЛФАВИТ ЯЗЫКА QBASIC Алфавит – набор символов, применяемых для построения слов в грамма-

тических конструкциях языка. В алфавит языка QBASIC входят: • буквы латинского алфавита (A – Z, a – z); • цифры (0 – 9); • знаки операций (+ − * / \ ^ = < >); • разделители (, . : ; " ' ( )); • символы объявления типа данных (% $ & ! # ). Буквы русского алфавита используются только для записи комментариев и

строковых констант.

3.2. СТРУКТУРА ПРОГРАММЫ Строка – основная структурная единица программы. Длина строки – мак-

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

разделены между собой двоеточием (:). Если строка программы содержит только комментарий, то начинаться она

должна или с апострофа ('), или с ключевого слова REM . Комментарий, записанный в одной строке с оператором, должен разме-

щаться после оператора и начинаться с апострофа ('). В QBASIC нумеровать все строки необязательно. Номер строки отделяется

от оператора хотя бы одним пробелом. 3.3. МЕТКИ Если в вашей программе предусмотрена передача управления оператору,

находящемуся в другой части программы, то этому оператору можно дать до-полнительное имя – метку. Имя метки может содержать до 40 символов, среди которых не должно быть пробелов. Метка должна оканчиваться двоеточием. Метка может стоять в отдельной строке. Примеры:

Page 14: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

14

А: BEGIN: PAST.ONE: 3.4. ДАННЫЕ

В языке QBASIC могут обрабатываться два вида данных: константы и пе-ременные.

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

Таблица 3

Примеры записи констант

Обычная запись Запись на QBASIC 43 43 3,141593 3.141593 17,8 ⋅ 1015 17.8Е+15 1,8 ⋅ 10–7 1.8Е–7 Результаты вычислений "Результаты вычислений" Иванов И. И. "Иванов И.И." S = "S="

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

Идентификатор (имя переменной) – это цепочка, содержащая до 40 символов латинских букв и цифр, первый символ – буква. В таблице 4 приведе-ны примеры записи идентификаторов.

Таблица 4 Примеры записи идентификаторов

Правильная запись Неправильная запись В3 3В (начинается с цифры) А1С8 А1–С8 (используется символ –) SUMM2 SUMM 2 (использован пробел)

3.5. ТИПЫ ДАННЫХ

Переменные, используемые в QBASIC, могут быть числовыми и символь-ными. Для задания переменных различных типов к их именам добавляется спе-циальный символ (суффикс).

Числовые переменные бывают целыми, длинными, обычной точности и двойной точности.

Page 15: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

15

• Целые (INTEGER) занимают в памяти 2 байта и используются для зна-чений в диапазоне от –32768 до +32767 или от –215 до 215 – 1. Переменные этого типа называются короткими целыми. Для их задания используется суффикс "%". Например, NOM%=24.

• Длинные целые (LONG) занимают в памяти 4 байта и используются для значений в диапазоне от –2147483648 до +2147483647 или от –231 до 231 – 1. Для их задания используется суффикс "& ". Например, R&=23176724.

• Обычной точности (SINGL) требуют для своего размещения 4 байта. Используются для значений в диапазонах ±3.402823 ⋅ 1038 и ±1.40129 ⋅ 10–45. За-дать переменную обычной точности можно, используя суффикс "!" или не ис-пользуя суффикс вообще. Например, X!=4.3 или X=4.3.

• Двойной точности (DOUBLE) требуют для своего размещения 8 байт. Ис-пользуются для значений в диапазонах ±1.797693134862316 ⋅ 10308 и ±4.94965 ⋅ 10–324. Этот тип используется для точных математических вычислений, не допускаю-щих потерю значности. Для задания переменной двойной точности использует-ся суффикс "#". Например, Y#=54.31256789.

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

• Строка переменной длины (STRING) – это последовательность симво-лов длиной до 32256. В памяти она занимает столько байт, какова ее длина. За-дать строку переменной длины можно, используя суффикс "$". Например, FAM$="Иванов И.И.", STROKA$="Информатика".

Диапазоны представления переменных различного типа и другие ограни-чения языка QBASIC приведены в приложении 5.

3.6. СТАНДАРТНЫЕ ФУНКЦИИ

В состав арифметических выражений могут входить стандартные (встро-енные) функции (см. табл. 5).

Таблица 5

Стандартные функции

Стандартная функция на QBASIC

Пояснения

SIN(X) sinx COS(X) cosx TAN(X) tgx ATN(X) arctgx LOG(X) lnx EXP(X) ex

ABS(X) | x | SQR(X) х SGN(X) Возвращает знак числа х. Если x > 0, возвращается +1; если x = 0,

Page 16: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

16

возвращается 0; если x < 0, возвращается –1.

RND[(N)]

Возвращает случайное число обычной точности в интервале от 0 до 1. n определяет, как генерируется случайное число: n < 0 – возвращает то же число для любого n; n > 0 – возвращает следующие числа из по-следовательности; n = 0 – возвращает последнее выданное число.

Перечень производных функций и формулы их вычисления смотри в при-ложении 6.

3.7. АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ

Арифметические выражения – это совокупность числовых констант, пе-ременных и стандартных функций, соединенных знаками арифметических опе-раций (см. табл. 6).

Таблица 6 Знаки арифметических операций

Знак Операция Пример Результат + Сложение 3.8+4.3 8.1 – Вычитание 3.8–4.3 –0.5 * Умножение 2.5*1.3 3.25 / Деление 4.5/2.5 1.8 ^ Возведение в степень 3^2 9

Дополнительные операции с целыми числами \ Деление нацело 14\5 2

MOD Остаток от деления 14 MOD 5 4

Приоритет операций: 1) смена знака числа; 2) возведение в степень, вычисление стандартных функций; 3) умножение, деление; 4) сложение, вычитание. При вычислении выражения машиной сначала выполняются все операции

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

Таблица 7

Примеры записи арифметических выражений

Математическая запись Запись на языке QBASIC

( )ух

yx

+− 2

(X–Y)^2/(X+Y)

cd

ab A*B/C/D или A*B/(C*D)

Page 17: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

17

a

acbb

2

42 −+− (–B+SQR(B^2–4*A*C))/(2*A)

xye

xx−

+4,1

cos8,4sin3,2 22

(2.3*SIN(X)^2+4.8*COS(X)^2)/(1.4*EXP(–X*Y))

5 ln4,5 x (5.4*LOG(ABS(X)))^0.2

4. АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ОСНОВНЫХ ВИДОВ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ

Любой самый сложный алгоритм может быть составлен из трех типовых структур:

• линейной; • разветвляющейся; • циклической.

4.1. АЛГОРИТМЫ ЛИНЕЙНОЙ СТРУКТУРЫ В линейных алгоритмах этапы решения задачи выполняются в естествен-

ном порядке их следования (сверху – вниз, друг за другом по порядку).

Задача 1. Вычислить площадь треугольника по его сторонам a, b, c. Использовать формулу Герона:

;))()(( cpbpappS −−−= .2

cbap

++=

На рис. 1 представлена схема алгоритма

решения задачи 1. Для составления программы решения зада-

чи 1 рассмотрим несколько операторов QBASIC, которые могут использоваться для программи-рования линейных вычислительных процессов.

INPUT – оператор ввода данных с клавиатуры.

Синтаксис записи оператора:

INPUT [" Запрос" {; | ,}] список переменных через запятую

Ввод a, b, c

))()(( cpbpappS −−−=

Рис. 1. Схема алгоритма решения задачи 1

2

cbap

++=

Вывод a, b, c, S

Начало

Конец

Page 18: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

18

";" – знак ? ставить после "запроса", "," – знак ? не ставить после "запроса". Примечание. Здесь и далее все необязательные компоненты в структуре оператора

заключаются в квадратные скобки. Альтернативные элементы заключаются в фигурные скобки и разделяются между собой символом |.

Примеры: INPUT a, c INPUT "Введите значения двух чисел x, y", x, y INPUT "x="; x

LET – оператор присваивания.

Синтаксис оператора:

[LET] переменная = выражение

"=" – символ "присвоить"

Примеры:

Z=(K+L)^M–N PI=3.141593 X=A

PRINT – оператор вывода данных на экран.

LPRINT – оператор вывода данных на бумагу (печать).

Синтаксис оператора:

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

Оператор PRINT без параметров выводит на экран пустую строку. Под выражением понимается арифметическое выражение, переменная,

цифровая или строковая константы. Экран разделяется на 5 зон по 14 символов в зоне. Если применить запя-

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

Примеры:

PRINT X PRINT X,Y PRINT "x="; X, "y="; Y PRINT "Скорость V="; V; "м/с"

Page 19: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

19

LPRINT "Работу выполнил Иванов И.И."

END – оператор конца программы.

REM Программа решения задачи 1 INPUT "Введите a, b, c"; A, B, C P=(A+B+C)/2 S=SQR(P*(P–A)(P–B)(P–C)) PRINT "a="; A, "b="; B, "c="; C, "S="; S END

Задача 2. Вычислить .5,05,0sin

3,1sin

22 +

+ϕϕ+ϕ=ω

На рис. 2 представлена схема алгоритма реше-

ния задачи 2.

Таблица обозначений

Переменная Имя на языке BASIC ϕ F ω W R R

REM Программа решения задачи 2 INPUT F R=SIN(F)^2+0.5 W=R+1.3*F/R PRINT F, W END

4.2. АЛГОРИТМЫ РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ

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

Для организации ветвлений используются блоки "решение", а в програм-мах – оператор IF–THEN–ELSE.

Рис. 2. Схема алгоритма решения задачи 2

RR

ϕ+=ω

3,1

Вывод ϕ, ω

Ввод ϕ

Начало

Конец

R = sin2ϕ + 0,5

Page 20: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

20

IF–THEN–ELSE – оператор условного перехода.

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

IF условие THEN блок операторов 1 [ELSE блок операторов 2]

Формат оператора многоуровневой структуры: IF условие THEN блок операторов 1 [ELSE блок операторов 2]

END IF (IF – если, THEN – то, ELSE – иначе, END IF – конец IF)

Рассмотрим работу оператора IF. Сначала проверяется выполнение усло-вия. Если условие выполнено, то исполняются действия, описанные блоком операторов 1, в противном случае – действия блока операторов 2.

Условие – логическое выражение (операция сравнения), результатом вы-полнения которого могут быть только два значения: истина ("да") или ложь ("нет") (см. табл. 8).

Таблица 8 Операции сравнения

Знак Операция Пример = равно 5=5

<> не равно 5<>6 > больше 7>0 < меньше –2<0

>= больше или равно 3<=3 <= меньше или равно 4>=2

Многообразие использования оператора IF представлено на рис. 3–5.

Одноуровневая структура: IF условие THEN оператор 1: оператор 2: ...: оператор n

Многоуровневая структура: IF условие THEN оператор 1 оператор 2 . . . оператор n END IF

Рис. 3. Использование оператора IF–THEN–ELSE (вариант 1)

Нет Условие

Да

Оператор 1

Оператор 2

Оператор n

Page 21: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

21

Одноуровневая структура: IF условие THEN Оператор 1: Оператор 2: …: Оператор n ELSE Оператор 1': Оператор 2':

…: Оператор n'

Многоуровневая структура: IF условие THEN Оператор 1 Оператор 2 . . . Оператор n ELSE Оператор 1' Оператор 2' . . . Оператор n' END IF

Рис. 4. Использование оператора IF–THEN–ELSE (вариант 2) Одноуровневая структура: IF условие 1 THEN блок операторов 1 ELSE IF условие 2 THEN блок операторов 2 ... ELSE блок операторов n Многоуровневая структура: IF условие 1 THEN блок операторов 1 ELSEIF условие 2 THEN блок операторов 2 . . . ELSE блок операторов n END IF

Рис. 5. Использование оператора IF–THEN–ELSE (вариант 3)

Задача 3. Вычислить

≥<

=.0если,cos9,2

0если,sin5,2

xx

xxy

На рис. 6 представлена схема алгоритма ре-шения задачи 3.

REM Программа решения задачи 3 INPUT "Введите x"; X IF X<0 THEN Y=2.5*SIN(X) ELSE

Y=2.9*COS(X) PRINT "X="; X, "Y="; Y END

Нет

Да

Условие

Оператор 1

Оператор 2

Оператор n

Оператор 1'

Оператор 2'

Оператор n'

Нет

Рис. 6. Схема алгоритма решения задачи 3

Ввод X

Вывод X, Y

X < 0

y = 2,9cos(x) y = 2,5sin(x)

Конец

Да

Начало

Да

Условие 1

Условие 2

Блок операторов 1

Блок операторов 2

Блок операторов n

Да

Нет

Нет

Page 22: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

22

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

Формат оператора:

GOTO строка

Здесь строка – метка (см. раздел 3.3) или номер строки, с которой долж-но продолжиться выполнение программы.

(GO TO – идти к…) Задача 4. Вычислить корни квадратного уравнения вида ах2 + bx + с = 0.

D = b2 – 4ac – дискрими-нант.

1. Если D > 0, то

,21 a

Dbх

+−= .22 a

Dbx −−=

2. Если D = 0, то

,21 a

bx

−= х2 = х1.

3. Если D < 0, то вывес-ти "Действительных корней нет".

На рис. 7 представлена схема алгоритма решения за-дачи 4.

REM Программа решения задачи 4 INPUT "Введите a, b, c"; A, B, C D=B*B–4*A*C IF D>0 THEN X1=(–B+SQR(D))/(2*A) X2=(–B–SQR(D))/(2*A)

ELSEIF D=0 THEN X1=–B/(2*A) X2=X1

ELSE PRINT "Действительных корней нет" GOTO 1 END IF PRINT "X1="; X1, "X2="; X2 1 END

Рис. 7. Схема алгоритма решения задачи 4

Да

Да

Нет

Нет

D = b2 – 4ac

a

Dbx

a

Dbx

2,

221

−−=

+−=D > 0

D = 0

Ввести a, b, c

211 ,2

xxa

bx =−=

Начало

Начало

Вывод x1, x2

Вывод "Действительных

корней нет"

Page 23: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

23

4.3. АЛГОРИТМЫ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ Алгоритмы циклической структуры – это такие алгоритмы, в которых

одна и та же последовательность действий (область алгоритма) исполняется многократно (по кругу). Повторяющаяся область алгоритма называется телом цикла. Классификация циклов представлена на рис. 8.

4.3.1. Циклы с определенным числом повторений (заданные циклы)

Циклы с определенным числом повторений (заданные циклы) – это цик-лы, в которых заранее известно или можно вычислить, сколько раз необходимо повторить вычисления – выполнить тело цикла. Эти циклы еще называют цик-лами с параметром, с заданным шагом, со счетчиком.

Параметр цикла – это переменная, которая изменяется с заданным шагом и организует повторяемость. Заданные циклы можно организовать двумя способами. Способ организации цикла с помощью блока "решение" представлен на рис. 9.

Рис. 9. Организация цикла с помощью блока "решение". Здесь i – параметр цикла (ПЦ),

in – начальное значение ПЦ, ik – конечное значение ПЦ, hi – шаг изменения ПЦ

Рис. 8. Классификация циклов

Циклы

с предусловием

с постусловием

с определенным числом повторе-ний (заданные циклы, циклы с па-раметром, циклы с заданным ша-гом, циклы со счетчиком)

с неопределенным числом повто-рений (итерационные циклы, цик-лы с заданной точностью)

с предусловием

с постусловием

б) цикл с постусловием: тело цикла исполняется обязательно хотя бы один раз

i = in

i ≤ ik

Тело цикла i

i = i + hi

Да

Нет

а) цикл с предусловием: тело цикла может не исполниться ни разу

i = in

Да

Тело цикла i

Нет

i = i + hi

i ≤ ik

Page 24: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

24

Рис. 10. Схема алгоритма решения задачи 5 (1 способ)

Тело цикла

t = tn

V = at, 2

2atS =

t ≤ tk

Вывод t, V, S

Конец

Начало

Нет

Да

Ввод a, tn, tk, ht

t = t + ht

Задача 5. Автомобиль трогается с места равноускоренно. Составить таблицу значений приобретенной автомобилем скорости и пройденного им пути за время разгона при a = 4 м/c2, tn = 0 с, tk = 20 c, ht = 1 c.

V = at, м/c; ,2

2atS= м.

Схема решения задачи 5 с помощью блока "решение" представлена на рис. 10.

REM Программа решения задачи 5 (1 способ) INPUT A, TN, TK, HT T=TN

А: IF T<=TK THEN V=A*T S=A*T*T/2 PRINT "t="; T, "v="; V, "S="; S T=T+HT GOTO А: END IF END Для организации циклов с заранее из-

вестным числом повторений (циклов с пара-метром) существует специальный блок "мо-дификация" (см. рис. 11) и специальный опе-ратор FOR–NEXT.

Блок "модификация" выполняет три функции в разные моменты времени. При первом исполнении (вхо-де сверху) i = in, при возврате (входе слева): i = i + hi. Блок имеет два выхода. Если i ≤ ik, процесс идет в те-ло цикла. Если i > ik, то процесс выходит из цикла и идет дальше по схеме.

FOR … NEXT – оператор цикла с параметром (счетчиком).

Формат оператора:

FOR i = in TO ik [ STEP hi] . . операторы тела цикла . NEXT [i]

(FOR – для, TO – к, STEP – шаг, NEXT – следующий)

i = in ⋅ ik, hi

Тело цикла i

Рис. 11. Организация цикла с параметром с помощью блока "модификация"

Page 25: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

25

Схема решения задачи 5 с помощью блока "модификация" представлена на рис. 12.

REM Программа решения задачи 5 (способ 2) INPUT "Введите a, tn, tk, ht"; A, TN, TK,

HT FOR T=TN TO TK STEP HT V=A*T S=A*T^2/2 PRINT "t="; T; "с", "V="; V; " м/c", "S="; S;

"м" NEXT T

END

Если параметр цикла представляет собой натуральный ряд чисел (т. е. является счетчи-ком), то in, ik и hi можно задавать константа-ми. Если шаг изменения параметра цикла hi = 1, его можно опускать.

Задача 6. Вычислить и вывести на печать положительные значения функ-

ции y = sin(nx) – cos(n/x) при n = 1, 2, 3, …, 50. Схема алгоритма решения задачи 6 представлена на рис. 13.

' Программа решения задачи 6 INPUT "x="; X FOR N=1 TO 50 Y=SIN(N*X)–COS(N/X) IF Y>0 THEN LPRINT "n="; N, "x="; X, "y="; Y END IF NEXT N END

Рис. 12. Схема алгоритма решения задачи 5 (способ 2)

Ввод a, tn, tk, ht

V = at, 2

2atS =

Вывод S, t, V

Тело цикла t

Начало

Конец

t = tn, tk, ht

Начало

Ввод x

n = 1, 50

y = sin(nx) – cos(n/x)

Вывод n, x, y

y > 0

Рис. 13. Схема алгоритма решения задачи 6

Конец

Да

Нет

Page 26: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

26

4.3.2. Циклы с неопределенным числом повторений (итерационные циклы)

Циклы с неопределенным числом повторений (итерационные циклы) –

это циклы, в которых заранее не известно количество повторений. Количество повторений часто зависит от необходимой точности вычислений. Чем выше точность, тем больше повторных вычислений. Эти циклы также называют цик-лами с заданной точностью, или итерационными циклами.

Итерации – последовательные приближения к некоторому числу.

4.3.2.1. Циклы с предусловием

Задача 7. Вывести все значения z > 1, причем каждое последующее значе-

ние z получается делением предыдущего пополам. В этой задаче заранее не известно,

сколько раз повторятся вычисления. Все будет зависеть от значения введенного z. Если в качестве начального значения z вве-сти 0,8, то вычисления не должны выпол-ниться ни разу.

Цикл с предусловием называют еще циклом "пока". Схема алгоритма решения задачи 7 с использованием цикла "пока" приведена на рис. 14.

Цикл с предусловием может быть реа-лизован двумя операторами: WHILE... WEND и DO...LOOP c проверкой условия в начале.

WHILE...WEND – оператор цикла " пока".

Форма записи оператора:

WHILE условие выполнения . . Операторы тела цикла . WEND

Пока условие имеет значение «истина», операторы тела цикла выполняют-ся. Если "ложь", управление передается оператору, следующему за WEND.

(WHILE – пока, WEND – конец цикла WHILE)

Да

Начало

Ввод z

z > 1

z = z/2

Вывод z

Нет

Рис. 14. Схема алгоритма решения задачи 7 (цикл "пока")

Начало

Page 27: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

27

REM Программа решения задачи 7 (вариант 1) INPUT "Введите значение z"; z WHILE z>1 PRINT "z="; z z=z/2

WEND END

DO...LOOP – оператор цикла с проверкой условия в начале (цикл «пока»).

Синтаксис оператора:

DO {WHILE условие выполнения | UNTIL условие прекращения}

Операторы тела цикла:

LOOP При использовании ключевого слова WHILE проверяется условие выпол-

нения цикла, операторы тела цикла исполняются вновь и вновь, пока условие истинно, или до тех пор, пока оно не станет ложным.

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

(DO – делать, LOOP – петля (повернуть), WHILE – пока, UNTIL – пока не…)

REM Программа решения задачи 7 (вариант 2) INPUT "z="; z PRINT "Исходное значение z="; z DO WHILE z>1 PRINT z z=z/2

LOOP END REM Программа решения задачи 7 (вариант 3) INPUT "z="; z PRINT "Исходное значение z="; z DO UNTIL z<=1 PRINT z z=z/2

LOOP END

Page 28: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

28

4.3.2.2. Циклы с постусловием

Циклы с постусловием называются циклами "до" и отличаются тем, что должны выполняться хотя бы один раз.

Схема алгоритма решения задачи 7 с ис-пользованием цикла "до" приведена на рис. 15.

DO...LOOP – оператор цикла с проверкой условия в конце (цикл " до").

Формат записи оператора:

DO

Операторы тела цикла:

LOOP {WHILE условие выполнения|UNTIL условие прекращения}

В конце цикла может проверяться условие выполнения цикла (когда ис-пользуется ключевое слово WHILE ) или условие прекращения цикла (при использовании ключевого слова UNTIL ).

(DO – делать, LOOP – петля (повернуть), WHILE – пока, UNTIL – пока не…) REM Программа решения задачи 7

(вариант 4) INPUT z DO PRINT z z=z/2

LOOP WHILE z >1 END

REM Программа решения задачи 7 (вариант 5)

INPUT z DO PRINT z z=z/2

LOOP UNTIL z<=1 END

Рис. 15. Схема алгоритма решения задачи 7 (цикл "до")

Да

Нет

Ввод z

z > 1

z = z/2

Вывод z

Начало

Конец

Page 29: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

29

Задача 8. Определить наименьшее целое

k = 1, 2, 3, …, при котором k

kxy

)sin(= становит-

ся меньше ε, x = 0,31; ε = 10–4.

На рис. 16 представлена схема алгоритма решения задачи 8.

REM Программа решения задачи 8 INPUT "x, eps="; X, E K=1 DO Y=ABS(SIN(K*X))/K K=K+1

LOOP WHILE Y>=E PRINT "k="; K–1 END

Задача 9. Вычислить значения элементов бес-

конечного ряда х, ,!2

2х ,

!3

3х …,

!n

хn

до элемента

.!

ε≤n

xn

На рис. 17 представлена схема алгоритма решения задачи 9.

REM Программа решения задачи 9 INPUT "x, e="; X, E N=1:Y=1 WHILE Y>E Y=Y*X/N PRINT "y="; Y, " n="; N N=N+1

WEND END

Примечание. Для вычисления элементов бесконечного ряда использована рекуррент-

ная формула ,1 n

xyy nn −= позволяющая на базе значения предыдущего элемента ряда yn–1

Да

Рис. 17. Схема алгоритма решения задачи 9

Начало

Конец

Ввод x, ε

n = 1, y = 1

n

xyy =

y > ε

n = n + 1

Вывод y, n

Нет

Нет

Да

Ввод x, ε

k = 1

k

kxy

|)sin(|=

y ≥ ε

k = k + 1

Вывод k – 1

Конец

Начало

Рис. 16. Схема алгоритма решения задачи 8

Page 30: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

30

вычислить значение последующего yn, где n – номер элемента ряда. Вычисление факториала: 0!=1; 3!=1 ⋅ 2 ⋅ 3; n!=1 ⋅ 2 ⋅ 3 ⋅ … ⋅ n.

Задача 10. Вычислить сумму элементов бес-

конечного ряда ...!7!5!3

1753

−+−+−= xxxxS с точ-

ностью ε = 10–5. Для вычислений элементов ряда, начиная со второго (n = 2), использовать рекур-

рентную формулу ,)12)(22(

2

1 −−−= − nn

xyy nn где n

– номер элемента. На рис. 18 представлена схема алгоритма ре-

шения задачи 10.

REM Программа решения задачи 10 INPUT "x, eps="; X, EPS N=2: Y=–X:S=1–X DO

Y=Y*(–X^2)/(2*N–2)/(2*N–1) S=S+Y N=N+1

LOOP UNTIL Y< EPS PRINT "S="; S; "при n="; N–1 END

Задача 11. Рассчитать траекторию движения снаряда по формулам x = Vxt, y = Vyt – gt2/2 при по-стоянных Vx и Vy. Время t изменяется от 0 с шагом ∆t. Вычисления закончить при у ≤ 0.

На рис. 19 представлена схема алгоритма ре-шения задачи 11.

REM Программа решения задачи 11 INPUT "Vx, Vy, ht, t0="; VX, VY, HT, T0 G=9.8:T=T0 DO WHILE Y>0

X=VX*T Y=VY*T–G*T^2/2 PRINT "t="; T; "c, "x="; X; "м, y="; Y;" м" T=T+HT

LOOP

Рис. 18. Схема алгоритма решения задачи 10

Нет

Да

Ввод x, ε

n = 2 y = –x

s = 1 – x

)12)(22(

2

−−−=

nn

xyy

y < ε

s = s + y n = n + 1

Вывод s, n – 1

Начало

Конец

Рис. 19. Схема алгоритма решения задачи 11

Да

Нет

g = 9,8; t = t0

x = Vxt; y = Vyt − gt2/2

y > 0

t = t + ∆t

Ввод Vx, Vy, ∆x, t0

Вывод t, x, y

Начало

Конец

Page 31: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

31

END 4.3.3. Вложенные циклы

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

Задача 12. Вычислить таблицу значений

.3 4

yx

eyxZ

xy

++=

xн = 3, xк = 10, hx = 1, yн = 4, yк = 8, hy = 2. Значения x и y изменяются независи-мо, т. е. при каждом значении x необходимо перебрать все значения у.

На рис. 20 представлена схема алгоритма

решения задачи 12.

REM Программа решения задачи 12 INPUT "Xн, Xк, hX, Yн, Yк, hY="; XN, XK,

HX, YN, YK, HY FOR X=XN TO XK STEP HX FOR Y=YN TO YK STEP HY Z=(3*X^4*Y+EXP(–X*Y))/(X+Y) PRINT "X="; X, "Y="; Y, "Z="; Z

NEXT Y NEXT X END

Рис. 20. Схема алгоритма решения задачи 12

yx

eyxz

xy

+⋅=

−43

Вывод x, y, z

Начало

Конец

x = xн, xк, hx

y = yн, yк, hy

Ввод xn, xk, hx, yn, yk, hy

Page 32: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

32

5. АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧ ОБРАБОТКИ МАССИВОВ

5.1. ОБРАБОТКА МАССИВОВ

Массивом называют совокупность данных с одинаковыми свойствами, одина-ковым употреблением и одним именем. Массивы могут быть одномерными (вектор), двумерными (матрица) и n-мерными. Элементы массива располагаются в последова-тельных ячейках памяти и отличаются номерами (индексами). Количество индексов зависит от размерности массива. Элементы массива обозначается при помощи пере-менных с индексами. Индексы записываются сразу после имени в круглых скобках и могут быть целочисленными константами, переменными или арифметическими выражениями, принимающими только целочисленные значения. Массивы должны быть объявлены в начале программы оператором DIM.

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

Формат оператора:

DIM имя массива(границы) [, имя массива(границы),…]

С помощью оператора DIM для массивов выделяется необходимая об-ласть памяти и производится очистка выделенных ячеек.

Примечание. Если при написании программы используются элементы массива без его предварительного объявления, то такой массив задается неявно ("по умолчанию") как одномерный массив, содержащий десять элементов.

5.2. ОДНОМЕРНЫЕ МАССИВЫ

Одномерный массив данных – это вектор (линейная последовательность данных). Элементы одномерного массива имеют по одному индексу. Индекс соответствует номеру элемента в векторе.

Пусть дан одномерный массив X, состоящий из шести элементов: x1, x2, …, xi, …, x6. Это вещественные числа: 2,2; 7,1; –6,5; 2,8; –2,1; 0,5 (см. рис. 21).

' Программа формирования массива (вариант 1) DIM X(6) X(1)=2.2:X(2)=7.1:X(3)=–6.5 X(4)=2.8:X(5)=–2.1:X(6)=0.5

' Программа формирования массива (вариант 2) DIM X(6) FOR I=1 TO 6 INPUT X(I)

NEXT I

X Индексы 2.2 1 7.1 2 –6.5 3 2.8 4 –2.1 5 0.5 6

Рис. 21. Одномерный массив X(6)

Page 33: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

33

READ–DATA – оператор ввода данных.

Синтаксис записи оператора:

READ список вводимых переменных через запятую . . . DATA данные через запятую

Примечание. Оператор DATA содержит данные, которые при выполнении програм-

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

(READ – ввод; DATA – данные)

' Программа формирования массива (вариант 3) DIM X(6) FOR I=1 TO 6 READ X(I)

NEXT I DATA 2.2, 7.1, –6.5, 2.8, –2.1, .5

Задача 13. На метеостанции измеряют температуру атмосферного воздуха

каждый час. Имеем массив значений температуры за сутки t1, t2, …, ti, …, t24.

Найти значение среднесуточной температуры ∑=

=24

1ср .24/

iitt

На рис. 22 представлена схема алгоритма ре-шения задачи 13.

REM Программа решения задачи 13 DIM T(24) S=0 FOR I=1 TO 24

INPUT T(I) S=S+T(I)

NEXT I Tsr=S/24 PRINT "tср="; Tsr; "град" END

S = 0

I = 1, 24

Ввод ti

S = S + ti

tср = S/24

Вывод tср

Начало

Конец

Рис. 22. Схема алгоритма решения задачи 13

Page 34: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

34

Задача 14. Для массива x1, x2, …, xi, …, x100 найти сумму чисел с четными

индексами .100

22∑

=∆=

=

ii

ixS

Схема алгоритма решения задачи 14 представ-

лена на рис. 23.

' Программа решения задачи 14 DIM X(100) FOR I=1 TO 100 INPUT "X(I)=";X(I) NEXT I

S=0 FOR I=2 TO 100 STEP 2 S=S+X(I)

NEXT I PRINT "Сумма чисел с четными индексами S="; S END

Задача 15. Дается одномерный массив чисел

y1, y2, …, yi, …, y20. Найти произведение этих чи-сел.

Нули не умножать! На рис. 24 представлена схема алгоритма

решения задачи 15.

REM Программа решения задачи 15 DIM Y(20) P=1 FOR I=1 TO20 INPUT "Введите Yi"; Y(I) IF Y(I) ><0 THEN P=P*Y(I)

NEXT I PRINT "Р="; P END

Да

Нет

Нет

P = 1

I = 1, 20

Ввод yi

yi ≠ 0

P = P ⋅ yi

Начало

Конец

Вывод P

Рис. 24. Схема алгоритма решения задачи 15

i = 2, 100, 2

Начало

Конец

i = 1, 100

Ввод x(i)

S = 0

S = S + x(i)

Вывод S

Рис. 23. Схема алгоритма решения задачи 14

Page 35: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

35

Задача 16. Вычислить факториал числа n (n!). Пояснения: 0!=1, 3!=1 ⋅ 2 ⋅ 3, n!=1 ⋅ 2 ⋅ 3 ⋅ … ⋅ n. Схема алгоритма решения задачи 16 представлена на рис. 25

REM Программа решения задачи 16 INPUT "n="; N F=1 FOR I=1 TO N F=F*I

NEXT I PRINT "n! ="; F END

Задача 17. Имеется массив значений сред-несуточной температуры атмосферного воздуха за месяц t1, t2, …, ti, …, tn. Определить количество дней с отрицательной температурой при n ≤ 31.

Схема алгоритма решения задачи 17 пред-

ставлена на рис. 26.

REM Программа решения задачи 17 INPUT "Сколько дней в месяце"; N DIM T(N) C=0 FOR I=1 TO N PRINT "T("; I; ")="; : INPUT T(I) * IF T(I)<0 THEN C=C+1 NEXT I PRINT "В этом месяце "; C; "дней с отрица-

тельной температурой" END

* В этой строке показано, как организовать ввод

данных с раскрытием номера вводимого числа.

Нет

Да

Ввести n

C = 0

t(n)

i = 1, n

Ввести ti

ti < 0

C = C + 1

Вывод C

Начало

Конец

Pис. 26. Схема алгоритма решения задачи 17

Начало

Конец

Вывод n, f

I = 1, n

f = f ⋅ i

Ввод n

Рис. 25. Схема алгоритма решения задачи 16

f = 1

Page 36: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

36

PRINT USING – оператор форматного вывода.

Синтаксис записи оператора:

PRINT USING формат$; список выражений

Список выражений – числовые и текстовые (строковые) переменные или выражения, подлежащие выводу (через запятую); формат$ – текстовое выражение в кавычках или заранее приготовленная текстовая константа, со-держащая все необходимые тексты и символы, а также спецификаторы вы-водимых переменных (см. табл. 9) и примеры использования оператора PRINT USING (см. табл. 10).

Таблица 9

Спецификаторы оператора PRINT USING

Тип переменной Спецификаторы Пояснения

Целое число #### Не более указанного количества цифр. Сим-волом # задается положение цифр числа.

Вещественное число ###.## В целой части не более указанного количест-ва цифр, дробную часть округлить до указан-ного количества цифр.

Большие числа ##.###^^^^ Большие числа с уд-военной точностью

##.###^^^^^

Экспоненциальная форма числа. Символом # указывается положение цифр мантиссы чис-ла, ^ – символы порядка числа.

Текст \ \ Вывод указанного количества символов (не более). Символом \ задается положение и границы выводимого текста

Все текстовое значение & Вывод всего текстового значения

Таблица 10 Примеры использования оператора PRINT USING

Фрагмент программы Результаты вывода

PRINT USING "x = ### y= ##"; 187,14 x=187 y=14 Z=16.13 PRINT USING "##"; Z PRINT USING "##.#"; Z PRINT USING "##.##"; Z PRINT USING "##.###"; Z PRINT USING "#.##"; Z

16

16.1 16.13 16.130

%16.13 (% – символ несоответствия формата данному числу)

PRINT USING "##.###^^^^"; –5467.12 –5.467E+03 PRINT USING "##.###^^^^^"; 0.000012358 1.236D–005 F$=ИВАНОВ PRINT USING "Фамилия \ \"; F$

Фамилия ИВАНОВ

R$="Скорость V=#.# м/c, время t=## c" V=3.68:T=16 PRINT USING R$; V,T

Скорость V=3.7 м/с, время t=16 c

Page 37: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

37

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

значения функции ,8,2 25,1

i

zi

i

iх −=

где xi – элементы массива: x1, x2, …, xi,

…, xn. Результаты оформить в виде таблицы с заголовком "Таблица результа-тов" и первой графой "№ п/п".

Схема алгоритма решения задачи 18 представлена на рис. 27.

REM Программа решения задачи 18 INPUT "Введите n"; N DIM X(N), Z(N) FOR I=1 TO N PRINT "X("; I; ")="; : INPUT X(I) NEXT I Z$=" Таблица результатов " L$="---------------------------------" H$="| № п/п | X | Z |" F$="| ### | ##.## | ##.## |" PRINT Z$ PRINT L$ PRINT H$ PRINT L$ FOR I=1 TO N Z(I)=SQR(ABS(2.8*EXP(–1.5*X(I))–X(I)^2))/I PRINT USING F$; I, X(I), Z(I) NEXT I PRINT L$ END

Задача 19. Переписать элементы целочисленного массива n1, n2, …, ni, …, n40, кратные пяти, подряд в массив M. Если такие элементы отсутствуют, то вы-дать соответствующее сообщение.

Схема алгоритма решения задачи 19 представлена на рис. 28. Задание типа

переменной см. в разделе 3.5.

x(n), z(n)

Ввод n

i = 1, n

Ввод x(i)

i

xez i

x

i

i |8,2| 25,1 −=

Вывод i, zi

Начало

Конец

Рис. 27. Схема алгоритма решения задачи 18

I = 1, n

Вывод заголовка и "шапки" таблицы

Page 38: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

38

REM Программа решения задачи 19 DIM N%(40), M%(40) K=0 FOR I=1 TO 40 INPUT "N(I)="; N%(I) IF N%(I) MOD 5=0 THEN K=K+1 M%(K)=N%(I)

END IF NEXT I IF K=0 THEN PRINT "Нет элементов, кратных 5" ELSE PRINT "Количество элементов, крат-

ных 5 К="; K END IF END

Задача 20. Имеется массив значений среднесуточ-

ной температуры атмосферного воздуха за месяц t1, t2, …, ti, …, tn. Определить наибольшее значение среднесуточ-ной температуры tmax при n ≤ 31.

Схема алгоритма решения задачи 20 пред-ставлена на рис. 29.

REM Программа решения задачи 20 INPUT "Введите n"; n DIM T(n) FOR i=1 TO n INPUT "T(i)="; T(i) NEXT i Tmax=T(1) FOR i=2 TO n IF T(i)>Tmax THEN Tmax=T(i) NEXT i PRINT "Tmax="; Tmax END

Да

Нет

Ввод n

i = 1, n

Ввод ti

tmax = t1

Вывод tmax

i = 2, n

ti > tmax

Начало

t(n)

Конец

tmax = ti

Рис. 29. Схема алгоритма задачи 20

Рис. 28. Схема алгоритма решения задачи 19

Да

N(40), M(40) K = 0

i = 1, 40

Ввод ni

Остаток (ni/5) = 0

k = k + 1

mk = ni

К = 0 Нет

Начало

Конец

Нет

Да

Вывод К

Вывод "Нет элементов, кратных 5"

Page 39: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

39

Задача 21. Дается ряд чисел y1, y2, …, yi, …, y200. Определить наименьшее из этих чисел ymin и указать его номер imin.

Схема алгоритма решения задачи 21 пред-

ставлена на рис. 30.

REM Программа решения задачи 21 DIM Y(200) YMIN=1E37 FOR I=1 TO 200 PRINT "Y("; I; ")="; : INPUT Y(I) IF Y(I)<YMIN THEN YMIN=Y(I):IMIN=I NEXT I PRINT "Ymin="; YMIN, "Imin=; IMIN END Задача 22. Упорядочить по возрастанию значений (отсортировать по воз-

растанию) элементы вектора X(m). Отсортированный массив расположить на том же месте, что и исходный, с тем же именем.

Схема алгоритма решения задачи 22 (вариант 1) представлена на рис. 31. При реализации этого метода мы находим минимальное значение Xmin и

его номер Imin для всего массива, начиная с X(1). Обмениваем содержимое ячеек X(Imin) и X(1), т. е. минимальное число ставим на первое место, а первое число, чтобы сохранить, отправляем в ячейку с номером Imin. Затем решаем ту же зада-чу, начиная с X(2), затем с X(3) и т. д. до X(m – 1). Последнее число X(m) авто-матически оказывается самым большим и находится на своем месте. Этот алго-ритм является самым экономичным по времени.

Оператор обмена SWAР.

Синтаксис оператора:

SWAP переменная 1, переменная 2

После выполнения этого оператора переменная 1 получает значение пе-ременной 2 и наоборот.

Нет

Да

y(200) ymin = 1037

i = 1, 200

Ввод yi

yi < ymin

ymin = yi

imin = i

Вывод ymin, imin

Начало

Конец

Рис. 30. Схема алгоритма решения задачи 21

Page 40: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

40

REM Программа решения задачи 22 (вариант 1)

INPUT "m="; m DIM X(m) FOR i=1 TO m INPUT X(i) NEXT i FOR k=1 TO m–1 Xmin=1E+37 FOR i=k TO m

IF X(i)<Xmin THEN Xmin=X(i) Imin=i END IF

NEXT i R=X(k) * X(k)=X(Imin) * X(Imin)=R *

NEXT k FOR i=1 TO m PRINT x(i) NEXT i END

* Эти операторы можно заменить од-

ним оператором SWAP X(k), X(Imin).

Для решения этой задачи можно использовать другой метод, так называемый метод "пузырька" . Этот метод основывается на сравнении близлежащих элементов вектора попарно. Если предыдущий элемент оказывается больше последующего, то эти элементы обмениваются местами. Однако за один просмотр всех элементов век-тора данный метод не приводит к желаемому результату, поэтому процедуру срав-нения и перестановок необходимо возобновить. Максимально возможное количество просмотров всех элементов вектора равно m – 1.

Для сокращения количества просмотров служит переменная N. Перед каж-дым просмотром переменной N присваивается значение 0. В случае наличия хотя бы одной перестановки во время очередного просмотра N присваивается значение 1. Это служит сигналом необходимости еще одного просмотра. Этот метод менее экономичен по времени, но имеет более простой алгоритм.

Схема алгоритма решения задачи 22 (вариант 2) представлена на рис. 32.

Начало

Ввод m

Ввод X(i)

i = 1, m

Нет

Да

k = 1, m – 1

i = k, m

Xmin = 1037

X(i) < Xmin

Xmin = X(i) Imin = i

R = X(k) X(k) = X(Imin)

X(Imin) = R

X(k) ↔ X(Imin)

1

Конец

Вывод X(i)

i = 1, m

1

Рис. 31. Схема алгоритма решения задачи 22 (вариант 1)

Page 41: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

41

Рис. 32. Схема алгоритма решения задачи 22 (вариант 2)

Нет

Да

Да

Нет

Начало

i = 1, m – 1

Ввод m

N = 0

X(i) > X(i + 1)

Ввод X(i)

i = 1, m

X(i) ↔ X(i + 1)

Конец

Вывод X(i)

i = 1, m

N = 1

N = 1

REM Программа решения задачи 22 (вариант 2) INPUT "m="; m FOR i=1 TO m INPUT X(i) NEXT i DO N=0 FOR i=1 TO m–1 IF X(i)>X(i+1) THEN SWAP X(i), X(i+1) N=1 END IF

NEXT i LOOP WHILE N=1 FOR i=1 TO m PRINT X(i)

NEXT i END

И, наконец, самый простой, но и самый

нерациональный алгоритм решения задачи 22 (вариант 3) представлен на рис. 33.

REM Программа решения задачи 22 (ва-

риант 3) CLS INPUT "m="; m FOR i=1 TO m INPUT "X(i)=";X(i) NEXT i FOR k=1 TO m–1 FOR i=k+1 TO m IF x(i)>x(k) THEN SWAP x(i), x(k)

NEXT i NEXT k FOR i=1 TO m PRINT x(i)

NEXT i END

да

Нет

Начало

i = k + 1, m

Ввод m

X(i) < X(k)

Ввод X(i)

i = 1, m

X(i) ↔ X(k)

Конец

Вывод X(i)

i = 1, m

k = 1, m – 1

Рис. 33. Схема алгоритма решения задачи 22 (вариант 3)

Page 42: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

42

Задача 23. В отделе кадров предприятия имеется список работников и зара-ботная плата каждого. Отпечатать фамилии работников, зарплата которых не превышает 1000 рублей. Определить количество таких работников. Отпечатать также фамилию и заработную плату работника с наибольшей зарплатой.

Схема алгоритма решения задачи 23 приведена на рис. 34. Задание типа

переменной см. в разделе 3.5. REM Программа решения задачи 23 INPUT "Сколько работников n="; n INPUT "Минимально допустимая з/п S="; s DIM FAM$(n), Z(n) FOR i=1 TO n PRINT "Введите фамилию и зарплату "; i;

"-того сотрудника"; : INPUT FAM$(i), Z(i) NEXT i Zmax=–1E+37 C = 0 CLS PRINT "Список сотрудников, получающих

зарплату меньше "; s; " рублей" FOR i=1 TO n IF Z(i)<s THEN PRINT FAM$(i), Z(i); "руб." C=C+1 END IF IF Z(i)>Zmax THEN Zmax=Z(i) Imax=i END IF NEXT I PRINT "На предприятии "; C; "сотрудников

с минимально допустимой зарплатой" PRINT "Наибольшую зарплату"; Zmax; "руб.

получает"; FAM$(Imax) END

Рис. 34. Схема алгоритма решения задачи 23

i = 1, n

Нет

Да

Нет

Да

Начало

Конец

Ввод FAM$(i), Z(i)

Ввод n, S

Zmax = –1037 C = 0

i = 1, n

Z(i) < S

Вывод FAM$(i), Z(i)

C = C + 1

Z(i) > Zmax

Zmax = Z(i) Imax = i

Вывод C, Zmax, FAM$(Imax)

1

2

3

Page 43: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

43

5.3. ДВУМЕРНЫЕ МАССИВЫ. ОПЕРАЦИИ С МАТРИЦАМИ Двумерный массив данных – это матрица (таблица), содержащая строки и

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

Пусть дана матрица А, состоящая из двух строк и трех столбцов:

.)3,2(3,22,21,2

3,12,11,1

=

aaa

aaaA

Элементы двумерного массива располага-

ются в последовательных ячейках памяти, стро-ка за строкой, имеют одно имя и отличаются двумя индексами (см. рис. 35).

Программа формирования массива (вариант 1) DIM A(2,3) A(1,1)=4.5:A(1,2)=–2.3:A(1,3)=1.2 A(2,1)=–7.4:A(2,2)=3.4:A(2,3)=4.7

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

тельных случаях при небольших массивах.

Программа формирования массива (вариант 2) DIM A(2,3) FOR I=1 TO 2 FOR J=1 TO 3 INPUT A(I,J)

NEXT J NEXT I Программа формирования массива (вариант 3) DIM A(2,3) FOR I=1 TO 2 FOR J=1 TO 3 READ A(I,J)

NEXT J NEXT I DATA 4.5, –2.3, 1.2, –7.4, 3.4, 4.7

CLS – оператор очистки экрана.

А Индексы 4,5 1,1 –2,3 1,2 1,2 1,3 –7,4 2,1 3,4 2,2 4,7 2,3

Рис. 35. Двумерный массив А(2,3)

Page 44: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

44

Оператор PRINT TAB – вывод с указанием позиции.

Функция TAB управляет горизонтальной позицией курсора. Она только дополняет оператор PRINT и не может использоваться самостоятельно.

Синтаксис записи оператора:

PRINT TAB( номер позиции); список выражений

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

COLOR – оператор изменения цвета.

Синтаксис оператора в текстовом режиме:

COLOR цвет символов, цвет фона

Здесь цвет символов – код цвета символов, целое число от 0 по 31 (ре-комендуется от 0 по 15), цвет фона – код цвета фона, целые числа от 0 по 15 (рекомендуются темные тона от 0 до 7). В таблице 11 приведены коды цветов, которые используются оператором в текстовом режиме. Для окраски всего экрана нужным фоном после оператора COLOR поставьте оператор CLS, на-пример COLOR 1,14:CLS.

(COLOR – цвет)

Таблица 11

Коды цветов оператора COLOR (текстовый режим экрана)

Цвет Темный Светлый Черный 0 8 (темно-серый) Синий 1 9 Зеленый 2 10 Голубой 3 11 Красный 4 12 Малиновый 5 13 Желтый 6 (коричневый) 14 Белый 7 (светло-серый) 15

Задача 24. Даны два вектора, два ряда чисел, два одномерных массива:

X(n) = x1, x2, …, xi, …, xn и Y(m) = y1, y2, …, yi, …, ym. Например, n = 5, m = 4. Вы-числить и сформировать двумерный массив (матрицу) Z(n,m), каждый элемент

которого будет вычисляться по формуле .)sin(1,3

4,27,1 22

,ji

jiji yx

yxz

+=

Схема алгоритма решения задачи 24 представлена на рис. 36.

Page 45: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

45

REM Программа решения задачи 24 INPUT "Введите N, M", N, M DIM X(N), Y(M), Z(N,M) FOR I=1 TO N PRINT "X("; I; ")="; :INPUT X(I)

NEXT I FOR J=1 TO M PRINT "Y("; J; ")="; :INPUT Y(J)

NEXT J COLOR 10,6 ' св.зел. цвет символов CLS ' коричневый фон PRINT TAB(20); "Массив X" FOR I=1 TO N PRINT X(I); ' ";" – в той же строке

NEXT I PRINT ' начать с новой строки PRINT ' пустая строка COLOR 11 ' св.голуб. цвет символов

PRINT TAB(30); "Массив Y" FOR J=1 TO M PRINT Y(J);

NEXT J PRINT PRINT COLOR 14 ' желтый цвет символов PRINT TAB(35); "Матрица Z" FOR I=1 TO N FOR J=1 TO M Z(I, J)=(1.7*X(I)^2+2.4*Y(J)^2)/(3.1*SIN(X(I)*Y(J))) PRINT Z(I, J), ' "," – в той же стр.

NEXT J PRINT ' нач. новую стр. матрицы

NEXT I END

Примечание. Информация, стоящая после символа ' (апостроф), программой не рас-

сматривается. Это пояснения оператора.

В программе к задаче 24 показано: • как изменять цвет символов при выводе данных на экран, • как вывести значения данных одномерного массива в одну строку через

пробел, • как вывести заголовок, начиная с указанной позиции экрана, • как выводить результаты вычислений в виде матрицы, • как осуществить ввод исходных данных с раскрытием номера вводимого

элемента массива.

j = 1, m

Ввод yj

I = 1, N

J = 1, M

)sin(1,3

4,27,1 22

,ji

jiji yx

yxz

+=

Вывод Zi, j

Конец

Рис. 36. Схема алгоритма решения задачи 24

Начало

X(n), Y(m), Z(n,m)

Ввод n, m

I = 1, n

Ввод xi

Page 46: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

46

Задача 25. Имеется матрица B(3,4) .

4,33,32,31,3

4,23,22,21,2

4,13,12,11,1

=bbbb

bbbb

bbbb

В

Сформировать одномерный массив S(3) = S1, S2, S3, где .4

1,∑

==

jjii bS Напри-

мер, S1 = b1,1 + b1,2 + b1,3 + b1,4. Схема алгоритма решения задачи 25 приведена на рис. 37.

REM Программа решения задачи 25 DIM B(3,4), S(3) FOR I=1 TO 3 FOR J=1 TO 4 INPUT B(I,J)

NEXT J NEXT I FOR I=1 TO 3 FOR J=1 TO 4 S(I)=S(I)+B(I,J)

NEXT J PRINT "S("; I; ")="; S(I)

NEXT I END

Задача 26. Найти сумму двух матриц, имеющих по n строк и m столбцов.

С(n,m) = A(n,m) + B(n,m). Расчетная формула сi, j = ai, j + bi, j. Схема алгоритма решения задачи 26 приведена на рис. 38.

REM Программа решения задачи 24 INPUT "Количество строк n="; N INPUT "Количество столбцов m="; M DIM A(N,M), B(N,M), C(N,M) FOR I=1 TO N

b(3,4), S(3)

I = 1, 3

J = 1, 4

Ввод bi, j

i = 1, 3

Вывод Si

Начало

j = 1, 4

Si = Si + bi, j

Конец

Рис. 37. Схема алгоритма решения задачи 25

Page 47: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

47

FOR J=1 TO M INPUT "A(I,J)="; A(I,J)

NEXT J NEXT I FOR I=1 TO N FOR J=1 TO M INPUT "B(I,J)= "; B(I,J)

NEXT J NEXT I FOR I=1 TO N FOR J=1 TO M C(I,J)=A(I,J)+B(I,J) PRINT C(I,J),

NEXT J PRINT

NEXT I END

Задача 27. Имеются две матрицы:

,)3,2(3,22,21,2

3,12,11,1

=

aaa

aaaA

.)3,3(

3,32,31,3

3,22,21,2

3,12,11,1

=bbb

bbb

bbb

В

Найти C = A × B.

Эти матрицы можно умножить векторно, т. к. количество столбцов в пер-вой матрице A(2,3) равно количеству строк во второй матрице В(3,3). Матрица С будет содержать две строки и три столбца, т. к. А(2,3), B(3,3):

.)3,2(3,22,21,2

3,12,11,1

=

ссс

сссС

Рис. 38. Схема алгоритма решения задачи 26

Конец

I = 1, n

J = 1, m

Вывод ci, j

Начало

Ввод n, m A(n,m) B(n,m) C(n,m)

i = 1, n

j = 1, m

Ввод ai, j

i = 1, n

j = 1, m

Ввод bi, j

сi, j = ai, j + bi, j

Page 48: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

48

Расчетная формула:

∑=

=3

1,,, .

kjkkiji bac

Например, c1,1 = a1,1b1,1 + a1,2b2,1 + a1,3b3,1.

Схема алгоритма решения задачи 27 приведена на рис. 39.

REM Программа решения задачи 27 DIM A(2,3), B(3,3), C(2,3) FOR I=1 TO 2 FOR K=1 TO 3 INPUT "A(I,K); A(I,K)

NEXT K NEXT I FOR K=1 TO 3 FOR J=1 TO 3 INPUT "B(K,J)"; B(K,J)

NEXT J NEXT K FOR I=1 TO 2 FOR J=1 TO 3 S=0 FOR K=1 TO 3 S=S+A(I,K)*B(K,J)

NEXT K C(I,J)=S PRINT C(I,J),

NEXT J PRINT NEXT I END

i = 1, 2

k = 1, 3

Ввод ai,k

Начало А(2,3) В(3,3) С(2,3)

i = 1, 2

j = 1, 3

S = 0

k = 1, 3

S = S + ai,kbk, j

ci, j = S

Вывод ci, j

Конец

k = 1, 2

j = 1, 3

Ввод bk, j

Рис. 39. Схема алгоритма решения задачи 27

Page 49: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

49

6. ИСПОЛЬЗОВАНИЕ ПОДПРОГРАММ. ЭЛЕМЕНТЫ МОДУЛЬНОГО ПРОГРАММИРОВАНИЯ

6.1. ОБЩИЕ СВЕДЕНИЯ Программный модуль – это программа, используемая как составная часть

других программ. Любая программа на QBASIC может состоять из одного или не-скольких модулей, один из которых является главным (главная программа), а дру-гие – вспомогательными (подпрограммами, или процедурами). Главный модуль вызывает вспомогательные модули для использования по мере необходимости.

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

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

В QBASIC в отличие от старых версий BASIC имеется развитой аппарат для описания подпрограмм и функций с параметрами, что позволяет создавать сложные модульные программы. К таким средствам относятся процедуры SUB и FANCTION. GOSUB-подпрограммы и функции DEF FN являются устарев-шими конструкциями, но используются еще достаточно широко в силу своей простоты.

6.2. ПОДПРОГРАММЫ ТИПА SUBROUTINE (GOSUB-ПОДПРОГРАММЫ)

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

GOSUB-подпрограммы.

Синтаксис оператора:

GOSUB метка

Этот оператор ставится в тексте главной программы. Тексты подпро-грамм начинаются с меток, каждая – со своей, а заканчиваются оператором RETURN. Тексты всех подпрограмм записываются в конце главной про-граммы после оператора END в любой последовательности.

Page 50: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

50

(GOSUB – идти к подпрограмме, RETURN – вернуться)

Задача 28. Вычислить число перестановок из n элементов Рn = n!, число

размещений из n по m )!(

!

mn

nRm

n −= и число сочетаний из n по m

.)!(!

!

mnm

nCm

n −= Вычисление факториала оформить в виде подпрограммы.

Схема алгоритма решения задачи 28 приведена на рис. 40.

REM Программа решения задачи 28 INPUT "n, m ="; N, M K=N GOSUB FAKT: P=F K=N–M GOSUB FAKT: R=P/F K=M GOSUB FAKT: C=R/F PRINT "Число перестановок из "; N; "="; P PRINT "Число размещений из "; N; "по"; M; "="; R PRINT "Число сочетаний из "; N; "по”; M; "="; С END FAKT: REM Вычисления факториала F=1 FOR I=1 TO K F=F*I

а) Начало

Конец

Ввод n, m

k = n

Подпрограмма "Факториал"

Подпрограмма "Факториал"

Подпрограмма "Факториал"

P = f

k = m

k = n – m

Вывод n, m, P, R, C

f

PR =

f

RC =

Рис. 40. Схемы алгоритмов решения задачи 28: а) главный модуль, б) подпрограмма вычисления факториала

б)

f = 1

i = 2, k

F = f i

Начало подпрограммы "Факториал"

Конец подпрограммы "Факториал"

Page 51: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

51

NEXT I RETURN

Задача 29. Определить среднее значений элементов каждого из n векторов X различной длины. Размеры векторов m1, m2, m3, …, mn, mi ≤ 100, n ≤ 10. Срав-нить полученные средние значения: S1, S2, S3, …, Sn и найти наименьшее из них. Вычисление среднего значения оформить в виде подпрограммы.

Схема алгоритма решения задачи 29 приведена на рис. 41. Примечание. Вектор – это одномерный массив вещественных чисел x1, x2, …, xm.

REM Программа решения задачи 29 (вариант 1) DIM x(100) INPUT "Сколько массивов n ="; n Xsrmin=1E+37 FOR k=1 TO n PRINT "Сколько чисел в"; k; "-ом массиве"; INPUT m GOSUB sr: IF Xsr<Xsrmin THEN Xsrmin=Xsr NEXT k PRINT "Xср.min ("; k; ")="; Xsrmin END sr: REM Подпрограмма SR S=0 FOR i=1 TO m INPUT "x(i)="; x(i) S=S+x(i)

NEXT i Xsr=S/m

Нет

Да

Начало

Конец

Ввод n

xср.min = 1037

k = 1, n

Ввод m

Подпрограмма SR

xср < xср.min

xср.min = xср

Вывод xср.min

а)

Рис. 41. Схемы алгоритмов решения задачи 29: a) главный модуль, б) подпрограмма вычисления среднего

S = S + x(i)

S = 0

i = 1, m

Ввод x(i)

xср = S/m

Вывод xср

б) Начало подпрограммы SR

Конец подпрограммы SR

Page 52: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

52

PRINT "Xср.("; k; ")="; Xsr RETURN

6.3. ФУНКЦИЯ DEF FN

Функции DEF FN – простейшая подпрограмма. Она может быть описана в линейной или блочной форме.

Функция DEF FN.

Линейная форма записи:

DEF FNимя (параметры) = выражение,

где FNимя – имя функции (начинается с символов FN); параметры – список параметров (параметры не могут содержать массивы и константы); выраже-ние – выражение, значение которого присваивается функции.

Блочная форма записи:

DEF FNимя (параметры) операторы FNимя = выражение END DEF

Функция FNимя может быть использована в любом месте программы в виде:

FNимя (фактические параметры)

Например, следующий фрагмент программы, использующей линейную форму DEF FN:

. . . DEF FNR(K, N)=K^2–EXP(K+N) . . . Z=X+FNR(X,Y) . . .

Задача 30. Вычислить определенный интеграл ,|8,1|ln2,5

13∫ −

+=−b

a

x

x

ey исполь-

зуя формулу трапеций ,)(2

)()( 1

1

++≅ ∑

=

N

iiтр xy

byayhS где N – число разбиений

интервала [a, b]; шаг интегрирования ;N

abh

−= xi = a + Ih; i = 1, 2, …, N – 1.

Схема алгоритма решения задачи 30 приведена на рис. 42.

Page 53: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

53

REM Программа решения задачи 30 DEF FNY (X)=(1+EXP(–X))/(5.2*

LOG(ABS(X^3–1.8)) INPUT "a, b, n="; A, B, N H=(B–A)/N S=(FNY(A)+FNY(B))/2 FOR I=1 TO N–1 X=H*I S=S+FNY(X)

NEXT I STR=H*S PRINT "Sтр="; STR END 6.4. ПРОЦЕДУРЫ SUB

Процедуры SUB используются для организации подпрограмм с парамет-рами, что позволяет создавать сложные модульные программы.

Для каждой процедуры SUB, применяемой в программе, QBASIC генери-рует соответствующий оператор для ее объявления DECLARE. При отсутствии объявления программный модуль не может быть выполнен. Вызов процедуры SUB может осуществляться в главной программе двумя способами:

1) CALL имя процедуры [(список фактических параметров)] –"фортрановский вызов";

2) имя процедуры [список фактических параметров] – "паскалевский вызов".

Фактические параметры – это передаваемые процедуре значения. Формальные параметры применяются в процедуре для хранения пере-

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

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

граммы после слова END, каждая из них начинаются строкой SUB имя проце-

Рис. 42. Схема алгоритма решения задачи 30

Конец

Ввод a, b, N

H = (b – a)/N

S = y(a) + y(b)

Начало

|8,1|ln2,5

1)(

3 −⋅+=

x

exy

x

ss

i = 1, N – 1

x = H ⋅ i

S = S + y(x)

Sтр = S ⋅ H

Вывод N, Sтр

Page 54: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

54

дуры [(список формальных параметров)] и заканчиваются END SUB. В опи-сании подпрограммы используются формальные параметры.

Процедура SUB.

Главная программа: DECLARE имя процедуры 1 [(список формальных параметров)] . . . DECLARE имя процедуры n [(список формальных параметров)] . . . CALL имя процедуры 1 [(список фактических параметров 1)] . . . CALL имя процедуры 1 [(список фактических параметров 2)] . . . END

Процедуры (подпрограммы): SUB имя процедуры 1 [(список формальных параметров)] Операторы END SUB . . . SUB имя процедуры n [(список формальных параметров)] Операторы END SUB

(SUB – подпрограмма, DECLARE – объявить, CALL – вызвать)

Задача 31. Определить сумму значений элементов трех векторов X(10),

Y(7), Z(5). Схема алгоритма решения задачи 31 приведена на рис. 43.

Рис. 43. Схемы алгоритма решения задачи 31: а) главный модуль,

б) подпрограмма ввода массива, в) подпрограмма нахождения суммы

Начало

Конец

VVOD (x( ), 10)

VVOD (y( ), 8)

SUM (x( ), 10, sx)

VVOD (z( ), 5)

SUM (y( ), 8, sy)

SUM (z( ), 5, sz )

S = sx + sy + sz

Вывод S

a) VVOD (a( ), n)

i = 1, n

Ввод (a(i)

Конец

б) SUM (a( ), n, sa)

sa = 0

i = 1, n

sa = sa + a(i)

Конец

в)

Page 55: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

55

ПРОГРАММА РЕШЕНИЯ ЗАДАЧИ 31 (вариант 1)

REM Задача 31 (вариант 1) DECLARE SUB VVOD (a(), n) DECLARE SUB SUM (a(), n, sc) DIM X(10), Y(7), Z(5) CALL VVOD(x(), 10) CALL VVOD(y(), 7) CALL VVOD(z(), 5) CALL SUM(x(), 10, sx) CALL SUM(y(), 7, sy) CALL SUM(z(), 5, sz) S=sx+sy+sz PRINT "S="; S END

REM Процедура VVOD SUB VVOD (a(), n) FOR I=1 TO n INPUT a(I)

NEXT I END SUB REM Процедура SUM SUB SUM (a(), n, sc) sc=0 FOR I=1 TO n sc=sc +a(I)

NEXT I END SUB

Решим задачу 28, используя процедуру SUB.

Схема алгоритма решения задачи 28 приведена на рис. 44.

Рис. 44. Схемы алгоритмов решения задачи 28 (вариант 2)

Начало

Ввод n, m

FAKT (n, nf)

FAKT (m, mf)

FAKT (n – m, nmf)

P = nf R = P/nmf C = R/mf

Вывод P, R, C

Конец

FAKT (k, f)

Конец FAKT

f = 1

i = 2, k

f = f ⋅ i

Page 56: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

56

ПРОГРАММА РЕШЕНИЯ ЗАДАЧИ 28 (вариант 2)

REM Задача 28 (вариант 2) DECLARE SUB FAKT (K, F) INPUT "n, m ="; N, M FAKT N, NF FAKT M, MF FAKT N–M, NMF P=NF R=P/NMF C=R/MF PRINT "Число перестановок P из "; N; "="; P PRINT "Число размещений R из "; N; "по";

M; " ="; R PRINT "Число сочетаний С из "; N; "по"; M;

" ="; С END

' Процедура FAKT (описание) SUB FAKT (K, F) F=1 FOR I=1 TO K F=F*I NEXT I END SUB

Решим задачу 29, используя процедуру SUB (см. рис. 41).

ПРОГРАММА РЕШЕНИЯ ЗАДАЧИ 29 (ВАРИАНТ 3)

DECLARE SUB vvsr (a, b) INPUT "Сколько массивов n="; n srmin=1E+37 FOR j=1 TO n vvsr j, sr IF sr<srmin THEN srmin=sr

NEXT j PRINT "Xcp.min="; srmin END ' Процедура нахождения среднего SUB vvsr (j, sr)

DIM x(100) s=0 PRINT "Сколько чисел в "; j; "-том массиве"; INPUT "m="; m FOR i=1 TO m INPUT x(i) s=s+x(i)

NEXT i sr=s/m PRINT "Xcp("; j; ")="; sr END SUB

Page 57: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

57

6.5. ПРОЦЕДУРЫ FUNCTION Процедура FUNCTION так же, как и процедура SUB, является подпро-

граммой с параметрами. Каждую процедуру FUNCTION необходимо объявить в начале главной

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

использоваться везде, где может использоваться выражение. Главным различием между процедурами SUB и FUNCTION является то,

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

Решим задачу 31 вторым способом, используя процедуру FUNCTION (см. рис. 45).

Процедура FUNCTION.

Главная программа: DECLARE FUNCTION имя [(параметры)] . . . переменная = имя (фактические параметры) . . . END

Описание процедуры: FUNCTION имя [(формальные параметры)] операторы имя = выражение END FUNCTION

Выражение – возвращаемое значение функции. Если выражение отсут-ствует, то для числовых значений возвращается 0, для символьных – " " (две кавычки).

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

Page 58: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

58

ПРОГРАММА РЕШЕНИЯ ЗАДАЧИ 31 (вариант 2)

REM Задача 31 (вариант 2) DECLARE SUB V (a(), n) DECLARE FUNCTION S (a(), n) DIM X(10), Y(7), Z(5) V x(), 10 ' паскалевский вызов процедуры V y(), 7 V z(), 5 SS=S(x(), 10)+S(y(), 7)+S(z(), 5) PRINT "S="; SS END

' ПРОЦЕДУРА V (описание) SUB V(a(), n)

FOR i=1 TO n INPUT a(i)

NEXT i FOR i=1 TO n INPUT a(i) NEXT i

END SUB ' ПРОЦЕДУРА S (описание) FUNCTION S(a(), n) c=0

FOR i=0 TO n c=c+a(i) NEXT i

S=c END FUNCTION

Рис. 45. Схемы алгоритмов решения задачи 31 (вариант 2)

Конец

Начало

V (x( ), 10)

V (y( ), 8)

SS = S(x( ),10) + S(y( ),8) + S(z( ),5)

V (z( ), 5)

Вывод SS

SUBV(a( ),n)

I = 1, n

Ввод (a(i)

Конец SUBV

Конец FUNCTION S

S = c

c = 0

i = 1, n

c = c + a(i)

FUNCTION S(a( ),n)

Page 59: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

59

7. ФАЙЛЫ ДАННЫХ С ПОСЛЕДОВАТЕЛЬНЫМ ДОСТУПОМ Файлом называется определенный набор данных, который рассматривает-

ся как одно целое и целиком либо заносится на магнитный диск, либо считыва-ется с него.

В зависимости от способа организации данных различают файлы двух ти-пов: с последовательным и произвольным доступом.

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

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

При работе с файлами различают две основные и две вспомогательные операции. К основным относятся ввод (INPUT#) и вывод (PRINT# или WRITE#). К вспомогательным относятся открытие файла на диске (OPEN) и за-крытие его (CLOSE).

Оператор открытия файлов данных OPEN.

Он открывает файл для ввода или вывода, связывает с файлом номер, оп-ределяет организацию данных в файле и режимы его обработки.

Формат оператора:

OPEN файл$ [FOR режим] AS [#]номер файла,

где файл$ – [адрес и] имя файла, строковое выражение; режим – это один из следующих режимов:

OUTPUT – последовательный вывод данных в файл (создание файла данных); INPUT – последовательный ввод данных из файла для последующей обработки (использование файла данных); APPEND – последовательный вы-вод с добавлением (создание расширяемого файла данных); номер файла – логический номер файла, целое число от 1 до 255. Заданный номер должен использоваться при всех последующих обращениях к файлу.

Оператор закрытия файлов данных CLOSE.

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

Формат оператора:

CLOSE [#]номер файла[,[#]номер файла]...],

где номер файла – логический номер открытого файла.

Оператор INPUT #.

Читает данные из файла и присваивает их переменным.

Page 60: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

60

Формат оператора:

INPUT #номер файла, переменные,

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

Операторы WRITE # и PRINT #.

Записывают данные в последовательный файл. Формат операторов:

WRITE #номер файла, список выражений,

где номер файла – логический номер файла, открытого оператором OPEN; список выражений – одно или несколько выражений через запятую, значе-ния которых выводятся (записываются) в файл. Выводимые значения разде-ляются запятыми, символьные строки заключаются в кавычки.

Функция EOF (номер файла).

Определяет конец файла. Возвращает –1 ("истина"), если указатель в файле последовательного доступа дошел до его конца.

Задача 32. Создать последовательный файл на дискете с именем "A:\DAN", содержащий исходные данные для задачи 23 (на предприятии рабо-тает 15 сотрудников), см. схему алгоритма на рис. 34, блоки 1–3.

REM Программа решения задачи 32 OPEN "A:\DAN" FOR OUTPUT AS #1' * DIM FAM$(15), Z(15) READ N, S WRITE #1, N, S FOR I=1 TO N READ FAM$(I), Z(I) WRITE #1, FAM$(I), Z(I) NEXT I CLOSE #1 DATA 15,1000 DATA Александров, 1200, Владимиров, 2400, Иванов, 900, Ильин, 800, Констан-

тинов, 9000, Львов, 3500, Михайлов, 3700, Николаев, 600, Петров, 700, Павлов, 8200, Сидоров, 1200, Тимофеев, 2400, Федотов, 3200, Федоров, 950, Яковлев 1400

END * Вместо строковой константы "A:\DAN" можно использовать переменную текстового ти-

па, которой присвоено имя файла. Это позволяет вводить имя файла с клавиатуры и, таким обра-зом, использовать программу для работы с различными файлами. В этом случае открытие файла будет осуществляться операторами:

INPUT "Введите имя файла:", FILE$ OPEN FILE$ FOR OUTPUT AS #1

Page 61: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

61

Задача 33. Загрузить в память машины и вывести на экран монитора по-следовательный файл "A:\DAN", созданный при решении задачи 32 и содержа-щий исходные данные для задачи 23.

REM Программа решения задачи 33 CLS OPEN "A:\DAN" FOR INPUT AS #1 DIM FAM$(15), Z(15) INPUT #1, N, S PRINT "N="; N, "S="; S FOR I=1 TO N INPUT #1, FAM$(I), Z(I) PRINT I, FAM$(I), Z(I) NEXT I CLOSE #1 END

Задача 34. К файлу "A:\DAN", созданному при решении задачи 32 и со-держащему исходные данные для задачи 23 (15 записей), добавить еще две за-писи: "Репин", 2400; "Пуговкин", 880.

REM Программа решения задачи 34 CLS OPEN "A:\DAN" FOR APPEND AS #1 FOR I=1 TO 2 INPUT "Введите фамилию в кавычках и зарплату"; FAM$, Z WRITE #1, FAM$, Z NEXT I CLOSE #1 END

Задача 35. Загрузить в память машины данные последовательного файла

"A:\DAN", дополненного при решении задачи 34 и содержащего неизвестное количество записей (максимально возможное количество записей N ≤ 1500). Для контроля вывести данные на экран монитора.

REM Программа решения задачи 35 CLS OPEN "A:\DAN" FOR INPUT AS #1 DIM FAM$(1500), Z(1500) INPUT #1, N, S I=1 DO UNTIL EOF(1) INPUT #1, FAM$(I), Z(I)

I=I+1 LOOP N=I–1 CLOSE #1 PRINT N, S FOR I=1 TO N PRINT I, FAM$(I), Z(I) NEXT I END

Page 62: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

62

8. ЭЛЕМЕНТЫ ГРАФИКИ НА QBASIC

8.1. ГРАФИЧЕСКИЕ РЕЖИМЫ ЭКРАНА. ТИПЫ КООРДИНАТ Существуют два режима работы с экраном – текстовой и графический.

Текстовой режим, в котором мы до сих пор работали, позволяет выводить 80 символов в одной строке и содержит на экране 25 строк (одна – служебная). Такие параметры экрана устанавливаются при включении компьютера и сохра-няются при работе QBASIC.

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

SCREEN – режим экрана.

Синтаксис оператора:

SCREEN номер режима

Здесь номер режима – целое число, табл. 12. Графических режимов несколько (режимы: 1, 2, 7–13). Для переключе-

ния в текстовый режим используется оператор SCREEN.

Таблица 12 Режимы экрана

Режим Разрешающая способность

Количество цветов

Количество символов (букв) в строке

SCREEN 0 Текстовый режим 16 80 SCREEN 1 320×200 4 40 SCREEN 2 640×200 2 80 SCREEN 7 320×200 16 40 SCREEN 8 640×200 16 80 SCREEN 9 640×350 16 80 SCREEN 10 640×350 2 80 SCREEN 11 640×480 2 80 SCREEN 12 640×480 16 80 SCREEN 13 320×200 256 40

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

Для рисования картинок используют операторы: • PSET, PRESET – рисование точек; • LINE – рисование отрезков и прямоугольников; • CIRCLE – рисование окружностей.

Page 63: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

63

Все эти операторы требуют задания координат. В QBASIC существует три различных типа координат графического экрана.

• Абсолютные координа-ты – эта система координат при-ведена на рис. 46. Начало систе-мы абсолютных координат нахо-дится в левом верхнем углу экра-на. Для изображения точки в центре экрана в режиме 12 ис-пользуют оператор:

SCREEN 12 PSET (320,240).

• Координаты на основе Точки Последней Ссылки (ТПС). Координаты точки, которая была нарисована последней, хранятся в памяти компьютера. Эта точка и называется ТПС. Например, отрезок прямой (линию) можно нарисовать в абсолютных координатах, задав координаты концов отрезка:

SCREEN 12 LINE (320,240) – (420,340),

а можно задать только координаты конца отрезка, используя в качестве коор-динат начала отрезка ТПС,

SCREEN 12 LINE – (420,340).

Сразу после включения графического режима ТПС является точка в центре экрана.

• Относительные координаты. Эти координаты показывают величину перемещения относительно положения ТПС. Чтобы нарисовать новую точку, которая будет лежать левее на 40 и ниже на 20 точек относительно ТПС, требу-ется ключевое слово STEP:

SCREEN 12 PSET (320,240)

PSET STEP (–40,20).

Абсолютные координаты должны быть всегда положительными, а относи-тельные могут быть как положительными, так и отрицательными.

Y

640

(639,479)

480

X (0,0)

Рис. 46. Графический режим 12. Количество точек по осям X и Y, координаты

угловых точек главной диагонали экрана

Page 64: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

64

8.2. РИСОВАНИЕ ТОЧКИ, ОТРЕЗКА ПРЯМОЙ И ПРЯМОУГОЛЬНИКА

PSET, PRESET – рисование точки.

Оператор рисования точки может иметь две следующие формы: PSET (Xaбс, Yaбс) [, цвет] – абсолютная форма; PSET STEP (Xотн, Yотн) [, цвет] – относительная форма, где Xотн, Yотн –

смещение точки относительно ТПС; цвет – цвет точки, см. раздел 8.4.

Оператор изменения цвета точки на фоновый также может иметь две следующие формы:

PRESET (Xaбс, Yaбс) – абсолютная форма; PRESET STEP (Xотн, Yотн) – относительная форма, где Xотн, Yотн – сме-

щение точки относительно ТПС.

SLEEP – пауза. Синтаксис оператора:

SLEEP [n],

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

LOCATE – изменение положения курсора.

Синтаксис оператора:

LOCATE строка, позиция,

где строка – номер строки, в которой будет размещен курсор (это значение должно быть от 1 до максимально возможного количества строк, чаще всего 23); позиция – позиция курсора в строке (значение может быть от 1 до 80 или 40, см. табл. 12).

В следующих программах показано использование этих операторов:

REM Операторы PSET и PRESET SCREEN 2 CLS ' Рисование четырех точек PSET (310,90) PSET (330,90) PSET (330,110) PSET (310,110) SLEEP 1

Page 65: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

65

' Изменение цвета точек на фоновый (исчезновение точек) PRESET (310,90) PRESET (330,90) PRESET (330,110) PRESET (310,110) SLEEP 1 ' Восстановление точек PSET (310,90) PSET (330,90) PSET (330,110) PSET (310,110) END REM Рисование графика Y=X^2 SCREEN 1 FOR X=0 TO 15 Y=X^2 PSET (20*X, Y), 2 NEXT X END

LINE – рисование отрезка прямой и прямоугольника.

1. Рисование отрезка прямой (линии)

LINE [ (X нач, Yнач) ] – (Xкон, Yкон) [, цвет],

где Xнач, Yнач – координаты начала прямой (необязательные параметры в слу-чае использования ТПС); Xкон, Yкон – координаты конца прямой; цвет – цвет линии (см. раздел 8.4).

2. Рисование прямоугольника

LINE [(X нач. диаг, Yнач. диаг)] – (Xкон. диаг, Yкон. диаг), [цвет], {B | BF},

где Xнач. диаг, Yнач. диаг – координаты левого верхнего угла прямоугольника; Xкон. диаг, Yкон. диаг – координаты правого нижнего угла прямоугольника; цвет – цвет прямоугольника (см. раздел 8.4); B – параметр, указывающий на рисова-ние прямоугольника; BF – параметр, указывающий на рисование закрашенно-го прямоугольника.

REM Рисование прямоугольников SCREEN 1 LINE (10,10) – (10,100), 1 ' прямая LINE (50,10) – (100,100), 3, B ' прямоугольник LINE (140,10) – (190,100), 2, BF ' закрашенный прямоугольник END

Page 66: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

66

8.3. ЦВЕТ В ГРАФИКЕ В разделе 5.3 рассказывается об использовании оператора COLOR в тек-

стовом режиме, в табл. 10 приводятся коды цветов. Оператор COLOR может использоваться и в графических режимах, но не

во всех, а только в режимах 1, 7, 8, 9, 12, 13 для задания цвета символов (режи-мы 7, 8, 9, 12, 13) или для задания палитры (режим 1). Режимы 2, 10, 11 являют-ся монохромными (черно-белыми).

COLOR – цвет.

1. Задание цвета символов в режимах 7, 8, 9, 12, 13:

COLOR цвет символов,

где цвет символов – любое число от 0 по 15 (см. табл. 10, раздел 5.3). 2. Задание фона и палитры в режиме 1:

COLOR цвет фона, номер палитры

где цвет фона – любое число от 0 по 15 (см. табл. 10, раздел 5.3); номер па-литры – число 0 или 1, табл. 13 ("По умолчанию" – номер палитры 1).

Таблица 13

Цвета палитр 0 и 1 (графический режим 1)

Номер цвета Палитра 0 Палитра 1 0 – 15 Любой цвет для фона (по умолчанию черный)

1 зеленый голубой 2 красный малиновый 3 коричневый белый

Следующие программы демонстрируют, как следует пользоваться опера-

тором COLOR в различных графических режимах:

REM Использование COLOR в режимах 7, 8, 9, 12, 13 SCREEN 13 FOR i=1 TO 15 COLOR i PSET (i*20, i*10)

NEXT i END

Цвет точек можно указывать непосредственно в операторе PSET, тогда

программа запишется:

Page 67: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

67

REM Использование цвета в режимах 7, 8, 9, 12, 13 SCREEN 13 FOR i=1 TO 15 PSET (i*20, i*10), i

NEXT i END

REM Использование COLOR в режиме 1 SCREEN 1 COLOR 3, 0 ' 3 – голубой фон, 0 – палитра FOR i =1 TO 3 LINE (10+10*i, 10+10*i)–(20+10*i, 20+10*i), i, BF NEXT i LOCATE 10, 10 PRINT "Фон 3 (голубой), палитра 0" LOCATE 23, 2 PRINT "Нажмите любую клавишу" SLEEP ' пауза до нажатия любой клавиши COLOR 1, 1' Фон 1 (синий), 1 – палитра CLS FOR i=1 TO 3 LINE (100+10*i, 100+10*i)–(120+10*i, 120+10*i), i, BF

NEXT i LOCATE 5, 10 PRINT "Фон 1 (синий), палитра 1" END

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

PAINT – закрашивание замкнутых областей.

Синтаксис оператора:

PAINT (X, Y), краска, цвет контура,

где X, Y – координаты любой точки внутри области; краска – номер цвета для закрашивания; контур – номер цвета для контура области.

В режиме 1 номера цвета могут принимать значения от 0 до 3, в режимах 7, 8, 9, 12, 13 – от 0 до 15.

Page 68: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

68

8.4. ОКРУЖНОСТЬ, ДУГА, ЭЛЛИПС, СЕКТОР

CIRCLE – окружность.

Синтаксис оператора:

CIRCLE (X, Y), радиус, цвет, начало, конец, коэффициент

Здесь (X, Y) – координаты центра окружности; радиус – радиус окруж-ности; цвет – цвет; начало – начальная точка дуги, заданная в радианах; ко-нец – конечная точка дуги, заданная в радианах; коэффициент – отношение значений Y-радиуса и Х-радиуса.

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

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

Параметр коэффициент определяет степень сжатия эллипса и может иметь любое положительное значение.

REM Рисование окружности, дуги и сектора SCREEN 12 CLS CIRCLE (100,100), 80, 10 ' окружность CIRCLE (280,200), 80, 13, 0, 2 ' дуга CIRCLE (460,300), 80, 14, –2, –1 ' сектор END REM Рисование и раскрашивание эллипсов SCREEN 12 CLS CIRCLE (100,190), 60, 11 ' окружность PAINT (101,191), 11 CIRCLE (250,190), 60, 12, , , .3 ' эллипс, сжатый по вертикали PAINT (250,190), 12, 12 CIRCLE (400,190), 60, 14, , , 1.5 ' эллипс, сжатый по горизонтали PAINT (400,190), 14 END REM Рисование мордашки SCREEN 12 CLS CIRCLE (200,200), 140 ' лицо CIRCLE (150,160), 30, 11, , , .2 ' глаза CIRCLE (250,160), 30, 11, , , .2

Page 69: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

69

CIRCLE (200,200), 20, 14, , , 2 ' нос LINE (200,60)–(180,120) ' волосы LINE (200,60)–(220,120) LINE (200,60)–(200,120) CIRCLE (200,200), 80, 13, 3.5, 5.8 ' улыбка END REM Рисование и закрашивание кругов SCREEN 12 x=320 y=240 rad=160 CIRCLE (x, y), rad, 10 SLEEP 1 CIRCLE (x–.5*rad, y), 20, 10 SLEEP 1 CIRCLE (x+.5*rad, y), 20, 10 SLEEP 1 ' раскрашивание областей PAINT (x–2, y+2), 10, 10 SLEEP 1 PAINT (x–.5*rad+2, y+2), 10, 10 SLEEP 1 PAINT (x+.5*rad+2, y+2), 10, 10 END

8.5. РИСОВАНИЕ С ПОМОЩЬЮ ОПЕРАТОРА DRAW Оператор DRAW использует специальный графический язык, позволяю-

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

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

• рисовать линии; • раскрашивать области; • двигать и поворачивать рисунок; • изменять размеры (масштаб).

Page 70: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

70

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

Оператор имеет вид:

DRAW текст

Здесь текст – текстовое выражение (последовательность команд графи-ческого языка через запятую в кавычках), см. табл. 14. Параметр текст может состоять из одного или нескольких текстовых выраже-ний, каждое из которых является командой. Каждая команда определяется одной или двумя буквами, задающими конкретное действие.

Таблица 14

Команды оператора DRAW (n, m, x и y – целые числа)

Команда Выполняемое действие Un переместить вверх на n позиций Dn переместить вниз на n позиций Ln переместить влево на n позиций Rn переместить вправо на n позиций En переместить вверх и вправо (по диагонали) на n позиций Fn переместить вниз и вправо (по диагонали) на n позиций Gn переместить вниз и влево (по диагонали) на n позиций Hn переместить вверх и влево (по диагонали) на n позиций

M x, y переместить в точку с координатами x, y B переместить, но не рисовать N переместить, затем вернуть начальное значение ТПС An задать угол поворота Tan задать угол направления Cn задать цвет Sn задать масштаб

P n, m закрасить область 8.5.1. Команда перемещения

Команда перемещения рисует линию от Точки Последней Ссылки (ТПС, см. раздел 8.1) к точке с координатами X, Y.

Например, следующий оператор рисует линию от ТПС к точке с координа-тами (20, 20):

DRAW "M20,20" Это аналогично оператору LINE – (20,20)

Page 71: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

71

Однако оператор DRAW позволяет перемещаться в любом направлении, которое можно определить знаками (+) и (–). Например, оператор

DRAW "M+25,–40"

рисует линию от ТПС до точки, находящейся от ТПС на 25 точек правее и на 40 точек выше.

REM Рисование ключа с помощью команды перемещения М SCREEN 12 DRAW "M+25,+25 M+25,–25 M–25,–25 M–25,+25 M–60,+0" DRAW "M+0,+20 M+10,–10 M+10,+10 M–0,–20" END

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

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

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

DRAW "D40" ' вниз на 40 точек DRAW "L20 U35" ' влево на 20 точек и вверх на 35 точек Следующие команды также относятся к командам относительного движе-

ния: В – перемещение без рисования; N – перемещение без изменения ТПС.

REM Рисование лучей, выходящих из одной точки SCREEN 12 DRAW "BM200,200 NU100 NL100 ND100 NR100 NE100 NF100 NG100 NH100" END REM Рисование буквы "В" SCREEN 12 CLS DRAW "BM–50,+100 R80 E40 U40 H20 E20 U40 H40 L80 D100" DRAW "BM+40,–40 R40 U40 L40 D40" DRAW "BM+0,–80 R40 U40 L40 D40" END

Page 72: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

72

8.5.3. Вращение изображения Команда Аn вращает изображение на угол, кратный 90°°°° (n * 90), где n

равно 0, 1, 2 или 3. Например, DRAW "A2" повернет нарисованное изображение на угол 180°. Команда TAn позволяет поворачивать изображение на произвольный

угол: n может иметь любое значение от –360 до +360. Отрицательное значение угла означает поворот изображения по часовой стрелке, положительное – про-тив часовой стрелки.

REM Вращение SCREEN 12 CLS ' Рисование буквы "В"

DRAW "BM–50,+100 R80 E40 U40 H20 E20 U40 H40 L80 D200" DRAW "BM+40,–40 R40 U40 L40 D40" DRAW "BM+0,–80 R40 U40 L40 D40" SLEEP LOCATE 30, 50 PRINT "Нажмите любую клавишу" CLS ' Повернуть букву на 90 град.

DRAW "A1" DRAW "BM–50,+100 R80 E40 U40 H20 E20 U40 H40 L80 D200" DRAW "BM+40,–40 R40 U40 L40 D40" DRAW "BM+0,–80 R40 U40 L40 D40" SLEEP LOCATE 30, 50 PRINT "Нажмите любую клавишу" CLS ' Повернуть букву на 45 град.

DRAW "TA45" DRAW "BM–50,+100 R80 E40 U40 H20 E20 U40 H40 L80 D200" DRAW "BM+40,–40 R40 U40 L40 D40" DRAW "BM+0,–80 R40 U40 L40 D40" END

8.5.4. Масштабирование изображения Команда Sn изменяет размер изображения, увеличивая или уменьшая

его в зависимости от значения параметра n. Аргумент n может принимать зна-чения от 1 до 255. Изображение масштабируется в n/4 раз, поэтому команда "S12" увеличивает линейный размер изображения в 3 раза, а команда "S2" уменьшает изображение вдвое. По умолчанию аргумент n равен 4 (т. е. без масштабирования).

Page 73: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

73

REM Масштабирование SCREEN 12 CLS ' рисование буквы "В"

DRAW "BM–50,+100 R80 E40 U40 H20 E20 U40 H40 L80 D200" DRAW "BM+40,–40 R40 U40 L40 D40" DRAW "BM+0,–80 R40 U40 L40 D40" LOCATE 30, 50 PRINT "Нажмите любую клавишу" ' ждать до нажатия любой клавиши

SLEEP CLS ' уменьшить размер буквы в два раза

DRAW "S2" ' рисование буквы "В"

DRAW "BM–50,+100 R80 E40 U40 H20 E20 U40 H40 L80 D200" DRAW "BM+40,–40 R40 U40 L40 D40" DRAW "BM+0,–80 R40 U40 L40 D40"

LOCATE 30, 50 PRINT "Нажмите любую клавишу" ' ждать до нажатия любой клавиши

SLEEP ' уменьшить размер буквы в 4 раза

CLS DRAW "S1" ' рисование буквы "В"

DRAW "BM–50,+100 R80 E40 U40 H20 E20 U40 H40 L80 D200" DRAW "BM+40,–40 R40 U40 L40 D40" DRAW "BM+0,–80 R40 U40 L40 D40" END

8.5.5. Цвет в операторе DRAW

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

REM Окрашивание SCREEN 12 CLS ' Рисование буквы "В" DRAW "BM–50,+100 R80 E40 U40 H20 E20 U40 H40 L80 D200" DRAW "BM+40,–40 R40 U40 L40 D40" DRAW "BM+0,–80 R40 U40 L40 D40"

Page 74: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

74

SLEEP LOCATE 30, 50 PRINT "Нажмите любую клавишу" CLS ' Окрасить контур буквы в зеленый цвет

DRAW "C10" DRAW "BM–50,+100 R80 E40 U40 H20 E20 U40 H40 L80 D200" DRAW "BM+40,–40 R40 U40 L40 D40" DRAW "BM+0,–80 R40 U40 L40 D40" SLEEP LOCATE 30, 50 PRINT "Нажмите любую клавишу" CLS ' Окрасить букву в голубой цвет

DRAW "C11" DRAW "BM–50,+100 R80 E40 U40 H20 E20 U40 H40 L80 D200" DRAW "BM+40,–40 R40 U40 L40 D40" DRAW "BM+0,–80 R40 U40 L40 D40" PAINT (320,240), 11 END

8.5.6. Текстовые переменные в операторе DRAW Так как аргументы операторов DRAW являются текстовыми, то их можно

присваивать переменным строкового (текстового) типа. Видоизменим преды-дущую программу "Окрашивание" и используем в ней строковые переменные.

REM Текстовые переменные в операторе DRAW SCREEN 12 CLS ' Определение "B"

B1$ = "BM–50,+100 R80 E40 U40 H20 E20 U40 H40 L80 D200" B2$ = "R40 U40 L40 D40" ' Определение цвета

Z$ = "C10" G$ = "C11" ' Рисование буквы "В"

DRAW B1$ DRAW "BM+40,–40" +B2$ DRAW "BM+0,–80" +B2$ SLEEP LOCATE 30, 50 PRINT "Нажмите любую клавишу" CLS

Page 75: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

75

' Окрасить контур буквы в зеленый цвет DRAW Z$ DRAW B1$ DRAW "BM+40,–40" +B2$ DRAW "BM+0,–80" +B2$ SLEEP LOCATE 30, 50 PRINT "Нажмите любую клавишу" CLS ' Окрасить букву в голубой цвет

DRAW G$ DRAW B1$ DRAW "BM+40,–40" +B2$ DRAW "BM+0,–80" +B2$ PAINT (320,240), 11 END

8.6. ОПЕРАТОРЫ GET И PUT Операторы GET и PUT используются для создания эффекта мультипли-

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

Операторы GET и PUT.

Общая форма этих операторов выглядит:

1. Сохранить прямоугольную область экрана

GET [STEP] (x1, y1) – [STEP] (x2, y2), имя

2. Воспроизвести изображение

PUT [STEP] (x1, y1), имя [, режим]

Здесь STEP – задает относительную форму графических координат; (x1, y1) – координаты верхней левой точки изображения, сохраняемого оператором или точка на экране, начиная с которой оператор помещает это изображение; (x2, y2) – координаты нижней правой точки сохраняемого изображения; имя – имя массива в котором сохраняется изображение; режим – ключевое слово, определяющее режим воспроизведения сохраненного изображения, если па-раметр режим опущен, то оператор PUT использует режим XOR (табл. 15).

Page 76: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

76

Таблица 15 Режимы воспроизведения изображения

Режим Действие

AND Объединение сохраненного изображения с существующим OR Наложение сохраненного изображения на существующее PSET Рисование сохраненного изображения, уничтожая существующее PRESET Рисование сохраненного изображения цветом фона, уничтожая существующее

XOR Рисование сохраненного изображения или уничтожение предыдущего с сохра-нением и восстановлением фона, воспроизводя эффект анимации

Массив, в котором хранится графическая информация, может быть любого

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

Большое значение для сохранения всего изображения имеет выбор размера массива. Он должен быть достаточно большим, чтобы содержать всю графиче-скую информацию. Размер числового массива зависит:

• от размера прямоугольной области; • графического режима экрана; • типа числового массива. Размер прямоугольной области определяется числом точек, содержащихся

в ней, т. е. (x2 – x1)(y2 – y1). От выбора графического режима зависит количество бит памяти, необхо-

димых на каждую точку экрана (см. табл. 16).

Таблица 16 Число бит памяти на точку

Графический режим экрана Число бит на точку

1 2 2, 7, 8, 9, 10, 11, 12 1

13 8

Если тип массива, который мы определяем для хранения, является целым, то минимальное число элементов должно быть умножено на 2.

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

4 + |(X * бит_на_точку + 7)/8 * Y|,

где X = (x2 – x1) + 1, Y = (y2 – y1) + 1.

В программе, использующей операторы GET и PUT, QBASIC выдает со-общение об ошибке Illegal function call, если размер массива недостаточен для сохранения изображения.

Page 77: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

77

REM Использование операторов GET и PUT SCREEN 9 CLS DIM M%(86) X1%=100:Y1%=92 ' рисование буквы "Q"

DRAW "bm 100,100 f2 r2 e2 u6 h2 l2 g2 d2" DRAW "BM 105,100 F3" ' рисование буквы "B"

DRAW "BM 112,102 R4 E2 U2 H1 E1 U2 H2 L4 D10" ' сохранение изображения в массиве M%

GET (100,92)–(118,103), M% DO ' цикл вывода сохраненного изображения в произвольных точках

PUT (X1%, Y1%), M%, XOR X1%=RND*600 Y1%=RND*300 PUT (X1%, Y1%), M% LOOP WHILE INKEY$="" ' повторять до нажатия любой клавиши END

8.7. ПОСТРОЕНИЕ ДИАГРАММ И ГРАФИКОВ

DECLARE SUB GRAPH () REM Построение диаграммы SCREEN 1 CLS ' вызов подпрограммы

CALL GRAPH END SUB GRAPH ' объявление массивов

DIM G(15) ' ввод элементов массива

FOR I=1 TO 15 INPUT "G(I)="; G(I) NEXT I CLS ' определение местоположения диаграммы на экране ' задание координат нулевой точки

X=50 Y=120 ' задание цвета диаграммы

C=2

Page 78: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

78

' задание максимального размера диаграммы по высоте NORMA=100 ' цикл поиска максимального значения G(I)

Gmax=G(1) FOR I=2 TO 15 IF G(I)>Gmax THEN Gmax=G(I) NEXT I ' рисование горизонтальной оси

LINE (X,Y)–(Х+150,Y), C ' нормировка (масштабирование) значений и рисование диаграммы

FOR I=1 TO 15 G=G(I)/Gmax*NORMA Z=X+10*(I–1) LINE (Z,Y)–(Z+7,G), C, BF NEXT I END SUB REM Построение точечного графика функции Y=Y(X) ' задание функции пользователя

DEF FNY (X)=3*SIN(X) DIM x(1000), y(1000) INPUT "введите Xmin, Xmax, HX"; Xmin, Xmax, Hx ' READ Xmin, Xmax, HX ' DATA 0,6.28318,.1 ' цикл поиска Ymin и Ymax ' формирование массивов X(k),Y(k)

Ymin=1E+37 Ymax=–1E+37 i=1 FOR x=Xmin TO Xmax+.00001 STEP Hx y=FNY(x) x(i)=x:y(i)=y i=i+1 IF y<Ymin THEN Ymin=y IF y>Ymax THEN Ymax=y NEXT x k=i–1 ' INPUT "На сколько отрезков разбить шкалу х? NX="; nx ' INPUT "На сколько отрезков разбить шкалу y? NY="; ny

READ nx, ny DATA 5,4 ' переключение в графический режим 640х380

SCREEN 12 ' переход к традиционной системе координат

WINDOW (0,479)–(639,0)

Page 79: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

79

CLS ' определение местоположения графика ' задание координат нулевой точки

x0=100 y0=100 ' задание цвета диаграммы

c=10 ' задание максимального размера диаграммы по оси X и Y

normax=440 normay=320 ' вычисление масштаба по оси X и Y

mx=normax/(Xmax–Xmin) my=normay/(Ymax–Ymin) ' рисование горизонтальной оси

LINE (x0, y0)–(x0+normax, y0), c ' рисование вертикальной оси

LINE (x0, y0)–(x0, y0+normay), c ' построение точечного графика

FOR i=1 TO k PSET (x0+mx*(x(i)–Xmin), y0+my*(y(i)–Ymin)), 14 ' каждая точка для наглядности обводится кружочком

CIRCLE (x0+mx*(x(i)–Xmin), y0+my*(y(i)–Ymin)), 2, 14 NEXT i ' рисование сетки ' шаг по оси x

dxt=normax/nx ' шаг по оси y

dyt=normay/ny ' вертикальные линии сетки

FOR i=1 TO nx LINE (x0+i*dxt, y0)–(x0+i*dxt, y0+normay), c NEXT i ' горизонтальные линии сетки

FOR i=1 TO ny LINE (x0, y0+i*dyt)–(x0+normax, y0+i*dyt), c NEXT i LOCATE 3, 30 ' цена деления по x

dx=(Xmax–Xmin)/nx ' цена деления по y

dy=(Ymax–Ymin)/ny ' шкала по оси x

FOR i = 0 TO nx LOCATE 25, 11+i*11 PRINT USING "##.##"; Xmin+dx*i;

Page 80: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

80

NEXT i ' шкала по оси y

FOR i=0 TO ny LOCATE 24–5*i, 7 PRINT USING "##.##"; Ymin+dy*i; NEXT i SLEEP END REM Построение линейчатой диаграммы DIM x(100), y(100) ' ввод исходных данных FOR i=1 TO 11:READ x(i): NEXT i FOR i=1 TO 11:READ y(i): NEXT i DATA –5, –4, –3, –2, –1, 0, 1, 2, 3, 4, 5 DATA 25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25 ' выбор наибольших и наименьших значений X и Y Xmin=1E+37:Xmax=–1E+37:Ymin=1E+37:Ymax=–1E+37 FOR i=1 TO 11 IF x(i)<Xmin THEN Xmin=x(i) IF x(i)>Xmax THEN Xmax=x(i) IF y(i)<Ymin THEN Ymin=y(i) IF y(i)>Ymax THEN Ymax=y(i) NEXT i ' переход в графический режим (640х480) SCREEN 12 ' задание традиционного направления координат WINDOW (0, 479)–(639, 0) ' начало системы координат x0=100 y0=100 ' размеры графика normax=400 normay=320 ' вычисление масштаба mx=normax/(Xmax–Xmin) my=normay/(Ymax–Ymin) ' построение осей LINE (x0, y0)–(x0+normax, y0), 11 LINE (x0, y0)–(x0, y0+normay), 11 ' построение линейчатого графика FOR i=1 TO 11 LINE –(x0+mx*(x(i)–Xmin), y0+my*(y(i)–Ymin)), 14 NEXT i LOCATE 24, 65

Page 81: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

81

PRINT "X" LOCATE 3, 13 PRINT "Y" READ nx, ny DATA 10,5 ' рисование сетки ' шаг по оси x dxt=normax/nx ' шаг по оси y dyt=normay/ny ' вертикальные линии сетки FOR i=1 TO nx LINE (x0+i*dxt, y0)–(x0+i*dxt, y0+normay), 11 NEXT i ' горизонтальные линии сетки FOR i=1 TO ny LINE (x0, y0+i*dyt)–(x0+normax, y0+i*dyt), 11 NEXT I LOCATE 3, 30 ' цена деления по x dx=(Xmax–Xmin)/nx ' цена деления по y dy=(Ymax–Ymin)/ny ' шкала по оси x FOR i=0 TO nx LOCATE 25, 12+i*5 PRINT USING "##"; Xmin+dx*i; NEXT i ' шкала по оси y FOR i=0 TO ny LOCATE 24–4*i, 10 PRINT USING "##"; Ymin+dy*i; NEXT i SLEEP END

Page 82: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

82

ЗАКЛЮЧЕНИЕ

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

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

Page 83: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

83

БИБЛИОГРАФИЧЕСКИЙ СПИСОК РЕКОМЕНДУЕМОЙ И ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. *Шубинский, И. Б. Основы алгоритмизации инженерных задач: Учеб.

пособие / И. Б. Шубинский; ЛТА. – СПб., 1994. – 96 с., ил. 2. *Вычислительная техника и программирование: Учеб. для технических

вузов / Под ред. А. В. Петрова. – М.: Высш. шк., 1990. – 479 с., ил. 3. Очаков, В. Ф. Этюды на языках QBasic, QuickBasic и Basic Compiler /

В. Ф. Очаков, М. А. Рахаев. – М.: Финансы и статистика, 1995. – 368 с., ил. 4. *Лапшин, Е. Ваши персональные программы: Сб. программ для изу-

чающих QBasic / Е. Лапшин. – М.: ЛДМ Сервис, 1998. – 120 с., ил. 5. *Мельникова, О. И. Начала программирования на языке QBasic: Учеб.

пособие / О. И. Мельникова, А. Ю. Бонюшкина. – М.: ЭКОМ, 1997. – 304 с., ил.

––––––––––––––– * Данная литература имеется в библиотеке СЛИ.

Page 84: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

84

ПРИЛОЖЕНИЯ

ПРИЛОЖЕНИЕ 1

Меню команд среды QBASIC Меню File/Файл New Program/Новый – команда очищает окно редактирования для новой

программы. Если предыдущие программы были как-то изменены, но не сохра-нены, то среда предупредит об этом и попросит подтверждения (подобная про-верка проводится также для команд Open Program и Exit).

Open Program.../Открыть... – команда загрузки некоторой программы с диска.

Merge.../Присоединить… – то же самое, но при этом новая программа "вклеивается" в текущую.

Save.../Сохранить... – после этой команды изменения, произведенные в текущей программе, будут сохранены. При первом сохранении программы Save передаст управление к Save As.

Save As.../Сохранить как... – операция сохранения программы в первый раз с указанием адреса и имени файла.

Print…/Печать… – отпечатать программу. Exit/Выход – команда, после которой среда прекращает свою работу. Меню Edit/Редактирование Это меню отвечает за ряд очень полезных на практике возможностей ре-

дактирования, хотя чаще к ним обращаются не через меню, а посредством "го-рячих" клавиш (они указываются возле соответствующей позиции в скобках). Список "горячих" клавиш можно найти в приложении 3.

Undo/Аннулировать (Alt + Backspace) – команда отменяет несколько по-следних нажатий клавиш. В ряде случаев, когда по неосторожности стерта нужная информация, эта команда может быть очень полезна.

Cut/Вырезать (Shift + Del) – команда запоминает выделенную область программы в специальной области памяти, буфере, и одновременно стирает ее в самой программе. Используется для переноса с последующим выполнением команды Paste.

Copy/Копировать (Ctrl + Ins ) – выделенная область запоминается (копи-руется) в буфере.

Paste/Вставить (Shift + Ins) – содержимое буфера помещается в место, в котором находится в данный момент курсор.

Page 85: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

85

Clear/Очистить (Del) – выделенная область уничтожается. Если нажатие Del было ошибочно, то может помочь команда Undo, но только если ее выпол-нить сразу после выполнения Clear.

New SUB.../Новая SUB... – создает новый модуль для подпрограммы SUB. Обычно применяют другой способ: в основной программе составляют заголо-вок для процедуры, а после нажатия Enter создание нового модуля произойдет автоматически, автоматически же появится команда END SUB.

New FUNCTION.../Новая FUNCTION... – то же, но для FUNCTION. Меню View/Просмотр SUBs.../Модули... (F2) – после выбора этой позиции или нажатия F2 появ-

ляется меню, содержащее названия всех имеющихся модулей (SUB и FUNC-TION). Выбрав нужное имя, можно вызвать этот модуль в основное окно ре-дактирования. На листингах модули следуют один за другим.

Next SUB/Следующий модуль (Shift + F2) – простой переход к следую-щему модулю.

Split/Разбить – команда разбивает основное окно редактирования на две створки (или, наоборот, "закрывает" створки). Таким образом, перед глазами можно будет иметь два окна редактирования, с различными "пейзажами" в них. Переход между окнами – клавиша F6.

Next Statement/Следующее выражение – команда перемещает курсор к оператору, который будет выполняться первым, если нажать F5. В обычном со-стоянии редактирования команда приведет к простому переходу в ее начало.

Output Screen/Экран вывода (F4) – команда просмотра экрана вывода, в котором отображаются результаты действия программы.

Меню Search/Поиск Find.../Поиск... – операция поиска по ключевому слову. Поиск начинается

с текущего местоположения курсора. Selected Text/Выбрать текст (Ctrl + \ ) – смена ключевого слова на поме-

ченное в момент вызова курсором. Repeat Last Find/Повторить поиск (F3) – поиск продолжается с прежним

ключевым словом. Change.../Замена... – задается ключевое слово и слово-заменитель, после

этого по всему тексту идет поиск ключевого слова и везде оно заменяется сло-вом-заменителем, если пользователь подтвердит замену (появляется окошко с запросом, где можно выбрать команды Change – заменить или Skip – проско-чить).

Label.../Метка... – то же, что и Find, но поиск идет только среди меток.

Page 86: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

86

Меню Run/Исполнение Start/Запуск (Shift + F5) – запуск программы сначала. Restart/Перезапустить – команда вызывает все обычные предварительные

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

Continue/Продолжить (F5) – запуск программы после остановки, напри-мер, после STOP, аккорда Ctrl + Break и т. п. Программа продолжает выпол-няться с прерванного места.

Меню Debug/Отладка Add Watch/Установить наблюдение – установить наблюдение за некото-

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

Instant Watch/Текущее наблюдение (Shift + F9) – то же, но переменная для наблюдения выбирается та, около названия которой находится курсор.

Watch point/Указатель наблюдения – задается некоторое выражение (могущее быть либо истинным, либо ложным, как для оператора IF ). Среда те-перь будет постоянно наблюдать за его значением, и наряду со значениями на-блюдаемых переменных будет высвечивать либо FALSE, либо TRUE. Если программа выполняется в обычном режиме, то как только хотя бы одно из на-блюдаемых выражений станет истинным, произойдет ее остановка.

Delete Watch/Снять наблюдение – снимает с наблюдения одну перемен-ную или выражение.

Delete All Watch/Снять все наблюдение – снимает все наблюдение. Trace on/Трассировка – переключатель, включает или выключает состоя-

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

History on/ВключитьHistory – переключатель режима History. При вклю-ченном режиме среда при выполнении программы отслеживает 20 последних шагов (естественно, работа программы при этом замедляется). В любой момент можно остановить программу и просмотреть 20 последних ее шагов (Shift + F8 или Shift + F10).

Toggle Breakpoint/Контрольная точка (F9) – устанавливает контрольную точку (замаскированный оператор STOP, не отражающийся на тексте програм-мы). Строка с контрольной точкой выделяется особой подсветкой. Типичный пример использования, когда контрольная точка устанавливается перед спор-ным местом программы, за выполнением которого пользователь желает про-

Page 87: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

87

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

Clear All Breakpoint/Очистить все контрольные точки – убрать все контрольные точки.

Break on Errors/Отменить анализатор ошибок – переключатель. Если он включен, то действие операторов ON ERROR, если они есть, отменяется. В процессе отладки иногда важно временно отбросить собственные анализаторы ошибок и воспользоваться стандартными сообщениями.

Set Next Statement/Установить следующее выражение – команда позво-ляет произвольно менять место текущего оператора (с некоторыми ограниче-ниями). Он устанавливается на операторе, возле которого находится курсор на момент выполнения команды.

Calls/Вызвать – действия напоминают действия команды Next Statement из меню View, но с некоторыми расширенными возможностями.

Меню Options/Параметры Display.../Экран... – позволяет произвольно менять цветовую гамму на эк-

ране, выбирать наиболее приятные глазу сочетания цветов. Set Paths.../Путь справки... – задает каталог (каталоги), в которых среда

ищет необходимые ей для работы файлы, содержащие тексты Help. Right Mouse/Правая мышь – переключатель, делает главной правую

кнопку мыши. Syntax Checking/Проверка синтаксиса – переключатель, включает или

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

Full Menus/Полное меню – переключатель, включающий или выключаю-щий режим полного меню.

Help/Справка Index/Предметный указатель Contents/Содержание Topic…/Тема… (F1) Help on Help/Использование справки (Shift + F1)

Page 88: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

88

ПРИЛОЖЕНИЕ 2

Основные функциональные (" горячие") клавиши в среде QBASIC

F1 – справка по ключевому слову, функции или оператору, отмеченному

курсором; F2 – вывод на дисплей списка имен всех задействованных в программе

процедур и функций, а также самой программы; F3 – повтор поиска по ключевому слову; F4 – переход к экрану вывода; F5 – продолжение работы по программе; F6 – переброска курсора из окна ввода программы в окно непосредствен-

ного счета и обратно; F7 – выполнение программы до курсора; F8 – пошаговое выполнение программы с заходом в процедуры и функции; F9 – установка или снятие контрольной точки в программе; F10 – пошаговое выполнение программы без захода в процедуры и функ-

ции; Shift + F1 – вывод на дисплей справочной информации; Shift + F2 – вывод на дисплей следующей процедуры или функции; Shift + F5 – запуск программы; Shift + F6 – переброска курсора из одной створки окна редактирования в

другую и обратно; Shift + стрелки управления курсором – выделение фрагмента програм-

мы; Shift + Del – вырезание выделенного фрагмента программы и размещение

его в буфере; Shift + Insert – вставка в программу фрагмента из буфера; Ctrl + F1 – просмотр следующей темы в режиме помощи; Ctrl + F2 – вывод на дисплей предыдущей процедуры или функции; Ctrl + F10 – полноэкранный и многооконный режимы; Ctrl + Insert – копирование выделенного фрагмента программы для после-

дующей вставки; Ctrl + Pause – прервать исполнение программы; Alt + Back Space – отменить последнее действие; Alt + Enter – установить нормальный размер экрана (с инструментами); Alt + Esc – свернуть окно QBASIC.

Page 89: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

89

ПРИЛОЖЕНИЕ 3

Служебные слова, операторы и функции языка

В приложении используются следующие обозначения: [ ] – необязательная часть; { } – перечисление возможных вариантов; | – или.

ABS – функция возвращает модуль числа. AND – обозначение логической или побитовой операции "И" – конъюнк-

ции. ANY – в операторах DECLARE ключевое слово описывает свободный чи-

словой тип аргумента. APPEND – ключевое слово в OPEN. AS – вспомогательное ключевое слово. ASC – функция возвращает ASCII-код символа. ATN – функция возвращает арктангенс числа. BASE – см. OPTION BASE. ВЕЕР – оператор генерирует простейший звуковой сигнал – "бип". Соот-

ветствует PRINT CHR$(7). BINARY – ключевое слово в OPEN. BLOAD – оператор загружает файл, созданный BSAVE, в указанный уча-

сток памяти. BSAVE – копирует содержимое участка памяти в файл. CALL – оператор вызова процедур SUB. CASE – ключевое слово в SELECT CASE. CDBL – функция преобразует числовое выражение к типу DOUBLE. CHAIN – оператор передает управление из текущей программы в другую. CHDIR – оператор изменяет текущий каталог. Соответствует команде

DOS cd. CHR$ – функция возвращает символ, соответствующий заданному ASCII-

коду. CINT – функция округления числа в диапазоне INTEGER. CIRCLE – графический оператор, рисующий окружности и эллипсы. CIRCLE (столбец, строка), радиус [, цвет][, начальная точка дуги, конеч-

ная точка дуги][, характеристическое отношение] Построение на экране окружности, эллипса или дуги заданного радиуса,

который измеряется количеством столбцов с центром в точке с заданными ко-ординатами (столбец, строка). С помощью необязательного параметра цвет можно задать цвет выводимой окружности эллипса или дуги. Если номер цвета не задан, то используется стандартный цвет переднего плана. В тех случаях, ко-гда заданы факультативные параметры начальная точка дуги, конечная точка дуги, на экране вместо полной окружности строится дуга с указанными конце-выми точками (для задания начальной и конечной точке должны использовать-ся единицы измерения длин дуг радианы от 1 до 6,2831). Если концевая точка

Page 90: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

90

задана отрицательным значением, то дополнительно проводится радиус из цен-тра окружности в эту концевую точку. Характеристическое отношение задает отношение высоты эллипса к его ширине (отношение 5/6 определяет окруж-ность в режиме среднего разрешения, а 5/2 – в режиме высокого разрешения).

CLNG – функция округления числа в диапазоне LONG. CLOSE – оператор закрывает один файл или несколько файлов. CLS [{0 | 1 | 2}] – оператор очищает экран. CLS 0 (по умолчанию) – весь

экран. CLS 1 – область графического окна просмотра (если оператор VIEW не применялся, то весь экран). CLS 2 – область текстового окна просмотра (VIEW PRINT).

COLOR – оператор управления цветом выводимой на экран информации. CONST – оператор задает одну константу или несколько констант. COS – функция возвращает косинус угла. CSNG – функция преобразует числовое выражение к виду SINGLE. CSRLIN – функция (без аргументов) возвращает текущую позицию строки

курсора. CVD (строка из 8 байт) — функция, обратная MKD$. Возвращает DOU-

BLE. CVDMBF (строка из 8 байт) – функция, обратная MKSMBF$ и

MKDMBF$. Возвращает DOUBLE. CVI (строка из 2 байт) – функция, обратная МК1$. Возвращает INTEGER. CVL (строка из 4 байт) – функция, обратная MKL$. Возвращает LONG. CVS (строка из 4 байт) – функция, обратная MKS$. Возвращает SINGLE. CVSMBF (строка из 4 байт) – функция, обратная MKSMBF$ и MKDMBF$.

Возвращает SINGLE. DATA – оператор задает списки констант для последующего считывания

оператором READ. DATE$ – функция, возвращающая текущую системную дату в формате

"ММ–ДД–ГГГГ". DATE$ – оператор позволяет переустанавливать текущую системную да-

ту. Принимает варианты "ММ–ДД–ГГ", "ММ–ДД–ГГГГ", ММ/ДД/ГГ и "ММ/ДД/ГГГГ".

DECLARE – оператор-декларатор процедур SUB и FUNCTION. DEF FN – оператор определяет функцию пользователя. DEP SEG [-смещение] – оператор устанавливает адрес текущего сегмента

данных. DEFDBL , DEFINT , DEFLNG , DEFSNG, DEFSTR – операторы устанав-

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

DIM – оператор декларации переменных и массивов. Если статус массивов не оговорен, то заданные в числах будут статическими, а заданные переменны-ми – динамическими.

DO...LOOP – конструкция цикла. DOUBLE – ключевое слово обозначает вещественные переменные двой-

ной точности.

Page 91: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

91

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

D[n%] – перемещает курсор вниз на n% единиц (рисуя соответствующую вертикальную линию).

Е[n% ] – перемещает курсор вправо и вверх на n% единиц. Р[n% ] – перемещает курсор вправо и вниз на n% единиц. G[n%] – перемещает курсор влево и вниз на n% единиц. H[n%] – перемещает курсор влево и вверх на n% единиц. L[n%] – перемещает курсор влево на n% единиц. М[{+ | –}]х%,у% – перемещает курсор в точку х%, у%. Если перед х%

стоит + или –, перемещает относительно текущей точки. R[n%] – перемещает курсор вправо на n% единиц. U[n%] – перемещает курсор вверх на n% единиц. [В] – необязательная приставка, при которой курсор перемещается, но при

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

возврат курсора в исходную позицию. Аn% – поворачивает объект на n% * 90 градусов (изменяется ориентация

команд перемещения курсора, n% может быть 0, 1, 2 или 3). Cn% – устанавливает рисующий цвет (n% – номер цвета, 0 - 15). Pn1%, n2% – закрашивает цветом n1% участок, ограниченный цветом

n2%. Sn% – определяет масштаб рисунка, устанавливая единицу длины пере-

мещения курсора. По умолчанию n% равно 4, что эквивалентно одной точке растра.

ТАn% – изменяет ориентацию перемещений на n% градусов (от –360 до 360). Если n% в командах изображения линии и перемещения курсора опущен, то курсор перемещается на 1 единицу.

Для выполнения подстроки команды DRAW, содержащейся в литерной переменной, применяется команда "X": DRAW "Х"+VARPTR$ (стро-ка_команд$). Для небольших командных строк можно: DRAW строка_команд$.

ELSE – ключевое слово в конструкции альтернативы. ELSEIF – ключевое слово в конструкции альтернативы. END [{ DEF | FUNCTION | IF | SELECT | SUB | TYPE }] – оператор

окончания программы или ключевое слово, обозначающее конец одного из конструкционных блоков QBASIC.

ENVIRON " переменная = значение" – оператор изменяет или добавляет строку в таблице DOS. Соответствует команде DOS set. Все изменения удаля-ются по окончании работы среды.

ENVIRON$ – функция считывает переменные из таблицы DOS (по имени или по номеру).

EOF (n%) – функция проверяет конец указанного открытого файла. Если он обнаружен, то возвращается логическая единица.

EQV – обозначение логической или побитовой операции эквивалентности.

Page 92: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

92

ERASE – оператор обнуляет статические массивы или очищает память от динамических массивов.

ERL – функция возвращает номер строки, в которой обнаружена ошибка, или последнюю обнаруженную строку перед ней (0, если никаких номеров не обнаружено, метки не рассматриваются).

ERR – функция возвращает код ошибки выполнения. ERROR – оператор симулирует ошибку с указанным кодом. EXIT {DEF | DO | FOR | FUNCTION | SUB} – оператор досрочного выхо-

да из конструкции. ЕХР – функция возвращает экспоненту числа. FIELD – оператор определяет структуру поля для файла прямого доступа. FILEATTR – функция возвращает информацию об открытом файле. FILES управляющая строка$ – оператор аналогичен выполнению опера-

тора DOS dir. FIX – функция отбрасывает дробную часть у числа. FOR...NEXT – конструкция цикла с параметром. FREEFILE – функция возвращает номер следующего неиспользуемого

номера файла. FUNCTION – заголовок процедуры-функции. GET – оператор считывания из прямого файла или оператор сохранения

графического образа с экрана. GOSUB – оператор перехода к gosub-подпрограмме. GOTO – оператор безусловного перехода. НЕХ$ – функция возвращает шестнадцатеричное представление числа. IF...THEN – конструкция альтернативы. IMP – обозначение логической или побитовой операции импликации. INKEY$ – функция считывает символ с клавиатуры. INPUT – оператор ввода значения переменной с клавиатуры. INPUT# – оператор считывания из последовательного файла. INPUT$ (n, [[#] номер файла]) – функция считывает n символов с клавиа-

туры или с текущей позиции указанного открытого файла. INSTR ([начало,] подстрока, строка) – функция возвращает номер позиции

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

INT – функция возвращает наибольшее целое, меньшее или равное число-вому выражению.

INTEGER – ключевое слово обозначает целое число одинарной точности. IS – вспомогательное ключевое слово. KEY n, выражение – оператор закрепляет за некоторым номером опреде-

ленную клавишу (по SCAN-коду) или задает макрос (при нажатии клавиши вы-ражение выводится на экран, действует для не модифицированных номеров с 1 по 12 – функциональных клавиш F1–F12).

KEY(n) {ON | OFF | STOP} – группа операторов отслеживания состояния клавиатуры.

Page 93: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

93

KILL – оператор стирает указанный файл с диска. Соответствует команде DOS del.

LBOUND (массив, [n]) – функция возвращает нижний индекс n-й размер-ности указанного массива.

LCASE$ – функция преобразовывает в строке-аргументе все заглавные буквы латинского алфавита в строчные.

LEFT$ – функция вырезает из строки слева указанное число символов. LEN – функция возвращает длину строки для стринговых переменных не-

определенной длины. Для других переменных возвращает число байтов, тре-бующихся на их хранение.

LET – оператор присваивания. LINE – оператор чертит линию на экране. LINE INPUT – оператор ввода с клавиатуры символьной строки. LINE INPUT# – оператор считывания из последовательного файла (или

ASCII-файла) одной строки (до CR-LF). LIST – служебное слово (KEY LIST). LOC – функция возвращает текущую позицию в открытом файле с ука-

занным номером. LOCATE – оператор перемещает курсор в заданное место экрана. LOF(n) – функция возвращает длину одного из открытых файлов в байтах. LOG – функция возвращает натуральный логарифм выражения. LONG – ключевое слово обозначает целые числа двойной точности. LOOP – завершающий оператор циклов DO-LOOP. LPOS(n) – функция возвращает число символов, посланных на печать по-

сле последнего символа возврата каретки, n – номер порта принтера. LPRINT – оператор печати на принтере. Оператор позволяет посылать

принтеру различные команды. Например, для принтера EPSON FX-800 команда LPRINT CHR$(27); CHR$(45); CHR$(1) будет означать: "включение режима пе-чати с подчеркиванием" (для выключения последнее число должно быть нулем) и т. д., все зависит от конкретных особенностей принтера.

LSET – оператор присваивания для литерных переменных с выравнивани-ем по левому краю (используется по умолчанию).

LTRIM$ – функция удаляет начальные пробелы из строки. MID$ – функция вырезает подстроку из строки. MID$ – оператор вклеивает подстроку в строку. MKD$ – функция преобразует DOUBLE в 8-байтовую строку (IEEE-

формат). MKDIR – оператор создает на диске новый каталог. MKDMBF$ – функция аналогична MKD$, но работает в MBF-формат. MKI$ – функция преобразует INTEGER в 2-байтовую строку (IEEE-

формат). MKL$ – функция преобразует LONG в 4-байтовую строку (IEEE-формат). MKS$ – функция преобразует SINGLE в 4-байтовую строку (IEEE-

формат). MKSMBF$ – функция аналогична MKS$, но работает в MBF-формат.

Page 94: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

94

MOD – обозначение операции "остаток от деления". NAME старое имя AS новое имя – оператор переименовывает файлы и

каталоги. NEXT – служебное слово. NOT – операция логического отрицании или побитовой инверсии. ОСТ$ – функция выдает восьмеричное представление числа. OFF – служебное слово "выключить". ON – служебное слово "включить". ON ERROR – оператор инициализации отслеживания ошибок. ON KEY(n) GOSUB – оператор инициализации отслеживания нажатия не-

которых клавиш. ON PLAY(n) GOSUB – оператор инициализации отслеживания состояния

буфера встроенного в компьютер динамика. ON TIMER (n) GOSUB – оператор инициализации слежения за внутрен-

ним секундомером компьютера. ON UEVENT GOSUB – оператор инициализации локального отслежива-

ния ошибок. ON выражение GOSUB список меток – оператор ветвления (если ука-

занное выражение приобретет значение 1, то произойдет переход к 1-й метке в списке; значение 2 – ко 2-й метке и т. д.).

ON...GOTO – то же. OPEN – оператор открытия файлов на диске. OPTION BASE {1 | 0} – оператор установки нижних индексов массивов

по умолчанию. OR – знак логической или побитовой операции "ИЛИ" – дизъюнкции. OUTPUT – ключевое слово в операторе OPEN. PAINT ( столбец, строка)[, цвет-заполнитель[, цвет-ограничитель]] –

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

PALETTE – оператор управления цветами в палитре. PCOPY – оператор копировании из одной страницы видеопамяти в другую. PEEK – функция считывает значение из указанной ячейки памяти. PLAY(n) – функция возвращает число нот в буфере динамика. PLAY " строка команд" – оператор извлекает звуки "по нотам" (по задан-

ной строке команд): On – устанавливает текущую октаву (n от 0 до 6). Nn – играется нота n (n от 0 до 84, 0 – "сброс"). А, В, С, D, Е, F, G – играются ноты от "до" до "си" текущей октавы. + (#)– знак диез. – – знак бемоль. Ln – устанавливает длину звучания ноты (n от 1 до 64; L1 – целая нота, L2

– 1/2 ноты и т. д.).

Page 95: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

95

MS – режим исполнения staccato (каждая нота играется на 3/4 своей дли-ны).

MN – режим исполнения normal (7/8 длины). ML – режим исполнения legato (полная длина). Tn – устанавливает темп исполнения (четвертей в минуту, n от 32 до 255,

120 по умолчанию). Рn – пауза (n от 1 до 64, P1 – длительностью полной ноты, Р2 – 1/2 ноты и

т. д.). MF – устанавливает режим основного звучания (действие программы при-

останавливается на время проигрывания мелодии). MB – устанавливает режим фонового звучания (программа не прерывает-

ся, но выполняется медленней, так как постоянно пополняется буфер динами-ка).

Х + VARPTR$ (строка) – аналогично DRAW. PLAY {ON | OFF | STOP} – группа операторов контроля за буфером ди-

намика. РМАР (координата, режим) – функция возвращает координату, эквива-

лентную координате области просмотра, заданной оператором WINDOW, или наоборот.

POINT {(n) | (x, у)} – функция возвращает либо текущие графические ко-ординаты курсора (n задает режим), либо атрибут цвета указанной координаты.

POKE – оператор записывает по указанному адресу некоторое значение (число от 0 до 255).

POS – функция возвращает текущую позицию столбца курсора. PRESET (столбец, строка)[, цвет] — оператор предназначен для измене-

ния цвета соответствующей точки на фоновый. PRINT – основной оператор вывода на экран. PRINT USING "строка, задающая формат"; выражения [{, | ;}] – оператор

отформатированного вывода. Возможные управляющие символы: # – позиция цифры. – – печатает знак минус для отрицательных чисел. + – печатает знак минус для отрицательных чисел и знак плюс для положи-

тельных. . – позиция десятичной точки. , – слева от десятичной точки печатает запятую после каждой третьей циф-

ры. ^^^^ – позиция для печати степени (числа в нормальном виде). $$ – печать "$" перед выводимым числом. ** – заполняет звездочками незанятые числом места, **$ – совмещает ** и $$. & – место для неограниченного литерного выражения. \ \ – печать первых n символов литерного выражения (n – число пробелов

между косыми чертами + 2). ! – печать только первого символа.

Page 96: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

96

_ – следующий символ воспринимается не как управляющий, а как простой литерал.

Остальные символы в управляющей строке печатаются без изменений. Примеры: PRINT USING "Number ##"; 12 → Number 12 PRINT USUNG "Number #"; 12 → Number %12 (% – знак переполнения) PRINT USING "Number –##"; 12 → Number –12 PRINT USING "Number +##; 12 → Number +12 PRINT USING "Number ,####";1234 → Number 1,234 PRINT SING "Number $##"; 12 → Number $12 PRINT USING "Number **##"; 12 → Number **12 PRINT USING "Ответ: #.### кг."; А для A = 3.0406 → Ответ: 3.041 кг. для А = 40 → Ответ: %40.000 кг. PRINT USING "Ответ: #.####^^^^ кг."; А для А = 3.0406 → Ответ: 0.3041Е+01 кг. для А = 40 → Ответ: 0.4000Е+02 кг. PRINT USING "! , & , \ \ , _&"; "Oдин", "Два", "Четыре" – O, Два, Четы, & PRINT #n [,USING] – оператор записи в файл последовательного доступа. PSET – оператор изменения цвета точки. PUT – оператор записи в файл прямого доступа или оператор вывода на

экран графического образа, сохраненного GET. RANDOM – ключевое слово в операторе OPEN. RANDOMIZE – оператор инициализирует генератор случайных чисел. READ – оператор считывает значения из блоков DATA. REDIM – оператор описывает динамический массив или изменяет его

размер, стирая все предыдущие значения. REM – оператор ремарки (чаще заменяется символом "апостроф"). RESET – оператор закрывает все открытые файлы и устройства. RESTORE – оператор установки точки отсчета для чтения данных из бло-

ков DATA оператором READ. RESUME – оператор завершения анализаторов ошибок. RETURN – оператор завершения GOSUB-подпрограмм. RIGHT$ – функция вырезает n символов справа у указанного аргумента. RMDIR – оператор стирает на диске указанный каталог. RND – функция возвращает псевдослучайное число от 0 до 1. RSET – оператор присваивания литерным переменным с выравниванием

по правому краю. RTRIM$ – функция удаляет конечные пробелы из строки. RUN – оператор запуска текущей программы с некоторой строки или лю-

бой другой исполнимой программы.

Page 97: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

97

SCREEN – функция возвращает ASCII-значение или атрибут цвета для указанной позиции текстового экрана.

SCREEN – оператор смены режима работы экрана. SEEK – функция возвращает текущую позицию файла. SEEK – оператор позволяет произвольно менять текущую позицию файла. SELECT CASE – структура выбора. SGN – функция "знак числа": возвращает –1 для отрицательных чисел,

0 для нуля, 1 для положительных чисел. SHARED – оператор предоставляет процедурам доступ к переменным ос-

новного модуля. SHELL – оператор приостанавливает действие BASIC-программ и позво-

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

SIN – функция возвращает синус заданного угла. SINGLE – ключевое слово, обозначающее вещественные переменные оди-

нарной точности. SLEEP – оператор паузы. SOUND – оператор генерирует звук указанной частоты и длительности. SPACE$ – функция возвращает n пробелов. SPC – функция аналогична SPACE$, но применяется в операторах PRINT и

LPRINT. SQR – функция возвращает квадратный корень числа. STATIC – оператор делает указанные локальные переменные функций

статическими. STEP – вспомогательное ключевое слово. STOP – оператор простой остановки программы. STR$ – функция возвращает строковое представление числа. STRING – ключевое слово, обозначающее литерные переменные. STRING$ (n,{ASСП-код | выражение}) – функция возвращает n симво-

лов, заданных ASCII-кодом или первым символом литерного выражения. SUB – оператор-заголовок процедуры SUB. SWAP – оператор обменивает значения двух переменных. SYSTEM – оператор завершает программу с одновременным выходом из

среды. TAB(n) – в PRINT перемещает курсор на n-ю позицию. TAN – функция возвращает тангенс угла. THEN – ключевое слово в конструкции альтернативы. TIME$ – функция возвращает показание с внутренних часов компьютера в

формате "чч:мм:сс" и позволяет изменять текущее время в форматах "чч:мм:сс", "чч:мм" и "чч".

TIME $ – оператор TIMER {ON | OFF | STOP} – функция возвращает число секунд, прошед-

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

Page 98: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

98

ТО – ключевое слово. TROFF – оператор отменяет команду TRON. TRON – оператор включает трассировку выполняющейся программы. TYPE – оператор описания новых типов данных сложной структуры. UBOUND (массив [, размерность]) – функция определяет верхний индекс

указанной размерности массива. UCASE$ – функция переводит строчные буквы латинского алфавита в

прописные. UNTIL – ключевое слово, обозначающее циклы типа "до". USING – ключевое слово. VAL – функция переводит строковое представление числа в значение типа

SINGLE. VARPTR – функция возвращает адресное смещение некоторой перемен-

ной. Для динамических массивов не работает. VARPTR$ – вспомогательная функция для PLAY и DRAW. VARSEG – функция возвращает адресный сегмент переменной. Для дина-

мических массивов не работает. VIEW – оператор определяет размер и положение области просмотра, где

графика может быть выведена на экран. VIEW PRINT – оператор устанавливает область просмотра для текста. WHILE – WEND – структура цикла с предпроверкой. WIDTH – оператор уточняет параметры режимов экрана (изменение числа

строк и столбцов) и некоторых устройств (для принтеров – корректировка ши-рины строк).

WINDOW – оператор изменения координатной сетки текущего графиче-ского окна просмотра.

WRITE [#] – оператор вывода на экран информации или записи в последо-вательный файл. При этом выражения представляются отделенными друг от друга запятыми, а литерные выражения дополнительно ограничиваются кавыч-ками.

XOR – обозначение логической или побитовой операции "исключающее ИЛИ".

Page 99: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

99

ПРИЛОЖЕНИЕ 4

Сообщения об ошибках QBASIC

Array not defined – массив не определен. Bad file mode – неверный тип файла. Bad filename – неверное имя файлов. Bad file name or number – неверное имя или номер файла. Bad record length – неверная длинна записи. Bad record number – неверный номер записи. Cannot continue – продолжение невозможно. Device fault – ошибка устройства. Device I/O error – ошибка устройства ввода/вывода. Device unavailable – устройство отсутствует. Disk full – диск заполнен. Disk not ready – диск не готов. Division by zero – деление на ноль. Duplicate definition – двойное определение. Duplicate label – повторение метки. Feature unavailable – свойство отсутствует. File already exists – файл уже существует. File already open – файл уже открыт. File not found – файл не найден. FOR without NEXT – FOR без NEXT. Function not defined – функция не определена. Illegal Function Call – запрещенный вызов функции. Input past end of file – ввод достиг конца файла. Internal error – внутренняя ошибка. Label not defined – метка не определена. NEXT without FOR – NEXT без FOR. No RESUME – нет RESUME. Out of DATA – закончились данные в DATA. Out of memory – не хватает памяти. Out of paper – кончилась бумага. Out of string space – превышен размер строки. Overflow – переполнение. Path not found – путь не найден. Path/File access error – ошибка доступа пути к файлу. RESUME without error – вызов RESUME без ошибки. RETURN without GOSUB – RETURN без GOSUB. String formula too complex – слишком сложная формула. Subprogram not defined – подпрограмма не определена. Subscript out of range – индекс массива вне области. Syntax error – синтаксическая ошибка. Too many files – слишком много файлов.

Page 100: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

100

Type mismatch – ошибочный тип (значение не соответствует типу пере-менной.

Variable required – требуется переменная. WEND without WHILE – WEND без WHILE. WHILE without WEND – WHILE без WEND.

Page 101: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

101

ПРИЛОЖЕНИЕ 5

Ограничения QBASIC

Имя переменной: до 40 символов. Длина стринговой переменной: до 32767 байт. Целое число (INTEGER): от –32768 до +32767. Длинное целое (LONG): от –2 147 483 648 до +2 147 483 647. Вещественное (SINGLE): пределы записи положительных чисел (верхний

и нижний): 3.402823 ⋅ 10+38 и 1.401298 ⋅ 10–45, пределы записи отрицательных чисел: –3.402823 ⋅ 10+38 и –1.401298 ⋅ 10–45.

Вещественные двойной точности (DOUBLE): пределы записи положи-тельных чисел: 1.7976931348622315 ⋅ 10+308 и 4.940656458412465 ⋅ 10–324, преде-лы записи отрицательных чисел: –1.7976931348622315 ⋅ 10+308 и –4.940656458412465 ⋅ 10–324.

Память под статические массивы: до 64 Кб. Память под динамические массивы: максимум – вся наличная память. Максимальное число размерностей массива: 8. Индексы: в пределах от –32768 до 32767. Максимальное число аргументов для процедуры: 60. Объем кода процедуры при работе в среде: не более 64 Кб. Число одновременно открытых файлов: до 255. Длина одной записи в файле: до 32 Кб. Число кодов ошибок: 255 (часть номеров не задействована, но их можно

использовать в собственных анализаторах ошибок).

Page 102: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

102

ПРИЛОЖЕНИЕ 6

Производные функции

arccos(n) = 1.570796 – ATN(n/SQR(1 – n^2)) – функция, обратная косинусу

n, где ABS(n)<1. arcctg(n) = 1.50796 – ATN(n) – функция, обратная котангенсу n. arccosh(n) = LOG(n + SQR(n*n – 1)) – функция, обратная гиперболическо-

му косинусу n, где n>=1. arcctgh(n) = LOG((n + 1)/(n – 1))/2 – функция, обратная гиперболическому

котангенсу n, где ABS(n)>1. arccosec(n) = ATN(1/SQR(n*n – 1)) + (SGN(n) – 1)*1.570796 – функция, об-

ратная косекансу n, где ABS(n)>1. arccosech(n) = LOG((SGN(n)*SQR(n*n + 1) +1)/N – функция, обратная ги-

перболическому косекансу n, где n>0. arcsec(n) = ATN((SQR(n*n – 1)) + (SGN(n) – 1)*1.570796 – функция, обрат-

ная секансу n, где ABS(n)>=1. arcsech(n) = LOG((SQR(1 – n*n) + 1)/n) – функция, обратная гиперболиче-

скому секансу n, где 0 < n <= 1. arcsin(n) = ATN(n/SQR(1 – n*n)) – функция, обратная синусу n, где

ABS(n)<1. arcsinh(n) = LOG(n + SQR(n*n + 1)) – функция, обратная гиперболическо-

му синусу n. arctgh(n) = LOG((1 + n)/(1 – n))/2 – функция, обратная гиперболическому

тангенсу n, где ABS(n) < 1. cosh(n) = (EXP(n) + EXP(–n))/2 – гиперболический косинус n. ctg(n) = 1/TAN(n) – котангенс n, где n<>0. ctgh(n) = (EXP(–n)/EXP(n) – EXP(–n))*2 + 1 – гиперболический котангенс

n, где n<>0. cosec(n) = 1/SIN(n) – косеканс n, где n<>0. cosech(n) = 2/(EXP(n) – EXP(–n)) – гиперболический косеканс n, где n<>0. loga(n) = LOG(n)/LOG(a) – логарифм n по основанию а, где а>0 и n>0. log10(n) = LOG(n)/2.302585 – десятичный логарифм n, где n>0. sec(n) = 1/COS(n) – секанс n, где n<>1.570796. sech(n) = 2/(EXP(n) + EXP(–n)) – гиперболический секанс n.

Page 103: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

103

ОГЛАВЛЕНИЕ

ПРЕДИСЛОВИЕ.....................................................................................................................1

ВВЕДЕНИЕ .............................................................................................................................5

1. ОБЩИЕ ПОЛОЖЕНИЯ ....................................................................................................6

1.1. ВВЕДЕНИЕ В QBASIC ................................................................................................6 1.2. ЭТАПЫ ПОДГОТОВКИ ЗАДАЧИ К РЕШЕНИЮ НА КОМПЬЮТЕРЕ ..................................7 1.3. СРЕДА QBASIC ..........................................................................................................8

1.3.1. Запуск среды QBASIC и выход из нее ..........................................................8 1.3.2. Ввод и редактирование программ .................................................................9 1.3.3. Запуск программы на выполнение и просмотр результатов ..........................9

2. ОСНОВЫ АЛГОРИТМИЗАЦИИ ...................................................................................11

2.1. ОСНОВНЫЕ СВОЙСТВА АЛГОРИТМА ........................................................................11 2.2. ГРАФИЧЕСКИЙ СПОСОБ ПРЕДСТАВЛЕНИЯ АЛГОРИТМОВ ........................................11

3. ОСНОВНЫЕ ПОНЯТИЯ QBASIC .................................................................................13

3.1. АЛФАВИТ ЯЗЫКА QBASIC.......................................................................................13 3.2. СТРУКТУРА ПРОГРАММЫ .........................................................................................13 3.3. МЕТКИ.......................................................................................................................13 3.4. ДАННЫЕ ....................................................................................................................14 3.5. ТИПЫ ДАННЫХ .........................................................................................................14 3.6. СТАНДАРТНЫЕ ФУНКЦИИ.........................................................................................15 3.7. АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ .............................................................................16

4. АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ОСНОВНЫХ ВИДОВ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ................................................................................17

4.1. АЛГОРИТМЫ ЛИНЕЙНОЙ СТРУКТУРЫ ......................................................................17 4.2. АЛГОРИТМЫ РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ .......................................................19 4.3. АЛГОРИТМЫ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ ................................................................23

4.3.1. Циклы с определенным числом повторений (заданные циклы) ..............23 4.3.2. Циклы с неопределенным числом повторений (итерационные циклы)..26

4.3.2.1. Циклы с предусловием .......................................................................26 4.3.2.2. Циклы с постусловием ......................................................................28

4.3.3. Вложенные циклы .........................................................................................31

5. АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧ ОБРАБОТКИ МАССИВОВ .........................................................................................................................32

5.1. ОБРАБОТКА МАССИВОВ............................................................................................32 5.2. ОДНОМЕРНЫЕ МАССИВЫ .........................................................................................32 5.3. ДВУМЕРНЫЕ МАССИВЫ. ОПЕРАЦИИ С МАТРИЦАМИ...............................................43

6. ИСПОЛЬЗОВАНИЕ ПОДПРОГРАММ. ЭЛЕМЕНТЫ МОДУЛЬНОГО ПРОГРАММИРОВАНИЯ ...................................................................................................49

6.1. ОБЩИЕ СВЕДЕНИЯ ....................................................................................................49 6.2. ПОДПРОГРАММЫ ТИПА SUBROUTINE (GOSUB-ПОДПРОГРАММЫ) ........................49

Page 104: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

104

6.3. ФУНКЦИЯ DEF FN ...................................................................................................52 6.4. ПРОЦЕДУРЫ SUB......................................................................................................53 6.5. ПРОЦЕДУРЫ FUNCTION .........................................................................................57

7. ФАЙЛЫ ДАННЫХ С ПОСЛЕДОВАТЕЛЬНЫМ ДОСТУПОМ.................................59

8. ЭЛЕМЕНТЫ ГРАФИКИ НА QBASIC...........................................................................62

8.1. ГРАФИЧЕСКИЕ РЕЖИМЫ ЭКРАНА. ТИПЫ КООРДИНАТ.............................................62 8.2. РИСОВАНИЕ ТОЧКИ, ОТРЕЗКА ПРЯМОЙ И ПРЯМОУГОЛЬНИКА.................................64 8.3. ЦВЕТ В ГРАФИКЕ.......................................................................................................66 8.4. ОКРУЖНОСТЬ, ДУГА, ЭЛЛИПС, СЕКТОР ....................................................................68 8.5. РИСОВАНИЕ С ПОМОЩЬЮ ОПЕРАТОРА DRAW .......................................................69

8.5.1. Команда перемещения ..................................................................................70 8.5.2. Относительное движение .............................................................................71 8.5.3. Вращение изображения ................................................................................72 8.5.4. Масштабирование изображения ..................................................................72 8.5.5. Цвет в операторе DRAW ..............................................................................73 8.5.6. Текстовые переменные в операторе DRAW...............................................74

8.6. ОПЕРАТОРЫ GET И PUT ..........................................................................................75 8.7. ПОСТРОЕНИЕ ДИАГРАММ И ГРАФИКОВ ...................................................................77

ЗАКЛЮЧЕНИЕ ....................................................................................................................82

БИБЛИОГРАФИЧЕСКИЙ СПИСОК РЕКОМЕНДУЕМОЙ И ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ .....................................................................................................................83

ПРИЛОЖЕНИЯ ....................................................................................................................84

ПРИЛОЖЕНИЕ 1. Меню команд среды QBASIC...........................................................84 ПРИЛОЖЕНИЕ 2. Основные функциональные ("горячие") клавиши в среде QBASIC .............................................................................................................88 ПРИЛОЖЕНИЕ 3. Служебные слова, операторы и функции языка .............................89 ПРИЛОЖЕНИЕ 4. Сообщения об ошибках QBASIC .....................................................99 ПРИЛОЖЕНИЕ 5. Ограничения QBASIC .....................................................................101 ПРИЛОЖЕНИЕ 6. Производные функции ....................................................................102

Page 105: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

105

Учебное издание

Нина Михайловна Третьякова

АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ИНЖЕНЕРНЫХ ЗАДАЧ

Учебное пособие по курсу «Информатика»

для студентов технических специальностей всех форм обучения

Оригинал-макет подготовлен в редакционно-издательском отделе СЛИ

Редактор: С. В. Сердитова Корректор: В. Н. Столыпко

Редакционно-издательский отдел СЛИ СПбГЛТА. Подписано в печать с готового оригинала-макета 24.12.2003.

Бумага офсетная. Формат 60 × 90 1/16. Гарнитура Times. Печать офсетная. Усл. печ. л. 6,5. Уч.-изд. л. 4,7.

Тираж 1000. Заказ .

Сыктывкарский лесной институт (СЛИ) 167981, г. Сыктывкар, ул. Ленина, 39

Отпечатано в типографии СЛИ

Page 106: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ …62.182.30.44/ft/201-000089.pdf3 УДК 004 А 45 Рассмотрено и рекомендовано к изданию

106

167981, г. Сыктывкар, ул. Ленина, 39