13771

Курс лекций по языку программирования QBASIC

Конспект

Информатика, кибернетика и программирование

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

Русский

2013-05-13

351.5 KB

117 чел.

Введение

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

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

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

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

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

ОГЛАВЛЕНИЕ

[0.1] Введение

[0.2]
Интегрированная среда QBASIC

[0.2.1] Запуск и завершение QBASIC

[0.2.2] Главное меню QBASIC

[0.2.3] Встроенный справочник QBASIC

[0.3] Формальные сведения о QBASIC

[0.3.1] Алфавит QBASIC

[0.3.1.1] Переменные

[0.3.1.2] Константы

[0.4] Выражения в языке QBASIC

[0.4.1] Арифметические выражения

[0.4.2] Условные выражения

[0.4.3] Логические выражения

[0.4.4] Символьные выражения

[0.5] Встроенные функции

[0.6] Команды в языке QBASIC

[0.6.1] Оператор комментариев

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

[0.6.3] Оператор ввода данных

[0.6.4] Динамический ввод данных

[0.6.5] Оператор вывода данных

[0.6.6]
Статический ввод данных

[0.6.7] Команды управления ходом выполнения программы

[0.6.7.1] Безусловная передача управления

[0.6.7.2] Условная передача управления

[0.6.7.3] Формат записи вложенных условных операторов

[0.6.8] Множественный выбор (SELECT CASE)

[0.6.9] Работа с датой и временем

[0.6.10] Циклы

[0.6.10.1] Цикл со счетчиком (FOR…NEXT)

[0.6.10.2] Цикл WHILE … WEND

[0.6.10.3] Вложенные циклы

[0.7] Массивы

[0.7.1] Одномерные массивы

[0.7.1.1] Определение массивов

[0.7.1.2] Заполнение массива

[0.7.1.3] Порядок работы  с  массивами

[0.7.1.4] Действия над элементами одномерного массива

[0.7.2] Двумерные массивы

[0.7.2.1] Основные понятия

[0.7.2.2] Заполнение массива

[0.7.2.3] Действия над элементами двумерного массива

[0.8] Подпрограммы

[0.9]
Функции, определяемые пользователем

[0.10] Работа со строковыми типами данных

[0.10.1] Оператор LINE INPUT

[0.10.2] Операции со строковыми данными

[0.10.3] Функции для работы с текстами

[0.11] Функция INKEY$ или как получить власть над клавиатурой

[0.12] Графическая обработка данных

[0.12.1] Оператор SCREEN

[0.12.2] Оператор COLOR

[0.12.3] Операторы PSET, PRESET

[0.12.4] Прямые линии – отрезки

[0.12.5] Рисование прямоугольников

[0.12.6] Оператор CIRCLE

[0.12.7] Оператор PAINT

[0.12.8] Вывод текста в графическом режиме

[0.13] Графическое “перо” DRAW


Интегрированная среда QBASIC

Запуск и завершение QBASIC

QBASIC является приложением MS-DOS, которое нормально работает под Windows. Чтобы начать работу с QBASIC, надо запустить программу QBASIC.EXE.

Запускать QBASIC любым удобным способом:

  •  Нажатием {Enter} в NC;
  •  С помощью меню пользователя в NC;
  •  Из папки {языки программирования}, ярлык {QBASIC}.

После запуска QBASIC на экране появится окно. Для снятия заставки и перехода в основное окно редактора нажмите {Esc}. Завершение работы – (Файл-Выход)

Главное меню QBASIC

Главное меню содержит несколько пунктов (Файл, Редактирование, Просмотр и т.п.). Для выбора пункта меню щелкнуть мышью на его название или нажать клавишу {Alt}.

После выбора пункта меню раскрывается нисходящее меню со списком команд данного пункта.

Пункт Файл

  •  Новый. Работа с неозаглавленной заготовкой нового файла.
  •  Открыть. Открыть существующий файл. В открывшемся окне необходимо найти имя существующего файла. Для перемещения по полям используйте мышь или клавишу {Tab}.
  •  Сохранить. На диске сохраняется текущая версия вашей программы. При первоначальном сохранении файла необходимо присвоить имя создаваемому файлу.
  •  Сохранить как… откроется стандартное диалоговое окно, в котором надо указать имя. Этой командой можно создать обновленную версию программы, сохранив старую в неприкосновенности.
  •  Печать. Печать открытого файла на принтере.
  •  Выход. Завершает работу QBASIC.

Пункт Редактирование

Можно переместить или скопировать выделенный фрагмент текста в другое место того же файла или в другой файл. Для выделения фрагмента необходимо подвести курсор к началу выделяемого участка, нажать {Shift} и, не отпуская ее, «закрашивать» участок.

Пункт Запуск

  •  Запуск {Shift+F5}. Запуск программы с первой исполняемой команды.
  •  Перезапустить. Подготовка программы к запуску с первой исполняемой команды. Эта команда удаляет все введенные вами данные и высвечивает первую исполняемую команду.
  •  Продолжить{F5}. Работа возобновляется с той команды, на которой программа была остановлена.

Окно среды QBASIC

После запуска программы QBASIC, на экране появляется основное окно текстового редактора.

Основные операции с программой проводятся в окне редактора: набирается, редактируется текст, отлаживается программа и т. п.  

Результаты своей работы программа выдает на выходной экран QBASIC, который “скрыт” под окном  редактора. Выходной экран выдается и после завершения программы, - для возврата в окно редактора необходимо нажать любую клавишу.

F4 – универсальный переключатель между окном редактора и выходным экраном QBASIC.

Встроенный справочник QBASIC

{Shift+F1}- на экране появится окно системы помощи QBASIC. Для перемещения по пунктам кадра используют клавиши {Tab}, стрелки управления курсором, {PgUp}, {PgDn}.

Если в окне текстового редактора подвести курсор под какое-либо служебное слово и нажать{F1}, на экране появится раздел алфавитного указателя, поясняющий это слово.

Пример 1

CLS

INPUT”Введите фамилию”;F$

INPUT”Введите имя”;I$

RS$=F$+”  “+I$

PRINT”Уважаемый (ая)  ”;RS$;” ,я думаю, что мы с вами сработаемся”

END

  •  Набрать текст программы;
  •  Сохранить его на диск с именем prog1;
  •  Запустить программу на выполнение;
  •  Получить справку по оператору INPUT.

Пример 2

SCREEN 9

Color 1,5

Circle(200,180),100,6

Paint Step(0,0),7,6

Line(20,30)-(70,70),4,BF

  •  Набрать текст программы;
  •  Сохранить его на диск с именем prog2;
  •  Запустить программу на выполнение;
  •  Скопировать 3-ю и 4-ю строку и вставить после 5-ой
  •  Внести изменение: вместо значения 200 поставить 400
  •  Запустить программу на выполнение

Формальные сведения о QBASIC

Алфавит QBASIC

Алфавит языка BASIC включает:

  •  Все латинские прописные и строчные буквы;
  •  Арабские цифры 0-9;
  •  Знаки арифметических операций:^; *; /; +; -; \; MOD.
  •  Знаки операций отношения: =; >; <; >=; <=; <>.
  •  Разделители и прочие символы:

. – точка;

, - запятая;

; - точка с запятой;

: - двоеточие;

_ - пробел;

! – признак вещественной величины;

# - признак вещественной величины двойной точности;

% - признак целой величины;

& - признак длинной целой величины

$ - признак текстовой величины;

() – круглые скобки;

– кавычки;

– апостроф.

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

Данные в языке QBASIC

Помните! Разделителем целой и дробной частей является точка.

Например:

102! – константа, числовая, вещественная, обычной точности.

95966.46789# - константа, числовая, вещественная, двойной точности.

4326% - константа, числовая, целая.

“План на неделю” – константа текстовая. Заключается в кавычки.

Переменные

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

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

Примеры имен: A; dN;  GodRozd; k1%; dlina!

Тип переменной  BASIC различает пять типов данных. Когда записано с=a+b+2, BASIC должен знать, какой тип чисел имеется в виду. BASIC распознает тип переменной по суффиксу, т.е. по последнему символу в имени переменной. 

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

Поэтому в BASIC предусмотрен другой способ описания типа переменной.

Общий формат команды описания типа:

DEFINT X-X (целые числа, INTeger)

DEFLNG X-X (длинные целые числа, LoNG)

DEFSNG X-X (вещественные числа обычной точности, SiNGle)

DEFDBL X-X (вещественные числа двойной точности, DouBLe)

DEFSTR X-X (строки символов, STRing)

Комбинация X-X - диапазон букв. Вместо диапазона можно указать одну букву.

Например:

DEFLNG A-D, все переменные, имена которых начинаются с букв, лежащих в указанном диапазоне, т.е. с A до D, будут считаться длинными целыми (aRc, BT, DLINA и т.п.)

DEFSTR STR, переменная STR- строка символов.

Константы

Константы (числовые или строковые) не меняются в ходе исполнения программы. Значения констант записываются явно, числом или строкой символов. Например:

A%=12

Z$=”План на неделю”

n!=-54.2

Существует специальный оператор для описания констант.

Формат описания констант:

CONST имя переменной=константа

Например:

CONST F2=60, n%=12

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

Пример:

CLS

DEFINT A-C

DEFLNG R

CONST G = 5

INPUT "Введите три значения"; A, B, C

R = A ^ 2 + B * C + G

PRINT "R="; R

END

Задание:

  1.  Набрать программу.
  2.  Запустить на выполнение.
  3.  В третьей строке внести изменение - DEF LNG заменить на DEFSNG.
  4.  В 6-ой строке внести изменение - * заменить на / .

Выражения в языке QBASIC

В языке QBASIC используются:

  •  Арифметические выражения;
  •  Условные выражения;
  •  Логические выражения;
  •  Символьные выражения.

Арифметические выражения

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

Знак операции

Название

Пример

^

возведение в степень

X^Y

*

умножение

X*Y

/

деление

X/Y

+

сложение

X+Y

-

вычитание

X-Y

\

деление нацело

X\Y; 10\4 (ответ-2)

MOD

вычисление остатка от целочисленного деления

X MOD Y

10 MOD 3 (ответ-1)

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

Например:

х2 – х + 2      на языке QBASIC  ( х ^ 2 – х + 2 ) / (х ^ 4+5*х^2+40)

    х4+5х2+40            

Условные выражения

Операндами условного выражения могут быть переменные, числа, функции, строки символов. Знаками отношения в условных выражениях служат:

= - равно;

>- больше;

< - меньше;

>= - больше или равно;

<= - меньше или равно;

<> - не равно.

Условное выражение принимает булево (логическое) значение: TRUE или FALSE.

Условные выражения широко используются в операциях ветвления и в организации циклов. Например:

IF k>0 THEN …

WHILE I=0 …

Логические выражения

Операндами логического выражения являются условные выражения, которые соединяются между собой знаками логических операций AND ("И", конъюнкция), OR ("ИЛИ", дизъюнкция), NOT (отрицание), например:

a+b>c AND d<>8

NOT(a>b)

Логическое выражение принимает булево (логическое) значение: TRUE или FALSE.

Частный случай логического выражения - условное выражение.

Так же, как и условные выражения, логические выражения применяются в операциях ветвления и в организации циклов, например:

IF d<>0 AND z$="V" THEN…

WHILE d=0 OR k>40…

Символьные выражения

Операндами символьных выражений являются строки символов. Для этих выражений определена лишь одна операция - конкатенация (соединение) строк. Знак операции - "+", а результат операции - новая строка символов. Например, "Оболочка  "+"Windows" результата - " Оболочка Windows"

Встроенные функции

Функция

Назначение (математическая запись)

Пример/результат

Математические функции

ABS(арифм_выражение)

Модуль значения арифм_выражения(|X|)

ABS(-3) / 3

ATN(арифм_выражение)

арктангенс значения арифм_выражения

( arctgx )

COS(угол)

Косинус аргумента (угол в радианах)

( cosx )

SIN(угол)

Синус аргумента (угол в радианах)

( sinx )

SIN(PI/2) / 1

TAN(угол)

Тангенс аргумента (угол в радианах)

( tgx )

EXP(арифм_выражение)

Экспоненту значения арифм_выражения

(ex )

LOG(арифм_выражение)

Натуральный логарифм

( lnx )

SQR(арифм_выражение)

Корень квадратный из значения арифм_выражения ( X )

SQR(1.44) / 1.2

Функции преобразования числовых значений

FIX(арифм_выражение)

Целая часть арифм_выражения

FIX(24.3) / 24

FIX(-24.8) / -24

INT(арифм_выражение)

Наибольшее целое, которое меньше или

Равно значению арифм_выражения

INT(24.3) / 24

INT(-24,3) / -25

CINT(арифм_выражение)

Округляет значение арифм_выражения

по правилам арифметики

CINT(24.3) / 24

CINT(-24,8) / -25

CINT(-24,3) / -24

Например: Записать выражения на языке программирования QBASIC

Записать выражения на языке программирования QBASIC

                  tg2 x

              x+ sin x3

  √|х-1| • ³√| у |

 

 

        

                (1+Y)(X+Y(X²+4))

                                 1

                 ℓ -x-2  +  (x²+4)

        

                  1+cos(Y-Z)

                         х4

                    2 + sin2 Z

Домашнее задание:

  1.  

         B =   х ( arctg2 Zl – (x + 3) )

Команды в языке QBASIC

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

Оператор комментариев

Любую команду в программе можно снабдить поясняющим текстом - комментарием. Комментарии облегчают понимание текста программы. Комментарии можно записать двумя способами:

  1.  REM произвольный текст
  2.  ' произвольный текст

На ход вычислений команда REM никакого влияния не оказывает.

Например:

REM вычисление функции

' вычисление функции

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

Формат:

Имя переменной = выражение

Эта команда выполняется в два шага:

  1.  вычисляется значение арифметического или символьного выражения, указанного в правой части команды;
  2.  это значение присваивается переменной, записанной в левой части команды.

Например:

A = Y+X/Z²

Оператор ввода данных

Динамический ввод данных

Формат:

INPUT "Сообщение", список переменных

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

Например:

Команда: INPUT"Введите коэффициент и код режима",B,KR$

Экран: Введите коэффициент и код режима

Курсор устанавливается следом за последним символом выведенного текста, и программа ожидает ввода данных. Вы должны через запятую набрать все данные и нажать клавишу {Enter}.

Если строка символов замкнута не запятой, а точкой с запятой, INPUT выводит следом за текстом символ "?" и устанавливает курсор через пробел после "?".

Например:

Команда: INPUT"Год рождения";GR$

Экран: Год рождения?_

Сообщение в INPUT можно опустить. Тогда на экран будет просто выдан знак вопроса.

Тип и количество вводимых данных должны соответствовать типу и количеству описанных переменных.

Например:

Команда: INPUT"Введите № школы, класс, фамилию";N,K,F$

Экран: Введите № школы, класс, фамилию? 2,10,Петров

Виды ошибок:

  1.  Тип данных не совпадает с типом переменных.
  2.  Ввели слишком много данных.

Оператор вывода данных

Формат:

PRINT список_выражений

В поле операндов через запятую или через точку с запятой перечисляются выражения, значения которых надо вывести. Значения данных выводятся с текущей позиции курсора.

1. Плотный вывод - разделитель ";"

Например:

a) Команда: PRINT"Мне";K;"лет"

  Экран: Мне 16 лет (если К=16)

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

b) Команда: PRINT"Пра";"бабушка"

   Экран: Прабабушка

2. Зональный вывод - разделитель ","

Если указана запятая, QBASIC выводит данные по зонам, каждая зона - 14 позиций.

Например:

   Команда: PRINT"Мне",K,"лет"

  Экран: Мне           16            лет  (если К=16)

3. Вывод в разных строках

Например:

   Команда: PRINT "Зарплата"

                    PRINT ZP;"руб"

  Экран: Зарплата

               2000 руб

Пример. Даны катет прямоугольного треугольника и прилежащий угол. Определить площадь треугольника и гипотенузу. Длину и угол в радианах ввести динамически. Результат вычисления вывести в разных зонах.

INPUT"Введите катет прямоугольного треугольника и прилежащий угол";A,U

C=A/COS(U)             'Вычисление гипотенузы

B=SQR(C^2-A^2)     'Вычисление катета

S= 0.5*B*A               'Вычисление площади треугольника

PRINT"C=";C,"S=";S

End

Для самостоятельного решения:

  1.  Кольцо задано радиусами двух окружностей. Вычислить площадь кольца. Данные задать динамически. Результат вычисления вывести в разных строках.
  2.  Даны числа x, y, z. Вычислить  s=x2+y/(z2+y2/(x+y)3). Данные ввести динамически.


Статический ввод данных

Если программа постоянно работает с некоторым набором числовых или символьных констант, то можно объявить такой набор блоком данных:

DATA список констант

В списке констант через запятую указываются значения констант, например:

10 DATA 5,25,19.6,30,12,"ABC"

20 DATA "BASIC","Pascal",25.9

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

Для присвоения  значений констант из блока данных переменным используется оператор READ:

READ список переменных

В списке переменных через запятую указываются имена переменных, которым присваиваются значения констант из блока данных. Типы переменных в списке READ должны соответствовать типам констант из блока данных. Например:

READ a%, m%, t

Переменным a%, m%, t присвоятся значения 5, 25 и 19.6. Указатель перемещается на 4-ую константу. Оператор 

READ c, sc%, a$

Присвоит переменным c, sc%, a$ значения 30, 12, "ABC"  и указатель переместится на  "BASIC" и т.д.

Как несколько раз прочитать одни и те же данные из блока данных? Для восстановления указателя блока данных используется оператор RESTORE:

RESTORE номер строки или метка

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

Если не указан номер строки, следующий после RESTORE, READ начнет чтение с первой константы блока данных. Например:

RESTORE

READ vk%, s%

RESTORE 20

READ z1$, z2$

vk%, s% присвоятся значения 5 и 25, а  переменным z1$, z2$ - значения "BASIC" и "Pascal".

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

Пример. Составить программу нахождения высоты равнобедренной трапеции, у которой основания 5м и 11м, а боковая сторона 4м. Данные ввести статически.

DATA 5,11,4

READ BC,AD,AB

AE=(AD-BC)/2    'Основание треугольника

HT=SQR(AB^2-AE^2)

PRINT"Высота трапеции =";HT

END

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

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

Команды управления ходом выполнения программы делятся на три группы:

  1.  Команды безусловного перехода;
  2.  Команды условного перехода;
  3.  Команды организации циклов.

Безусловная передача управления

Формат:

GOTO номер строки или метка

Управление передается команде, помеченной номером строки или меткой.

Например:

GOTO W

W: PRINT"Решение получено"

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

Условная передача управления

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

Линейный формат:

IF логическое выражение THEN <блок команд 1> [ELSE  <блок команд 2>]

Блочный формат:

IF логическое выражение THEN

    <блок команд 1>

[ELSE 

    <блок команд 2>]

END IF

Выполнение. Если логическое выражение принимает значение "Истина", выполняется блок команд 1, если логическое выражение - "Ложь", выполняется блок команд 2. Если ELSE отсутствует, то выполняется команда, стоящая за END IF.

Пример1

INPUT "Сколько будет 2x2 ",X

IF X=4 THEN PRINT "Правильно" ELSE PRINT "Не правильно"

END

Пример2

Вычислить значение функции Y

Линейный формат:

INPUT "Введите значение аргумента Х ",X

IF X<=1 THEN Y=X-1/2*X^2+3 ELSE Y=1.05*(X-1)^2

PRINT "При значении Х=";X;"  функция Y=";Y

END

Блочный формат:

INPUT "Введите значение аргумента Х ",X

IF X<=1 THEN

   Y=X-1/2*X^2+3  

ELSE

   Y=1.05*(X-1)^2

END IF

PRINT "При значении Х=";X;"  функция Y=";Y

END

Возможна вложенность одного условного оператора в другой.

Формат записи вложенных условных операторов

IF логическое выражение THEN

    <блок команд 1>

[ELSEIF логическое выражение THEN

   <блок команд 2>]

……………………..

[ELSE 

    <блок команд n>]

END IF

Пример3

       Составить программу вычисления функции:

1 вариант

IF Z<0 THEN

   F=Z-5/Z^2

ELSEIF Z<=1 THEN

   F=Z^2-1

ELSE

   F=1/(1-Z)

ENDIF

PRINT "F=";F

END

2 вариант

IF Z<0 THEN    F=Z-5/Z^2

IF Z<=1 AND Z>=0 THEN  F=Z^2-1

IF Z>1 THEN   F=1/(1-Z)

PRINT "F=";F

END

Для самостоятельного решения:

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

Множественный выбор (SELECT CASE)

Формат

SELECT CASE арифм_выражение или симв_выражение

CASE условие 1

<блок команд 1>

CASE условие 2

<блок команд 2>

……………….

[CASE ELSE

<блок команд n>]

END SELECT

Условие оператора CASE можно указать в одном из трех форматов:

  1.  CASE константа 1, константа 2, …
  2.  CASE IS знак_отношения константа
  3.  CASE константа 1 TO константа 2

Константы в условии должны быть того же типа, что и выражение в SELECT CASE.

        Алгоритм множественного выбора заключается в следующем:

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

Пример

INPUT "Введите значение  ",A

SELECT CASE A

CASE 1,5

 PRINT "А равно 1 или 5"

CASE IS >5

 PRINT "А больше 5"

CASE -8 TO 2.5

 PRINT "А не меньше -8, но не больше 2.5"

CASE else

 PRINT "Ни одно условие не выполняется"

END SELECT

После выполнения того или иного блока команд управление передается команде, следующей за END SELECT.

Работа с датой и временем

Функция DATE$

Выдается текущая дата, зарегистрированная в компьютере. Формат даты: ММ-ДД-ГГГГ.

Например

PRINT DATE$

Выведется текущая дата: 15-09-2000

Функция TIME$

Выдается текущее системное время, зарегистрированное в компьютере. Формат времени: ЧЧ:ММ:СС (часы, минуты, секунды).

Например

PRINT  TIME$ , на экране выдается текущее время.  

Циклы

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

  •  повторение блока команд заданное количество (число) раз (цикл со счетчиком);
  •  циклическое повторение блока команд, пока выполняется (или не выполняется) некоторое условие.

Цикл со счетчиком (FORNEXT)

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

Формат

FOR счетчик=E1 TO E2 [STEP E3]

  Блок команд

NEXT счетчик

счетчик (параметр)- числовая переменная;

E1 - начальное значение счетчика;

E2 - конечное значение счетчика;

E3 - шаг изменения счетчика. По умолчанию этот шаг равен 1;

Блок команд - набор операторов, предназначенных для повторения.

Выполнение. Если E3 >0, то  цикл продолжается все время,  пока счетчик < или = E2. Если E3 <0, то  цикл продолжается все время, пока счетчик > или = E2.

Примеры

  1.  FOR I=1 TO 5

        PRINT I;

      NEXT I

Результат: 1 2 3 4 5

Тело цикла будет выполняться 5 раз. Шаг изменения счетчика по умолчанию равен 1.

  1.  FOR I=1 TO 5 STEP 2

        PRINT I;

      NEXT I

Результат: 1 3 5

  1.  Обратный цикл

     FOR I=5 TO 1 STEP -1

        PRINT I;

      NEXT I

Результат: 5 4 3 2 1

  1.  FOR I=5 TO 1

        PRINT I;

      NEXT I

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

Ограничения при использовании оператора цикла FORNEXT:

  1.  Не изменяйте значение параметра цикла внутри цикла

     FOR I=1 TO 5

        I=I+1         ' НЕЛЬЗЯ!

      NEXT I

  1.  Никогда не передавайте управление внутрь цикла, это может привести к непредсказуемым результатам.

   GOTO 10     ' НЕЛЬЗЯ!

    FOR I=1 TO 5

10     INPUT A

       S=S+A

   NEXT I

Досрочный выход из цикла

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

Формат команды выхода:

EXIT FOR

Например

FOR I=1 TO 10

  INPUT "Введите значение параметра";F

  IF F=100 THEN EXIT FOR

  S=S+F

NEXT I

PRINT "Значения "

Подсчет:

Сумма

Количество

Произведение

S=0

K=0

P=1

S=S+A

K=K+1

P=P*A

Пример1. Подсчитать сумму 10 значений переменной A.

            S=0

   FOR I=1 TO 10

      INPUT "Введите значение переменной";A

      S=S+A              'Подсчет суммы значений переменной A

    NEXT I

    PRINT "Сумма ="; S

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

              INPUT “Введите количество значений”;N

К=0

P=1

    FOR I=1 TO N

       INPUT "Введите значение переменной";A

       IF A>0 THEN K=K+1

       IF A<0 THEN P=P*A       

   NEXT I

   PRINT"Количество положительных чисел =";K

   PRINT"Произведение отрицательных чисел =";P

Домашнее задание:

  1.  Подсчитать сумму положительных элементов, не превышающих значения 10 из N введенных.
  2.  Подсчитать количество мальчиков, рост которых превышает 165 см и количество девочек, рост которых не превышает 165.

Практическое занятие

Пример 1. Рассчитать и вывести на печать значения функции Y=5/X при изменении аргумента X от -5 до 5 с шагом 2.

FOR X=-5 TO 5 STEP 2

  Y= 5/X

   PRINT "X=";X, "Y=";Y

NEXT X

Пример 2. Дан ряд чисел 100, 55, -1000, 20, 5, 8, 33, 48. Найти количество пар чисел квадрат разности которых <100.

DATA 100, 55, -1000, 20, 5, 8, 33, 48

K=0

FOR I=1 TO 8 STEP 2

  READ A,B

  IF (A-B)^2 < 100 THEN K=K+1

NEXT I

PRINT "Количество пар чисел квадрат разности которых <100 =";K

Пример 3. Найти  максимальное значение из N введенных. Вывести максимальное  значение и его индекс.

INPUT "Введите количество значений";N

INPUT "Введите первое значение";A

MAX=A : IN=1

FOR I=2 TO N

  PRINT "Введите "; I; "-ое значение"

  INPUT A

  IF A>MAX THEN MAX=A : IN=I

NEXT I

PRINT "Максимальное значение =";MAX

PRINT “Индекс максимального значения =”; IN

Домашнее задание:

  1.  Определить максимальное значение среди положительных элементов из N введенных.
  2.  Подсчитать значения функции  f(x)=1-х2 на заданном интервале [-0,5; 0,5] с шагом 0,1.

Цикл WHILE … WEND

Формат

WHILE логическое выражение

  Блок команд

WEND 

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

WHILE PAS$<>"Петуния"

   INPUT"Введите пароль";PAS$

WEND

PRINT"Добро пожаловать"

Этот цикл будет работать до тех пор, пока не будет введен правильный пароль.

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

Например:

  1.  I=0

WHILE I<=10

        I=I+1           'оператор, который  влияет на значение логического выражения

WEND

PRINT I

  1.  Пример бесконечного цикла

     I=0

WHILE I<=10

  INPUT A

  S=S+A

WEND

PRINT S

В блоке команд нет оператора, который бы изменял значение I.

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

I=10

WHILE I<10

  I=I+1

WEND

Пример 1. Вычислить сумму четных чисел в интервале от 1 до 10 включительно.

' I - четные числа

' Sum - сумма четных чисел

I=2

Sum=0

WHILE I<=10

  Sum=Sum+I

  I=I+2

WEND

PRINT"Сумма четных чисел в интервале от 0 до 10 =";Sum

Пример 2. В подъезде N ступенек. Сколько шагов будет сделано, если шагать через 3 ступеньки.

' KS - количество ступенек

' KH - количество шагов

INPUT "Введите количество ступенек";N

KS=0

KH=0

WHILE KS<=N

  KS=KS+3

  KH=KH+1

WEND

PRINT"Количество шагов=";KH

Пример 3. Известна сумма номеров страниц. Определить номер страницы.

' NS - номер страницы

' S - сумма номеров страниц

INPUT"Введите сумму номеров страниц";Q

NS=0

S=0

WHILE S<Q

  NS=NS+1

  S=S+NS

WEND

PRINT"Номер страницы = ";NS

Домашнее задание:

Вычислить значения членов последовательности K=3i, где i=1, 3, 5, ..., не превышающих заданного числа N.

Вложенные циклы

Можно организовать весьма сложные повторения, используя циклы внутри циклов (Вложенные циклы).

Формат:

FOR

  …

   FOR ---------

                                  тело внутреннего цикла

           NEXT --------          

         …

     NEXT

Пример 1. Напечатать таблицу умножения до 12 в виде

1*2=2

2*2=4 и т.д.

FOR I=2 TO 12

 FOR J=1 TO 12

    PRINT J;”*”;I;”=”;J*I

 NEXT J

NEXT I

Пример 2. Напечатать таблицу умножения до 5 в виде таблицы.

1 2 3 4 5

2 4 6 8 10 и т.д.

FOR I=2 TO 12

 FOR J=1 TO 12

    PRINT J*I;

 NEXT J

 PRINT

NEXT I

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

FOR T=1 TO 9   ‘

 FOR S=0 TO 9

    FOR D=0 TO 9

       FOR E=0 TO 9

           IF T<>S AND T<>D AND T<>E AND S<>D AND S<>E AND D<>E THEN

                 M=T*1000+S*100+D*10+E

                 PRINT    M,

           ENDIF

       NEXT E

    NEXT D

 NEXT S

NEXT T

Задание

Найти и напечатать все трехзначные числа сумма кубов которых равна самому числу.  Например: 407=43+03+73=64+0+343

 

Массивы

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

Массив - набор однотипных данных, хранящихся вместе и имеющих общее имя.

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

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

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

Основные понятия:

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

                   1.6, 14.9,  -5.0,  8.5,  0.46

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

                   A(1), A(2), A(3), ..., A(n).

Индекс определяет положение элемента массива данных  относительно его начала.

Для рассмотренного выше примера элементами  массива  А  являются:

        A(1)=1.6, A(2)=14.9, A(3)=-5.0, A(4)=8.5, A(5)=0.46

Определение массивов

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

Массивы, содержащие от 1 до 10 элементов,  можно использовать без их объявления в операторе DIM. Максимальное количество элементов любого массива определяется только объемом свободной ОП.

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

DIM имя_массива (максимальный_индекс)

"Имя_массива" обычно  выбирается по тем же правилам,  что и имена простых переменных.

"Максимальный_индекс" указывает максимально допустимый в программе индекс и должен быть положительным.

Примеры описания массивов:

DIM X(50)       ' объявление одномерного числового массива X для 50 чисел;

DIM V$(12)       'объявление одномерного  массива V для 12 символьных элементов.

Объявление массива  с  переменным  размером.  

INPUT K

DIM A(K)

 ........

Виды ошибок

Если указать в программе элемент массива с индексом большим,  чем значение размерности,  объявленное  в  операторе  DIM  или принятое по умолчанию, то выдается сообщение об ошибке 9:

Subscript out of range  (выход за пределы массива).

Если оператор DIM указан после использования  имени  массива  или массив повторно объявлен, то появляется сообщение 10:

Redimensioned array  (повторное задание размерности массива).

Заполнение массива

Существует два  способа  присваивания значений элементам массива:

1) cтатический,  с использованием операторов DATA,  READ  и  оператора присваивания;

2) динамический, с использованием оператора INPUT и функции RND.

При работе с массивами очень удобно пользоваться оператором цикла FOR...NEXT. В качестве индекса массива используют параметр цикла.

1. Пример статического заполнения массива.

DATA слива,ананас,груша

DATA яблоко,вишня,абрикос

DIM A$(6)

FOR I=1 TO 6

 READ A$(I)

NEXT I

Цикл FOR...NEXT последовательно присваивает значения всем переменным из списка.

2. Пример динамического заполнения массива

INPUT "Введите количество элементов массива ";N

DIM A(N)

FOR I=1 TO N

 INPUT A(I)

NEXT I

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

3. Пример заполнения массива с помощью стандартной функции RND

DIM V(12)

FOR I=1 TO 12         

  V(I)=INT(RND(1)*10)

  PRINT V(I);

NEXT J

Порядок работы  с  массивами

  1.  объявление массива (задание максимального размера массива);
  2.  заполнение массива;
  3.  обработка элементов массива;
  4.  вывод результата обработки.

Действия над элементами одномерного массива

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

DATA 3,4,5,-8,10.67,2.7,765,-6.98,9,-1

DIM A(10)

FOR I=1 TO 10

  READ A(I)

  S=S+A(I)

  IF A(I)<0 THEN N=N+1

NEXT I

PRINT " сумма=";S,"N=";N

END

Пример 2. Задан массив К(45). Определить минимальный элемент массива и его индекс.

DIM K(45)

FOR I=1 TO 45                  ' Заполнение массива

  INPUT K(I)

NEXT I

MIN=A(1)     ' Переменной MIN присваивается первое значение массива

FOR I=2 TO 45

  IF A(I) < MIN THEN MIN=A(I):K=I

NEXT I

PRINT "Минимальный элемент=";MIN, "его индекс=";K

END

Пример 3. Задан массив A(18). В массиве поменять местами значения 1-го и 2-го элемента,  3-го и 4-го и т.д. Измененный массив вывести на экран.

DIM A(18)

FOR I=1 TO 18

  A(I)=INT(RND(1)*10)

  PRINT A(I);

NEXT I

FOR I=1 TO 18 STEP 2

  SWAP A(I),A(I+1)    ' Меняются местами значения элементов массива

NEXT I

PRINT

FOR I=1 TO 18

  PRINT A(I);        ' Вывод  измененного массива

NEXT I

END

Пример 4.  Дан массив М(30). Элементы массива - произвольные числа. Выдать  на экран значения каждого пятого элемента.  Указанные элементы выдать в строку.

DIM M(30)

FOR I=1 TO 30

  M(I)=INT(RND(1)*15)

  PRINT M(I);

NEXT I

PRINT

FOR I=5 TO 30 STEP 5

  PRINT M(I);          ' Вывод каждого пятого элемента массива

NEXT I

Пример 5.  Сформировать из N элементов одномерный массив А и  вывести его на печать в виде K столбцов.

INPUT " Введите количество элементов массива ";N

DIM A(N)

FOR I=1 TO N

  A(I)=INT(RND(1)*10)

NEXT I

INPUT " Введите количество столбцов ";K

FOR I=1 TO N

  PRINT A(I);

  IF I MOD K = 0 THEN PRINT

NEXT I

END

Пример 6. Составить программу вычисления и печати значений функции

              Y=(SIN X+1) COS 4X

Значения аргумента заданы статически в массиве X(10). Значения функции записать в массив Y(10) и распечатать в пять строк.

DATA 5,6.78,56,7.34,678,89,5,23.9,10,34.7

DIM X(10),Y(10)

FOR J=1 TO 10

  READ X(J)

NEXT J

FOR J=1 TO 10

  Y(J)=(SIN(X(J))^2+1)*SQR(COS(4*X(J))^2)

  PRINT Y(J);

  IF J MOD 2 = 0 THEN PRINT

NEXT J

END


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

Основные понятия 

Бейсик позволяет работать с массивами,  имеющими до 255 измерений и содержащими до 32767 элементов по каждому из них. Однако следует хорошо подумать,  стоит ли использовать эти возможности в полном объеме. Если вы сделаете свои массивы слишком большими,  то будете долго вспоминать, как  получить  доступ  к той или иной информации.  В то же время иногда решение задачи возможно только при наличии  многомерных  массивов, или матриц. Наиболее часто применяются двумерные массивы, поскольку описывать информацию по  ее позиции в одномерном списке весьма неудобно.  Представьте себе,  как трудно было бы найти свое место на стадионе, если бы на билете  указывался  лишь  порядковый номер сиденья - один из многих тысяч! Билеты же,  на которых проставлены и номер ряда, и номер места, существенно упрощают эту задачу. Составители географических карт тоже  пользуются  таким  приемом. Координаты Парижа,  Осло,  Рима, обозначаются не как 1, 2 или 300, а в терминах градусов широты и долготы. Эти два числа указывают местоположение города относительно экватора и начального (Гринвичского) меридиана.

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

Имя и размерность матрицы определяется оператором

DIM A(3,4)

Этот оператор зарезервирует 12 ячеек:

    A(1,1), A(1,2), A(1,3), A(1,4)

    A(2,1), A(2,2), A(2,3), A(2,4)

    A(3,1), A(3,2), A(3,3), A(3,4)

Каждый элемент  описывается двумя  индексами: первый обозначает  номер строки, а второй - номер столбца.

Столбец 1

столбец 2

столбец 3

столбец 4

строка 1

    1,1

    1,2

    1,3

    1,4

строка 2

    2,1

    2,2

    2,3

    2,4

строка 3

    3,1

    3,2

    3,3

    3,4

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

Заполнение массива 

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

DATA Настя,Ульяна,Женя

DATA Щербакова,Евланова,Клочко

 DIM A$(2,3)

FOR I=1 TO 2         ' Заполнение массива

  FOR J=1 TO 3

    READ A$(I,J)

NEXT J,I

FOR I=1 TO 2

  FOR J=1 TO 3       ' Печать значений массива по строкам

   PRINT A$(I,J);

 NEXT J

 PRINT

 NEXT I

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

DIM A(5,4)

FOR I=1 TO 5         ' Заполнение массива

FOR J=1 TO 4

   INPUT A(I,J)

 NEXT J,I

FOR I=1 TO 5                       ' Печать значений массива по строкам

 FOR J=1 TO 4

    PRINT A(I,J);

NEXT J

PRINT

NEXT I

Пример заполнения массива с помощью стандартной функции RND.

DIM M(2,8)

FOR I=1 TO 2

 FOR J=1 TO 8

    M(I,J)=INT(RND(1)*10)   ' Заполнение массива случайными

    PRINT M(I,J);                   ' числами и печать значений массива

  NEXT J                               ' по строкам

  PRINT

NEXT I

Действия над элементами двумерного массива

Пример 1.  Задана матрица U(7,3). Отрицательные элементы матрицы заменить на 0. Измененный массив вывести на экран.

DIM U(7,3)

FOR I=1 TO 7                 ' Заполнение массива отрицательными и

  FOR J=1 TO 3               ' положительными числами

    U(I,J)=INT(RND*20-10)

    PRINT U(I,J);

 NEXT J

 PRINT

NEXT I: PRINT

FOR I=1 TO 7

 FOR J=1 TO 3

   IF U(I,J)<0 THEN U(I,J)=0

   PRINT U(I,J);

 NEXT J

   PRINT

NEXT I

END

Пример 2.  Найти сумму положительных элементов четных строк матрицы C(5,3).

DIM С(5,3)

FOR I=1 TO 5

 FOR J=1 TO 3

    С(I,J)=INT(RND(1)*20)

    PRINT С(I,J);

 NEXT J

 PRINT

NEXT I: PRINT

S=0

FOR I=2 TO 5 STEP 2

 FOR J=1 TO 3

   S=S+C(I,J)

 NEXT J

NEXT I

END

Пример 3.  Дана матрица U(7,3).  Получить массив Q(7), элементами которого являются  количество  отрицательных элементов соответствующих строк матрицы U(7,3).

DIM U(7,3),Q(7)

FOR I=1 TO 7                 ' Заполнение массива отрицательными и

  FOR J=1 TO 3               ' положительными числами

    U(I,J)=INT(RND(1)*20-10)

    PRINT U(I,J);

  NEXT J

  PRINT

NEXT I: PRINT

FOR I=1 TO 7

 K=0

 FOR J=1 TO 3

   IF U(I,J)<0 THEN K=K+1

 NEXT J

 Q(I)=K: PRINT Q(I);

NEXT I

END

Пример 4.  Задан массив C(5,3). В массив К(5) записать суммы элементов соответствующих строк массива C(5,3). Вывести на экран значения элементов массива K(5).

DIM С(5,3),K(5)

FOR I=1 TO 5

  FOR J=1 TO 3

    С(I,J)=INT(RND(1)*20)

    PRINT С(I,J);

  NEXT J

  PRINT

NEXT I: PRINT

FOR I=1 TO 5

 S=0

 FOR J=1 TO 3

   S=S+C(I,J)

 NEXT J

 K(I)=S: PRINT K(I);   ' Формирование и печать массива К

NEXT I

END

Пример 5.  Задана матрица М(6,3),  подсчитать количество строк, в которых первый элемент строки меньше нуля.

DIM M(6,3)

FOR I=1 TO 6

  FOR J=1 TO 3

    U(I,J)=INT(RND(1)*20-10)

    PRINT M(I,J);

  NEXT J

  PRINT

NEXT I: PRINT

FOR I=1 TO 6

  IF M(I,1)<0 THEN K=K+1   ' Подсчет количеств строк

NEXT I

PRINT " Количество строк=";K

Пример 6.  В заданной матрице N(4,6) поменять местами строки L  и K. Измененную матрицу вывести на экран.

DIM N(4,6)

FOR I=1 TO 4

 FOR J=1 TO 6

   N(I,J)=INT(RND(1)*20)

   PRINT N(I,J);

 NEXT J

 PRINT

NEXT I

INPUT " Введите строки, которые необходимо поменять местами ";L,K

FOR J=1 TO 6

  SWAP N(L,J),N(K,J)      ' Меняются местами строки

NEXT J

FOR I=1 TO 4                   ' Печать измененного массива

  FOR J=1 TO 6

    PRINT N(I,J);

  NEXT J

  PRINT

NEXT I

Объявление размерности массива бывает  переменным,  т.е.  размерность выясняется в процессе работы программы.

Пример 7. Задана матрица A(n,m), получить массив B(n), элементами которого являются  сумма наименьшего и наибольшего элементов соответственной строки матрицы A(n,m).

INPUT " Введите количество строк и столбцов матрицы A "; N,M

DIM A(n,m),B(n)

FOR I=1 TO N                           ' Динамическое заполнение

  FOR J=1 TO M                        ' массива

    INPUT A(I,J)

NEXT J,I

FOR I=1 TO N                           ' Печать элементов массива A

  FOR J=1 TO M

    PRINT A(I,J);

  NEXT J

  PRINT

NEXT I: PRINT

FOR I=1 TO N

  MI=A(I,1): MA=A(I,1)            ' Первый элемент каждой строки

  FOR J=2 TO M                        ' запоминается в переменных MI,MA

    IF A(I,J) < MI THEN MI=A(I,J)

    IF A(I,J) > MA THEN MA=A(I,J)

  NEXT J

  B(I)=MI+MA: PRINT B(I);       ' Формирование массива В

NEXT I

END

Матрица, у которой  количество  строк равно  количеству столбцов, называется квадратной.

Пример 8.  Задана квадратная матрица A порядка N. Получить массив B(n), элементами  которого  являются  первый положительный элемент соответствующей строки квадратной матрицы A.

INPUT " Введите количество строк и столбцов матрицы A "; N

DIM A(n,n),B(n)

FOR I=1 TO N

  FOR J=1 TO N

    INPUT A(I,J)

NEXT J,I

FOR I=1 TO N

 FOR J=1 TO N

    PRINT A(I,J);

 NEXT J

 PRINT

NEXT I: PRINT

FOR I=1 TO N

  FOR J=1 TO N

    IF A(I,J)>0 THEN B(I)=A(I,J):J=N     ' Формирование массива В

  NEXT J

PRINT B(I);

NEXT I

END

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

В квадратной матрице B(4,4)

    B(1,1), B(1,2), B(1,3), B(1,4)

    B(2,1), B(2,2), B(2,3), B(2,4)

    B(3,1), B(3,2), B(3,3), B(3,4)

    B(4,1), B(4,2), B(4,3), B(4,4)

элементы B(1,1),  B(2,2), B(3,3), B(4,4) располагаются на главной диагонали матрицы.

Пример 9.  Дана  квадратная матрица A порядка 5.  Заменить нулями все элементы матрицы, расположенные на главной диагонали. На экран вывести измененную матрицу в виде таблицы.

DIM A(5,5)

FOR I=1 TO 5

  FOR J=1 TO 5

    A(I,J)=INT(RND(1)*20)

    PRINT A(I,J);

  NEXT J

  PRINT

NEXT I: PRINT

FOR I=1 TO 5          ' Замена нулями элементов, расположенных на

 A(I,I)=0                 ' главной диагонали

NEXT I

FOR I=1 TO 5

  FOR J=1 TO 5

    PRINT A(I,J);    ' Печать измененной матрицы

  NEXT J

  PRINT

NEXT I

Пример 10.  Дана квадратная матрица порядка N. В строках с отрицательным элементом на главной  диагонали  найти  сумму  всех  элементов строки. На экран вывести сумму элементов и номер строки.

INPUT " Введите количество строк и столбцов "; N

DIM С(N,N)

FOR I=1 TO N

 FOR J=1 TO N

    С(I,J)=INT(RND(1)*20)

    PRINT С(I,J);

 NEXT J

 PRINT

NEXT I

FOR I=1 TO N

 S=0

 FOR J=1 TO N

   IF C(I,I)<0 THEN S=S+C(I,J)

 NEXT J

 IF S<>0 THEN PRINT " Сумма элементов =";S," Номер строки =";I

NEXT I


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

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

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

GOSUB номер строки или метка

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

Если нарушено согласование операторов RETURN и GOSUB, то выводится сообщение об ошибке “RETURN without GOSUB”.

Подпрограммы располагаются в конце основной программы и   отделяются от основной программы оператором END.

Пример 1. Написать подпрограмму вывода подчеркивания информации. Длина черты переменная.

N=5

GOSUB A     ‘вызов подпрограммы для вывода знака подчеркивания 5 раз

N=30

GOSUB A     ‘вызов подпрограммы для вывода знака подчеркивания 30 раз

END

A: FOR I=1 TO N   ‘подпрограмма вывода знака подчеркивания

       PRINT ”_“;

    NEXT I

PRINT

RETURN       ‘оператор возврата в основную программу

Пример 2. Вычислить функцию:  C = m!n!/(m-n)!

1 INPUT “Введите m>n”;m,n

IF M<=N THEN 1   ‘проверка входных данных

R=M

GOSUB A          ‘вызов подпрограммы для вычисления m!

R1=F : R=N

GOSUB A         ‘вызов подпрограммы для вычисления n!

R2=F : R=M-N

GOSUB A         ‘вызов подпрограммы для вычисления (m-n)!

C=(R1+R2)/F : PRINT “C=”;C

END

A: F=1              ‘подпрограмма вычисления факториала

FOR I=2 TO R

  F=F*I

NEXT I

RETURN         ‘оператор возврата в основную программу

Для самостоятельного решения

Составить программу расчета заработной платы по формуле: оклад * количество дней * 1.4-подоходный налог. Расчет заработной платы оформить в подпрограмме.


Функции, определяемые пользователем

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

Формат:

DEF FN <имя функции>(<список формальных параметров>)=<выражение>

Обращение к функции пользователя осуществляется

FN <имя функции>(<список фактических параметров>)

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

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

DEF FNKT(X)=COS(X)/SIN(X)

DEF FNP(A,B)=A/B*100

X,A,B – формальные параметры

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

FNKT(X)

FNP(C,D)

X,C,D - фактические параметры

Имена формальных и фактических параметров могут не совпадать.

С помощью оператора DEF FN можно описать более сложную функцию, занимающую несколько строк

Формат:

DEF FN <имя функции>(<список аргументов>)

<блок команд>

FN<имя функции>=<выражение>

END DEF

В строке FN<имя функции>=записывается выражение, значение которого функция возвращает.

Пример1. Отрезки заданы координатами концов. Сравнить эти отрезки.

DEF FNL(x1,x2,y1,y2)=SQR((x1-x2)^2+(y1-y2)^2)   ‘функция нахождения длины отрезка

INPUT “введите координаты первого отрезка”,x1,x2,y1,y2

L1=FNL(x1,x2,y1,y2)

INPUT “введите координаты второго отрезка”,x1,x2,y1,y2

L2=FNL(x1,x2,y1,y2)

IF L1>L2 THEN

  ? “длина первого отрезка больше”

ELSEIF L2>L1 THEN

  ? “длина второго отрезка больше

ELSE

  ? “отрезки равны”

END IF

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

K=(1+m^2)/cos(1-m)–5*(c+d^2)/cos(c-d)+tg(x+y^2)/cos(x-y)

DEF FNT(a,b)=abs((a+b^2)/cos(a-b))

INPUT “Введите 5 значений”,m,c,d,x,y

K=FNT(1,m)-5*sqr(FNT(c,d))+tan(FNT(x,y))

? “K=”;K

Пример 3. Вычислить сумму N членов ряда. Факториал вычислять с помощью функции пользователя.

S=1!/4!+4!/5!+9!/6!+16!/7!+…+(n^2)!/(n+3)!

DEF FNFACT(M)

 P=1

 FOR I=1 TO M

    P=P*I

 NEXT I

 FNFACT=P

END DEF

INPUT “Введите n”;N

S=0

FOR J=1 TO N

 S=S+FNFACT(J^2)/FNFACT(J+3)

NEXT J

? “S=”;S

 

Задание:

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

C=(d+e)/tg(de)+(x+y)/tg(xy)-(z+t)/tg(zt)

2. Вычислить функцию:  C = m!n!/(m-n)!. Для вычисления факториала использовать определяемую функцию.

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

1 вариант

  1.  Дан массив с оценками учащихся. Найти средний балл учащихся. Подсчитать количество 5 и 4. Заполнение массива, подсчет среднего балла и подсчет количества оценок оформить отдельными подпрограммами.
  2.  Задана матрица W(5,6). Отрицательные элементы матрицы заменить на 0. измененный массив вывести на экран. Обработку элементов массива оформить в подпрограмме.

2 вариант

  1.  Дан одномерный массив со значениями веса кур на птицефабрике. Найти средний вес кур. Найти вес самой тяжелой курицы. Заполнение массива, подсчет среднего веса и нахождение веса самой тяжелой курицы оформить отдельными подпрограммами.
  2.  Найти произведение элементов массива R(7,5) в строках с четными номерами. Обработку элементов массива оформить в подпрограмме.

 

Работа со строковыми типами данных

Оператор LINE INPUT

Оператор LINE INPUT позволяет ввести с клавиатуры строку длиной до 255 символов

Формат:

LINE INPUTкомментарии”,T$

T$ - строковая переменная.

Выполнение команды LINE INPUT проводится аналогично команде INPUT с той лишь разницей, что:

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

Например:

LINE INPUT”введите фамилии”,T$

<набираем: Иванов, Петров, Николаев >

после этого T$ будет  содержать: Иванов, Петров, Николаев

Операции со строковыми данными

Со строковыми данными возможна одна операция конкатенация – объединение двух строковых последовательностей в одну.

Формат:

A$ + B$

Например:

A$=”Графический”

D$=” редактор”

T$=A$+B$

PRINT T$

<На экране появится: Графический редактор>

Функции для работы с текстами

Функция LEN предназначена для определения длины символьного выражения

Формат:

LEN (текст)

Функция определяет длину значения строкового выражения.

Например:

T$=”Москва”

K=LEN(T$)

PRINT “длина текста = “;K

<На экране появится: длина текста = 6>

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

Функция LEFT$ возвращает строку символов из n левых символов

Формат:

LEFT$ (текст, n)

Например:

T$=”контрабас”

A$=LEFT$(T$,6)

? A$

<На экране появится: контра>

Функция RIGHT$ возвращает строку символов из n правых символов

Формат:

RIGHT$ (текст,n)

Например:

T$=”контрабас”

A$=RIGHT$(T$,3)

? A$

<На экране появится: бас>

Если число n больше длины текста, то обе функции возвращают весь исходный текст.

Функция MID$ (возвращает фрагмент из текста: n символов, начиная с k-го символа.

Формат:

MID$ (текст,k,[n])

К – порядковый номер символа.

N – количество символов, подлежащих обработке.

Например:

T$=”информатика”

A$=MID(T$,3,5)

? A$

<На экране появится: форма>

Если n не указано, то функция возвращает символы начиная с к-го и до конца текста.

Например:

T$=”Москва, Париж и Лондон”

A$=MID(T$,9)

? A$

<На экране появится: Париж и Лондон>

Пример 1. Задан текст. Подсчитать каких букв в тексте больше “а” или “о” и на сколько.

LINE INPUT “введите текст”;T$

L=LEN(T$)

KA=0 : KO=0

FOR I=1 TO L

  IF MID$(T$,I,1)=”A” OR MID$(T$,I,1)=”a” THEN KA=KA+1

  IF MID$(T$,I,1)=”O” OR MID$(T$,I,1)=”o” THEN KO=KO+1

NEXT I

IF KA>KO THEN PRINT “Букв а больше, чем о на “;KA-KO

IF KO>KA THEN PRINT “Букв o больше, чем a на “;KO-KA

IF KA=KO THEN PRINT “Букв а и о равное количество “

Пример 2. Задан текст. Подсчитать сколько предложений в тексте.

LINE INPUT “введите текст”;T$

L=LEN(T$)

К=0

FOR I=1 TO L

 IF MID$(T$,I,1)=”.” OR MID$(T$,I,1)=”!” OR MID$(T$,I,1)=”?” THEN K=K+1

NEXT I

PRINT “В тексте “;K;” предложений”

Пример 3. Дано слово “информатика”. Составить из букв этого слова 3 новых слова.

T$=”информатика

T1$=MID$(T$,3,3)+MID$(T$,7,1)

T2$=MID$(T$,5,1)+LEFT$(T$,1)+MID$(T$,3,1)+MID$(T$,6,2)

T3$=MID$(T$,2,1)+MID$(T$,4,2)+RIGHT$(T$,2)

PRINT T1$;”, “;T2$;”, “;T3$

<на экране появится: фора, рифма, норка>

Пример 4. Дано слово. Выяснить является ли это слово перевертышем, то есть читается слева направо и наоборот одинаково. Например “казак”.

LINE INPUT “Введите слово”;T$

M$=””

FOR I=LEN(T$) TO 1 STEP -1

 M$=M$+MID$(T$,I,1)

NEXT I

IF T$=M$ THEN PRINT “Да является” ELSE PRINT “Нет не является”

Для самостоятельного решения:

Задание1:

Задано слово “энциклопедия”. Кто составит больше слов из букв этого слова и кто составит самое длинное слово  

Задание 2:

Задано слово. Напечатать это слово в обратном порядке.

Задание 3:

Задан текст. Напечатать каждое предложение этого текста с новой строки.

Функция INSTR ищет подстроку в строке начиная с позиции n. Если n не задано, то поиск осуществляется с первой позиции. Функция INSRT дает номер позиции, начиная с которой заданная подстрока появляется в исходной строке. Функция возвращает 0, если подстрока не найдена в строке.

Формат:

INSTR ([n],текст,подстрока)

Например:

T$=”информатика”

A$=”форма

N=INSTR(1,T$,A$)

? N

<На экране появится: 3>

Пример 1. Задан текст. Подсчитать сколько раз в тексте встречается словосочетание “кот”.

1 способ:

LINE INPUT “Введите текст”;T$

L=LEN(T$)

FOR I=1 TO L

 IF MID(T$,I,3)=”кот” THEN K=K+1

NEXT I

? “Количество словосочетаний кот = ”;K

2 способ:

LINE INPUT “Введите текст”;T$

T=INSTR(1,T$,”кот”)

WHILE T<>0

   K=K+1

   T=INSTR(T+1,T$,”кот”)

WEND

? “Количество словосочетаний кот = ”;K

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

LINE INPUT “Введите текст”;T$

T1=INSTR(1,T$,”:”)

T2=INSTR(T1+1,T$,”:”)

PRINT MID$(T$,T1+1,T2-T1-1)

Пример 3. Задан текст. Подсчитать количество слов в первом предложении. Слова разделены пробелом.

1 способ

LINE INPUT “Введите текст”;T$

K=1

PT=INSTR(T$,”.”)

FOR I=1 TO PT

  IF MID$(T$,I,1)=” “ THEN K=K+1

NEXT I

PRINT”Количество слов в первом предложении=”;K

2 способ

LINE INPUT “Введите текст”;T$

K=1

I=1

WHILE MID$(T$,I,1)<>”.”

    IF MID$(T$,I,1)=” “ THEN K=K+1

    I=I+1

WEND

PRINT”Количество слов в первом предложении = ”;K

Пример 4. Задан текст. Подсчитать количество слов «ученик» в последнем предложении.

LINE INPUT “Введите текст”;T$

K=0 

I= Len(T$)-1

WHILE MID$(T$,I,1)<>”.”

    B$= MID$(T$,I,8)

    IF B$=” ученик  “ OR B$=” Ученик  “ THEN K=K+1

    I=I-1

WEND

PRINT”Количество слов ученик в последнем предложении = ”;K

Оператор MID$ замещает часть строковой переменной другой строкой.

MID$(строк_переменная$,k[,n])=строк_выражение$

строк_выражение$ -  строка, из которой функция MID$ возвращает подстроку, или строка замещения, используемая в операторе MID$. Может быть любым строковым                           выражением.

K - позиция первого возвращаемого или замещаемого символа в строке.

N - число символов в подстроке. Если длина опущена, MID$ возвращает или замещает все символы справа от начальной позиции.

строк_переменная$ -   строковая переменная, изменяемая оператором MID$.

Пример:

   Text$ = "Париж, Франция"

   PRINT Text$                 'Вывод:  Париж, Франция

   MID$(Text$, 8) = "Сиэтл  "

   PRINT Text$                 'Вывод:  Париж, Сиэтл

Функция INKEY$ или как получить власть над клавиатурой

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

Например:

PRINT “Нажмите любую клавишу

WHILE INKEY$ = “”

WEND

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

Например:

PRINT “Нажмите ‘ESC’ “

WHILE INKEY$ <> CHR$(27)

WEND

(27 – код ASCII для клавиши ‘ESC’)

Каждая клавиша имеет свой код ASCII. Обращаясь к функции INKEY$, нельзя забывать, что она используется только вместе с условным циклом.

Графическая обработка данных

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

Оператор SCREEN

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

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

Формат:

SCREEN номер режима

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

Например: этот рисунок демонстрирует параметры графического режима SCREEN 2.

 

        

(0,0)                                    640

                                                                                                              (320,100)

                                                                                                  200

                                                                                                       

                                                                                                                     200     

                                                                                            

                                                                                     (639,

                         

                                                                                                                 (639,199)

Таблица. Режимы экрана для адаптера VGA

Номер режима

Число точек

цвета

0

Текстовый режим

16

1

320 х 200

4

2

640 х 200

2

7

320 х 200

16

8

640 х 200

16

9

640 х 350

16

10

640 х 350

2

11

640 х 480

2

12

640 х 480

16

13

320 х 200

256

Оператор COLOR

Способность вашего монитора воспроизводить 16 цветов позволяет выбрать цвет символов и цвет фона.

Формат:

COLOR [C] [,F]

С-цвет символов

F-цвет фона

Таблица 2. Коды и соответствующие цвета.

К о д

Ц в е т

0

        Черный

1

        Синий

2

        Зеленый

3

        Голубой

4

        Красный

5

        Пурпурный

6

        Коричневый

7

        Светло-серый

8

        Темно-серый

9

        Светло-синий

10

        Светло-зеленый

11

        Светло-голубой

12

        Светло-красный

13

        Светло-пурпурный

14

        Желтый

15

        Белый

Операторы PSET, PRESET

Отдельный пиксель можно “зажечь” заданным цветом любой из двух универсальных команд графического режима:

PRESET (X,Y)[,C]

PSET (X,Y)[,C]

Формат команд одинаков: сначала указываются координаты точки, а затем, если необходимо – номер цвета точки. Если цвет указан, действие команд совершенно одинаково: точка окрашивается цветом С. Если цвет опущен, PSET окрашивает точку текущим цветом символов, а PRESET – текущим цветом фона (она будет невидимой).

Пример 1. Изобразить на экране бегуший отрезок.

SCREEN 12

COLOR 4,3

FOR X=1 TO 640

 PSET (X,240)

 PRESET (X-10,240)

NEXT X

Пример 2. Нарисовать в центре голубого экрана желтый крест.

SCREEN 12

COLOR 14,3

Y=210

FOR X=310 TO 330

 PSET(X,Y)

 PSET(640-X,Y)

 Y=Y+1

NEXT X

Операторы PSET и PRESET могут иметь еще следующие формы:

PSET STEP (X,Y)

PRESET STEP (X,Y)

STEP в этих операторах указывает на смещение точки относительно координат последней точки.

Прямые линии – отрезки

Оператор LINE предназначен для рисования отрезка, соединяющего две произвольные точки экрана.

Формат:

LINE[(X1,Y1)]-(X2,Y2)[,C]

X1,Y1 - координаты начала отрезка.

X2,Y2 - координаты конца отрезка.

С - цвет.

Если координаты начала отрезка опущены, то отрезок будет начинаться с координат последней точки.

В операторе LINE можно использовать относительные координаты для начала и/или конца отрезка. Например:

LINE STEP (10,10)-(100,165)  будет нарисован отрезок от точки с координатами последней точки + 10,10 до точки с координатами 100,165.

LINE (115,120) – STEP(-10,15)   будет нарисован отрезок от точки с координатами 115,120 до точки с координатами 105,135.

LINE STEP(-5,5) – STEP(5,-5) будет нарисован отрезок от точки с координатами последней точки  -5,5 до точки с приращением +5,-5.

Рисование прямоугольников

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

Формат:

LINE(X1,Y1)-(X2,Y2)[,C],B

LINE(X1,Y1)-(X2,Y2)[,C],BF

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

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

X1,Y1 – координаты верхнего левого угла прямоугольника.

X2,Y2 – координаты правого нижнего угла прямоугольника.

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

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

Пример 1. Нарисовать несколько вложенных прямоугольников.

SCREEN 12

COLOR 14,3

PSET 10,10

FOR I=1 TO 5

LINE STEP(10,10)-(200-I*10,200-I*10)

NEXT I 

Результатом выполнения программы будет:

Задания:

  1.  Нарисовать домик;
  2.  Нарисовать елочку;
  3.  Нарисовать робота;
  4.  Нарисовать собачку;
  5.  Нарисовать пятиконечную звезду;

Оператор CIRCLE

С помощью оператора CIRCLE можно нарисовать окружность.

Формат:

CIRCLE(X,Y),R[,C]

CIRCLE STEP (X,Y),R[,C]

X,Y – координаты или смещение центра окружности

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

Чтобы нарисовать дугу, эллипс или сектор окружности необходимо добавить новые параметры в оператор CIRCLE.

Формат:

CIRCLE(X,Y),R,C,N,K,A

X,Y – координаты центра окружности;

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

C – цвет;

N – начальная точка дуги, заданная в радианах;

K – конечная точка дуги, заданная в радианах;

A – отношение значений Y- радиуса и Х - радиуса.

Для рисования окружности используются только параметры X,Y и радиус.

Для рисования дуги необходимо добавить значения параметров начальной и конечной точек. Значения параметров начальной и конечной точек задаются в радианах и должны иметь значения между 0 и 2π радиан (2π =6.28). При рисовании дуги отсчет идет от начальной точки дуги до конечной в направлении против часовой стрелки.

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

Пример:

REM рисование окружности, дуги и сектора.

SCREEN 2

CLS

CIRCLE (100,100) , 30

CIRCLE(180,100) , 30 , 3 , 1 , 2

CIRCLE(260,100) , 30 , 3 , -2 , -1

END

Результатом выполнения программы будет:

Для рисования эллипса нужно ввести в оператор CIRCLE коэффициент отношения радиусов по осям Y и X. Этот параметр определяет степень сжатия эллипса и может иметь любое положительное значение.

Пример:

REM рисование эллипсов

SCREEN 2

CLS

CIRCLE (100,100) , 30

CIRCLE(180,100) , 30 , , , , 0.3

CIRCLE(260,100), 30 ,  , , , 1.5

END

Результатом выполнения программы будет.

Следующая программа представляет оператор CIRCLE  с использованием различных параметров.

REM Рисование мордашки

SCREEN 1

CLS

CIRCLE (100,100) , 70                         ‘лицо

CIRCLE (75,75) , 10 , , , , .2                 ‘глаза

CIRCLE (125,75) , 10 , , , , .2

CIRCLE (100,100) , 5 , , , , 2                ‘нос

LINE (100,40) – (90,60)                        ‘волосы

LINE (100,40) – (110,60)

LINE (100,40) – (100,60)

CIRCLE (100,110) , 20 , , 3.14 , 0         ‘улыбка

END

Результатом выполнения программы будет:

Оператор PAINT

С помощью оператора PAINT можно закрасить замкнутую область в заданный цвет.

Формат:

PAINT (X,Y) , C1 , C2

X,Y – координаты любой точки из замкнутой области.

С1  – цвет, в который надо закрасить область.

С2 – цвет, которым нарисована граница области.

Если цвет области совпадает с цветом границы, то С2 можно не указывать. Закрашиваемая область должна быть замкнутой. Если в контуре (на границе) области окажется разрыв, краска С1 “вытечет” из контура и заполнит весь экран.

Задания:

  1.  Нарисовать гриб;
  2.  Нарисовать зонтик;
  3.  Нарисовать натюрморт из фруктов и овошей;
  4.  Нарисовать снежную бабу;
  5.  Нарисовать прямоугольный орнамент, который содержит различные геометрические фигуры.

Вывод текста в графическом режиме

В графическом режиме можно выводить текст командой PRINT. Каждый видеорежим имеет собственное деление экрана на строки и столбцы. Например, в режиме 9 экран делится на 25 строк и 80 столбцов (как бы имитация текстового режима). Матрица символа имеет размеры 8х14 – восемь столбцов и 14 строк (640/80 и 350/25). Координаты выводимого текста можно указать с помощью обычной команды LOCATE, например:

А=48

LOCATE 12,44

PRINT “A = “;A;

На экране будет:  А = 48

Текст выводится текущим цветом символов, который указан в последней выданной команде COLOR.

Графическое “перо” DRAW

Оператор DRAW позволяет управлять движением “пера” с помощью графических команд.

Формат:

DRAW строка символов

В строке символов записывается последовательность графических команд, причем каждая команда обозначена латинской буквой и целым числом (например, Е10, С2 и т.д.). Движение пера начинается с текущей позиции курсора, а эту позицию можно установить оператором PSET или PRESET.

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

К о м а н д а

Выполняемое действие

Un

Переместить вверх

Dn

Переместить вниз

Ln

Переместить влево

Rn

Переместить вправо

En

Переместить вверх и право по диагонали

Fn

Переместить вниз и право по  диагонали

Gn

Переместить вниз и влево по диагонали

Hn

Переместить вверх и влево по диагонали

Mx,y

Переместить в точку с координатами (x,y)

B

Переместить, но не рисовать

N

Переместить, затем вернуться в начальное положение

An

Задать угол поворота

Tan

Задать угол направления

Cn

Задать цвет

Sn

Задать масштаб (n может иметь значения от 1 до 225)

P n,m

Закрасить область (n-цвет области, m- цвет контура)

Пример:

SCREEN 1

CLS

          ‘ рисование буквы “Q

DRAW “BM 100,100 F10 R10 E10 U30 H10 L10 G10 D30”

DRAW “BM+10,+0 R10 U30 L10 D30”

DRAW “BM+10,+0 NM125,112 N M135,110 BM125,112 M 135,110”

          '  рисование буквы “B

DRAW “BM+10,+0 R20 E10 U10 H5 E5 U10 H10 L20 D50”

DRAW “BM+10,-10 R10 U10 L10 D10”

DRAW “BM+0,-20 R10 U10 L10 D10”

END

Команда An вращает изображение на угол, кратный 90 градусам, где n равно 0, 1, 2 или 3.

Например, конструкция DRAWA2” повернет нарисованное изображение на угол 180 градусов.

Команда Tan позволяет поворачивать изображение на произвольный угол: n может иметь любое значение от –360 до +360. Отрицательное значение угла означает поворот изображения по часовой стрелке, положительное значение n определяет поворот против часовой стрелки.

Задания:

  1.  Нарисовать свои инициалы;
  2.  Нарисовать забор;
  3.  Нарисовать дом;
  4.  Нарисовать стол;


 

А также другие работы, которые могут Вас заинтересовать

24403. Нормативная этика 29 KB
  Все моральные учения и этические теории выдвигавшиеся в истории в конечном итоге были посвящены решению практических нравственных проблем. И каждый теоретик посвоему обосновывал моральные представления того обва и класса духовным выразителем интересов крого он выступал хотя субъективно стремился к созданию беспристрастной теории возвышающейся над различными моральными позициями. края содержит моральные оценки и предписания но не может быть научной и метаэтику края является якобы строго научной теорией очищенной от моральных...
24404. Деловое общение 42 KB
  Дейл Карнеги еще в 30е годы заметил что успехи того или иного человека в его финансовых делах даже в технической сфере или инженерном деле процентов на пятнадцать зависят от его профессиональных знаний и процентов на восемьдесят пять от его умения общаться с людьми в этом контексте легко объяснимы попытки многих исследователей сформулировать и обосновать основные принципы этики делового общения или как их чаще называют на Западе заповеди personal public relation весьма приближенно можно перевести как деловой этикет. Только поведение...
24405. Системы этического знания: теоретическая и нормативная этика 102 KB
  Системы этического знания: теоретическая и нормативная этика. Этика – наука изучающая феномен морали. Слово этика от греч. В целом же слова этика мораль нравственность продолжают употребляться как взаимозаменяемые.
24406. Система этического знания 30 KB
  Этика обычай нрав характер это совокупность принципов и норм поведения принятых в данной эпохе и в данной социальной среде. Этика зарождается в обществе как результат осознания роли и сущности моральных отношений и в развитом состоянии представляет собой науку о морали содержащую две составляющих: теоретические исследования теоретическая этика и нормативные разработки нормативная этика. Теоретическая этика исследует происхождение и сущность морали ее роль и место в обществе функции механизм действия ее...
24407. Профессиональная этика. Этика управления. Взаимоотношения руководителя и подчиненных 32.5 KB
  Профессиональная этика. Этика управления. Профессиональная этика – это совокупность определенных обязанностей и норм поведения поддерживающих моральный престиж профессиональных групп в обществе. Профессиональная этика вырабатывает нормы стандарты требования характерные для определенных видов деятельности.
24408. Этика делового общения 34 KB
  Этика делового общения Умение вести себя с людьми надлежащим образом является одним из важнейших если не важнейшим фактором определяющим шансы добиться успеха в бизнесе служебной или предпринимательской деятельности. В этом контексте легко объяснимы попытки многих исследователей сформулировать и обосновать основные принципы этики делового общения Джен Ягер выделяет шесть следующих основных принципов: 1. Во втором случае оно проходит с помощью переписки или технических средств а первом при непосредственном контакте субъектов общения....
24409. Деловой этикет - это установленный порядок поведения в сфере бизнеса и деловых контактов 34.5 KB
  Деловой этикет это установленный порядок поведения в сфере бизнеса и деловых контактов. Деловой этикет включает в себя следующие разделы: Технологии невербального общения: жесты хорошего тона походка как правильно сидеть вход и выход из автомобиля рукопожатие и пр. Этикет если понимать его как установленный порядок поведения помогает избегать промахов или сгладить их доступными общепринятыми способами. Поэтому основную функцию или смысл этикета делового человека можно определить как формирование таких правил поведения в обществе...
24410. Имидж и его свойства 41 KB
  Имидж складывается в ходе личных контактов человека на основе мнений высказываемых о нем окружающими. Многие индивиды от природы обладают привлекательным имиджем наделены обаянием. Однако отсутствие внешней привлекательности не должно мешать созданию благоприятного имиджа.
24411. Архитектура безопасности. Модели безопасности ее оценки. Общие критерии 44.5 KB
  Данные файла занимают весь первый кластер и только один байт второго остальная же часть второго кластера ничем не заполнена однако недоступна для других файлов эта незанятая область поанглийски называется slack. В следующем доступном кластере могут размещаться данные другого файла. Если под данные этого файла не хватит второго кластера файл будет продолжен в следующем доступном кластере. DOS использует FAT для хранения информации необходимой для доступа к файлам записанным на диске.