Basic вводный курс
Алфавит языка
Алфавит языкаВ любом учебнике иностранного языка вначале дается его алфавит, т. е. набор символов для записи слов, предложений и всевозможных понятий этого языка. У языка Бейсик тоже есть алфавит, который содержит в себе следующие символы:
Арифметика в Бейсике
Арифметика в БейсикеПрежде чем двигаться дальше ("Как трудно двигаться дальше" — из песни Бориса Гребенщикова), необходимо напомнить, что в те далекие времена, когда только зарождались алгоритмические языки, а словосочетание "персональный компьютер" вызывало у тех, кто его слышал сомнения в здравомыслии его произносившего, так вот, в те самые времена считалось, что компьютер (от англ. compute — вычислять), т. е. "вычислитель" только и предназначен для того, чтобы считать в тысячи, нет — в миллионы раз быстрее человека. По сути, это действительно так, и если вы немного представляете себе физику происходящего в компьютере, то все, что вы ни делаете за компьютером — сочиняете стихи или музыку, рисуете картинки, играете, общаетесь в Сети — все внутри этого "вычислителя" сводится к цифровой двоичной форме и к действиям, элементарным арифметическим действиям над этими самыми числами.
Отсюда вывод — если хочешь быть программистом, надо дружить с математикой. Начнем?
Итак, компьютер умеет вычислять элементарные арифметические выражения. Но для того, чтобы он смог это сделать, мы должны представить это самое выражение в понятном ему виде, а именно:
Приведем ряд примеров перевода арифметических выражений в пригодный для Бейсика вид.
— в Бейсике 1/х
в Бейсике 2*х^2
в Бейсике (3+4)/(8-6) В последнем случае хочу обратить внимание на обязательность скобок как в числителе, так и в знаменателе. Потому что при записи 3+4/8-6 компьютер сначала произведет деление 4 на 8, затем прибавит 3 и вычтет 6. В ответе получится -2,5 вместо правильных 3,5. Будьте внимательны!
Чтобы потренироваться, вот вам ряд заданий на запись арифметических выражений в виде, пригодном для вычислений на Бейсике.
1.

2.

3.

4.

5.

Подсказка: корень квадратный (впрочем, как и любой другой) всегда можно представить в виде степени. А вот как, узнайте на уроках математики! Да про скобки не забудьте!
Теперь наоборот. Следующие выражения Бейсика запишите в обычной арифметической форме:
6.

7. (5^3*3-4) ^.5
8. 44/4*5+10-2^З/.3
9. 5+2/6-7+З^2
10. 5+2/6-7+З^2
11. (4*(5-4^2)^2
12. 3+8/4-7*З^2
Ну и чтобы закончить с арифметикой, расскажу еще о двух действиях, которые вы навряд ли использовали в школе, а в программировании они могут оказаться весьма полезными. Эти действия применимы только к целым числам!
Первое из них — деление нацело. Для этого действия используется знак \ (так называемый обратный слэш). Компьютер в этом случае делит числа как обычно, но в качестве результата деления представляет только целую часть, отбрасывая дробную. Например:
Если это вам понятно, давайте вычислим несколько выражений.
13. 20\6
14. 20 mod 6
15. 34\4
16. 34 MOD 4
17. 2\5
18. 2 MOD 5
19. 4*7\3 MOD 6/3
20. 24 MOD 5\3
Где взять русский Бейсик
Где взять русский БейсикСобственно, проблем, я думаю, с этим возникнуть не должно — надо поспрашивать у учителей информатики, у друзей на компакт-дисках может быть, в конце концов обращайтесь к автору книги — не откажу. Рабочая версия занимает около 400 Кбайт.
Язык Бейсик
Глава 1. Язык Бейсик| Содержание |
Как Бейсик сообщает об ошибках
Как Бейсик сообщает об ошибкахЕсли в программе была допущена ошибка, то после запуска программы на экране появится окно с сообщением об ошибке. У вас есть два варианта действий — выбрать кнопку Справка, чтобы получить информацию о допущенной ошибке, либо нажать клавишу
Как вводить текст программы в окне редактора
Как вводить текст программы в окне редактораВ окне редактора мигает курсор — горизонтальная светящаяся черточка, указывающая, где будет вводиться текст программы при наборе его с клавиатуры.
Если вы заметили, что что-то набрали неправильно, есть несколько путей исправить допущенные ошибки.
Оболочка Russian Quick Basic
Оболочка Russian Quick BasicПрежде чем непосредственно приступить к программированию, надо научиться пользоваться средой предлагаемого к изучению языка. А поскольку она на русском языке, то это не составит большого труда.
Итак, нам предстоит узнать:
Окно редактора
Рисунок 1.2. Окно редактора
Переход из одного окна в другое осуществляется клавишей
В окне немедленного выполнения вы можете сразу видеть результаты работы набранных команд после нажатия клавиши
Оператор INPUT
Оператор INPUTОператор input обеспечивает запрос данных, необходимых для выполнения программы, непосредственно у пользователя, которые тот вводит прямо с клавиатуры. Это дает возможность вести диалог с пользователем и решать задачу, исходя из его конкретных запросов.
Работает оператор input следующим образом. В том месте программы, где вы хотите запросить у пользователя какие-то данные, вы должны написать input, а после него через пробел — переменную или несколько переменных, в которые будут занесены вводимые данные. Например:
CLS:?"Каков Ваш рост в см?"
INPUT R
?"Ваш рост превышает 1 м на ";R-100;"см"
Эта элементарная программа работает так: оператор cls очищает экран, оператор print выводит на экран надпись "Каков Ваш рост в см?". Далее вступает в действие оператор input. Когда программа встречает этот оператор, она приостанавливает свое действие, выводит на экран знак вопроса, после которого мигает курсор. Таким образом, программа показывает, что она ожидает от пользователя ввода данных с клавиатуры. Неискушенный пользователь в этот момент обычно пугается, что программа зависла и начинает звать на помощь. Тот же, кто внимательно прочитает эту книгу, будет знать, что делать, а именно ответить на заданный вопрос, в данном случае — набрать на клавиатуре свой рост и нажать клавишу
Очень запоминается следующий пример диалоговой программы, которая запрашивает у пользователя имя, а затем здоровается с ним:
CLS:?"KaK вас зовут?" ';
INPUT NAME$ Rem Знак $ указывает на то, что ожидается вьод Rem не числовой, а символьной информации
? "Здравствуйте"; NAME$
Эта программа очищает экран (оператор cls), затем выводит сообщение "Как вас зовут?", следом вступает в дело оператор input. При этом программа приостанавливает свое действие и ждет от человека ввода его имени, например Ваня, которое запоминается компьютером в переменной name$. После этого на экране появится сообщение "Здравствуйте, Ваня!". Ваня обычно радуется, как маленький, даже если это уже взрослый человек.
Для тех, кто в дальнейшем планирует изучать язык Паскаль, пожалуй, стоит запомнить именно такую конструкцию оператора input: сначала вывод сообщения оператором print, а затем запрос данных. Но Бейсик в этом смысле облегчает работу и позволяет объединить два действия в одном. Тогда обе вышеприведенные программы обретут иной вид.
Про средний рост:
CLS:INPUT "Каков Ваш рост в cm";R
?"Ваш рост превышает 1 м Ha";R-100; "см"
Про "Здравствуйте, Ваня!"
CLS: INPUT "Как вас 3OByT";NAME$
? "Здравствуйте"; NAME$
То есть в операторе input сначала можно разместить подсказку (но только одну), а затем после точки с запятой указать имя запрашиваемой переменной, или, если их несколько, перечислить через запятую.
Кроме того, обратите внимание, что в модифицированных вариантах программ в вопросах опущены знаки вопросов, т. к. оператор input при работе сам выставляет знак вопроса.
Рассмотрим примеры.
Далее приведена программа, запрашивающая длины катетов, а затем вычисляющая длину гипотенузы прямоугольного треугольника.
CLS:INPUT "Введите длины двух катетов";А,В
C=SQR(A"2+B"2)
?"Длина гипотенузы =";С
Когда оператор input требует не одно, а несколько значений, то после запуска программы их надо вводить в том порядке, в котором они запрашиваются, а по окончании нажать клавишу
Если вы случайно ввели меньше или больше данных, чем было необходимо, и нажали клавишу
Перед упражнениями приведем еще один пример программы с оператором input:
CLS: INPUT "Как вас зовут";NAME$
? "Здравствуйте,"; NAME$
INPUT "Введите год вашего рождения, а затем текущий год ";YEARl,YEAR2 ! <.
R=YEAR2-YEAR1
?"Вам около";R; "лет"
Запустим программу и проследим ее работу (выделенные полужирным символы должны набираться пользователем в процессе работы программы).
Rem Нажмите
Как вас зовут? Ваня Rem После ввода нажмите клавишу
Здравствуйте, Ваня
Введите год вашего рождения, а затем текущий год? 1986, 2000
Rein После ввода нажмите клавишу
Вам около 14 лет .
Несколько маленьких упражнений. < '¦¦'¦'"' ''¦'".
70. Напишите программу, запрашивающую ваш год рождений, год рождения вашей мамы и печатающую/; Во сколько лет мама вас родила. '
71. Напишите дружественную по отношению к пользователю программу. Пусть она обращается к вам по имени, а затем предложит последовательно ввести прилагательное, существительное, наречие и глагол, чтобы в результате вывести на экран несложную фразу с использованием введенных слов.
72. Напишите программу, запрашивающую три стороны треугольника А, В, С и вычисляющую его площадь по формуле Герона:
73. Напишите программу, запрашивающую высоту дома h (в метрах), ускорение свободного падения g, и вычисляющую время падения кирпича t (в секундах) с крыши этого дома по формуле:

Замечание
Помните, что в самой программе вы не указываете ни конкретных имен, ни конкретных слов, а лишь имена переменных, в которых они будут храниться после ввода с клавиатуры.
Оператор присваивания
Оператор присваиванияПредставьте, что вы разработали алгоритм, продумали, какие в нем будут участвовать переменные, придумали им имена и что же дальше? Как же сообщить компьютеру их значения? Как менять эти значения? Итак, мы знакомимся с первым оператором языка Бейсик — оператором присваивания. Знайте, что имя переменной после присваивания будет служить для компьютера своего рода ссылкой на адрес в памяти, где значение этой самой переменной разместилось.
В старых версиях Бейсика оператор присваивания всегда начинался со слова let. Сейчас этого нет, и оператор присваивания выглядит просто как обычное математическое равенство. Но это вовсе не так!
Операторы DATA и READ
Операторы DATA и READСуществует другой способ ввода данных. Он применяется в том случае, если эти данные заранее известны. Тогда мы организуем в программе некое подобие склада (с помощью оператора data), а потом при помощи оператора read последовательно считываем эти данные в запрашиваемые переменные, в которых они хранятся и обрабатываются. Удобство этого способа в том, что не приходится каждый раз при запуске программы вводить исходные данные (особенно, когда их много), а также в простоте изменения исходных данных.
Приведем пример программы.
DATA 13, 17, 19
READ A
? А
READ A
? а
READ А
? А
На "складе" data хранятся три числа — 13, 17 и 19. Первый оператор read читает со "склада" число 13 и записывает его в переменную а, а затем оператор print выводит ее значение на экран. Потом считывается второе число — 17, вместо старого значения 13 в переменную а записывается новое — 17, которое тоже выводится на экран. Аналогичные действия происходят и в третий раз с последним числом со "склада"
Переменная и что в ней меняется
Переменная и что в ней меняетсяКомпьютер, как и вы, уважаемые читатели, обладает памятью. Она бывает разная. В процессе отладки вашей программы ком пьютер напрягает эту самую память, размещая в ней исходные данные, обрабатывая их, используя ваш алгоритм, получая результаты и доводя их до вашего сведения — чаще на экран монитора. Я думаю, для вас не секрет, что память эта называется ОЗУ (Оперативное Запоминающее Устройство), или по-английски RAM (Random Access Memory). Это, собственно, одно из основных устройств компьютера, имеющее, правда, ограниченный объем, измеряющийся в Мегабайтах.
Если вы пишете достаточно сложную и уже нелинейную программу, то наверняка потребуются переменные, т. е. такие области этой самой оперативной памяти, которые имеют имя, данное нами, и значения, которые могут меняться. Имя переменной в ходе выполнения программы постоянно, а значение может меняться многократно. Этот процесс можно сравнить со сдаваемой на лето дачей. Дача — это участок (область памяти компьютера), имеющий уникальный и неповторимый адрес, по которому его можно найти (имя переменной) и который не меняется, и каждое лето на дачу приезжают новые жильцы (значения переменной).
Каковы правила на этот счет в Бейсик? Так как Russian Quick-Basic — это язык, рассчитанный на использование из-под DOS (Disk Operation System, дисковая операционная система), то существуют ограничения на имена переменных:
Первое окно после запуска русского Бейсика
Рисунок .1. Первое окно после запуска русского Бейсика
Далее следуйте инструкции, появившейся на экране. При нажатии клавиши
Компьютер теперь готов к вводу и редактированию ваших программ.
Вам для работы предоставляется два окна:
использования оператора присваивания
Рисунок .3. Пример использования оператора присваивания
Рассмотрим работу приведенного выше оператора присваивания на примере фрагмента маленькой программы:
Х=15
Y=2
Z=(X-3*Y^2)+7
Вопрос. Чему будет равен Z после выполнения всех операторов присваивания?
Решение. Интерпретатор делает следующее:
Вопрос. А если бы первые два оператора присваивания отсутствовали, то чему было бы равно значение Z?
Ответ. В этом случае интерпретатор принял бы значения X и Y по умолчанию равными 0, вычислил бы с этими нулями значение правой части и оказалось бы, что Z в этом случае равно 7.
Пока все было похоже на традиционную математику. Но есть один небольшой нюанс. Давайте рассмотрим такой фрагмент программы:
Х=2
х=х+1
Если читать эту запись как математическую, то первый оператор совершенно обычен, "Икс равен двум". Но второй сразу заставляет бунтовать испорченную холодной логикой голову. Так ведь не может быть! Как это "Икс равен Икс плюс один"? Но что противоречит здравому смыслу в математике, легко поддается пониманию в программировании. Ведь это не математическое равенство, а рассматриваемый нами оператор присваивания. Разберем его работу.
Итак, вопрос. Чему будет равно значение X после выполнения двух операторов присваивания?
Решение. Сначала переменной X присваивается значение 2. Затем интерпретатор обращается к правой части второго оператора присваивания, находит в памяти значение X. Оно равно 2. Прибавляет к нему 1. Получается 3. Пересылает получившийся результат в правую часть, в ту же самую переменную X. Старое значение ее, равное 2, стирается, записывается новое — 3.
Ответ. После выполнения двух операторов присваивания значение переменной X будет равно 3.
Теперь упражнения. Если следующие операторы Бейсика написаны правильно, то напишите слово "верно". Если нет, то укажите на ошибку. Все операторы рассматривайте по отдельности, т. к. они не являются частью общей программы.
21. 3+6=z
22. w=5+8
23. 5+8
24. s+r=76
25. v=(x+y+z)/3
26. F+F-5
27. H=H*2
28. x=x*s
29. d=e=i \
30. A+B=C-D
31. Записать операторы, которые переменной S присваивают среднее арифметическое чисел А, В и С.
32. Записать операторы, которые переменной S присваивают расстояние между точками с координатами XI, Y1 и Х2, Y2.
33. Записать операторы, которые переменной S присваивают длину гипотенузы С по катетам А и В.
34. Записать операторы, которые переменной S присваивают площадь треугольника со сторонами X, Y, Z.
35. Записать оператор присваивания, который меняет знак у значения переменной R.
36. Чему будут равны значения переменных X и Y после выполнения операторов?
х=3
У=6
x=y
У=Х
37. Поменять местами значения переменных X и Y.
38. Присвоить переменной W сумму цифр трехзначного числа К.
39. Присвоить переменной S значение длины светового года в километрах. Световой год — расстояние, которое свет проходит за астрономический год, т. е. 365 суток. Скорость света принять равной 300 000 км/сек.
40. Присвоить переменной V значение объема кирпича с размерами А — длина, В — ширина, С — высота.
41. Записать в форме оператора присваивания формулу перевода долларов США в рубли (курс по состоянию на июль 2000 г. — 28 руб. за $1).
Синтаксис оператора присваивания
Синтаксис оператора присваиванияПроизносится оператор присваивания следующим образом: "Присвоить Зет значение Икс минус три Игрек квадрат в скобках плюс семь" (Рисунок 1.3). Ни в коем случае нельзя говорить: "Зет равно" и далее по тексту.
Сохранение и открытие файлов в Бейсике
Сохранение и открытие файлов в БейсикеНаписав программу и желая ее сохранить на диске, выберите в меню Файл команду Сохранить или Сохранить как. Откроется диалоговое окно, в котором вы должны выбрать диск и каталог для сохранения, дать имя файлу и нажать кнопку ОК. После этого в заголовке окна редактирования появится имя, назначенное файлу.
Стандартные функции Бейсика
Стандартные функции БейсикаПока мы не забыли элементарную арифметику в Бейсике и вывод результатов (надеюсь, у вас это получается, причем в законченной, красивой форме с подсказками), необходимо ознакомиться со стандартными функциями языка Бейсик, чтобы в полной мере ощутить его вычислительные способности.
Бейсик позволяет работать со стандартными алгебраическими функциями, перечисленными в табл. 1.1.
Стандартные алгебраические функции
Таблица 1.1. Стандартные алгебраические функции| Функция | Описание | Пример | Результат |
| ABS | Возвращает абсолютную величину (модуль) аргумента | ? ABS(-2.56) | 2,56 |
| SQR | Возвращает квадратный корень из аргумента | ? SQR (9) | 3 |
| SIN | Возвращает значение синуса аргумента (аргумент указывается в радианах) | ? SIN(3) | 0,14112 |
| COS | . Возвращает значение косинуса аргумента (аргумент указывается в радианах) | ? COS(3) | 0,98992599 |
| TAN | Возвращает значение тангенса аргумента (аргумент указывается в радианах) | ? TAN(3) | -0,1425465 |
| EXP | Находит значение показательной функции ех;, где х — аргумент, а е — основание '.' натурального логарифма, равное 2,718... | ? EXP(l) | 2,718282 |
| LOG | Возвращает логарифм по основанию е | ? LOGO) | 1,09861229 |
| INT | Возвращает целую часть аргумента (от англ. INTeger — целый) | ? INT(30,l) | 30 |
| SGN | "Возвращает 1, если аргумент больше нуля; 0, если аргумент равен нулю;-1,если аргумент меньше нуля (от англ. SiGN — знак) |
? SGN (3) ? SGN(O) ? SGN(-3) |
1 0 -1 |
Вводим данные
Вводим данныеЧем хорош Бейсик? Тем, что позволяет писать программы, весьма дружественно настроенные к пользователю, запрашивающие у него свойственные только ему параметры и решающие поставленную задачу для вполне конкретных данных вполне конкретного человека или любого другого объекта.
По негласным законам программирования хорошая программа не должна зависеть от исходной информации и обязана решать поставленную задачу для произвольных данных. Например, если это задача о расчете среднего роста учеников вашего класса, то программа должна быть написана таким образом, чтобы при введении данных о росте всех учеников результатом был бы средний рост вашего класса, а при введении данных о росте только мальчиков — средний рост мальчиков.
Это позволяет делать оператор input.
Выводим данные в заданном месте экрана
Выводим данные в заданном месте экранаЭкран компьютера в текстовом режиме представляет собой условную сетку из столбцов и строк. В стандартном режиме таких столбцов 80 (т. е. в строке может разместиться не более 80 символов), а строк 25.
В Бейсике есть оператор, который позволяет управлять выводом данных на экран, что существенно повышает восприятие программ пользователем. Текст или результаты вычислений всегда выводятся на экран начиная с той позиции, в которой на момент вывода находится курсор. Изменить эту позицию поможет оператор locate.
Правильно записывается он так:
LOCATE Y,X
где х — номер столбца экрана, a y — номер строки (0<х<80 и 0<у<25).
В операторе locate используются две величины, которые мы будем называть операндами. В этом операторе они должны быть целыми.
Например, команды
CLS:LOCATE 13,40:?"S" .
позволяют последовательно:
64. Наберите и запустите программу, которая выведет в центре чистого экрана ваши имя и фамилию. Обеспечьте симметричное расположение надписи относительно сторон экрана.
65. Укажите последовательные положения курсора. Предскажите, как будет расположен текст на экране после исполнения следующих маленьких программ:
67. Напишите программу, которая вычислит и напечатает в центре чистого экрана значение выражения: 23+33+43+5J.
Над ним в качестве заголовка напечатайте надпись "Сумма кубов".
68. В центре чистого экрана выведите слово "СЕРЕДИНА", окруженное рамкой из звездочек, как показано ниже:
Выводим результаты
Выводим результатыПока мы вводили в компьютер исходные данные, используя оператор присваивания. Другие способы ввода будут рассмотрены в одной из следующих глав.
Сейчас же хочется рассмотреть более важную на первых порах составляющую Бейсика — вывод полученных результатов на экран монитора, а также вывод всякого рода текстовых сообщений. То есть мы знакомимся с могущественным оператором print.
Этот оператор столь многообразен в своих применениях, что мы позволим себе посвятить ему несколько страниц, чтобы читатель увидел и понял все его возможности и особенности.
Первая возможность оператора print заключается в том, что он предписывает компьютеру вычислить арифметическое или алгебраическое выражение и вывести результат на экран. Таким образом, наши первые программы на Бейсике будут состоять всего из одного-двух операторов. Например:
PRINT 2*2
После запуска такой мощной программы компьютер напряжется, подумает и высветит на экране ответ — 4. После оператора print вы можете писать с целью получения результатов все те (или другие) выражения, с которыми мы будем упражняться в следующих разделах книги.
Например:
PRINT(3+4)/(8-6)
В данном случае ответом будет 3,5.
Замечание
Возможны ошибки при использовании оператора print для вычисления арифметических или алгебраических выражений. Если при наборе допущена неточность в написании операторов языка Бейсик, появится сообщение "Синтаксическая ошибка".
Примеры распространенных ошибок:
Замечание
Сообщение об ошибке "Деление на ноль" последует если при,вычислении выражения с использованием операции деления ружилось деление на ноль.
Например, в знаменателе получается ноль:
PRINT(4+8) /(3*2-6).
Замечание
Еще одно сообщение вы можете увидеть при работе с вычислениями. Переполнение последует, если в результате вычислений получается число, не размещающееся в памяти компьютера (довольно часто это бывает при работе с возведением в степень).
Например:
PRINT 10^100
Теперь, прежде, чем мы перейдем к упражнениям с оператором print, хотелось бы облегчить ваш труд по набору. Дело в том, что вместо пяти символов слова print, вы можете ставить просто знак ?. Интерпретатор Бейсика чудесным образом после запуска программы сам заменит все знаки вопроса на оператор print, т. е. вместо
PRINT 2*2
можно смело писать
? 2*2
И второе, если ваше выражение настолько длинно, что не помещается в экранной строке, то позвольте компьютеру самому перенести часть выражения на следующую строку. Ни в коем случае не делайте этого при помощи клавиши
Вспомнив, что корень квадратный (как, впрочем, и любой другой степени) из числа можно представить в виде возведения в степень, вычислите и с помощью оператора print выведите на экран результаты следующих выражений.
42. Предскажите, какой результат будет получен при вычислении значения выражения 4л1/2. Проверьте свое предположение на компьютере.
43.

44.

45.

46.

47.

48.

Потренировались в вычислении арифметических выражений? Поехали дальше.
Оператор print позволяет, как мы уже говорили, не только вычислять арифметические выражения, но и выводить на экран надписи, что предоставляет программисту оформлять тот самый дружественный интерфейс. Ведь если после запуска программы я вижу на экране число, то я не всегда могу понять, к чему оно относится, результат ли это вычислений, или количество лет, оставшихся мне в жизни. Поэтому, чтобы получить законченный программный продукт, мы будем использовать вторую уникальную возможность оператора print.
Итак, если мы хотим вывести на экран сообщение, то необходимо прежде всего дать компьютеру команду print (или знак вопроса, что то же самое), после которой указать сообщение, взятое в кавычки.
Запуск программы на выполнение
Запуск программы на выполнениеКак же запустить программу? Когда вы написали программу и хотите посмотреть, а что, собственно, из этого получилось, то надо нажать клавишу
Основы есть? Если возникают вопросы, то, во-первых, при выборе тех или иных пунктов меню внизу появляется краткая информация о нем на русском языке, а по нажатии клавиши
Запуск русского Бейсика и начало работы
Запуск русского Бейсика и начало работыСуществует три основных варианта.
Basic вводный курс
"600 Секунд"
Рисунок 1.43. "600 секунд"
177. Видоизмените (весьма, надо сказать незначительно, легким движением руки) предыдущую программу, чтобы она заполняла экран сотней цветных прямоугольников случайных размеров (Рисунок 1.44). Постарайтесь, чтобы на черном фоне не получались черные прямоугольники.
178. Теперь настал черед заполнить экран полусотней окружностей. Закраска пусть будет разноцветная, а контур окружностей только белый (Рисунок 1.45).
179. Давайте устроим в центре экрана маленький взрыв. Он будет изображен сотней отрезков разноцветных прямых, сходящихся в точке Х=320, Y=175. Длина их пусть лежит случайным образом в пределах от 50 до 100 экранных точек (Рисунок 1.46).
Алгоритмы
АлгоритмыВсе, что бы мы ни делали, будь то на компьютере, или в жизни, чаще всего преследует какую-либо цель. И не всегда эта цель достигается. Но если мы как следует сформулируем для себя же лаемый результат, потом продумаем четкий план его достижения, то, по крайней мере, на компьютере цель будет достигнута (в жизни, к сожалению, не все так однозначно).
Так вот, четкая, ясная и однозначная последовательность действий, приводящая к достижению результата, называется алгоритмом.
Примеры алгоритмов из жизни — это и правила перехода улицы, рецепт пирога, инструкция по изготовлению ядерной бомбы в домашних условиях и т. д.
Сразу попробуйте подумать и ответить, что из перечисленного ниже является алгоритмом, а что нет
Безусловный переход
Безусловный переходБезусловный переход оператором goto предписывает программе свернуть с линейного пути и, беспрекословно повинуясь, перейти к метке, расположенной в любом месте программы.
8 качестве метки используются натуральные числа с двоеточием после них. Метка указывается только в начале строки (т. е. если в строке программы несколько операторов, то нельзя ставить метку, например, перед вторым). Приведем пример программы, рисующей на экране три символа звездочки по диагонали:
CLS
?"?*" ?"??*"
Символ ? в данном случае означает пробел.
Добавим теперь метку 1 рядом со второй строкой и оператор goto в конце программы. Получаем:
CLS
1: ?"*"
?"?*"
9 "77* "
GOTO 1
Казалось бы, изменения незначительные, но запустите программу и посмотрите что происходит! Вы в панике? Вы пытаетесь прекратить действие программы, но ничего не получается? Программа зациклилась! Что делать? Спокойно нажмите клавишу
Программа очищает экран, затем рисует первую звездочку, под ней с отступом в один пробел — вторую, потом ниже третью, а вот затем получает команду goto 1. Это приказ, которого невозможно ослушаться. Программа ищет метку, находит ее у команды рисования первой звездочки и начинает снова последовательно выполнять команды рисования — первую, вторую, третью и — снова приказ перехода, и так — до бесконечности (вернее, до прерывания программы). А поскольку оператор print, не снабженный точкой с запятой, после выполнения всегда переводит курсор на следующую строку, то и получается эффект движения.
А теперь поупражняйтесь.
110. Попробуйте спрогнозировать, что произойдет, если метку 1 в программе рисования звездочек указать в первой строке перед оператором cls? А что, если в четвертой строке? Или (кощунственная мысль!) перед самим оператором goto? Проверьте свои предположения на практике.
111. Напишите программу, которая заставит бежать по экрану следующий узор:
112. Если вы обратили внимание на текст предыдущей программы, то должны были заметить, что узор легко прослеживается. Воспользовавшись этим, напишите программу, которая заставит бежать по экрану слово "РОК", а потом, если не лень, то и свое имя. Буквы этих слов надо изобразить символами клавиатуры (какими вам больше нравится).
113. Посмотрите на текст следующей программы:
х=о
1: Х=Х+1 ? X
GOTO 1
Как вы думаете, при каком значении х программа закончит свою работу? Если у вас достаточно быстродействующий компьютер, можете рискнуть проверить свое предположение на практике. Да, впрочем, рискните и на медленном, ведь всегда можно прервать программу. Правда, в этом случае вы так и не узнаете тайны, какое самое большое целое число компьютер может вывести на экран.
Строго говоря, серьезное программирование не любит оператор goto. Считается, что он засоряет и путает программу. Вызывает зацикливание и зависание компьютера. Рекомендуют обходиться без него. А мне он все равно нравится. Но это мое личное даже не мнение, а просто чувство. При написании серьезных программ я тоже стараюсь обходиться без goto.
Буква F, католический костел, яхта, знаки "Не курить" и "Любовь", мороженое
Рисунок 1.28. Буква F, католический костел, яхта, знаки "Не курить" и "Любовь", мороженое
106. Так как программированием чаще занимаются представители сильного пола, а среди них, как известно, бывает довольно много любителей футбола, то предлагаю изобразить эмблему своей любимой команды. У меня это, конечно же, "Зенит"! Вот, кстати, как выглядит их эмблема (Рисунок 1.29). . Сложно? Конечно, да! Но ведь ради любимой команды можно и постараться!
107. В качестве самостоятельного задания придумайте себе сами эмблему и нарисуй ее.
Буратино
Рисунок 1.42. Буратино
154. Когда мы изучали операторы data и read, to мы говорили, что используем их при изучении оператора цикла. Этот час пробил. Задав в операторе data координаты всех точек концов отрезков, из которых состоит Рисунок 1.42, напишите программу, рисующую Буратино при помощи оператора цикла.
Совет
При рисовании непрерывной ломаной линии применяется сокращенная форма оператора line, а именно: line -(х, Y), с. То есть линия будет рисоваться от последней графической точки на экране до точки с координатами X, у. Поэтому при выполнении предыдущего задания рекомендуется поставить первую точку оператором pset, а затем в цикле считывать поочередно координаты следующих точек и рисовать отрезки при помощи сокращенной формы оператора line.
CD-MAN, глядящий на запад
Рисунок 1.22. CD-MAN, глядящий на запад
Цепочка соприкасающихся окружностей
Рисунок 1.63. Цепочка соприкасающихся окружностей
217. Создайте программу вычисления среднего роста десяти человек, данные о которых занесены в оператор data.
218. Напишите программу вычисления среднего балла при поступлении в институт по результатам четырех экзаменов, которые вводятся с клавиатуры.
219. С помощью Бейсика вычислите среднее геометрическое трех произвольных чисел. Среднее геометрическое есть корень степени N из произведения N чисел.
Циклический алгоритм
Циклический алгоритмВ тех случаях, когда нам необходимо выполнить одинаковые действия, в которых изменяется только какая-либо величина (так называемый параметр), то мы применяем операторы цикла. Это дает мощный толчок программированию, позволяя выполнять очень сложные алгоритмы.
Циклы с несколькими зависимыми параметрами
Циклы с несколькими зависимыми параметрамиБывает, что при попытке выполнить задание с помощью оператора цикла выясняется, что изменяется не одна, а две или три величины. В том случае, если вы можете установить между ними зависимости, следует использовать следующие правила:
Два пересекающихся эллипса
Рисунок 1.13. Два пересекающихся эллипса

Елочка
Рисунок 1.31. Елочка
109. Если вам удалось предыдущее задание, то попробуйте вырастить на экране еловый бор из трех одинаковых елочек,
пририсовать к ним траву, солнце, небо, облака — в общем, все, что подскажет вам фантазия.
Фантастический глаз
Рисунок 1.38. Фантастический глаз
Функции ASC и CHRS
Функции ASC и CHRSФункция asc определит нам код ASCII для первого символа этой строковой переменной и имеет следующую форму записи:
ASC(строковая_переменная)
Например:
N=ASC("F")
? " Код заглавной буквы F —"; N
В результате получим:
Код заглавной буквы F — 70
Еще пример.
Х$="YAHOO"
N=ASC(X$)
?N
В результате получим код первого символа, входящего в слово "YAHOO", т. е. "Y", который равен 89.
Замечание
Следует помнить, что коды заглавных и строчных букв — разные.
Кроме того, если мы напрямую указываем в функции asc символ или текст, то он берется в кавычки (первый пример), а если это строковая переменная, то без кавычек (второй пример).
Функция chr$ определит нам символ, код которого указан в скобках. Форма записи функции:
CHRS(код)
Например:
CLS
1: INPUT "Введите любой код от 33 до 128"; N
IF N < 33 OR N >=128 THEN ? "Обратите внимание на числовые
границы для кода": GOTO 1
? "Символ с кодом "; N; "- это"; CHR$(N)
Обратите внимание на оформление программы. Сначала выполняется очистка экрана. Затем — запрос кода. Если он введен не в требуемых пределах, то программа возвращает человека к запросу — простейший, но очень полезный способ помочь пользователю.
221. Опробуйте представленную выше программу и узнайте, что за символы скрываются под кодами 33, 66, 99, 100, 128.
222. Примените функции asc и chr$ к примеру простейшей шифровки информации, когда символы вводятся побуквенно, а программа определяет их код, добавляет к ним 1 и выводит на экран вместо введенного символа символ с новым получившимся кодом. Слово для тестовой проверки такой программы — "CAT", после его побуквенного введения должно получиться "DBU".
223. Напишите программу-дешифратор для предыдущего задания. Тестовая проверка: из слова "DBU" должно получиться слово "CAT".
Эти программы грамотно работают для первых стандартизированных 128 кодов. Чтобы правильно работать, например, с русским текстом, надо знать коды строчных и прописных букв кириллицы, которые скрываются в интервале от 129 до 255. Поэтому еще одно задание.
224. Напишите программу, выводящую на экран символы, скрывающиеся за кодами 129—255. Распечатайте или выпишите коды строчных и прописных букв кириллицы.
Но, всякий раз вводить текст побуквенно — большая морока. Нельзя ли как-нибудь в Бейсике обрабатывать слова и строки? Конечно, можно. Для этого существуют специальные функции.
Функции LEFTS, RIGHTS и MID$
Функции LEFTS, RIGHTS и MID$Для получения фрагмента строки (или значения строковой переменной) применяются специальные функции.
Функция left$ выделяет из введенной строковой переменной n символов слева:
LEFT$(строковая_переменная, N)
Рассмотрим пример.
CLS
F$="ГАЗОНОКОСИЛЬВДК"
L$=LEFT$(F$, 5)
? L$
На экране появится слово "ГАЗОН", т. е. первые пять символов слева исходной строковой переменной.
Функция right$ вырезает из введенной строковой переменной N символов справа:
RIGHTS(строковая_переменная, N)
Например:
CLS
F$='TA30H0K0CIOTbII]HK" R$=RIGHT$(F$, 9)
? R$
На экране появится слово "КОСИЛЫЦИК", т. е. первые девять символов справа исходной строковой переменной.
Наконец, функция mid$ извлекает N2 символов, начиная с ni исходной строковой переменной:
MID$(строковая_переменная, N1, N2)
Например,
CLS
F$="ГА30Н0К0СИЛЫЦИК" M$=MID$(F$, 7, 4) ? М$
На экране появится слово "КОСИ", т. е. четыре символа, начиная с седьмого исходной строковой переменной.
Используя эти функции для начала можно с их помощью поиграть в игру "Наборщик", когда из букв, составляющих какое-либо слово, нужно составить другие слова. Для этого предназначена функция конкатенации или, по-простому, слияния, которая записывается просто знаком +. Например:
CLS
F$="ГАЗОНОКОСИЛЬЩИК"
W1$=MID$(F$, 4, 2)+RIGHT$(F$, 7)
W2$=MID$(F$, 4, 2)+LEFT$(F$, 2)
W3$=MID$(F$, 9, 1)+MID$(F$, 7, 2)+MID$(F$, 11, 2) +MID$ (F$, 7,2)
? Wl$
? W2$
? W3$
Выполните упражнения.
226. Определите, какие слова получатся в результате выполнения приведенной выше программы?
227. Напишите программу, которая выдаст на экран пять слов максимальной длины из слова "ЭЛЕКТРИЧЕСТВО". Побеждает тот, у кого сумма букв во всех словах наибольшая.
В качестве очередного примера приведем задачу подсчета слов во введенном тексте. Как известно, для компьютера словом является последовательность символов, заключенная в пробелы с двух сторон. Подчеркиваю, это не обязательно слово, в привычном для нас понимании, а любой набор символов, например, 45ро9) или ВАР56+УР47. Поэтому, в простейшем случае, подсчет количества слов во введенном тексте сводится к подсчету количества пробелов и добавлении к полученному значению единицы. (Почему так? Очень просто: слов два, а пробел между ними один; слов три — а пробелов два и т. д.) Получаем программу.
CLS
INPUT "Введите текст телеграммы"; W$
N=LEN(W$) : K=0
FOR 1=1 ТО N
P$=MID$(W$, I, 1)
IF P$=" " THEN K=K+1 NEXT I ? "В вашей телеграмме — "; K+l; "слов"
Программа работает очень просто. Она определяет длину текста в символах и заносит это число в переменную N. Затем устанавливает счетчику пробелов к нулевое значение. После чего, в цикле вырезает из текста последовательно по одному символу и проверяет, а не является ли он пробелом. Если это так, то увеличивает счетчик пробелов к на .единицу, а если нет — берет следующий символ. По завершении цикла в переменной к хранится количество пробелов в тексте, и мы выводим ответ о количестве слов на экран, добавляя к к еще единичку.
228. Используя пример с подсчетом слов в телеграмме, напишите программу, имитирующую отделение связи с очень хорошим обслуживанием. Программа должна выяснять имя клиента и в дальнейшем обращаться к нему только по имени. Запрашивается также регион, куда посылается телеграмма. Их три — Россия (коэффициент 1), страны СНГ (стоимость одного слова умножается на 2) и дальнее зарубежье (стоимость одного слова умножается на 5). По России стоимость одного слова составляет 1 руб. 50 коп. (причем неважно, какой длины слово). Затем у клиента запрашивается текст телеграммы и денежная сумма, определяется количество слов, стоимость телеграммы. Если денег ровно столько, сколько надо, его благодарят и прощаются. Если больше, чем надо, то ему предлагают сдачу и прощаются. Если — меньше, то просят добавить необходимую сумму, а затем, после расчета, с клиентом прощаются. А для пущей красо-
ты я обычно прошу нарисовать окошко телеграфа, в прорезях которого и происходит диалог компьютера с пользователем (Рисунок 1.65).
Функция INKEY$
Функция INKEY$Вернемся еще раз к организации пауз и задержек в вашей программе. Мы уже делали это с помощью пустого оператора цикла, с помощью оператора sleep. Есть еще одна полезная функция inkey$, которая ожидает нажатия определенной клавиши, анализирует поступающую информацию об уже нажатых клавишах, и, в зависимости от результатов анализа, программа следует по тому или иному пути. Например:
CLS
? "Нажмите любую клавишу для продолжения..."
WHILE INKEY$=""
WEND
? "Продолжение..."
Можно задать и определенную клавишу для продолжения выполнения программы:
CLS
? "Нажмите клавишу ESC для продолжения..."
WHILE INKEY$OCHR$ (27)
WEND
Замечание
Функция inkey$ работает только вместе с условным оператором.
Функция INPUTS
Функция INPUTSЭта функция ожидает ввода N символов, которые и будут обрабатываться программой сразу после их набора на клавиатуре, не дожидаясь нажатия клавиши
Например:
CLS
N$=INPUT$ (2)
IF Ы$="да" THEN ?N$ ELSE ?"нет"
В данном случае программа после ввода с клавиатуры последовательности символов, анализирует ее, выделяя только два первых символа, и действует в зависимости от проверяемого условия.
Функция LEN
Функция LENСледующая функция — len. Она определяет длину введенной или существующей в переменной строковой переменной в символах. Синтаксис:
LEN(строковая_переменная)
Например,
CLS
INPUT "Введите Вашу фамилию"; F$
N=LEN(F$)
? "В вашей фамилии "; N; "букв"
Представленная программа выясняет количество букв во введенной пользователем фамилии. Причем, обратите внимание, что функция len учитывает не только буквы, но и символы, т. е.
она распознает и пробелы, и знаки препинания, и цифры, содержащиеся во введенном тексте. Например:
CLS
INPUT "Введите Ваш адрес"; F$
N=LEN(F$)
? "В вашем адресе "; N; "символов"
225. Определите с помощью предыдущего примера, сколько символов будет в следующем адресе:
197110, Россия, Санкт-Петербург, Чкаловский пр., 78-33
Функция определения вхождения подстроки
Функция определения вхождения подстрокиДопустим, мы хотим найти в тексте какое-либо слово. Нам на помощь приходит функция instr, имеющая следующий синтаксис:
INSTR(N, F$, R$)
где n — позиция, с которой вы хотите начинать поиск (необязательный параметр), f$ — строковая переменная, в которой будет производиться поиск, r$ — подстрока, поиск которой осуществляется. В случае отсутствия этой позиции поиск начнется с первого символа строковой переменной. Функция instr укажет нам номер позиции, с которой начинается вхождение искомой подстроки, или 0 в следующих случаях:
П подстрока не найдена;
? значение N больше длины исходной строковой переменной;
? длина строковой переменной нулевая.
Если подстрока пустая, то результатом будет n, а при его отсутствии — 1. Поиск прекращается с первым нахождением подстроки. Например:
CLS
Р$="Свиноводство, овцеводство, пчеловодство"
Р$="чело"
N=INSTR (F$, R$)
IF N о О THEN ? "Слово 'чело' в исходной строке есть и начинается с"; N; "позиции"
Результатом выполнения программы будет фраза:
Слово 'чело' в исходной строке есть и начинается с 29 позиции
235. Заменить в исходном тексте "photo, graph, philophon, cophe" все сочетания "ph" на символ "Г.
Алгоритмы, графика, символы и строки
Глава 2. Алгоритмы, графика, символы и строки| Содержание |
Горизонтальная линия из точек
Рисунок 1.35. Горизонтальная линия из точек
138. Заполните экран горизонтальными линиями (через 10), а затем, с помощью еще одного оператора цикла, вертикаль ными линиями другого цвета (тоже через 10). Должна получиться решетка, как на Рисунок 1.36.
Графические примитивы
Графические примитивыНу что ж, начнем с графических примитивов, т. е. элементарных объектов, на которые можно разбить любое сложное изображение.
График функции синуса
Рисунок 1.47. График функции синуса
Значение X изменяется от 0 до 640, давая возможность строить график на всю ширину экрана. Достаточно сложно выражение для Y. Это связано с переносом начала координат в центр экрана (отсюда числа 175 и 320). А вот число 30 в данном случае несколько произвольно — это коэффициент растяжения. Попробуйте его поменять сначала на 10, а потом на 50 (только менять всегда надо в двух местах) и посмотрите на возникающие отличия. На мой взгляд, коэффициент 30 наиболее оптимален.
Построение иного графика сводится к замене определения функции на другую.
Давайте поупражняемся. Напишите программы построения графиков перечисленных ниже функций.
180. Y=COS (X) .
181. Y=ABS (X) .
182. Y=INT(X) .
183. у=1/(1+х^2).
184. Y=X^2.
185. Y=2*SIN(X/2)+0.5*COS(2*X).
186. Y=TAN(X).
Графики представляют из себя семейства точек, между которыми могут быть значительные разрывы (как, например, при построении графика тангенса). Чтобы избежать этого, уплотнкть график, можно в заголовке цикла установить шаг изменения по X меньше 1. Попробуйте.
Теперь попытаемся построить график функции y=i/x (кажется, это называется гиперболой). Если вы будете рисовать его как т
описано выше, ничем не дополняя, то, возникнет ошибка, о которой мы уже говорили — "Деление на ноль". Придется в очередной раз вспомнить математику и область допустимых значений. В данном случае, X не может быть равен 0, но поскольку начало координат у нас искусственно перенесено в центр экрана, то для графика X будет обращаться в 0 при координате экрана, равной 320. Поэтому программа будет выглядеть так:
SCREEN 9
LINE {0, 175)-(640, 175), 15
LINE (320, 0)-(320, 350), 15
DEF FNY(X)=1/X
FOR X=0 TO 640
IF X=320 THEN X=X+1 Y=175-30*FNY((X - 320)/30) PSET(X, Y), 15
NEXT X
А график должен выглядеть так (Рисунок 1.48).
График гиперболы
Рисунок 1.48. График гиперболы
Постройте теперь графики следующих функций.
187. y=1i/(x+d.
188. Y=SQR(X).
189. Y=X/(X^2-1).
Сейчас задания посложнее, но и интереснее. Изобразите на экране поверхность, образованную вращением вокруг оси X графиков представленных ниже функций.
190. у=1/(1+х^2).
191. Y=1/X.
192. Нарисуйте поверхность, образованную вращением вокруг оси Y, графика функции у = х2 .
Совет
Попробуйте строить график не точками, а эллипсами, радиус которых... Вот именно!
Графика в Бейсике
Графика в БейсикеИногда при изучении этой темы приходится сталкиваться с непониманием учащихся. "А зачем так сложно, если в любом графическом редакторе можно сделать то же самое?" Взгляд автора здесь таков. Да, в графическом редакторе можно нарисовать практически что угодно. Но, зная приемы программирования, создаются быстро такие элементы, на которые в графическом редакторе уйдет очень много времени и не будет возможности многократного повторения и внесения быстрых изменений в рисунок.
Прежде всего, необходимо сказать несколько слов о включении графических режимов. При входе в оболочку Бейсика по умолчанию включается текстовый режим, в котором можно производить вычисления и выводить результаты на экран. Но если мы хотим пользоваться графическими возможностями языка, то должны объяснить это компьютеру посредством включения графического режима командой screen 9. Таких режимов несколько, но автор рекомендует пользоваться девятым режимом, потому что он обладает наибольшей разрешающей способностью и позволяет получать качественные графические объекты. После включения графического режима мы можем давать компьютеру команды рисования графических примитивов.
Замечание
Графический режим включается только один раз.
В режиме screen 9 экран представляет собой координатную сетку с началом в левом верхнем углу, вправо от которого увеличивается координата X, а вниз — координата Y. Максимальное значение X на экране 640, a Y — 350 (Рисунок 1.4).
Храм
Рисунок 1.27. Храм
Эллипс, вытянутый по горизонтали
Рисунок 1.11. Эллипс, вытянутый по горизонтали
Эллипс, вытянутый по вертикали
Рисунок 1.12. Эллипс, вытянутый по вертикали
Очевидно, что если коэффициент сжатия равен 1, то это будет уже никакой не эллипс, а просто окружность.
Оператор рисования эллипса записывается почти так же, как и для окружности:
CIRCLE (X, Y) , R, С, , , К
где х, y — координаты центра эллипса, r — радиус той окружности, из которой этот эллипс получился, с — цвет, к — значение коэффициента сжатия.
Например, после выполнения оператора
CIRCLE (320, 175), 50, 2,,,.5
в центре экрана появится эллипс зеленого цвета, сжатый сверху и снизу, у которого Ry в два раза меньше, чем Rx.
Если же добавить еще один оператор
CIRCLE (320, 175), 50, 2,,,2
то сверху дорисуется дополнительный один эллипс, который будет сжат уже по горизонтали, и у него уже Ry будет в два раза больше, чем Rx. Вместе они должны составить следующую картинку (Рисунок 1.13)
Ну, а теперь продолжим наши упражнения.
93. Напишите программу, которая изобразит квадрат и вписанную в него окружность.
Замечание
К сожалению, иногда размеры точек по осям абсцисс и ординат не совпадают, вследствие чего может наблюдаться асимметрия в изображениях (при полной правильности всех ваших расчетов). В таких случаях приходится подгонять детали рисунка вручную.
94. Создайте программу, с помощью которой можно нарисовать мишень — пять концентрических (т. е. с одним центром) окружностей, вложенных друг в друга, и перекрестие двух отрезков прямых. Можно усложнить изображение, добавив попавшую в мишень стрелу (Рисунок 1.14).
95. Напишите программу, которая отобразит снеговика, состоящего из пяти окружностей разного радиуса и ведерка на голове из эллипса и двух отрезков (Рисунок 1.15).
96. Напишите программу построения цилиндра, состоящего из эллипсов и двух вертикальных линий (Рисунок 1.16).
97. При помощи Бейсика нарисуйте летающую тарелку (Рисунок 1.17).
Эллипс
ЭллипсОчередной примитив — эллипс. Эллипс — это, по сути, окружность, которой слегка дали по "голове" или по "бокам", в результате чего она стала вытянутой по вертикали или горизонтали. И вместо одного радиуса, как у окружности, у эллипса стало два — по осям X и Y.
Частное от деления Ry на Rx дает нам так называемый коэффициент сжатия:
Корабль в ночи
Рисунок 1.26. Корабль в ночи
Куб и пирамида
Рисунок 1.10. Куб и пирамида
Квадрат с окружностями
Рисунок 1.23. Квадрат с окружностями
99. Создайте программу, отображающую месяц в обратную сторону, чем в примере, рассмотренном выше. Закрасьте его красным цветом.
100. С помощью Бейсика нарисуйте закрашенный квадрат (одним оператором) с вписанными в него двумя разноцветными окружностями (Рисунок 1.23).
101. Напишите программу, выводящую на экран петлю гистерезиса, которая состоит из двух отрезков прямых линий и четырех дуг, являющихся четвертями окружности (Рисунок 1.24). Попробуйте сначала нарисовать изображение в масштабе на бумаге, рассчитать все исходные данные. Закрасьте получившееся изображение. (Будьте внимательны при состыковке дуг, зачастую там образуются разрывы.)
Лестница 1
Рисунок 1.53. Лестница 1
Нарисуйте две пирамиды индейцев майя
Рисунок 1.54. Лестница 2
197. Нарисуйте две пирамиды индейцев майя — вид спереди и вид сверху (Рисунок 1.55 и 1.56).
198. Вернитесь к примеру с "рупором" из увеличивающихся окружностей и попробуйте сделать картинку, на которой подобные рупоры выходят из всех четырех углов экрана и встречаются в центре.
Летающая тарелка
Рисунок 1.17. Летающая тарелка
Ну что ж, если все получается, то пора постепенно переходить к более сложным вещам, а именно, к рисованию дуг окружностей и эллипсов. Но прежде следует вспомнить, что в Бейсике используется радианная мера углов (см. "Стандартные функции Бейсика"). Любая дуга имеет угол, от которого она начинается, и угол, где она заканчивается. Чтобы разобраться с этим, сначала я приведу оператор рисования дуг окружностей:
CIRCLE (X, Y) , R, С, а, Ь
где появившиеся две новые величины а и ь и обозначают эти углы. Правило рисования дуг на Бейсике звучит так: "дуга строится от угла а к углу b против часовой стрелки".
Для того чтобы показать это наглядно, лучше всего обратиться к тригонометрической окружности (Рисунок 1.18).
Линейный алгоритм
Линейный алгоритмДля написания программ с линейным алгоритмом мы уже готовы. Нам известно, как очистить экран и поприветствовать пользователя по имени, запросить у него необходимые данные и решить вычислительные задачи. Попробуем поупражняться. Следите все же за интерфейсом своих программ!
В следующих заданиях вам предлагается написать программы, производящие требуемые вычисления и выдающие на экран результаты.
76. Расстояние до ближайшей к Земле звезды Альфа Центавра 4,3 световых года. Скорость света принять 300 000 км/с. Скорость земного звездолета 100 км/с. За сколько лет звездолет долетит до звезды?
77. Вычислить количество прожитых составителем программы дней. Учесть, что в високосном году 366 дней.
78. Известна теория биоритмов. С момента рождения жизнь человека подчиняется трем синусоидальным биоритмам. Физический цикл — 23 дня, эмоциональный — 28 дней и интеллектуальный — 33 дня. Первая половина каждого цикла — положительная, вторая — отрицательная. При переходе от положительной к отрицательной фазе в каждом цикле есть так называемый критический день. В физическом цикле — 12-й день, в эмоциональном — 15-й день, в интеллектуальном — 17-й день. Когда два и более цикла находятся в отрицательной фазе, или в критических днях, то в такие дни повышена вероятность физических недомоганий и травм, эмоциональных срывов и ссор, замедленности интеллектуальных процессов и реакции. В Японии, например, в крупных фирмах для каждого работника составлен график и в "плохие" дни их не допускают до работы, дают отдыхать, потому что оплата больничного или брак в работе обойдутся фирме дороже. Теперь к делу. Опираясь на результат предыдущего задания и используя операцию нахождения целочисленного остатка, рассчитайте, каков для вас сегодняшний день по всем трем циклам.
79. Запросите у пользователя валютный курс на сегодняшний день, затем имеющуюся у него рублевую сумму и рассчитайте, сколько долларов он может купить.
80. Дискета 3,5" вмешает 1,44 Мбайт. Рукопись содержит 450 страниц текста. На каждой странице 60 строк по 80 символов в каждой. Поместится ли рукопись на дискету? Если нет, то сколько таких дискет потребуется?
81. Документ содержит текст из 32 строк по 60 символов в каждой и точечную черно-белую фотографию 10x15 см. Каждый квадратный сантиметр содержит 300 точек, любая точка описывается 4-мя битами. Каков общий информационный объем документа в Кбайтах?
82. Запросите у пользователя длину ребра куба. Найти площадь грани, площадь полной поверхности и объем этого куба.
83. Есть притча о шахматах, где выигравший запросил у могущественного правителя, чтобы ему был выплачен выигрыш зерном пшеницы по следующим правилам: на первую клетку шахматной доски положить одно зерно, на вторую — два зерна, на третью — четыре, на четвертую — восемь и т. д., иными словами, на каждую последующую в два раза больше зерен, чем на предыдущую. Сколько же зерен должен был бы получить выигравший? (Замечание: на каком-то этапе выполнения этого задания возможно переполнение памяти. Подумайте, как обойти это препятствие.)
84. Кстати, для оценки предыдущего результата еще одно задание. В России ежегодно собирают около 90 млн тонн зерновых. Масса одного зерна около 5 грамм. Сколько зерен в таком урожае, и сколько лет пришлось бы расплачиваться России по условиям предыдущего задания?
85. Продав квартиру, вы получили $ 22 000 и положили их в банк. Банк начисляет 1% в первый месяц, а каждый следующий — тоже 1%, но уже с получившейся суммы. Сколько денег будет в банке на вашем счету через год? (Нестабильностью нашей экономической системы пренебрегаем.)
86. Допустим, вы получили наследство $ 1 000 000 и хотите красиво пожить. После долгих раздумий вы решаете, что будете жить на $ 800 в месяц. На сколько лет вам хватит наследства?
87. Пушка стреляет под углом 30° к линии горизонта. Масса снаряда 30 кг, начальная скорость 500 м/с. Какова будет
дальность полета снаряда? (Формулу вспомните из курса физики.)
Нагляднее всего работа с линейными алгоритмами осуществляется в графике, когда мы сразу видим результат своей деятельности. Но для этого нам надо изучить несколько новых операторов.
Макроязык GML
Макроязык GMLДля расширения возможностей машинной графики Бейсика был дополнительно разработан специальный макроязык GML (Graphics Macro Language). Он позволяет строить довольно сложные изображения и быстро выводить их на экран. Каждая команда языка представляет собой латинскую букву, после которой следует один или два числовых параметра (как правило, целых числа). Команды этого языка перечислены в табл. 1.3.
Моделирование бросания игрального кубика
Моделирование бросания игрального кубикаКазалось бы надо пойти по уже проторенному пути первого примера и, раз нам надо получить цифры от 1 до 6, просто умножить rnd(N) на 6. Но, если разобраться, то обнаружится, что при этом мы будем получать числа в диапазоне от 0,0000006 до 5,9999994. Взятая целая часть даст нам числа от 0 до 5. На 6 никак не выходим. Хорошо, умножим на rnd(N) 7. Тогда получим числа от 0,0000007 до 6,9999993. Теперь получается 6, но нам ведь совсем не нужен 0. Что же делать? Очень просто — умножаем на 6 и прибавляем 1!
CLS
RANDOMIZE TIMER
X=INT(RND(1)*6)+1
? X
Так как в дальнейшем нам придется часто сталкиваться с заданиями, требующими использование случайных чисел, то необходимо потренироваться.
Напишите операторы для получения случайных целых чисел в интервалах.
171. От 1 до 10.
172. От -5 до +5.
173. От 10 до 20.
174. От 50 до 100.
175. От -35 до 65.
Применим теперь оператор случайных чисел на практике и, как всегда, для наглядности начнем с графики.
Моделирование бросания монеты
Моделирование бросания монетыНам необходимо при каждом запуске программы случайным образом получать либо число 0 ("решка"), либо 1 ("орел"). Если мы будем просто брать целую часть от полученного при помощи rnd(N) случайного числа, то всегда будем получать 0.
Попробуем умножить rnd(N) на 2. В результате имеем числа от 0,0000002 до 1,9999998. Если мы теперь будем брать целую часть, то как раз и получим 0 или 1. Программа выглядит следующим образом:
CLS
RANDOMIZE TIMER
X=INT(RND(1)*2)
IF X=0 THEN ? "У вас выпала решка" ELSE ? "У вас выпал орел"
Наращивание переменной
Наращивание переменнойО том, что такое переменная и об операторе присваивания мы уже говорили. И обращали внимание на такое абсурдное с точки зрения математики выражение
Х=Х+1
Применяется оно обычно в Бейсике для работы всевозможных счетчиков, а также для подсчета сумм или произведений рядов чисел. Например, необходимо вычислить сумму всех четных чисел от 1 до 100 включительно. Программа будет выглядеть так:
CLS S=0
'Обнуление переменной, где будет накапливаться сумма
FOR 1=2 TO 100 STEP 2
S=S+I NEXT I ? "Сумма четных чисел от 1 до 100 равна"; S Программа работает эффективно и просто. Параметром цикла являются сами четные числа, которые нам остается накапливать в переменной S. Разберем алгоритм по шагам:
Сумма четных чисел от 1 до 100 равна 2550.
Объяснять здесь вроде больше нечего Иногда лучше решать, чем говорить. Итак, вам необходимо написать программы для нахождения сумм.
209. Всех чисел, делящихся на 13 в интервале [1; 1000].
210.
Окружность
ОкружностьСледующий этап построения — окружность. Все, что нужно знать об окружности для Бейсика — это координаты ее центра и радиус. Оператор выглядит так:
CIRCLE (X, Y) , R, С
где х, y — координаты центра, r — радиус (в экранных точках),
с — цвет.
Например, оператор
CIRCLE (320, 175), 50, 2
изобразит нам зеленую окружность радиусом 50 точек в центре экрана.
Оператор цикла WHILE... WEND
Оператор цикла WHILE... WENDЭтот оператор позволяет сочетать свойства условного оператора и оператора цикла. С их помощью можно выполнять повторяющиеся действия с заранее неизвестным количеством повторений.
Работает он следующим образом. Сначала идет оператор while с условием, при котором цикл выполняется. Ключевое слово wend аналогично по своему назначению слову next, т. е. является последней строкой цикла. Всякий раз, доходя до wend, компьютер проверяет, выполняется ли условие, указанное оператором while. Если оно не выполняется, то программа переходит к исполнению операторов, следующих за wend. Если же выполняется, то цикл повторяется снова. Следующая программа, прежде чем допустить пользователя до продолжения работы, запрашивает у него пароль.
WHILE WORD$О"TERMINATOR"
INPUT "ВВЕДИТЕ ПАРОЛЬ"; WORD$ 'WEND ? "ПРАВИЛЬНО! ВЫ ДОПУЩЕНЫ К ПРОДОЛЖЕНИЮ РАБОТЫ"
Вот как эта программа будет работать после запуска:
ВВЕДИТЕ ПАРОЛЬ? MOON
ВВЕДИТЕ ПАРОЛЬ? ARNOLD
ВВЕДИТЕ ПАРОЛЬ? TERMINATOR
ПРАВИЛЬНО! ВЫ ДОПУЩЕНЫ К ПРОДОЛЖЕНИЮ РАБОТЫ
155. При помощи оператора while...wend вычислите с— наибольший общий делитель введенных с клавиатуры натуральных чисел х и y.
156. Определите, какие из представленных ниже операторов Бейсика написаны правильно, а какие нет. В случаях неправильной записи объясните допущенные ошибки. Все операторы рассматривайте по отдельности, потому что они не являются частями одной программы.
157. Программа:
INPUT W FOR R=l TO W ? "WAR"
NEXT R
IF R=W THEN GOTO 1
? "SUNDAY"
1: "PEACE"
при w=3.
158. Программа:
W=27.6
1: IF INT(W)=W THEN GOTO 2
? "ЧЕРТ ПОБЕРИ!!!"
W=W * 2 - 5.2
GOTO 1
2: ? "МИХАИЛ СВЕТЛОВ"
A=W -1
IF A <> 50 THEN 3
GOTO 1
3: END
159. Программа:
FOR H=5 TO 21 STEP 4
? H - 3
? H+3 NEXT H
160. Программа:
1: ? "НА СТАРТ! ВНИМАНИЕ!" FOR V=5 TO 1 STEP -1 ? V; "СЕКУНД"
GOTO I
? "МАРШ!"
161. Программа:
DATA 10, 100, 1000
READ А, В
? В - А
READ С
RESTORE
READ X, Y, Z
IF C=Y THEN 1
IF B=Y THEN 2
GOTO 3
1: ? "плюс"
GOTO 3
2: ? "МИНУС"
3: END
162. Программа:
X=13
Y=17
Z=2
2: IF Z >=5 THEN 1
? X, Y, Z
X=X - 1
Y=X+Y
Z=Z+1
GOTO 2
1: END
163. Программа:
FOR R=l TO 4 9 STEP 6
W=W+R*2 NEXT R ? R
164. Программа:
FOR K=7 TO 28 STEP 7
? "УРА!!!" NEXT К ? "ВПЕРЕД!!!"
165. Программа:
x=i
1: ? X
Х=Х+2
IF X <= 13 THEN 1
END
166. Программа:
FOR B=l TO 4
D=B*2
? D, В NEXT В
167. Программа:
FOR C=2 TO 11 STEP 2
? C, C"2 NEXT С ? "ВЗРЫВ!"
168. Программа:
X=13 Y=52 Z=99 FOR U=100 TO 1 STEP -2
IF U=X THEN ? U
IF U=Y THEN ? U
IF U=Z THEN ? О NEXT U
169. Программа:
WHILE S < 10
? S WEND
170. Программа:
WHILE D$ О "ИНФОРМАТИКА"
READ D$, В
? "ПРЕДМЕТ"; D$
? В WEND DATA МАТЕМАТИКА, 4, ФИЗИКА, З, ИНФОРМАТИКА, 5, ХИМИЯ, 3
Оператор DO...LOOP
Оператор DO...LOOPОператор do. . .loop чем-то похож на оператор while. . .wend, но возможности его применения несколько шире — проверяемое условие может быть использовано не только в начале оператора, но и в конце.
Поэтому возможны четыре различные формы написания оператора:
DO UNTIL условие
тело_цикла LOOP
DO WHILE условие
тело_цикла LOOP
DO
тело_цикла LOOP UNTIL условие
DO
тело цикла
LOOP WHILE условие
При указании ключевого слова while цикл будет выполняться до тех пор, пока условие будет иметь значение "истина".
Размещение условий в начале или конце цикла приводит к разным результатам: при проверке условия в конце оператора цикла, конструкции, составляющие его тело, будут исполняться хотя бы один раз, в то время как при проверке условия в начале возможен вариант, что цикл исполняться вообще не будет. Например:
к=о
? "Значение К в начале цикла равно"; К DO WHILE К < 10
К=К+1 LOOP ? "Значение К в конце цикла равно"; К
Кстати, чему же будет равно значение к в конце цикла?
220. Напишите программы — одну с оператором do ... loop while, а другую с do ... loop until, — которые бы выводили на экран расположенные по диагонали экрана круги, закрашенные цветами с 1 по 6 (Рисунок 1.64). Параметр цикла — номер цвета.
Оператор с заранее известным числом повторений
Оператор с заранее известным числом повторенийКогда мы работали с графикой, то в одном из заданий вам предлагалось построить мишень — пять концентрических окружностей. Мы это легко сделали, пять раз написав оператор построения окружности circle, изменяя в нем каждый раз радиус.
Ну а если бы таких окружностей надо было бы 100? Неужели 100 раз писать практически одно и то же? Очень нелегко, даже если пользоваться копированием строк. Неужели нельзя как-нибудь полегче? Конечно можно! Нам на помощь приходит оператор ЦИКЛа FOR. . .NEXT.
Итак, правила пользования оператором цикла for. . .next:
Записываем оператор цикла (предварительно, конечно, включив графический режим):
FOR R=20 TO 60 STEP 10
CIRCLE (320, 175), R, 14 NEXT R
Если мы также четко будем и в дальнейшем следовать этим правилам, то нам не составит труда работать с оператором цикла.
Необходимо отметить, что можно записывать оператор цикла в одну строку, это не ошибка:
FOR R=20 TO 60 STEP 10: CIRCLE (320, 175), R, 14: NEXT R
Но если в теле цикла много операторов, то такая запись будет плохо читаемой.
Как же работает оператор цикла на примере приведенной выше программы? Встретив заголовок цикла for, программа присваивает параметру начальное значение и переходит в тело цикла. Там находит команду circle, и исполняет ее, подставляя вместо параметра его начальное значение. Встретив команду next программа добавляет к предыдущему значению параметра величину шага, затем проверяет условие, не стало ли значение параметра больше конечного его значения, и, если нет, продолжает выполнение цикла. Если да, переходит к выполнению следующей за оператором цикла команды или заканчивает выполнение программы, если таковой отсутствует.
Таким образом, последнее значение параметра в нашем примере будет 70, после чего цикл закончится. (Попробуйте к программе добавить строку ? "R=",- r и посмотрите, что появилось на экране.)
Теперь следует сказать несколько слов о составной части оператора цикла — шаге изменения параметра step. Довольно часто преподаватели провокационно спрашивают, а какие значения может принимать step? Может ли он быть отрицательным? Дробным? Вот ответы на эти вопросы. Шаг может быть любым вещественным числом, за исключением нуля, иными словами, и целым, и дробным, и отрицательным. Но отрицательным он может быть только в случае, если начальное значение параметра больше конечного, т. е. когда мы идем от большего к меньшему. Например, тот же оператор цикла из примера про мишень с тем же результатом можно было бы записать и так:
FOR R=60 TO 20 STEP -10: CIRCLE (320, 175), R, 14: NEXT R
Кроме того, если шаг изменения параметра равен единице, то при написании оператора цикла его можно опускать, например:
FOR №-12 ТО 24 STEP 1
можно было бы записать просто
FOR W=12 TO 24
Но это не касается минус единицы!
Использование оператора цикла очень наглядно в графике (хотя это, как раз, не главное применение данного очень полезного инструмента). Поэтому, давайте освоим правила управления оператором цикла, выполнив несколько упражнений.
137. Напишите программу, рисующую на экране горизонтальную линию, состоящую из точек, расстояние между которыми 8 (Рисунок 1.35).
Орнамент
Рисунок 1.40. Орнамент
Правила построения орнаментов:
153. Закрепите успех, написав программу для построения греческого орнамента (Рисунок 1.41).
Отрезок и прямоугольник
Отрезок и прямоугольникСледующий примитив — отрезок прямой линии. Оператор записывается таким образом:
LINE (X1, Y1)-(X2, Y2), С
где XI, yi — координаты начала отрезка; х2, Y2 — координаты конца отрезка; с — как всегда цвет.
Например, мы хотим изобразить отрезок синего цвета на желтом экране с координатами (Рисунок 1.5).
Пешеходный переход "зебра"
Рисунок 1.37. Пешеходный переход "зебра"
139. Нарисуйте пятиконечную звезду, вписанную в окружность, как на Рисунок 1.25. Используйте для рисования и закраски операторы цикла.
140. Постройте пешеходный переход — "зебру", как на Рисунок 1.37.
141. Нарисуйте фантастический глаз, как на Рисунок 1.38.
Петля гистерезиса
Рисунок 1.24. Петля гистерезиса
Построение графиков функций
Построение графиков функцийСтроить графики в Бейсике мы будем точками, а задавать компьютеру функцию для построения оператором def fn.
Кроме того, координатная сетка экрана компьютера, как мы должны помнить, является перевернутой по отношению к привычной геометрической. Отсюда и последуют преобразования по приведению координатной сетки к нормальному виду. Я не хочу утомлять читателя длинными математическими выкладками, а призываю поверить на слово. Если же в ком-то проснется любознательность, то разобраться во всем можно самому.
Итак, оператор def fn определяет для компьютера ту функцию, график которой мы хотим построить. Работает он следующим образом:
DEF FN имя_функции{параметр_функции)=функция
Например, определим функцию у = sin x .
DEF FNY(X)=SIN(X)
Здесь y — имя функции, х — ее параметр, a sin (X) — непосредственно сама функция.
Определим функцию
Правила построения сложных изображений
Правила построения сложных изображенийПри рисовании придерживайтесь определенных правил, которые перечислены далее.
Преобразование строчных и прописных букв
Преобразование строчных и прописных буквЕсли ваш текст напечатан строчными буквами, вы хотите заменить его прописными или наоборот, не надо заново его набирать. Для этого есть две функции:
? ucase$ (строковая_переменная) — преобразует все буквы строки в прописные.
? lcase$ (строковая_переменная) — преобразует все буквы стро-ки в строчные.
К сожалению, эти функции применимы только к латинскому алфавиту.
Пример:
CLS
N$="1 have 5"
R$=" рублей"
? N$;R$
N1$=UCASE$(N$)
R1$=UCASE$(R$)
? N1$, Rl$
Результатом работы программы будет следующее:
I have 5 рублей I HAVE 5 рублей
Функции эти очень полезны, когда мы просим пользователя ввести один из возможных ответов, например "YES" или "NO", или просто "Y" или "N", а пользователь, естественно, может ввести ответ как строчными, так и прописными буквами. В таком случае, с помощью функций ucase$ или lcase$ сначала надо привести ответ к требуемому виду, а потом проверять условие. Например:
INPUT "Будете еще играть? (Y/N); N$ IF UCASE$(N$)="N" THEN ?"До свидания"
Программа "Звездное небо"
Программа "Звездное небо"Изобразим звездное небо пятьюстами белыми точками на черном фоне. Координаты каждой из точек должны быть в пределах по X от 0 до 640 и по Y от 0 до 350.
SCREEN 9 RANDOMIZE TIMER FOR N =1 TO 500
X=INT(RND(1)*641)
Y=INT(RND(1)*351)
PSET(X, Y) , 15 NEXT N
Здесь число 500 в заголовке цикла указывает на количество "звезд". Можете поэкспериментировать, изменяя этозначение.
А теперь мы хотим нарисовать разноцветные "звезды".
Добавим для этого перед pset оператор случайных чисел для цвета
C=INT(RND(1)*16)
а в самом операторе pset вместо цвета 15 укажем цвет с, и можем наслаждаться разноцветными "звездами".
Но давайте уж доведем дело до конца. Ведь при использовании оператора c=INT(RND(1) *16) у нас будет получаться и 0 — черный цвет, т. е. на черном фоне своеобразные "черные дыры". Давайте избежим и этого, заставив компьютер при получении 0 не брать его в расчет, пока не получится другой цвет:
SCREEN 9
RANDOMIZE TIMEP
FOR N =1 TO 500 X=INT(RND(1)*641) Y=INT(RND(1)*351) 1: C=INT(RND(1)*16) IF C=0 THEN 1 PSET(X, Y) , С
NEXT N
Co звездным небом разобрались. Теперь задания.
176. Когда-то на петербургском 5-м канале была скандально известная информационная программа "600 секунд" с телеведущим Александром Невзоровым. Начиналась она с заставки, где экран телевизора покрывался сеткой разноцветных отрезков прямых линий со случайными координатами концов (рис 1.43). Попробуйте воспроизвести эту заставку и покажите ее своим старшим родственникам или друзьям. Это навеет на них воспоминания.
Рамка с конвертом
Рисунок 1.9. Рамка с конвертом
Рамка рисуется двумя операторами line с bf, конверт — подумайте сами. Координаты тоже выберите сами. Только не рисуйте слишком мелкие объекты.
Разноцветные круги
Рисунок 1.64. Разноцветные круги
Разноцветные окружности
Рисунок 1.45. Разноцветные окружности
Разноцветные прямоугольники
Рисунок 1.44. Разноцветные прямоугольники
Разветвляющийся алгоритм
Разветвляющийся алгоритмНу что ж, надеюсь, что с линейными программами особых трудностей у вас не возникло. Пиши команды подряд, хотя, конечно, все сначала надо было продумать, и изображения у нас получались просто великолепные!
Однако надо двигаться вперед. А дальше у нас — разветвляющийся алгоритм. Что это такое, мы уже говорили. Например, витязь на перепутье: "Если налево пойдешь, коня потеряешь, если прямо пойдешь — смерть найдешь", ну и т. д.
А вот как он реализуется на практике в Бейсике, мы поговорим сейчас.
Ветвление в алгоритме и программе осуществляется двумя способами:
Решетка
Рисунок 1.36. Решетка
Мишень Рисунок 15. Снеговик
Рисунок 14. МишеньСнеговик Рисунок 16. Цилиндр
Рисунок 16. Цилиндр
CD-MAN
Рисунок 20. CD-MAN
Построим изображение CD-MAN (Рисунок 1.20). Радиус "глаза" и координаты его центра определим исходя из здравого смысла.
Хотя на первый взгляд кажется, что данное построение очень сложно, но на самом деле мы знаем уже достаточно инструментов, чтобы сделать это двумя изящными легкими движениями. Для начала, действительно давайте определим радиус "глаза". Диаметр его составляет примерно пятую часть радиуса "туловища", стало быть радиус — одну десятую, т. е. 5. Координаты центра примерно Х=215, Y=85. Теперь займемся углами дуги "туловища". Угол а определяется довольно легко — он равен 45°, а вот для определения угла ь надо пройти почти всю тригонометрическую окружность — первая четверть, вторая четверть — еще +90°, третья четверть — еще +90°, и, наконец, еще +45°. Итого Ь=315°. Ну что ж, все данные для построения есть. Приступим.
Rem "туловище"
CIRCLE (200, 120), 50, 1, -45*3.14/180, -315*3.14/180
CIRCLE (215, 85), 5, 1 Rem "глаз" >
Еще раз напоминаю, что в программировании главное — это предварительная подготовка всех исходных данных!
Теперь рассмотрим рисование дуг эллипсов.
Когда мы говорили о построении самих эллипсов, то в операторе было несколько странно видеть три указанных подряд запятых. Сейчас все стало понятно — это место для углов а и ь. Остальное — аналогично дугам окружности. Итак, оператор построения дуг эллипса таков:
CIRCLE (X, Y) , R, С, a, b, К
Месяц
Рисунок 21. Месяц
В качестве примера нарисуем "светит месяц, светит ясный" (Рисунок 1.21).
Внешняя граница месяца — это дуга окружности, а внутренняя — дуга эллипса. Центр у них общий (Х=500, Y=70). Коэффициент сжатия эллипса равен 2. Начало и конец дуг тоже одинаковы (а=4,71, Ь=1,57). Радиус окружности возьмем 50, а вот с радиусом эллипса придется помучиться, поскольку, как мы уже говорили, экранные точки имеют разные ширину и высоту, определяющиеся примерным соотношением 3:4. Поэтому в качестве радиуса эллипса возьмем значение 50x3/4. Тогда месяц построится следующим образом:
CIRCLE (500, 70), 50, 14, 4.71, 1.57 CIRCLE (215, 85), 50*3/4, 4.71, 1.57, 2
Rem дуга окружности Rem дуга эллипса
Закраска
Уже очень хочется попробовать свои силы? Еще немножко нужно подождать. Ведь мы хотим все делать красиво. И нам нужно изучить еще один шаг — закраску замкнутых контуров.
После того, как мы научимся закрашивать, у нас в руках будут практически все необходимые инструменты для рисования сложных объектов, разработки больших линейных алгоритмов.
Итак, оператор закраски имеет следующий синтаксис:
PAINT (X, Y) , Cl, C2
где х, y — координаты любой точки внутри закрашиваемого' контура, ci — цвет, которым закрашивается контур, С2 — цвет самого контура. Если эти цвета совпадают, то достаточно указать С1.
Правила закраски:
Если точка закраски попала вне контура, то закрасится весь экран, за исключением самого контура (иногда это бывает нужно, но подобные случаи редки).
Если точка закраски попала на контур, то ничего не закрасится.
Есть общая рекомендация из личного опыта автора, немного удлиняющая процесс отладки программы, но дающая 100%-ный правильный результат закраски. Перед закраской вместо оператора paint лучше написать оператор pset с теми же координатами, но какого-нибудь контрастного цвета, чтобы ее было хорошо видно. Запустить программу и убедиться, что все вышеназванные правила соблюдены и точка находится внутри закрашиваемого контура. После этого возвращаемся в программу, изменяем оператор pset на paint.
Рассмотрим пример закраски месяца из предыдущей программы белым цветом. После того как мы его нарисовали, у нас добавится всего одна команда:
PAINT(530, 70), 15, 14
Откуда взялось число 530 в качестве координаты X, я думаю, понятно, если посмотреть на рисунок, вспомнить координаты центра и радиус.
Ну что ж, а теперь упражнения на дуги и закраску. В них изображения уже более сложные, требующие достаточно основательной предварительной подготовки. Не забывайте о ней!
98. Напишите программу, выводящую на экран образ, аналогичный примеру CD-MAN, изменив лишь углы и координаты центра "глаза" (Рисунок 1.22).
Закрасьте "туловище" одним цветом, а "глаз" — другим.
Эмблема футбольной команды "Зенит"
Рисунок 29. Эмблема футбольной команды "Зенит"
Основные команды перемещения языка GML
Рисунок 30. Основные команды перемещения языка GML
Для приведения в действие последовательности команд языка GML необходимо использование оператора draw.
Например, команда
I DRAW "R50 D50 L50 U50"
изобразит нам квадрат, начиная от последней графической точки.
Если такой точки не было, и вы сразу начинаете строить изображение с помощью оператора draw, to по умолчанию исходной точкой считается центр экрана.
Если вы подготовите сначала какое-либо изображение в строковой переменной, то потом его можно будет многократно вызывать на экран. Для этого используется функция "х". Ее работу рассмотрим на примере.
N$="R50 D50 L50 U50"
DRAW "C14 X"+VARPTR$ (N$)
DRAW "BM500, 50 C2 X"+VARPTR$(N$)
С помощью первого оператора запоминаем последовательность команд построения квадрата в строковой переменной n$. Вторым оператором задаем цвет 14 и сообщаем компьютеру командой х, что необходимо выполнить последовательность команд n$. Это делает функция varptr$. Последним оператором перемещаемся без рисования в точку с координатами 500, 50, меняем цвет на 2 и снова выполняем последовательность команд n$.
В результате на экране в центре и в правом верхнем углу должны появиться одинаковые разноцветные квадраты со стороной 50.
Совместное использование фафических примитивов и оператора draw позволит вам рисовать очень качественные изображения на вашем экране.
108. Для того чтобы опробовать эти возможности, нарисуйте елочку (Рисунок 1.31).
Движение точки по экрану под углом 45°
Рисунок 32. Движение точки по экрану под углом 45°
SCREEN 9
Х=300: Y=175 ' начальные координаты точки
DX=1: DY=1 ' приращение координат X и Y.
' Так как мы их сделали положительными, ' координаты X и Y будут увеличиваться, ' а, следовательно, точка сначала будет двигаться 1 вправо-вниз под углом 45 градусов 1: PSET (X, Y), 14 ' вывод точки на экран PSET (X, Y), 0 ' стирание точки цветом фона IF X=0 OR X=64 0 THEN DX=-DX ' в случае достижения точкой
1 вертикальных сторон экрана, приращение по X меняется ' на противоположное, а значит точка начнет двигаться ' в обратную по X сторону IF Y=0 OR Y=350 THEN DY=-DY ' в случае достижения точкой
' горизонтальных сторон экрана, приращение по Y ' меняется на противоположное, а значит точка ' начнет двигаться в обратную по Y сторону X=X+DX: Y=Y+DY ' изменение координаты точки GOTO 1 ' переход на метку 1, где происходит
' рисование точки
Не забывайте про паузу!
130. Замените в предыдущей программе точку на закрашенную окружность. Получится подобие бильярдного стола. А еще можно сопровождать удар шарика о границу экрана звуковым сигналом веер, который нужно добавить после изменения приращения на противоположное.
131. Усложним задачу. На экране появляется прямоугольник, от которого точка тоже должна отражаться (рис 1.33).
Движение точки по экрану с препятствием
Рисунок 33. Движение точки по экрану с препятствием
Допустим, координаты углов прямоугольника следующие:
Для верхней:
IF Y=180 AND 100<Х<300 THEN DY=-DY
To есть если точка достигла горизонтали 180, а по X попала в интервал ] 100; 300[, то изменяем направление движения по Y на противоположное.
Для левой:
IF X=100 AND 180
132. Теперь вы готовы к более объемному и сложному заданию. Называться оно будет "Муха в графине". Сначала на экране вы рисуете прямоугольный графин с горлышком (Рисунок 1.34).
Затем располагаете там точку и заставляете ее двигаться внутри графина, отражаясь от его стенок (будет интересней, если вы не станете ее стирать, тогда мы сможем видеть траекторию ее полета). Меняя начальное расположение точки, можно добиться, что через какое-то время она вылетит из
графина. Пусть в этот момент на экране появится надпись "Ура! Я на свободе!", а муха продолжит полет, отражаясь от сторон экрана. Графин можно сделать закрашенным.
Муха в графине
Рисунок 34. Муха в графине
133. Если вы обратили внимание, "муха" при полете слегка пробивает стенки графина. Что нужно изменить в условиях, чтобы этого избежать? Сделайте из "мухи" шарик, и снова добейтесь того, чтобы он не портил стенки графина.
Давайте сделаем простейший графический редактор. У некоторых в детстве была, наверное, и-грушка "Волшебный экран", где можно было крутить колесики и рисовать отрезками прямых линий. Почему бы то же самое не сделать на компьютере? Для этого нам понадобится использование оператора inkey$, который ожидает нажатия любой символьной клавиши и запоминает ее значение. Например:
CLS
1:K$=INKEY$ ? К$ GOTO 1
На экране будет воспроизводиться символ той клавиши, которую вы нажмете (попробуйте поставить после print k$ точку с запятой и посмотрите, что изменилось).
Теперь, совместно используя inkey$ и условный оператор, мы можем сделать полезную прикладную программу-развлечение для младших друзей. Приведем ее фрагмент.
SCREEN 9
Х=300: Y=200: С =15
начальные координаты и цвет точки рисования.
1 Вы можете задать им свои, ' произвольные значения
1: PSET(X,Y), С
K$=INKEY$
IF K$="w' THEN Y=Y -1 ' эта строка заставляет программу
' после нажатия клавиши "w" ' уменьшить координату Y на 1, ' т. е. осуществить передвижение точки ' на одну экранную единичку вверх
Rem Здесь вы программируете другие клавиши для движения
Rem в другие стороны, а также и изменение цвета,
Rem и возможно, стирание. Все в ваших руках!
GOTO 1 ' зацикливание программы на постоянный опрос ' клавиатуры
Теперь, когда программа готова, нарисуйте сами с ее помощью какую-нибудь осмысленную картинку — домик в деревне, или звездные войны, или что хотите.
Замечание
Хорошо бы предусмотреть рисование цветом фона для перемещения точки без следа. А чтобы потом определить, где находится точка, достаточно изменить ее цвет.
Оператор выбора
Для организации меню, т. е. выбора из нескольких возможностей, применяется оператор выбора, который позволяет, в зависимости от значения переменной, делать те или иные действия.
Конструкция оператора несколько тяжеловесна, но ничего страшного в ней нет.
Она выполняет один из нескольких блоков операторов в зависимости от значения выражения.
SELECT CASE тест_выражение CASE список_выражений1
[блок_ операторов_1]
[CASE список_выражений2
[блок операторов_2]}
[CASE ELSE
[блок_операторов_n]} END SELECT
Здесь тест_выражение — любое числовое или строковое выражение; список_выражений1, список_выражений2 — ОДНО ИЛИ несколь ко выражений для сравнения с параметром тест_выражение. В выражении ключевое слово is должно стоять перед любым знаком отношения. блок_операторов_1, блок_операторов_2, блок_ операторов_n — один или несколько операторов в одной или нескольких строках.
Аргументы списка выражений могут принимать любую из следующих форм или их комбинацию и должны разделяться запятыми:
Рассмотрим пример:
CLS
INPUT "Введите уровень риска (1-5): "; RISK SELECT CASE RISK CASE IS >= 5
PRINT "Максимальный риск, шансов на возвращение
практически нет." PRINT "Пишите завещание." CASE 2 ТО 4
PRINT "Высокий риск, шансов на возвращение немного." PRINT "Проверьте снаряжение, оружие и припасы." CASE 1
PRINT "
Рисунок 4. Размеры
Рисунок 4. Размеры и координаты экрана в режиме screen 9
Греческий орнамент
Рисунок 41. Греческий орнамент
Отрезок прямой линии
Рисунок 5. Отрезок прямой линии
Программа будет выглядеть так:
screen 9
COLOR 1, 14
LINE (100, 300)-(600, 50), 1
Не секрет, что по диагонали прямоугольника можно всегда его достроить. Известно это и Бейсику. Поэтому можно одним оператором построить прямоугольник со сторонами, параллельными экрану. В этом случае оператор line имеет следующий вид:
LINE (XI, Y1)-(X2, Y2), С, В
То есть к обычному оператору отрезка добавляется буква (это именно буква, а не число!) в — от английского слова box (ящик, коробка). А координаты — это начало и конец любой из диагоналей прямоугольника. Возьмем предыдущий пример и добавим в операторе line букву в:
LINE (100, 300)-(600, 50), 1, В
В результате выполнения у нас получится уже не отрезок, а прямоугольник, причем сама диагональ видна не будет (Рисунок 1.6).
Орбиты"
Рисунок .50. "Орбиты"
194. Создайте программу, выводящую на экран "труба" — окружности одного радиуса, выходящие из левого верхнего угла экрана и идущие под углом 45° вправо вниз (Рисунок 1.51). Окружности нарисованы одним цветом, а закрашены другим.
Труба" по диагонали
Рисунок 52. "Труба" по диагонали
195. Напишите программу, аналогичную предыдущей, только окружности разместите из левого верхнего угла в правый нижний по диагонали экрана (Рисунок 1.52). Надо использовать соотношения сторон экрана.
196. С помощью Бейсика постройте две лестницы (Рисунок 1.53 и 1.54).
Пирамида: вид спереди
Рисунок 55. Пирамида: вид спереди

Пирамида: вид сверху
Рисунок 56. Пирамида: вид сверху199. Напишите программу построения "эллипсирующих окружностей" (Рисунок 1.57).
Эллипсирующие окружности"
Рисунок 57. "Эллипсирующие окружности"
Лоскутный ковер
Рисунок 58. Лоскутный ковер
201. Заполните экран светофорными кругами (Рисунок 1.59). Самые большие круги красные, средние — желтые, маленькие — зеленые.
Светофорные круги
Рисунок 59. Светофорные круги
202. Воспользовавшись предыдущим заданием, замените окружности на квадраты — получатся "светофорные" квадраты.
203. Изобразите шахматную доску.
Мы всё работаем с графикой. Это наглядно. Но не будем забывать о том слове, от которого произошел термин "компьютер" — вычислять.
204. Напишите программу, выводящую на экран таблицу умножения от 2 до 10 в следующем виде (Рисунок 1.60).
Прямоугольник со сторонами, параллельными экрану
Рисунок .6. Прямоугольник со сторонами, параллельными экрану
Таблица умножения
Рисунок 60.Электронный будильник
Рисунок 61. Электронный будильник
А теперь два интегрированных задания, где надо применить знания, приобретенные вами ранее.
207. Напишите программу "Уничтожение астероида". Экран заполняется пятьюстами звездами. Астероид изображается красным кругом белым контуром, центром в точке 470, 160
и радиусом 10. По траектории функции y = 0,5sin2x + 2cos-x/2
от правой стороны экрана движется боевой звездолет, изображаемый зеленым кругом с желтым контуром и радиусом 3. Каждый момент продвижения сопровождается проверкой
условия, не находится ли звездолет в опасной близости от астероида (опасным считается расстояние менее 50 экранных точек). Если это расстояние в некоторый момент времени стало меньше критического, то звездолет уничтожает астероид, т. е. он взрывается (см. задание 179). На экране появляется торжествующая надпись. Все радуются (в том числе и учитель).
Совет
Расстояние между двумя точками на плоскости вычисляется по формуле: корень квадратный из суммы квадратов разностей координат Х1, Х2 и Y1, Y2. Я специально не пишу эту формулу. Проверяем понимание сложных инструкций.
208. Это задание носит прикладной характер и позволяет опытным путем вычислить число п. Да, безусловно, практически все из вас знают это число с точностью по крайней мере до двух знаков. Но предлагаемый метод очень хорош. Называется он методом Монте-Карло. Монте-Карло — европейская столица игорного бизнеса, а значит там владычествует Его Величество Случай. Вот "мы и попробуем поставить его себе на службу.
Сначала забудьте, чему равно п и послушайте теорию вопроса. Представьте себе окружность радиусом R = \ , вписанную в квадрат. Из этого следует, что сторона квадрата будет 2R , а его площадь SK = (2R)2 =4R2. Площадь круга SO = kR2 . Далее берем и равномерно посыпаем квадрат песком. Затем нанимаем бригаду рабочих, которые считают, сколько песчинок всего (N1) и сколько из них попало в круг (N2). Потом составляется простая пропорция — площадь квадрата так относится к площади круга, как общее количество песчинок к количеству песчинок попавших в круг.
Отсюда сенсационный вывод — радиус окружности не имеет никакого значения, она должна быть лишь вписана в квадрат (Рисунок 1.62).
Но где ж мы найдем песок, а главное тех, кто все это будет считать? Поэтому поставим компьютерный эксперимент. Нарисуем квадрат и впишем в него окружность. Координаты опорных точек (если сами рисовали) знаем. Уравнение окружности X2 +Y2 = R2 тоже знаем. Задаем цикл до 1000, в котором случайным образом определяем координаты "песчинок" так, чтобы они лежали внутри квадрата. Тут же проверяем условие, а не попала ли "песчинка" в круг (используя уравнение окружности), и если попала, подсчитываем их количество. Кроме того, рисуем их на экране разными цветами (попавшие и не попавшие). По окончании цикла подсчитываем и выводим на экран число п. Понятно, что чем больше количество "песчинок", тем более точным будет результат. Для того чтобы знать, когда закончится эксперимент, рекомендуется выводить на экран счетчик "песчинок" (как мы делали с хронометром). Но, все-таки, экспериментировать с миллионом "песчинок" не надо — замучаетесь ждать сами, да и компьютер, хотя и железный, но все же живой.
Вычисление числа я методом Монте-Карло
Рисунок 62. Вычисление числа я методом Монте-Карло
Так надо делать!
Рисунок 7. Так надо делать!
К сожалению, опыт автора показывает, что многим из вас лень этим заниматься — отсюда пустая трата сил и времени и очень неказистые результаты.
Перейдем к упражнениям.
88. Напишите программу, изображающую на экране четыре точки разного цвета в центре желтого экрана. Точки расположите квадратом на расстоянии друг от друга 5 точек.
89. Напишите программу, выводящую ромб с диагоналями (Рисунок 1.8).
ок должен быть крупным
Рисунок ок должен быть крупным и наглядным. Это любят преподаватели!92. Создайте программу, выводящую на одном экране куб и пирамиду (Рисунок 1.10).
Рисунок сутствует, возврат гарантирован."
Рисунок сутствует, возврат гарантирован." PRINT "В Вас отсутствует дух авантюризма,это слишком скучно." END SELECT
Еще пример. По заданному номеру дня недели требуется напечатать его название:
CLS
INPUT "Введите номер дня недели"; N SELECT CASE N CASE 1
? "Понедельник" CASE 2
? "Вторник" END SELECT
Ну что ж, теория без практики суха. Задания.
134. Напишите программу, которая выводит на экран меню, содержащее список трех поэтов под номерами, затем запрашивает у пользователя номер поэта и выводит на экран какое-нибудь его четверостишие, после чего возвращается в меню. Последним пунктом меню предусмотреть выход из программы.
135. В восточных календарях принят 60-летний цикл, состоящий, в свою очередь, из пяти 12-летних подциклов. Под-циклы обозначались цветом: зеленый, красный, желтый, белый и черный. Внутри каждого подцикла годы носили названия животных: крысы, быка, тигра, кролика (зайца или кота), дракона, змеи, лошади, овцы (барана или козы), обезьяны, петуха, собаки и свиньи. Создайте программу с использованием операторов выбора, запрашивающую номер года нашей эры и печатающую его название по восточному календарю. Для проверки: 1966 г. — год красной лошади, 1984 г. — зеленой крысы.
136. Усложненный вариант предыдущего задания. Теперь требуется определить не только название введенного с клавиатуры года, но и год наступления "светлого будущего", до которого вы, безусловно, доживете! Делаем это поэтапно. Вот примерный словесный алгоритм. После введения исходного четырехзначного года с клавиатуры вам необходимо выделить составляющие его цифры и записать их в переменные А1, А2, аз и А4. (Если в номере года есть нули, то в соответствующие переменные записать 4.) Затем необходимо взять от них синусы по модулю. Из полученных значений выделить по две цифры после запятой и сложить их. Если сумма больше либо равна 10, то сложить еще раз. Должно полу-
читься 4 цифры, из которых надо составить четырехзначное число. Это и будет номер года наступления светлого будущего. Осталось определить его название по восточному календарю и вывести результаты на экран. Для проверки: при исходном годе 1986 годом светлого будущего будет 3589.
Ромб с диагоналями
Рисунок 1.8. Ромб с диагоналями
Пропущенные координаты определите сами, зная свойства ромба.
90. Создайте программу, рисующую Российский флаг'. Флаг состоит из трех полос, поэтому рисовать их надо, используя
Есть, кстати, мнемоническое правило для запоминания цветов нашего флага — это магическое слово БеСиК — БЕлый, СИний, Красный — и на Бейсик похоже, и не забудешь никогда.
команду line с параметром bf. Здесь главное четко рассчитать координаты диагоналей всех трех прямоугольников.
91. Напишите программу, выводящую рамку с конвертом (Рисунок 1.9).
"Рупор"
Рисунок 1.49. "Рупор"
Действуем по правилам. Все окружности лежат на одной горизонтали, т. е. у их центров меняются не координаты Y, а координаты X. Кроме этого, они имеют разный радиус. Причем он
изменяется не спонтанно, плавно увеличиваясь. Итак, обозначим изменяющиеся величины: X — координата центров окружностей по оси абсцисс, R — радиус окружностей.
Назначим независимым аргументом координату X. Попробуем установить закономерность изменения радиуса R от аргумента X. X изменяется от 0 до 640. Допустим, шаг изменения 10. Обычно устанавливают такое взаимоотношение X и R:
R=X
Но в этом случае получится, что радиус последней окружности будет равен 640, диаметр, соответственно, 1280. А ведь экран высотой всего 350! Значит, если мы хотим видеть на экране все наши окружности, то последний радиус не должен превышать 175, а лучше был бы меньше. Попробуем избрать такое соотношение:
R=X/4
Максимальное значение радиуса в таком случае равно 160. Напишем программу:
SCREEN 9
FOR Х=0 ТО 640 STEP 10
CIRCLE (X, 175), Х/4, 15 NEXT X
Посмотрите, что получается на экране. Похоже? Не совсем, скажете вы и будете правы, потому что последние окружности выходят за пределы экрана справа. Но с этой проблемой я предлагаю разобраться вам самостоятельно.
Потренируемся.
193. Напишите программу, изображающую "орбиты", соприкасающиеся все в крайней правой точке и имеющие разные радиусы (Рисунок 1.50).
Символы и строки
Символы и строкиКогда мы говорили о дружественном интерфейсе, то упоминали о так называемых строковых переменных, имена которых отли чаются от обычных добавлением знака $. В таких переменных могут содержаться как отдельные символы, так и их последовательности длиной до 255 символов. К ним в Бейсике применимы специальные операции, о которых мы здесь и расскажем.
Для начала надо немного отвлечься, чтобы сообщить о том, что каждый символ, представленный на клавиатуре для компьютера переводится в числовой код. Эти коды объединены в стандартную международную таблицу кодов ASCII (см. Приложение). Коды с 0 по 32 не имеют изображения на экране и служат для функций управления (пробел, клавиши управления курсором и т. д.). Далее следуют знаки препинания, цифры, строчные и прописные буквы латинского алфавита и другие символы, которые вы можете найти на клавиатуре. Всего их 128. А еще 128 кодов (от 129 до 255) служат для расширения возможностей клавиатуры, например для генерации национальных символов — в нашем случае для кириллицы. Учить их наизусть ни в коем случае не надо — они есть в таблице. Но если ее не окажется под рукой, то вы должны определить код любого символа, используя специальные функции asc и chr$.
Случайные числа
Случайные числаВ процессе изучения циклических алгоритмов уместно рассказать о генерации случайных чисел программным путем. При кажущейся простоте получить случайные числа не так легко. Попробуйте продиктовать своему другу 100 цифр. В идеале каждая из них должна бы повториться по теории вероятности около 10 раз, но у каждого человека встречаются какие-то пристрастия к тем или иным цифрам и в ряду из сотни цифр не будет абсолютной случайности. Получить на компьютере случайные числа тоже было нелегко, но в конце концов это удалось. В качестве основы для создания какой-либо последовательности случайных чисел служат показания встроенного в компьютер таймера. А поскольку они в каждый момент времени различны, то мы и получаем великое множество практически неповторяющихся случайных чисел в заданном диапазоне.
Случайные числа нужны прежде всего в компьютерных играх, чтобы обеспечить непредсказуемость игры для человека. Кроме того, они используются в учебных задачах и моделировании различных математических, физических и других процессов на компьютере.
Итак, новый оператор rnd.
Чтобы получать случайные числа, вы прежде всего должны инициировать процесс генерации последовательности случайных чисел компьютером при помощи оператора randomize timer. Он указывается в программе только один раз и сообщает компьютеру, что надо создавать случайные числа, беря за основу показания таймера.
Затем, чтобы получить из этой последовательности какое-либо значение, мы должны использовать оператор rnd(n), который выдает случайное число в диапазоне от 0 до 1. Минимальное полученное число будет 0,0000001, а максимальное 0,9999999. В качестве N может служить любое целое или действительное число. Этот параметр также влияет на выбор компьютером случайных чисел. Например, программа
RANDOMIZE TIMER X=RND(1) ? X
может вывести на экран число 0,367423, а может 0.0034289, а может 0,8912314. Каждый раз при запуске программы мы будем видеть новое значение.
Но часто встает проблема получения случайных чисел в заданном диапазоне. Как это сделать, мы рассмотрим на примерах.
Сравнение строковых переменных
Сравнение строковых переменныхНад строковыми переменными тоже можно производить операции сравнения. Больше будет та переменная, которая начинается с символов, более близких к концу алфавита, т. е. имеющих больший код, а если символы совпадают, то более длинное слово. Строковые переменные считаются идентичными, если они полностью тождественны. Если они отличаются пробелами в начале или конце, то они уже не идентичны!
Например,
"DOG" > "CAT", но "ELEFANT" < "MOUSE" "TIGER2" > "TIGER1" "Ml 6 " > "Ml6"
229. Напишите программу, проверяющую, является ли введенное слово или фраза палиндромом, т. е. читающемся слева направо и справа налево одинаково (например, шалаш, казак, А роза упала на лапу Азора). Программа сообщает "Да, это палиндром", или "Нет, это не палиндром" и выводит на экран введенный текст в варианте слева направо и справа налево. Здесь необходим цикл посимвольного чтения от N (длины текста) до 1.
230. Напишите программу, подсчитывающую количество слогов во введенном слове.
231. В операторе data перечислены 10 слов. Напишите программу, которая:
233. Подсчитать, сколько раз входит каждый символ в данную строку.
234. Написать программу шифратор и дешифратор, ставящую в соответствие русским символам соответствующие латинские и наоборот (аналог так называемого конвертора).
Команды языка GML
Таблица 1.3. Команды языка GML| Команда | Действие |
| Un | Переместиться вверх на n точек |
| Dn | Переместиться вниз на n точек |
| Ln | Переместиться влево на n точек |
| Rn | Переместиться вправо на n точек |
| En | Переместиться по диагонали вверх и вправо на n точек |
| Fn | Переместиться по диагонали вниз и вправо на n точек |
| Gn | Переместиться по диагонали вниз и влево на n точек |
| Hn | Переместиться по диагонали вверх и влево на n точек |
| M x, у | Переместиться в точку с координатами х, у |
| M ±n, im | Переместиться по отношению к текущей позиции на ±n точек по оси X и на +гл точек по оси Y. Знаки плюс и минус проставлять обязательно |
| At | Поворот изображения против часовой стрелки вокруг точки, с которой начиналось рисование на 90°xt (te0, 1,2,3). Действует во всех дальнейших командах до нового назначения |
| Cn | Задание нового цвета. Действует во всех дальнейших командах до нового назначения |
| Sn | Расстояние, указанное в командах перемещения, умножается на п/4 (0 |
| В | Переместиться в новую позицию при помощи следующих за в команд, но рисование не производить. Отменяется установкой цвета С |
| N | Выполнить следующую команду перемещения и вернуться в исходную позицию. Может предшествовать любой команде перемещения |
| Pcl,c2 | Команда заполнения контура цветом, cl — цвет заполнения, с2 — цвет контура. Должны соблюдаться все вышеизложенные правила закраски, и курсор должен находиться внутри закрашиваемого контура |
Таблица умножения Прежде чем выдать
? "Поспите 10 сек."SLEEP 10
? "Подъем! Учитель пришел!"
Если значение секунд указано 0 или не указано вовсе, то программа будет ожидать нажатия любой клавиши, например:
? "Прочитайте внимательно нижеследующее слово и нажмите
любую клавишу, когда надоест..." ? "Вы — просто гений!" SLEEP ? "Но от скромности вы не умрете..."
205. Итак, используя полученные знания про вложенные циклы и оператор sleep, напишите программу, которая в центре чистого экрана будет выводить показания хронометра — часы, минуты и секунды, разделенные двоеточием, начиная с 0 час. 0 мин. 0 с. Отрегулируйте свой хронометр, чтобы он шел правильно.
206. Усложним предыдущее задание. Нарисуем будильник, сделаем в нем два поля. В одно выведем текущую дату, а во второе — наш уже получившийся хронометр. Если очень захочется, то можно сделать из него будильник, добавив в нужный момент оператор веер, который производит отрывистый не совсем приятный звук (Рисунок 1.61).
Телеграф
Рисунок 1.65. Телеграф
Точка
ТочкаПервый из графических примитивов — точка. Для изображения точки используется оператор pset со следующим синтаксисом:
PSET(X, Y) , С
где х и y — координаты точки на экране, а с — ее цвет. Если цвет не указан, то точка будет изображена последним установленным цветом (это касается и всех прочих графических примитивов).
Рассмотрим пример.
SCREEN 9
PSET(320, 175),4
На черном экране в этом случае появится красная точка в центре.
Сразу же хочется заметить, что из эстетических соображений лучше менять цвет фона, потому что черный экран выглядит мрачно. Например:
SCREEN 9
color, 1
PSET (320,175) ,4
Теперь та же точка будет в центре синего экрана, уже лучше!
Тригонометрическая окружность
Рисунок 1.18. Тригонометрическая окружность
Взглянув на тригонометрическую окружность, мы всегда довольно легко сможем определить начало и конец нужных нам
дуг. Более того, Бейсик позволяет использовать в качестве операндов в своих командах арифметические выражения. Поэтому, например, если вы знаете угол начала дуги — 30°, но затрудняетесь определить его на тригонометрической окружности, то можете в соответствующем месте оператора дуги написать
3.14*30/180
и пусть компьютер сам считает.
Приведем несколько простых примеров.
Построим верхнюю половину окружности синего цвета с радиусом 30 (Рисунок 1.19), у которой центр находится в точке 150, 100.
"Труба" под углом 45°
Рисунок 1.51. "Труба" под углом 45°
Условный переход
Условный переходМало того, что условный переход подразумевает выполнение тех или иных команд в зависимости от проверяемого условия, так Бейсик предоставляет нам еще и несколько вариантов действий.
Начнем с классической конструкции:
IF ... THEN ... ELSE
Или по-русски:
ЕСЛИ ... ТОГДА ... ИНАЧЕ
В записи условия можно использовать следующие символы:
CLS
INPUT "Как Вас зовут"; N$
INPUT "Сколько Вам полных лет"; S
IF S<18 THEN ?"Вам еще рановато курить, ";N$ ELSE ?"Минздрав
России предупреждает — курение опасно для вашего здоровья!"
Программа запрашивает имя, потом возраст (все это уже не вызывает у нас никаких затруднений), а вот потом вступает в дей ствие условный оператор. Если возраст s меньше 18, то выводится надпись, что курить еще рановато (а чтобы не было очень обидно, обращается по имени). Иначе (т. е. если возраст больше либо равен 18) автомат продает сигареты, но предупреждает об опасности курения.
Еще один маленький пример. Вычислим корень квадратный из х.
CLS
INPUT "Введите любое число"; X
? "Корень квадратный из Х="; SQR(X)
Запускаем программу. Вводим число 4. Ответ 2. Вводим 121. Ответ 11. Вводим -9. Аварийное прерывание программы и сообщение об ошибке "Неверный вызов функции". Что такое? А все потому, что корень квадратный вычисляется только из положительного числа. Вот программа и "ругается". Но мы же умные, добавим в программу условный оператор, и будет она работать для любых чисел.
CLS
1:INPUT "Введите любое число";Х'
IF X>=0 THEN ? "Корень квадратный из X ="; SQR (X) ELSE ?"Корень квадратный из отрицательного числа вычислять отказываюсь. Дайте положительное число!"
:GOTO 1
Теперь программа анализирует введенное значение и, в случае его положительности, вычисляет корень, а в случае отрицательности в легкой форме раздражается и просит у пользователя другое число.
И еще пример с графикой. Предположим, мы настолько дружественны к пользователю, что не говорим ему: "Вот, посмотри, какая картинка!", а предлагаем некий выбор. Для первого раза из двух возможностей.
SCREEN 9
INPUT "Введите 1, если хотите увидеть солнце и любую другую цифру, если ничего не хотите"; X
IF X=l THEN CIRCLE (320, 175), 50, 2: PAINT(320, 175), 14, 2 ELSE ?"Спасибо за внимание!"
Программа запрашивает у пользователя цифру (причем в случае ввода буквы просит осуществить ввод заново). Если это цифра 1,
то рисуется желтый круг, в любом другом случае появляется надпись "Спасибо за внимание!".
Поупражняемся.
114. Напишите программы, которые в зависимости от введенного числа либо вычисляют функцию, либо выдают сообщение, что функция не определена:
Верхняя половина окружности
Рисунок 1.19. Верхняя половина окружности
Первым делом, глядя на дугу, определяем направление против часовой стрелки. Это дает нам возможность выяснить, где находится начало и конец дуги. Далее обращаемся к тригонометрической окружности. В этом простом примере сразу видно, что угол начала а=0, а угол конца дуги b=3,14. Таким образом, оператор построения этой дуги выглядит так:
CIRCLE (150, 100), 30, 1, 0, 3.14
Построим правую половину той же самой окружности (мы уже не будем сопровождать это построение рисунком, т. к. процесс аналогичен). По тригонометрической окружности определяем, что а=4,71, b=1,57. Записываем оператор построения дуги:
CIRCLE (150, 100), 30, 1, 4.71, 1.57
Виды алгоритмов
Виды алгоритмовАлгоритмы бывают трех основных видов, которые являются базовыми при написании программ.
Первый тип — линейный алгоритм. В нем все действия выполняются в строгом порядке, последовательно, одно за другим. Типичный жизненный пример такого алгоритма — рецепт пирога.
Второй тип — разветвляющийся алгоритм. Здесь те или иные действия выполняются в зависимости от выполнения или невыполнения некоего условия. Пример из жизни — правило перехода улицы по светофору. Если горит красный — стоим, если горит зеленый — идем.
Наконец, третий тип — циклический алгоритм. Он содержит повторяющиеся действия с какой-либо изменяющейся величиной, так называемым параметром. По циклическому алгоритму можно колоть дрова. Берем полено, ставим на попа, колем топором, берем второе полено и т. д., пока поленья не закончатся, и эта работа нам не надоест.
Вложенные циклы
Вложенные циклыВ предыдущем разделе мы рассмотрели случаи, когда в цикле изменяются несколько величин, но их можно выразить друг через друга. Сейчас нам надо рассмотреть ситуации, когда изменяются несколько независимых величин.
Приведем пример. Напишем программу заполнения экрана точками с расстоянием между ними по горизонтали и вертикали 10.
SCREEN 9
FOR X=0 TO 64 0 STEP 10
FOR Y=0 TO 350 STEP 10 PSET(X, Y), 4
NEXT Y NEXT X
Работает программа таким образом. В первом заголовке цикла переменной X присваивается значение 0. Потом программа переходит к выполнению следующего оператора, т. е. в нашем случае, второго цикла, который и исполняется, пока Y не пре высит значение 350. После этого берется следующее значение X, и действия с Y повторяются. И так до тех пор, пока X не станет больше 640. То есть программа строит вертикальные цепочки точек, пока не заполнится весь экран.
Все это не так сложно, если понять и запомнить следующее. Циклы должны быть вложены друг в друга, как матрешки. Параметры, упоминаемые в заголовках циклов, в их окончаниях должны быть перечислены в обратном порядке.
Правильное использование циклов:
FOR X=0 ТО 64 0 STEP 10
FOR Y=0 TO 350 STEP 10 Rem Тело цикла
NEXT Y NEXT X
Неправильное применение циклов:
FOR X=0 TO 640 STEP 10
FOR Y=0 TO 350 STEP 10 Rem Тело цикла
NEXT X NEXT Y
Кроме того, в окончании вложенных циклов можно указывать только один оператор next с перечислением параметров, например:
NEXT Y, X
Приступим к упражнениям.
200. Напишите программу, заполняющую экран лоскутным ковром. Лоскутки должны быть плотно прилегающими друг к другу разноцветными квадратиками со стороной 10 (Рисунок 1.58).
Вывод текстовой информации в графике
Вывод текстовой информации в графикеЧасто хочется сопроводить свои рисунки подписями. Не сдерживайте свои желания. Делайте это просто — с помощью операторов locate и print, как мы это уже многократно делали.
Взрыв сверхновой
Рисунок 1.39. Взрыв сверхновой
142. Изобразите взрыв сверхновой звезды (если это задание делать по-простому, то понадобится четыре оператора цикла, можно сложнее — но и короче). Сделайте лучи во всех четырех случаях разного цвета. Это придаст живости (Рисунок 1.39).
143. Заставьте окружность надуваться как воздушный шарик.
144. Мы уже перемещали по экрану геометрические фигуры с использованием условного оператора и оператора безусловного перехода. Теперь наши фигуры будут двигаться равномерно по вертикали или горизонтали. Сместите:
Например, напечатать значения y = sinx в интервале [-30°; 30°]
с шагом 5°. Действуя по правилам, несложно понять, что параметр — это х, так мы его и обозначим. Начальное, конечное значения параметра и шаг указаны непосредственно в самом задании. Пишем оператор цикла:
OR X=-30 ТО 30 STEP 5
Y=SIN (X*3.14/180)
? "SIN С; X; ")="; Y NEXT X
На что, кроме оператора цикла, здесь хочется обратить ваше внимание, так это на оператор print. Разберитесь, пожалуйста, как он работает, и что дает такая, казалось бы, запутанная запись.
Еще пример. Необходимо вывести на экран четные числа от 2 до 20. Здесь меняется само число, обозначаем его N, начальное значение 2, конечное 20, шаг 2. Пишем:
FOR N=2 ТО 20 STEP 2: ? N: NEXT N
А если от 20 до 2, то будет, соответственно:
FOR N=20 ТО 2 STEP -2: ? N: NEXT N
Проверим ваше понимание, как всегда, при помощи ряда заданий.
145. Выведите на экран в строку все числа первой сотни, оканчивающиеся на пять.
146. Определите значение переменной f после выполнения следующих операторов:
F=l: N=l
FOR 1=2 ТО N: F=F+1/I: NEXT I
147. Напишите программу, запрашивающую возраст пользователя, а затем печатающую текст "Да ты крут!" по числу прожитых лет. Обратите внимание, что здесь в теле цикла не будет использоваться параметр. Такое тоже возможно.
148. С клавиатуры запрашивается любая цифра от 2 до 9, а затем компьютер печатает таблицу умножения на эту цифру.
149. Напишите программу., выводящую на экран степени числа 2 от 2 до 10 включительно.
150. Распечатайте в табличном виде (с аргументами) значение функции квадратного корня на интервале [2; 4] с шагом 0,1.
151. Напишите программу, которая в центре чистого экрана на одном и том же месте выведет последовательно цифры от 1 до 3600 (аналог электронного секундомера).
Когда мы двигали геометрические объекты, го нам приходилось иногда искусственно замедлять движение, чтобы оно было более плавным. Тогда без объяснений был введен пустой цикл для организации пауз. Пустым будем называть такой цикл, в котором нет тела. Например:
FOR 1=1 ТО 100: NEXT I
Просто компьютер считает в уме до 100. А мы его ждем (ну, правда, если до 100 — это быстро, а вот до 10 000 уже придется |и потерпеть).
Следующая группа упражнений поможет вам закрепить работу с оператором цикла в графике на примере орнаментов. Сначала рассмотрим пример.
Орнамент — это повторяющийся геометрический узор, например, как на Рисунок 1.40.
Взрыв
Рисунок 1.46. Взрыв
Звезда
Рисунок 1.25. Звезда
102. Выведите на экран пятиконечную звезду, вписанную в окружность и закрашенную как на Рисунок 1.25.
103. Нарисуйте корабль в ночном море под российским флагом (Рисунок 1.26).
Это задание уже представляет собой достаточно сложное изображение. Попробуйте выполнить его так, как вы считаете нужным, а мы хотим изучить, как это нужно делать.
Basic вводный курс
Андреевский флаг (суммы элементов диагоналей равны)
Рисунок 1.72. Андреевский флаг (суммы элементов диагоналей равны)
Чтение из файла
Чтение из файлаЧтение из файла производится аналогично записи, но — вместо режима output используется режим input. Будьте внимательны! Прочитаем занесенные нами данные из файла avto.dat.
' Программа чтения файла данных об автомобилях
CLS
INPUT " Введите имя файла"; F$
1 Открытие файла
OPEN F$ FOR INPUT AS #1
PRINT "База данных автомобилей на 17 декабря 2000 года"
1=1
DO
PRINT "Вывести данные об"; I; "автомобиле?"
INPUT "Для окончания введите QWE, для продолжения —
IF UCASE$(M$)="QWE" OR UCASE$(M$)="ЙЦУ" THEN 1
INPUT #1, M$, N$, C$, G$, S$
PRINT M$, N$, C$, G$, S$
1=1+1 LOOP UNTIL EOF(l) 1 Закрытие файла 1 : CLOSE #1 PRINT "Файл закрыт"
Обратите внимание на оператор loop until eof(D. Он означает, что считывание ведется до тех пор, пока не будет обнаружен символ конца файла (end of file), а в скобках указан номер открытого файла.
Выведите с помощью этой программы данные о первых трех автомобилях.
Добавление данных в файл
Добавление данных в файлУказание for append в операторе open подготавливает файл для вывода данных и смещает указатель на конец файла. Последующие операторы приписывают новую информацию к уже имеющейся. В предложенной далее программе в файл данных об автомобилях добавляются сведения о двух новых поступлениях.
' Программа создания файла данных об автомобилях
CLS
INPUT " Введите имя файла"; F$
' Открытие файла
OPEN F$ FOR APPEND AS #1
DO
INPUT "Марка автомобиля? (Для окончания работы введите QWE.); М$
IF UCASE$(M$)="QWE" OR UCASE$(M$)="ЙЦУ" THEN 1
INPUT "Номер автомобиля?"; N$
INPUT "Цвет автомобиля?"; С$
INPUT "Год производства автомобиля?"; G$
INPUT "Продажная цена автомобиля?"; S$
WRITE #1, М$, N$, C$, G$, S$ LOOP
' Закрытие файла 1 : CLOSE #1 PRINT "Файл дополнен"
Выполните упражнения.
293. Школе необходим последовательный файл для учета выпускников.
Двумерные массивы
Двумерные массивыЧто такое двумерный массив? Это такой набор однотипных данных, местоположение каждого элемента которого определяется не одним индексом, а двумя. Например, для тех, кто с детства играл в "морской бой", не будет открытием, что каждая клеточка игрового поля обозначается двумя символами — буквой и цифрой, например, А5 — "мимо", И10— "попал", Ж7 — "убит". Только в Бейсике принято в качестве индексов использовать все же целые числа. Жизненный пример применения двумерных массивов — билеты в кино или театр, имеющие для каждого зрителя две координаты — ряд и место'.
Описываются подобные массивы в Бейсике тем же оператором dim, после которого в скобках указываются две размерности массива — количество строк и количество столбцов. Например, массив 5x3 объявим так:
DIM X(5, 3)
X (If 1) X [1, 2) X (1, 3) X (1. 4) X (1, 5)
X (2, 1) X (2, 2) X (2, 3) X (2, 4) X (2, 5)
X (3, 1) X (3, 2) X (3, 3) X (3, 4) X (1, 5)
' Кстати, маленькое лирическое отступление. Откуда пошла традиция указывать на билетах ряд и место? Оказывается из Франции. Когда тамошние дворяне при шпагах и гордом характере приходили в театр, имея просто билет без указания места, то нередко возникали смертоубийственные стычки из-за этих самых мест. Королю это надоело, и он обратился за помощью к ученому Декарту, который и предложил систему — "ряд—место". Эта система в дальнейшем трансформировалась в привычную нам декартову систему координат — ось X, ось Y.
Файловая система
Файловая системаИнформация, вводимая с клавиатуры или обрабатываемая с помощью программных средств Бейсика размещается в оперативной памяти компьютера, которая является энергозависимой, и, как только мы выключим питание, вся наша информация погибнет. Чтобы избежать это и донести наши гениальные программы по крайней мере до преподавателя (чтобы он их достойно оценил), а лучше до далеких потомков, необходимо сохранять наши работы на диске в виде файлов.
Файл — это поименованная область на магнитном или лазерном диске. Поименованная — значит, имеющая имя. В файлах могут содержаться тексты, графические и видеоизображения, звуки и музыка, таблицы и базы данных и многое другое, но нас интересуют прежде всего программы, написанные на Бейсике и данные для этих программ.
Мы уже объясняли в самом начале, как сохранить программу в виде файла и открыть уже существующий файл. Имя файлу мы даем сами, но к нему есть некоторые требования:
Для того чтобы хранить свои файлы и результаты работы с ними на диске, лучше завести свой личный каталог (или папку — это одно и то же). Надеюсь, вы знаете как это делается.
В файлах вы можете хранить как исходные данные для обработки, так и результаты работы вашей программы.
Для работы в Бейсике нам чаще нужны файлы, хранящие однородные по типу или структуре сведения о каких-либо объектах. Набор данных о каком-либо одном объекте называется записью.
За самой последней записью находится невидимый символ конца файла, который устанавливается автоматически. Файл может быть пустым, т. е. содержать 0 байт информации, но имя файла и символ конца файла будут присутствовать всегда. Таков закон.
Записи могут содержать данные разных типов, но должны быть обязательно одинаковы по структуре, например:
"Запорожец", "4067 ЛДЕ", "1972", "100$"
"ГАЗ-34", "6666 ЛАА", 1989, "3500$"
В соответствии со способом доступа к файлам они делятся на два вида.
Флаг Японии (суммы элементов диагоналей не равны)
Рисунок 1.73. Флаг Японии (суммы элементов диагоналей не равны)
285. Одномерный массив из N элементов свернуть по спирали в квадратную матрицу размерностью корень квадратный из N по следующему образцу.
286. Исходный массив Sl(16) состоит из следующих элементов: 3, 5, 9, 7, 12, 34, 21, 13. 6, 89, 54, 66, 2, 10, 99, 55.
Создайте массив S2(4, 4), вид которого представлен на Рисунок 1.74.
Массивы, подпрограммы
Глава 3. Массивы, подпрограммы| Содержание |
Изменения данных в файле
Изменения данных в файлеДля изменения какой-либо записи, удаления старых или добавления новых данных в последовательном файле необходимо открыть два файла: подлежащий изменению и новый, в котором создается обновленная версия исходного файла. Старый файл в дальнейшем можно удалить. Приведенная ниже программа в файле avto.dat изменяет "МОСКВИЧ" на "МЕРСЕДЕС". В первых строках открываются исходный файл avto.dat и новый файл avto2.dat, сначала пустой. Очередная запись считывается из файла avto.dat и, при условии, что это не "МОСКВИЧ", переписывается без изменения в новый файл. Если же встречается значение "МОСКВИЧ", то оно заменяется на "МЕРСЕДЕС" путем присваивания нового значения переменной м$. В следующей строке данное значение попадает в выходной файл. После того как весь входной файл просмотрен, оба файла закрываются.
OPEN "avto.dat" FOR INPUT AS #1 OPEN "avto2.dat" FOR OUTPUT AS #2 FOR 1=1 TO 5
INPUT #1, M$, N$, C$, G$, S$
IF UCASE$(M$)="MOCKBM4" THEN М$="МЕРСЕДЕС"
PRINT #2, M$, N$, C$, G$, S$ NEXT I CLOSE 1, 2 KILL "avto.dat"
NAME "avto2.dat" AS "avto.dat" END
Заключительный этап — удаление исходного и переименование нового файла, которому придается прежнее имя, что обеспечивает и в дальнейшем наличие на дискете файла avto.dat.
Круговая интерпретация одномерного массива
Рисунок 1.68. Круговая интерпретация одномерного массива
238. Напишите программу вычисления среднего арифметического содержащихся в операторе data следующих десяти чисел: 31, 19, 52, 65, 6, 8, 13, 16, 97, 33.
239. Напишите программу вычисления выражения:
Массив
Рисунок 1.66. Массив
FAM$ из четырех элементов
Из этого следует, что:
Массивы
МассивыМы подобрались к одной из самых сложных, на мой взгляд, тем в программировании для начинающих. Именно из-за массивов я остался на второй год в институте (потому что тогда в школах еще этим не занимались). Теперь, когда я объясняю эту тему своим ученикам, то стараюсь сделать это как можно более доходчиво, пусть не совсем научными терминами, но понятно, поскольку без представления, что такое массив, дорога в программирование будет закрыта.
Но и без умных определений не обойтись.
Итак, массив — это набор однородных данных (чисел, символов, слов), имеющий имя и последовательную нумерацию его элементов. Например, список фамилий учеников вашего класса — массив, численные данные о среднесуточной температуре за месяц — массив, буквы русского алфавита — массив.
Как физически массив представляется в компьютере, я рассказывать не буду, а как формально — это надо себе представлять.
Метод обмена или "пузырька"
Метод обмена или "пузырька"Название данного метода часто вызывает нездоровый смех у молодежи, хотя никакого тайного смысла у этого метода нет. Просто он выполняется таким образом, что максимальное число после каждого шага сортировки как бы всплывает в конец массива, на свое заслуженное место. Заключается метод в следующем. Программа, начиная с первых элементов массивов, сравнивает эти элементы попарно, и, в случае, если они расположены не по возрастанию, меняет их местами. В результате (N -I)2 перестановок (в случае самого плохого расположения элементов массива — все элементы по убыванию) массив окажется упорядочен по возрастанию. Например, есть массив из четырех элементов:
4 3 2 1
Рассмотрим по шагам метод "пузырька" для этого массива.

269. Напишите программу, реализующую метод "пузырька". Для уменьшения количества ненужных сравнений может служить счетчик, подсчитывающий количество обменов за один полный пробег вдоль всего массива. Как только его значение станет равно нулю (т. е. ни одного нового обмена не будет произведено), это будет означать, что массив упорядочен. Для наглядности оформите исходный и получившийся массив в виде столбиковых интерпретаций друг под другом.
270. Дан массив букв, составляющих английский алфавит, но размешенных не по порядку. Напишите программу, преобразующую этот массив в алфавит английского языка.
271. Дан массив из 13 четырехбуквенных русских слов (существительных и нарицательных), в единственном числе, в именительном падеже. Упорядочить их по алфавиту.
Операции над файлами
Операции над файламиНезависимо от того, какие действия мы проделываем с информацией, хранящейся в файле, мы должны будем производить следующие обязательные операции:
Описание массива
Описание массиваЕсли мы знаем, что в программе предстоит работать с большим объемом каких-то данных, то мы должны этот массив в программе объявить с помощью специального оператора dim (от англ. "dimension"), после которого указывается имя массива, а потом в скобках следует так называемый размер массива, т. е. количество его элементов. Например, пусть в группе четыре человека. Массив — это фамилии учеников. Мы тогда должны записать так:
DIM FAM$ (4)
Знак $ добавляется, т. к. в массиве будут храниться строковые переменные. В этом случае компьютер в памяти отводит некую область из четырех ячеек, которую всю и называет fam$. Кроме того, эти ячейки нумеруются натуральными числами, начиная с 1. Я всегда подобную процедуру, да и сам массив, сравниваю с улицей одноэтажных домов в деревне или маленьком городке. Построили на улице четыре дома, назвали улицу fam$ (имя массива дается по тем же правилам, что и имя переменной), пронумеровали дома и заселили туда жильцов (Рисунок 1.66).
Открытие файла
Открытие файлаДля открытия файла предназначен оператор open, имеющий следующий формат:
OPEN имя_файла FOR режим AS # номер файла
С именем файла должно быть уже все понятно. Режим определяет доступ к данным файла. Возможны следующие режимы:
Подпрограммы
ПодпрограммыИногда в определенных местах программы приходится выполнять практически одни и те же последовательности действий с разными исходными данными. Такие последовательности действий можно оформить в виде так называемых подпрограмм (от англ. "subroutine"). Подпрограммы сокращают текст программы, существенно уменьшают время их исполнения, облегчают жизнь программистам, которые могут создавать программы модульно, т. е. собирая сложную программу из законченных кусочков более простых составляющих. Это позволяет создавать большие программы группой программистов, разрабатывать и реализовать группе школьников какие-либо глобальные проекты.
Для примера использования процедуры приведем программу вычисления следующего выражения:
Z=N!/M!*(N-M)!
Переменные N и М, а также выражение (N—М) снабжены восклицательным знаком, который в математике означает не что иное, как факториал (например, N-факториал). Факториал — это произведение натуральных чисел от 1 до N включительно. Например, 3!=1х2хЗ=6, а, например, 6! — это уже 1x2x3x4x5x6=720.
В выражении нам три раза придется вычислять факториал, производя при этом одни и те же действия с разными числами. Нам облегчит работу подпрофамма, которую мы разместим в конце основной профаммы и назовем, например, fact. В подпрофам-ме мы опишем, как вычислить факториал вообще, а затем из основной программы обратимся к подпрофамме три раза с различными параметрами. Вот как будет выглядеть проuhамма:
CLS
1 : INPUT "Введите значения N и М"; N, М
K=N
GOSUB FACT
Х1=Р
К=М
GOSUB FACT
Х2=Р
K=(N-M)
GOSUB FACT
Z=X1/(X2*P)
PRINT "Искомое выражение равно"; Z
PRINT "Еще одно выражение?(Y/N): INPUT а$
IF UCASE$(a$)="Y" THEN 1 ELSE PRINT "До новых встреч
у монитора..." END
' Описание подпрограммы FACT для вычисления факториала
FACT:
Р=1
FOR i=l TO К
P=P*i NEXT i RETURN
Рассмотрим работу программы. Начало стандартное: очистка экрана, запрос с клавиатуры исходных данных. Самое интересное начинается потом. Подпрограмма fact описана после слова end основной профаммы, что обусловлено простым желанием, чтобы профамма все же не зациклилась, а когда-нибудь все-
таки завершилась. Параметром подпрограммы является переменная к, для которой и вычисляется факториал.
В основной программе мы присваиваем переменной к значение переменной n, для которой мы хотим вычислить первый факториал из трех. После чего необходимо обратиться к подпрограмме. Для этого существует специальное слово gosub, после которого указывается имя подпрограммы (в нашем случае fact). Управление переходит на первый оператор, содержащийся в подпрограмме, затем выполняются все операторы подпрограммы, вплоть до ключевого слова return. Это означает, что подпрограмма закончилась, и управление передается в основную программу.
"Пожиратель звезд"
Рисунок 1.69. "Пожиратель звезд"
266. Напишите программу "Сторож", которая бы заставила змейку (Рисунок 1.70) оббегать стороны экрана по часовой стрелке (это можно написать и без массива). Усложните программу, взяв на службу еще одну "змейку". Теперь они ползают друг за другом (Рисунок 1.71). Еще сложнее — программа для движения змейки, управляемой стрелками или буквенными клавишами и совершающей повороты под прямым углом. А если и это все по плечу, то заставьте змейку поворачивать еще и под углом 45°.
Рисунок 1.71. "Пожиратель звезд"

Преобразованный в спираль одномерный массив
Рисунок 1.74. Преобразованный в спираль одномерный массив
Простейшие сортировки
Простейшие сортировкиОдной из основных операций, производимых над массивами, являются операции сортировки или упорядочивания элементов массива по какому-либо признаку: чаще по возрастанию или убыванию — для чисел, и по алфавиту — для символов и строк.
Сортировок придумано множество, и, говорят, тому, кто придумает новый эффективный метод сортировки, сразу будет вручена Нобелевская премия.
С древних времен, однако, до нас дошли два самых простых (но, конечно, не самых эффективных) способа сортировки, которые мы здесь и рассмотрим.
Работа с файлами
Работа с файламиСейчас, когда в ваших головах и руках уже есть практически все необходимые инструменты для написания сложных программ, осталось немножко поднапрячься и узнать, что хранить исходные данные для больших программ очень удобно в виде отдельных файлов. Но, чтобы это понять, надо иметь минимальное представление о файловой организации информации на дисках.
Сортировка выбором
Сортировка выборомДопустим, дан числовой массив из N элементов. Надо отсортировать его по возрастанию.
Суть способа в следующем. Находим наибольший элемент в массиве и меняем его местами с последним. Уменьшаем количество рассматриваемых элементов на 1 (т. к. последний элемент уже на своем месте). Повторяем о'перацию для уменьшенного на единицу массива. И так — N—1 раз.
Пусть дан массив из пяти элементов:
8 4 9 6 7
Рассмотрим процесс упорядочивания по шагам.

На этом шаге третий элемент поменялся сам с собой.

267. Напишите программу для упорядочивания массива по возрастанию методом выбора. Измените программу так, чтобы она упорядочивала массив по убыванию.
268. Дан массив из 13 чисел. Расположите числа по возрастанию. Введите с клавиатуры число М так, чтобы оно вошло в массив и получившийся массив также был бы упорядочен по возрастанию.
Способы доступа к файлам
Способы доступа к файламВ изучаемом нами Бейсике существуют два метода доступа к информации, хранящейся в файлах:
Файлы прямого доступа хранят информацию в специальном формате, в котором каждая запись занимает строго фиксированную одинаковую с остальными длину. То, что такие файлы могут занимать на диске больше места, чем файлы последовательного доступа, с лихвой компенсируется скоростью работы с ними.
Столбиковая интерпретация одномерного массива
Рисунок 1.67. Столбиковая интерпретация одномерного массива
"Сторож-змейка"
Рисунок 1.70. "Сторож-змейка"
Исходные данные задачи
Таблица 1.4. Исходные данные задачи| Сердюков | Клевета | Выиграно |
| Прохоров | Оскорбление | Проиграно |
| Мицкевич | Поджог | ????? |
| Максимова | Взлом | Выиграно |
| Лерман | Взятка | Проиграно |
Исходные данные
Таблица 1.5. Исходные данные| Фамилия студента | Курс | Оценочный коэффициент |
| Югов | Программирование | 78 |
| Северов | Японский язык | 91 |
| Западов | Психология | 56 |
| Востоков | Психология | 45 |
| Зюйдов | Корейский язык | 89 |
| Вестов | Программирование | 66 |
| Полюсов | Психология | 90 |
Запись в файл
Запись в файлРассмотрим пример записи в файл.
OPEN "capitals.dat" FOR OUTPUT AS #1 FOR X=l TO 5
INPUT "ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ"; F$
PRINT #1, F$ NEXT X CLOSE #1 END
В результате работы программы мы получим (полужирным шрифтом выделены данные, вводимые пользователем с клавиатуры):
ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? МОСКВА ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? САНКТ-ПЕТЕРБУРГ ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? ТАЛЛИН ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? РИГА ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? ВИЛЬНЮС
При этом на диске в текущем каталоге образуется файл, содержащий пять строковых значений. Имя файла будет capitals.dat.
Удобнее всего при работе с файлами сделать текущим каталог, где эти файлы содержатся или будут содержаться, а при обращении к ним указывать только их имена.
В качестве параметра имя_файла можно использовать переменную текстового типа. Это позволяет вводить имя файла с клавиатуры и является универсальным способом работы с файлами. Например:
INPUT " Введите имя файла "; FileName$ OPEN FileName$ FOR OUTPUT AS #1
После ключевого слова as указывается номер файла. Больше открыть файл с таким номером в данной программе нельзя. Для каждого последующего файла должен быть указан свой собственный неповторимый номер в пределах от 1 до 255. Сколько всего может быть открыто файлов, зависит от файла конфигурации вашего компьютера config.sys, в котором число одновременно открытых файлов определяется командой files.
Заполнение двумерных массивов и вывод их на экран
Заполнение двумерных массивов и вывод их на экранВ обработке двумерных массивов есть своя специфика — использование вложенных циклов.
Заполним двумерный массив Х(3, 5) целыми случайными числами, лежащими в интервале от 1 до 20 и выведем массив на экран в виде таблицы.
CLS : RANDOMIZE TIMER DIM X(3, 5) FOR I =1 ТО 3 FOR J=l TO 5
X(I, J)=INT(RND(l)*20)+l ? X(I, J); NEXT J
NEXT I
На что надо обратить внимание. Для начала, при выводе массива во внутреннем цикле после оператора print стоит точка с запятой. Это дает возможность отображать массив построчно. А оператор print без параметров, указанный после внутреннего цикла, позволяет после вывода каждой строки элементов массива, переводить курсор на новую строчку.
272. Найдите в массиве из приведенного выше примера максимальный и минимальный элемент, и, при выводе массива на экран, выделите их красным цветом.
273. Дан двумерный массив 5x5. Определите сумму элементов каждой строки и ту строку, в которой сумма элементов максимальна.
274. Дан массив А(2, 10). В первом столбце содержатся координаты X точек плоскости экрана, а во втором столбце — координаты Y тех же точек. Определите количество точек, попадающих в нижнюю правую четверть экрана, выведите их на экран, а искомые точки выделите другим цветом.
275. Определите наименьший элемент в массиве Х(10, 10). Выделите его другим цветом.
276. Дан массив W$(5, 4), в котором каждая строка состоит из четырех символов, составляющих английское слово. Отсор-
тируйте массив таким образом, чтобы слова были расположены по алфавиту.
277. В массиве R (5x5) поменяйте местами первую и последнюю строки.
278. В массиве R (5x5) замените элементы, стоящие ниже главной диагонали, нулями.
279. В массиве R (5x5) замените элементы главной диагонали нулями.
280. В массиве R (5x5) вычислите сумму элементов главной диагонали.
281. В массиве R (5x5) упорядочьте строки по возрастанию элементов главной диагонали.
282. Определите, является ли заданный массив 3x3 магическим квадратом, т. е. таким, суммы элементов которого в строках, столбцах и главных диагоналях равны между собой.
283. Выведите на экран номера строк массива 5x5, сумма элементов которых четна.
284. Выведите на экран изображение Андреевского флага, если у данного массива 5x5 суммы элементов диагоналей равны, и флаг Японии — в обратном случае (Рисунок 1.72, 1.73).
Заполнение массива при помощи стандартных функций
Заполнение массива при помощи стандартных функцийТак как чаше мы решаем учебные задачи, то конкретные числовые или строковые значения элементов массива нас мало интересуют. Важно, чтобы программа работала правильно. Поэтому часто массив заполняется случайными значениями.
CLS
RANOMIZE TIMER
INPUT "Введите количество элементов массива"; N
DIM MASS(N)
FOR 1=1 ТО N
MASS(I)=INT(RND(l)*100)
? MASS(I); NEXT I
Мы вычисляем какую-либо функцию, например синус, и значения этой функции заносим в массив. Пусть дана функция y-sinx , где х меняется от 1 до 10 с шагом 0,5. Здесь мы должны сначала решить для себя, а сколько будет значений вычислено. Мы это уже делали, но, повторение — мать учения.
N=(Хнач. — Хкон.)/шаг+1
В нашем случае:
N=(10-1)/0.5 +1=19
Тогда программа будет выглядеть так:
CLS
INPUT "Введите начальное, конечное значения аргумента
и шаг приращения"; XN, XK, DX
N=INT((XK - XN)/DX)+1
DIM MASS(N)
1=1
FOR X=XN TO XK STEP DX
MASS(I)=SIN(X)
? MASS(I);
1=1+1 NEXT X
Здесь нам уже приходится вручную наращивать индекс г, т. к. параметром цикла в данном случае является х.
После заполнения массива настает пора его обрабатывать. Чаще всего приходится обрабатывать все элементы массива, поэтому действия выполняются в цикле.
Изменение значений элементов массива ведется с помощью оператора присваивания, например:
MASS(1!=13
MASS(3)=12
MASS(3)=SQR(MASS(1)+MASS(3))
? MASS(3)
Вопрос. Какое значение будет выведено на экран? Чему равны значения mass ( i ) и mass (3) ?
Задания. Прежде всего попрактикуемся в заполнении массивов и выводе на экран не только численных значений элементов массива, но и графической их интерпретации.
236. Заполните массив десятью случайными целыми числами, каждое их которых лежит в пределах от 50 до 200, и выведите на экран их численные значения, а также графическое представление в виде вертикальных закрашенных прямоугольников шириной 30, и высотой, соответствующей их значению. Нижние стороны прямоугольников лежат на линии с координатой Y=300, левой стороне первого прямоугольника соответствует координата Х=100 (Рисунок 1.67).
237. Заполните массив десятью случайными целыми числами, каждое их которых лежит в пределах от 5 до 30, и выведите на экран их численные значения, а также графическое представление в виде закрашенных соприкасающихся кругов, радиусы которых равны значениям элементов массива (Рисунок 1.68).
Заполнение одномерного массива с клавиатуры
Заполнение одномерного массива с клавиатурыРассмотрим следующий пример:
CLS
INPUT "Введите количество элементов массива"; N
DIM MASS(N)
FOR 1=1 ТО N
? "Введите"; N; "элемент массива"
INPUT MASS(I) NEXT I
7
FOR 1=1 TO N ? MASS(I); NEXT I
Программа требует некоторых пояснений. Первая команда тра-диционна — очистка экрана. Далее идет запрос с клавиатуры количества элементов массива. Потом цикл, в котором от 1 до N программа последовательно запрашивает у пользователя ввод очередного элемента массива и записывает его значение по указанному адресу mass(i) . После первого цикла выполняется оператор print без параметров. Он отображает пустую строку между вводом значений и их выводом. Последний оператор цикла выводит значения массива на экран в строчку, что обеспечивается
добавлением к оператору print точки с запятой. Результаты работы программы для трех элементов будут выглядеть так:
Введите 1 элемент массива
? 23
Введите 2 элемент массива
? 13
Введите 3 элемент массива
? 98
23 13 98
Заполнение одномерного массива заранее известными значениями из оператора DATA
Заполнение одномерного массива заранее известными значениями из оператора DATAЧасто встречаются задачи, когда данные для обработки уже известны и содержатся в операторе data. (Однако, если их много, тяжелый труд — их туда заносить. Обычно — работа для молодых программистов.)
DATA 23, 13, 98, 77, 45, 56, 32,' 10, 90, 55
CLS
INPUT "Введите количество элементов массива"; N
DIM MASS(N)
FOR 1=1 ТО N
READ MASS(I)
? MASS(I); NEXT I
Программа стала несколько короче, т. к. в этом случае можно совместить чтение данных из data и одновременный вывод их на экран — ведь пользователь освобожден от необходимости вводить данные с клавиатуры. Мы сразу увидим массив на экране.
Этот способ экономичней первого, и, кроме того, при отладке программы нет нужды всякий раз заново вводить данные.
Заполнение одномерных массивов и вывод их на экран
Заполнение одномерных массивов и вывод их на экранПервая задача, встающая перед программистом прежде чем, обработать массив, — заполнить его "жильцами". Для этого в Бейсике существует несколько способов, которые мы и рассмотрим. Кроме того, для контроля правильности заполнения, лучше бы сразу выводить массив на экран, чтобы потом можно было проверить правильность решения поставленной задачи.
Для всех случаев мы рассмотрим один и тот же пример — заполнить массив N целыми числами, каждое из которых не более 100. Мы не берем конкретное значение N, чтобы вы понимали: программа не должна зависеть от исходных данных. Сейчас мы хотим создать массив из 10 чисел, а в следующий раз — из 1000. Программа останется той же.
Basic вводный курс
Анаграммы (русский язык и программирование)
Анаграммы (русский язык и программирование)Игра со словами. Анаграмма — это слово, в котором перепутаны буквы, например, "ШАДОЛЬ" — это "ЛОШАДЬ", а "ТИВОНКР" — это "ВТОРНИК". Программа рассчитана на двух игроков, соревнующихся друг с другом. В качестве слов используются только имена существительные, нарицательные, в единственном числе, в именительном падеже. Первый игрок вводит с клавиатуры слово длиной не менее пяти, но не более восьми букв (постарайтесь сделать так, чтобы во время ввода на экране вместо букв отображались символы *). Затем компьютер определяет длину введенного слова, разбирает его на отдельные символы, заносит их в массив, откуда случайным образом выводит на экран. Соперник в течение 2-х минут (время определяет компьютер) должен определить это слово. В случае правильного ответа (который он вводит с клавиатуры) он получает 1 очко, и сам загадывает слово первому игроку. Игра идет до 5 очков. За неправильный ответ очки не начисляются. Безусловно, приветствуется дружественный интерфейс: запрос и обращение к игрокам по именам, вывод на экран правил игры, графическое и звуковое оформление.
Царь-пушка (математика, физика, экономика, история, русский язык и программирование)
Царь-пушка (математика, физика, экономика, история, русский язык и программирование)Выполните расчет рентабельности изготовления ядер для "Царь-пушки".
Царь выделил 10 млн рублей на изготовление наиболее рентабельных ядер для Царь-пушки. Необходимо написать программу, рассчитывающую рентабельность изготовления ядер для 17 различных материалов, сэкономив таким образом для государственной казны значительные средства, которые могли бы быть затрачены на проверку рентабельности в полевых условиях с использованием натуральных материалов.
Исходные данные таковы. Отпущено денег 10 млн руб. Калибр Царь-пушки, фамилию мастера и год изготовления выясните дома. Взяв из табл. 1.6 исходные данные, создайте файл pushka.dat.
Кинотеатр "Кристалл-Палас" (математика, экономика и программирование)
Кинотеатр "Кристалл-Палас" (математика, экономика и программирование)И еще одно очень объемное задание. Представьте себе, что вас приглашают в кинотеатр "Кристалл-Палас", расположенный на Невском проспекте, на должность директора. Когда вы пытаетесь узнать, сколько же вам будут платить, то говорят, что сейчас заодно и проверят ваши деловые способности, и предлагают написать программу, используя следующие исходные данные. В кинотеатре "Кристалл-Палас" три зала: "Красный", "Зеленый" и "Синий". Залы одинаковы и представляют собой квадраты 11x11 кресел. В результате маркетинговых исследований были установлены показатели по заполнению зала в среднем (Рисунок 1.77).
Игровое поле для "тараканьих бегов"
Рисунок 77. Игровое поле для "тараканьих бегов"
Рассадка зала
Рисунок 77. Рассадка зала
Первым делом, чтобы облегчить себе жизнь, создадим файл исходных данных, в котором будет содержаться массив 11x11, элементами которого будут цифры из таблицы. Здесь цифры 1 и 2 будут обозначать мужчин, 3 и 4 — женщин, 5 и 6 — детей, 7 и 8 — тех, кто имеет право на льготные билеты, 0 — пустые места и 9 — знакомые и родственники служащих кинотеатра, которые ходят в кино бесплатно. К исходным данным также относится курс доллара на сегодняшний день. Цены на билеты в зависимости от времени сеанса и принадлежности к той или иной категории зрителей приведены в табл. 1.7, а затраты от общей прибыли — в табл. 1.8.
Стрельба из пушки (физика, математика и программирование)
Стрельба из пушки (физика, математика и программирование)Вариант 1
В замке в заточении томится прекрасная принцесса. В стене замка имеется небольшое окошко-бойница. У нас есть пушка. Необходимо передать принцессе план побега, выстрелив им из пушки (и, естественно, попав). Дается всего три попытки. Исходными данными являются угол наклона ствола пушки по отношению к горизонту и начальная скорость полета ядра. Они запрашиваются с клавиатуры. Предусмотреть примитивное изображение пушки (Рисунок 1.75), поворот ствола в зависимости от введенного угла, вычерчивание траектории полета ядра, реакцию замка на попадание в стену ядра, вывод на экран текста плана побега в случае правильного попадания.
Дуэль на пушках через каменную
Рисунок 1.75. Стрельба из пушки: вариант 1
Вариант 2
Дуэль на пушках через каменную стену — кто кого. Пушки теперь есть у двух игроков. Они небольшого размера. Стреляют по очереди, также задавая угол и скорость полета ядра в пределах: угол от 10° до 90°, начальная скорость от 30 до 100 м/с. Попадание засчитывается, если расстояние от центра ядра до центра колеса пушки не более 20 экранных точек. В таком случае противник проигрывает. Высота стены каждый раз выбирается случайным образом в пределах от 50 до 200 экранных точек (Рисунок 1.76). Игра идет до трех побед.

Рисунок 76. Стрельба из пушки: вариант 2
Исходные данные для задания "Царь-пушка"
Таблица 1.6. Исходные данные для задания "Царь-пушка"| № | Материал | Плотность г/см3 | Себестоимость руб./кг | Коэффициент убойной силы |
| 1 | Платина | 21,5 | 3636,36 | 1000,0 |
| 2 | Золото | 19,3 | 3090,91 | 950,0 |
| 3 | Свинец | 11,3 | 178,18 | 900,0 |
| 4 | Серебро | 10,5 | 454,55 | 800,0 |
| 5 | Медь | 9 | 81,82 | 300.0 |
| 6 | Никель | 8,9 | 92,73 | 340,0 |
| 7 | Железо | 7,9 | 29,09 | 500,0 |
| 8 | Олово | 7,3 | 67,27 | 550,0 |
| 9 | Титан | 4,5 | 203,64 | 450,0 |
| 10 | Алюминий | 2,7 | 21,82 | 450,0 |
| 11 | Глина | 2,2 | 3,64 | 0,1 |
| 12 | Каучук | 0,9 | 25,45 | 130,0 |
| 13 | Цинк | 7,1 | 60,00 | 610,0 |
| 14 | Графит | 2,5 | 9,09 | 2,5 |
| 15 | Латунь | 8,24 | 73,09 | 230,0 |
| 16 | Мельхиор | 5,42 | 84,00 | 200.0 |
| 17 | Чугун | 7,63 | 28,09 . | 440,0 |
);
;-, где К— коэффициент убойной силы.
.Цены билетов в кинотеатре "Кристалл-Палас"
Таблица 1.7. Цены билетов в кинотеатре "Кристалл-Палас"| Категория зрителей | Цена билетов (руб.) | ||
| Утро (1 сеанс) | День (3 сеанса) | Вечер (2 сеанса) | |
| Мужчины | 70 | 100 | 200 |
| Женщины | 50 | 70 | 150 |
| Дети | 30 | 50 | 100 |
| Льготники | 10 | 20 | 50 |
Затраты из общей прибыли за месяц
Таблица 1.8. Затраты из общей прибыли за месяц| Затраты | % | Затраты | % |
| Амортизация | 12 | Охранные структуры | 25 |
| Налоги | 22 | Новые фильмы | 22 |
| Зарплата сотрудникам | 16 | Директор | 3 |
Тараканьи бега (математика, дизайн и программирование)
Тараканьи бега (математика, дизайн и программирование)Конечно, сейчас уже далеко не все из вас смотрели фильм "Бег", поставленный по роману М. Булгакова. В частности, в нем есть сюжет о том, как наши эмигранты первой волны зарабатывали себе в Париже на жизнь. Одним из источников их доходов были тараканьи бега. Попробуем реализовать их компьютерную версию.
Тесты (психология, русский язык и программирование)
Тесты (психология, русский язык и программирование)Для этого задания вы можете взять любой тест из многочисленных выпускаемых сейчас журналов. Создайте файл исходных данных — вопросов и вариантов ответов. Напишите программу, знакомящуюся с пользователем, сообщающую ему цель теста и инструкцию по работе с программой, проводящую тест, анализирующую результаты и выводящую итоги, взятые из другого файла данных.
Такая программа может использоваться как для психологических тестов, так и для проверки знаний в какой-либо области.
Если с одним тестом у вас получилось, то можно написать целую гибкую систему тестирования, где пользователю предлагается выбор из нескольких тестов, а также непосредственное создание тестов самому.
Итак, вы уже имеете некий багаж знаний, который никогда не бывает лишним, вы уже пользуетесь уважением у друзей и преподавателей, вы получаете только пятерки по программированию, но впереди — моря и океаны новых знаний. Ничего не бойтесь, и все у вас получится!
Удачи!
Угадайка (математика и программирование)
Угадайка (математика и программирование)Компьютер случайным образом загадывает число от 1 до 100.
Задача пользователя — за минимальное
Задания повышенной трудности
Задания повышенной трудностиЕсли вы добрались до сих слов, дорогой читатель, то дальше, полагаю, вы сможете идти один, гордо неся знамя российского программирования над миром (ведь только в США 80% разработчиков программного обеспечения и математиков — наши соотечественники).
Напоследок я хочу предложить вам ряд разнообразных задач, поломав голову над которыми, вы приобретете неоценимую закалку и опыт. Они будут без решений. Кроме того, подобные задания всегда хочется видеть не просто работающими, но и оформленными, и снабженные такими "FOOL PROOF" (защитой от дурака, т. е. выдерживающими случайные нажатия не тех клавиш неопытными пользователями), чтобы с ними было приятно работать.
Basic вводный курс
Арифметика в Бейсике
Арифметика в БейсикеЦиклический алгоритм
Циклический алгоритмРешения
Глава 5. Решения| Содержание |
Графика в Бейсике
Графика в БейсикеЛинейный алгоритм
Линейный алгоритмОператор присваивания
Оператор присваиванияОператоры DATA и READ
Операторы DATA и READРазветвляющийся алгоритм
Разветвляющийся алгоритмРисунок ание квадрата со стороной
Рисунок ание квадрата со стороной 200LINE (100, 100)-(300, 300), 14, В
' Рисунок ание вписанной в квадрат окружности радиусом
100CIRCLE (200, 200), 100, 0, , , 1.01
' Задание общего количества песчинок N
' и обнуление счетчика попавших в круг KN=5000: K=0
FOR 1=1 ТО N
X=INT(RND(1)*200)+100
Y=INT(RND(1)*200)+100 ' Вычисление расстояния от выпавшей точки до центра
S =SQR((X-200)Л2+(У-200)"2) ' Проверка условия, попала ли точка в круг 1 и изображение ее красным или белым цветами IF S<=100 THEN K=K+1: PSET (X, Y) , 4 ELSE PSET (X, Y) , 15 ' Вывод на экран счетчиков песчинок LOCATE 5, 20: PRINT "Выпала песчинка №"; I
LOCATE 6, 20: PRINT "В круг уже попало"; К; "песчинок" NEXT I
1 Вычисление и вывод на экран значения числа Пи LOCATE 23, 15: PRINT "Число ПИ для"; N; "точек ="; 4*K/N END
Рисунок ание закрашенного квадратика
Рисунок ание закрашенного квадратикаLINE (X, Y)-(X + 10, Y + 10), С, BF
' Обводка квадратика белым контуром
LINE (X, Y)-(X + 10, Y + 10), 15, В NEXT Y NEXT X END
Символы и строки
Символы и строкиСтандартные функции Бейсика
Стандартные функции БейсикаТаблица умножения 1:INPUT "Введите
Таблица умножения1:INPUT "Введите целое число от 2 до 9"; N
IF N<2 OR N>9 THEN ?"От 2 ДО 9!": GOTO 1
? "Таблица умножения на "; N
FOR I = 2 ТО N
? I; "*"; N; "="; I*N NEXT I END
Условный переход
Условный переходВводим данные
Вывод данных в заданном месте экрана
Вывод данных в заданном месте экранаВыводим результаты
Выводим результатыBasic вводный курс
Цвет символов и цвет фона: оператор COLOR
Цвет символов и цвет фона: оператор COLORОператор color имеет следующий синтаксис:
COLOR N1, N2
Предназначен он для изменения цвета символов на N1, а цвета фона (т. е. экрана) — на N2. Если в записи оператора опустить параметр ni, to он будет записываться так:
COLOR , N2
и станет изменять только цвет фона. Например:
CLS
SCREEN 9
FOR N2 = 0 ТО 15
COLOR , N2
SLEEP I NEXT N2
Запустив данную программу, вы увидите с паузой в 1 секунду все возможные цвета из табл. 3.3, в которые будет окрашен фон.
Если опустить параметр N2, то оператор color будет менять только цвет символов. Например:
SCREEN 9
FOR I = О ТО 15
COLOR I
PRINT I NEXT I
Цвет точки экрана: функция POINT
Цвет точки экрана: функция POINTВы можете определить, какой цвет имеет в данный момент любая точка экрана, задав ее координаты в виде аргумента функции point (x,y). Например:
SCREEN 9
LINE (0, 0)-(100, 100), 4
LOCATE 10, 1 FOR у = 1 ТО 10
FOR X = 1 ТО 10
PRINT POINT(x, у);
NEXT x
PRINT NEXT у
Данная программа рисует линию зеленого цвета по диагонали, начиная с верхнего левого угла, а затем во вложенных циклах поточечно сканирует область от точки с координатами (1, 1) до точки с координатами (10, 10) и выдает на экран массив составляющих ее цветов. Он будет выглядеть следующим образом:
2000000000
0200000000
0020000000
0002000000
0000200000
0000020000
0000002000
0000000200
0000000020
0000000002
Дополнительные возможности
Дополнительные возможностиЗдесь хотелось бы рассказать о возможностях Бейсика, позволяющих писать более красивые программы, работать с которыми пользователю было бы приятно, и в душе он поминал бы вас хорошими словами.
Движущиеся изображения: операторы GET и PUT
Движущиеся изображения: операторы GET и PUTПростой способ "оживить" экран состоит в исполнении операторов get и put. Они позволяют "снять" изображение с части экрана и повторить его в другом месте. Это происходит очень быстро, поскольку исходная фигура не перерисовывается теми графическими операторами, которыми она вначале была создана, а просто дублируются все ее точки.
Представленная ниже программа рисует блоху, которая "скачет" по экрану, т. к. сначала оператор get сохраняет ее изображение, а затем оператор put копирует это изображение в любое заданное место экрана. Ощущение движения возникает из-за того, что перед каждым "прыжком" блохи ее старое изображение стирается.
CLS
SCREEN 9
COLOR 9, 1
REM
Дополнительные возможности
Глава 6. Дополнительные возможности| Содержание |
Экранные режимы: оператор SCREEN
Экранные режимы: оператор SCREENНаиболее распространены сейчас видеосистемы VGA, а более всего SVGA. Поэтому рассматривать мы будем только их. Во многих школах, конечно, все еще можно встретить разношерстные HGA, CGA, EGA, но не будем ориентироваться на прошлое.
Основными характеристиками видеосистемы являются ее разрешение, т. е. количество экранных точек (что определяет качество выводимого изображения) и количество отображаемых цветов и оттенков. Для видеосистем VGA и SVGA характеристики перечислены в табл. 3.1.
Музыка в Бейсике: оператор PLAY
Музыка в Бейсике: оператор PLAYОператор play позволяет составлять музыкальные фрагменты и проигрывать их в различных сочетаниях в ходе выполнения программы. Как и оператор draw, оператор play имеет свой набор команд для определения мелодии. С помощью этих команд вы можете задать темп, октаву, паузы и другие музыкальные характеристики. Команды объединяются в строку и присваиваются строковой переменной. Когда вы захотите услышать мелодию, обратитесь к оператору play с командой
"X"+VARPTR (строковая переменная)
В представленной ниже программе оператор play используется для последовательного проигрывания нот в семи октавах.
Последовательно проигрывает все ноты в 7 октавах scale$ = "CDEFGAB" PLAY "LI6" FOR I = 0 ТО 6
PLAY "0" + STR$(1%)
PLAY "X" + VARPTR$(scale$) NEXT I
А вот еще один пример — всем известная мелодия "Happy birthday to you!".
CLS
PLAY "L8 MF MS 03 GG L4 AG 04 С 03 L2 В"
PLAY "L8 MF MS 03 GG Ы AG 04 D L2 C"
PLAY "L8 MF MS 03 GG L4 04 GE L8 CC 03 L4 В А"
PLAY "04 L8 FF L4 ECD LI C"
END
Все команды оператора play перечислены в табл. 3.4. Испытав их, вы убедитесь, что они предоставляют широкие возможности для "музицирования". Таково еще одно замечательное применение двоичного кода.
Одиночный звуковой сигнал: оператор ВЕЕР
Одиночный звуковой сигнал: оператор ВЕЕРЗвуковое оформление можно осуществить с помощью оператора веер. Это, вероятно, самый простой, но весьма полезный оператор Бейсика. Он вызывает звуковой сигнал из динамика — гудок продолжительностью четверть секунды — и обеспечивает тот же эффект, что и оператор print chr$(7). Несколько таких гудков подряд дадут длительный сигнал и привлекут, если требуется, ваше внимание к программе. Попробуйте поэкспериментировать со следующими операторами:
FOR В = 1 ТО 10
ВЕЕР NEXT В
C2 L20 U20 R20 D20
Рисунок ание блохиDRAW " C2 L20 U20 R20 D20 F10 D10 R2"
DRAW "BM300,175 C2 G10 D10 L2"
DRAW "ВМ300Д55 С2 НЮ ЕЮ L2"
DRAW "BM320,155 C2 ЕЮ НЮ R2"
DRAW "ВМ310Д55 С2 U4"
DRAW "ВМ307,151 С2 RIO H6 G6"
PAINT (310, 170), 2, 2
BYTES = INT((55 *2+7)/8)*60
DIM BUG(BYTES)
GET (285, 135)-(340, 195), BUG
CLS
PUT (250, 80), BUG: SLEEP 1
PUT (250, 80), BUG: SLEEP 1
PUT (30, 60), BUG: SLEEP 1
PUT (30, 60) , BUG: SLEEP 1
PUT (460, 130) , BUG : SLEEP 1
PUT (460, 130) , BUG : SLEEP 1
PUT (180, 70), BUG: SLEEP 1
PUT (180, 70), BUG: SLEEP 1
PUT (300, 70), BUG: SLEEP 1
END
Оператор GET
Прежде чем выполнить оператор get, нужно провести важную подготовительную работу: определить местоположение и размер той области экрана, которую вы хотите снять. Большую помощь в этом вам окажет предварительный набросок на миллиметровой бумаге, где каждый квадратик сопоставляется с точкой экрана.
Оператор get запоминает в массиве изображение заданной области экрана. Поэтому нужно заранее описать массив оператором dim. Существует формула, определяющая требуемую длину массива исходя из размеров запоминаемой области и режима работы экрана. Формула для средней разрешающей способности экрана такова:
INT ( (число точек по горизонтали * 2 + 7) /8) * число точек по вертикали
Формула для высокой разрешающей способности экрана:
INT {(число точек по горизонтали + 7) /8) * число точек по вертикали
В строке программы, содержащей присваивание переменной bytes, подсчитывается длина массива, необходимая для изображения блохи при средней разрешающей способности.
Рисунок ок занимает примерно 55
Рисунок ок занимает примерно 55 позиций по .горизонтали и 60 — по вертикали. Результат вычисления определяет длину массива bog в следующей строке.Оператор
GET (285, 135)-(340, 195), BUG
переписывает в массив bug содержимое прямоугольной области экрана, левый верхний угол которой совпадает с точкой (285, 135), а правый нижний — с точкой (340, 195).
Оператор PUT
Теперь уже совсем просто "посадить" блоху в любое место экрана. Это делается с помощью оператора put. В строках, следующих за оператором get программы, содержимое массива bug размещается на экране с той позиции, которая указана в операторах put. Так, оператор
PUT (250, 80), BUG
накладывает содержимое области экрана, снятое с помощью get, на прямоугольник, левый верхний угол которого находится в точке (250, 80). Эффект наложения таков, что если два одинаковых оператора put следуют подряд, то второй нейтрализует действие первого: изображение сначала рисуется, а затем стирается. Таким образом, несколько сдвоенных операторов put создают иллюзию движения изображения.
Дополнительный параметр оператора put определяет способ наложения рисуемого изображения с тем, что уже есть на экране. Оператор с параметром pset
PUT (250, 80), BUG, PSET
игнорирует прежнее изображение в данной области экрана. Оператор
PUT (250, 80), BUG, PRESET
действует так же, но рисует негативное изображение, а оператор
PUT (250. 80), BUG, XOR
действует так же, как оператор без последнего параметра. Два таких оператора, следующих подряд, рисуют и тут же стирают изображение, оставляя экран неизменным.
Оператор
PUT (250, 80), BUG, AND
оставляет только общую часть нового и старого изображения. Оператор
PUT (250, 80), BUG, OR
"добавляет" изображение к тому, что уже есть на экране. Поэкспериментируйте с оператором put и постарайтесь использовать предоставляемые им возможности.
Характеристики видеосистем
Таблица 3.1. Характеристики видеосистем| VGA (Video Graphics Array) | 640x480 | 256 |
| SVGA (Super Video Graphics Array) | до 1024x1024 | До 16 миллионов |
Экранные режимы для адаптеров VGA и SVGA
Таблица 3.2. Экранные режимы для адаптеров VGA и SVGA| Номер режима | Разрешение | Количество цветов |
| 0 | текстовый режим | 16 |
| 1 | 320x200 | 4 |
| 2 | 640x200 | 2 |
| 7 | 320x200 | 16 |
| 8 | 640x200 | 16 |
| 9 | 640x350 | 16 |
| 10 | 640x350 | 2 |
| 11 | 640x480 | 2 |
| 12 | 640x480 | 16 |
| 13 | 320x200 | 256 |
Возможные цвета
Таблица 3.3. Возможные цвета| Номер | Цвет |
| 0 | Черный |
| 1 | Синий |
| 2 | Зеленый |
| 3 | Голубой |
| 4 | Красный |
| 5 | Фиолетовый |
| 6 | Коричневый |
| 7 | Светло-серый |
| 8 | Темно-серый |
| 9 | Светло-синий |
| 10 | Светло-зеленый |
| 11 | Светло-голубой |
| 12 | Светло-красный |
| 13 | Васильковый |
| 14 | Желтый |
| 15 | Ярко-белый |
Команды оператора PLAY
Таблица 3.4. Команды оператора PLAY| Команда | Действие |
| Буква от А до G | Исполнение ноты, обозначенной указанной буквой |
| Буква от А до G, за которой следует знак #, + или - | Исполнение ноты в соответствии с буквой, где знак # или + означают "диез", а знак — соответствует "бемоль" |
| Lx | Исполнение последующих нот с интервалом 1/х, где х меняется в диапазоне от 1 до 64 |
| Ox | Играть в октаве х. Третья октава начинается со среднего "ми" (нота С). Всего имеется семь октав (с 0 по 6), расположенных между "ми" и "ре" (от С до В) |
| Px | Пауза длительностью 1/х (х от 0 до 64) |
| Tx | Задание темпа или четвертных нот, исполняемых в минуту (х может меняться от 32 до 255; по умолчанию равно 120) |
| Nx | Исполнение ноты х, которая может меняться от 0 до 84. Каждая октава имеет 12 нот, включая диезы и бемоли. 0 означает паузу |
| MN | Нормаль. Каждая нота звучит 7/8 времени, заданного в команде L |
| ML | Легато. Каждая нота звучит полный интервал, заданный в команде L |
| MF | Стаккато. Каждая нота звучит 3/4 времени, заданного в команде L |
| MS | Установка режима непосредственного исполнения. Каждая нота, заданная в операторах PLAY н sound, исполняется только после завершения предыдущей. Исполнение программы приостанавливается до окончания музыки. Этот режим принимается по умолчанию |
| MB | Установка режима фонового исполнения. Каждая нота, заданная в операторах PLAY и SOUND, сохраняется в отдельном буфере и исполняется в процессе работы основной программы |
| . (точка) | Увеличение продолжительности звучания на 50% |
В очередной программе фоновая музыка делает поздравление из ранее рассмотренного примера более теплым. В операторах play команда mf заменена командой мв (фоновое исполнение). В результате программа выводит на экран имя именинника, не дожидаясь окончания музыки. Музыка продолжается в процессе исполнения цикла for. . .next, во время которого на экране пишется имя крокодила Гены.
' Поздравление с днем рождения!
CLS
PLAY "L8 MB MS 03 GG L4 AG 04 С 03 L2 В"
PLAY "L8 MB MS 03 GG L4 AG 04 D L2 C"
PLAY "L8 MB MS 03 GG L4 04 GE L8 CC 03 L4 В А"
PLAY "04 L8 FF L4 ECD LI C"
FOR I = 1 TO 24
LOCATE I, I
PRINT "КРОКОДИЛ ГЕНА, С ДНЕМ РОЖДЕНИЯ!" NEXT I END
В следующей программе параметр х цикла for...next внутри цикла используется для обозначения длительности звучания ноты G (соль) в третьей октаве.
FOR X = 1 ТО 64
PLAY "L" + STR$(X)
PLAY "03G" NEXT
Поскольку аргумент команды L является знаменателем дроби, обозначающей длительность ноты, с возрастанием х длительность звучания становится все короче. Запустите программу и вы услышите музыку, напоминающую звук скачущего пластмассового шарика.
Звуковое оформление: оператор SOUND
Звуковое оформление: оператор SOUNDЗапустите программу, приведенную ниже, и вы поймете, как работает оператор sound. Вы услышите звук той частоты и длительности, которые указаны как параметры оператора. Первый параметр х определяет частоту в диапазоне от 37 до 32 767 Гц, хотя высокие частоты едва ли будут приятны (если вообще доступны) для вашего слуха.
FOR S = 37 ТО 3000 STEP 100
SOUND X, 18 NEXT X
Второй параметр 18 задает длительность звучания, измеряемую в тактах часового механизма ("тиках"). Поскольку секунде соответствует 18,2 "тика", в нашем примере звук каждой частоты длится примерно одну секунду.
Обычно оператор sound не исполняется до тех пор, пока не "прозвучит" предыдущий оператор. Однако оператор sound с нулевой длительностью, сам по себе не вызывающий звука, прерывает работу предыдущего оператора sound, даже если тот не отзвучал до конца.
Пример программы, воспроизводящей звуки занятой телефонной линии:
Как работает оператор SOUND
CLS
FOR S = 1 ТО 10
SOUND 25000, 3
LOCATE 20, 11: ?" Занято! "
SOUND 400, 5 NEXT S
Первый оператор sound воспроизводит звук очень высокой частоты, не воспринимаемой человеческим ухом, и прерывает звук, создаваемый вторым оператором sound.
Basic вводный курс
Язык Qbasic. Краткий справочник
Язык Qbasic. Краткий справочникЗдесь мне хочется коротко представить наиболее часто используемые операторы Бейсика, снабдив их краткими комментариями (табл. П1—П10). Полная справка по языку имеется в его оболочке, где вы легко можете найти полные сведения о том или ином операторе с наглядными примерами.
Коды ASCII
Коды ASCIIСтандартные и расширенные ASCII-коды опубликованы уже в сотнях книг, посвяшенных программированию. Более того, вы уже можете написать программу, выводящую их на экран. К тому же эти коды есть в справочной системе нашего Бейсика. Но все равно хочется почему-то иметь их перед глазами.
Недолго думая, я взял их из вышеупомянутой системы при помощи клавиши
П1. Стандартные коды (0—127)
Рисунок П1. Стандартные коды (0—127)
П2. Расширенные коды (128—255)
Рисунок П2. Расширенные коды (128—255)
Сообщения об ошибках и их коды
Сообщения об ошибках и их кодыКоды сообщений об ошибках приведены в табл. ПИ. Для наиболее распространенных ошибок даются комментарии.
П1. Числовые функции
Таблица П1. Числовые функции| Функция | Описание |
| ABS | Возвращает абсолютное значение (модуль) аргумента |
| ATN | Арктангенс (в радианах) |
| CDBL | Переводит числовое выражение в значение с двойной точностью |
| CINT | Округление |
| CLNG | Округление числового выражения до длинного (4 байта) целого значения |
| COS | Косинус |
| CSNG | Переводит числовое выражение в значение с одинарной точностью |
| ЕХР | Экспонента ех |
| FIX | Округление выражения с плавающей запятой до его целой части |
| INT | Возвращает наибольшее целое, меньшее либо равное числовому выражению |
| LOG | Натуральный логарифм числового выражения |
| RND | Случайное число одинарной точности между 0 и 1 |
| SCN | Возвращает значения знака числового выражения (1, если выражение положительное; 0, если равно 0 и —1, если отрицательно) |
| SIN | Синус |
| SQR | Корень квадратный |
| TAN | Тангенс |
П10. Строковые функции
Таблица П10. Строковые функции| Функция | Описание |
| CHR$ | Возвращает ASCII-код первого символа в строковом выражении |
| | DATE? | Возвращает текущую системную дату |
| INSTR | Возвращает позицию первого вхождения подстроки в строку |
| LCASES | Переводит все символы строковой переменной в строчные буквы |
| LEET$ | Возвращает указанное число символов слева строки |
| LEN | Возвращает длину строковой переменной в символах |
| MID$ | Возвращает указанное число символов из середины строковой переменной, начиная с указанной позиции |
| RIGHT$ | Возвращает указанное число символов справа строки |
| SPACE$ | Возвращает строку пробелов |
| STRING$ | Возвращает строку указанных символов |
| UCASE$ | Переводит все символы строковой переменной в прописные буквы |
П11. Сообщения об ошибках
Таблица П11. Сообщения об ошибках| Код | Сообщение об ошибке |
| 1 | NEXT без FOR Для окончания цикла NEXT нет соответствующего заголовка FOR. Количество FOR и NEXT должно совпадать |
| 2 | Синтаксическая ошибка Оператор содержит грамматическую ошибку в написании ключевого слова или ошибку в пунктуации, либо есть непарные скобки или другие нарушения правил синтаксиса языка Бейсик |
| 3 | RETURN без GOSUB Для оператора возврата из подпрограммы RETURN нет соответствующего обращения к подпрограмме GOSUB |
| 4 | Нет данных В операторе DATA нет данных. Посчитайте количество данных в операторе DATA и количество считываний из него оператором READ. Посмотрите внимательно, не поставили ли вы при перечислении данных в каком-нибудь месте точку вместо запятой |
| 5 | Неверный вызов функции Возникает чаще всего при попытке извлечения квадратного корня из отрицательного числа или применения графических операторов без включения графического режима SCREEN. Вообще же подобное сообщение возникает при попытке вызова функции с недопустимым параметром |
| 6 | Переполнение Числовая переменная или строковая константа выходят за пределы допустимого диапазона. Проверьте и измените значение в случае необходимости |
| 7 | Не хватает памяти |
| 8 | Метка не определена Оператор GOTO или GOSUB пытаются осуществить переход на несуществующую метку |
| 9 | Индекс вне режима Сообщение возникает при работе "с массивами, когда индекс какого-либо элемента массива превышает его объявленный в операторе DIM размер, а также в том случае, когда массив занимает в памяти объем более 64 Кбайт |
| 10 | Повторяющееся определение |
| 11 | Деление на ноль Выражение в знаменателе после подстановки соответствующих переменных и вычислений, видимо, обращается в ноль |
| 12 | Ошибка в режиме управления |
| 13 | Ошибка ввода |
| 14 | В строке нет места |
| 16 | Слишком сложная строковая формула |
| 17 | Невозможно продолжить |
| 18 | Функция не определена Возможно, используемая функция не определена оператором DEF FN, или допущена ошибка при определении или вызове функции |
| 19 | Нет RESUME |
| 20 | RESUME без ошибки |
| 24 | Устройство в тайм-ауте |
| 25 | Ошибка устройства |
| 26 | FOR без NEXT Для заголовка цикла FOR нет соответствующего окончания цикла NEXT. Количество FOR и NEXT должно совпадать |
| 21 | Нет бумаги |
| 29 | WHILE без WEND Для ключевого слова WHILE нет соответствующего слова WEND |
| 30 | WEND без WHILE Для ключевого слова WEND нет соответствующего слова WHILE |
| 33 | Повторяющаяся метка При расстановке меток допущен повтор одной и той же метки в разных местах программы |
| 35 | Подпрограмма не определена Сообщение возникает при попытке обращения к несуществующей подпрограмме |
| 37 | Ошибка счетчика аргументов |
| 38 | Массив не определен Попытка работать с элементами массива, который не был объявлен оператором DIM |
| 40 | Необходима переменная |
| 50 | Переполнение FIELD |
| 51 | Внутренняя ошибка Чаще всего неверная работа компьютера, реже — смысловые ошибки программы, не сразу различимые на первый взгляд. Часто требуется ручная прокрутка программы |
| 52 | Плохое имя файла/плохой номер Имя файла не соответствует требованиям DOS |
| 53 | Файл не найден При попытке обращения к файлу указано неправильное его имя или путь к нему |
| 54 | Плохой режим файла |
| 55 | Файл уже открыт Попытка повторного открытия файла или удаления открытого файла |
| 56 | Оператор FIELD активен |
| 57 | Ошибка в/вв устройства |
| Ошибка устройства ввода/вывода, с которой не справляется DOS. Попробуйте посмотреть, все ли в порядке с аппаратной частью, т. е. внешними устройствами компьютера | |
| 58 | Файл уже существует Попытка сохранить файл под именем уже существующего на диске файла |
| 59 | Неверная длина записи |
| 61 | Диск заполнен Диск, на который производится запись файла, не имеет достаточно места для этого. Надо освободить дисковое пространство, удалив что-нибудь менее важное |
| 62 | Ошибка: введен конец файла |
| 63 | Неверный номер записи |
| 64 | Плохое имя файла Имя файла не соответствует требованиям DOS |
| 67 | Слишком много файлов |
| 68 | Устройство недоступно В дисководе нет диска или он испорчен |
| 69 | Переполнение буфера коммуникации Попытка копирования в буфер слишком большого обьема информации |
| 70 | Нет разрешения |
| 71 | Ошибка формата диска В дисководе нет диска или он испорчен |
| 72 | Ошибка диска В дисководе нет диска или он испорчен |
| 73 | Недоступная возможность |
| 74 | Переименование через диски |
| 75 | Ошибка доступа к пути/файлу |
| 76 | Путь не найден При попытке обращения к файлу указано неправильное его имя или путь к нему |
П2. Функции графики и экрана
Таблица П2. Функции графики и экрана| Функция | Описание |
| CIRCLE | Рисунок ание окружностей и эллипсов |
| CLS | Очистка текстовой и графической областей экрана |
| COLOR | Установка цветов экрана |
| CSRLIN | Возвращает текущую позицию строки курсора |
| DRAW | Рисунок ание объектов при помощи набора специальных команд |
| GET | Сохранение в памяти графической прямоугольной области экрана |
| LINE | Рисунок ание отрезка прямой линии, прямоугольников со сторонами, параллельными экрану |
| LOCATE | Перемещение курсора в указанную позицию |
| PAINT | Закрашивание замкнутого контура |
| PALETTE | Изменение установок атрибутов цвета |
| PALETTE USING | Изменение атрибутов цвета пользователем |
| PCOPY | Копирование одной страницы видеопамяти в другую |
| PRESET | Рисунок ание точки цветом фона |
| Вывод данных на экран или в файл | |
| PRINT USING | Осуществляет форматированный вывод данных на экран или в файл |
| PSET | Рисование точки |
| PUT | Вывод на экран образа, сохраненного оператором GET |
| SCREEN | Установка режима и характеристик экрана |
| VIEW | Определяет размер и положение области просмотра, в которую может быть выведена графическая информация |
| VIEW PRINT | Устанавливает на экране границы области просмотра текста |
| WIDTH | Изменение числа строк и столбцов, видимых на экране |
| WINDOW | Определяет логическое пространство для текущей графической области просмотра |
| WRITE | Запись данных на экран или в последовательный файл |
П4. Операторы и функции для работы с файлами
Таблица П4. Операторы и функции для работы с файлами| Оператор, функция | Описание |
| CLOSE | Закрывает один или несколько файлов или устройств |
| FIELD | Отводит место под переменные в буфере файлов прямого доступа |
| FILEATTR | Возвращает информацию об открытом файле |
| GET | Считывает из файла в буфер прямого доступа или в переменную |
| INPUT # | Считывает данные из файла |
| IOCTL | Посылает управляющую строку драйверу устройства |
| LINE INPUT # | Считывает строку до 255 символов с клавиатуры или из файла |
| LOCK | Ограничивает или закрывает доступ к файлу при работе в сети |
| OPEN | Открывает файл или устройство |
| PRINT # | Записывает данные в файл |
| PRINT # USING | Записывает отформатированные данные в файл |
| PUT | Записывает содержимое переменной или буфера прямого доступа в файл |
| RESET | Закрывает все открытые файлы и устройства |
| SEEK | Устанавливает позицию файла для последующей записи или считывания |
| UNLOCK | Снимает ограничения, наложенные последним оператором LOCK |
| WRITE # | Записывает данные в последовательный файл |
П5 . Переменные
Таблица П5 . Переменные| Конструкция | Описание |
| CLEAR | Закрывает все файлы, освобождает буферы файлов, очищает все общие переменные, устанавливает числовые переменные и массивы в ноль, устанавливает строковые переменные в ноль и инициализирует стек. Кроме того, CLEAR может изменять размер стека |
| CONST | Описывает одну или несколько символьных переменных |
| DATA | Указывает значения данных для последующего считывания оператором READ |
| INPUT | Считывает входные данные с клавиатуры или из файла |
| LET | Присваивает значение выражения переменной |
| RANDOMIZE | Инициализирует генератор случайных чисел |
| READ | Считывает данные, указанные в операторе DATA |
| RESTORE | Восстанавливает считанные значения в операторе DATA |
| SWAP | Обменивает значения двух переменных |
П6. Массивы
Таблица П6. Массивы| Конструкция | Описание |
| DIM | Оператор объявления массива |
| ERASE | Для статических массивов каждому элементу присваивается ноль. Для строкового — определяются строки нулевой длины. Для динамического — освобождает память, используемую массивом |
| OPTION BASE | Устанавливает нижнюю границу индекса массива |
| REDIM | Описывает или изменяет размер динамического массива |
П7. Циклы
Таблица П7. Циклы| Оператор | Описание |
| DO ... LOOP | Повторяет блок операторов, пока условие верно, или пока оно не станет верным |
| END | Заканчивает программу, процедуру или блок |
| FOR ... NEXT | Цикл с параметром, с заранее известным числом повторений |
| WHILE ... WEND | Выполняет блок операторов, пока указанное условие верно |
П8. Подпрограммы и функции
Таблица П8. Подпрограммы и функции| Оператор | Описание |
| CALL | Передает управление в процедуру типа SUB |
| DECLARE | Описывает процедуру типа FUNCTION или SUB |
| DEF FN | Определяет функцию |
| FUNCTION | Определяет процедуру FUNCTION |
| GOSUB | Переходит в подпрограмму и возвращается из нее |
| ON GOSUB | Выполняет переход к одной из нескольких подпрограмм в зависимости от выражения |
| RETURN | Возвращает из подпрограммы в основную программу |
| SUB | Определяет процедуру SUB |
П9. Звуки и музыка
Таблица П9. Звуки и музыка| Оператор | Описание |
| BEEP | Генерирует звуковой сигнал через встроенный динамик |
| ON PLAY GOSUB | Обращение к подпрограмме, когда число нот в музыкальном буфере меньше определенного числа |
| PLAY | Воспроизводит музыкальные ноты |
| SOUND | Генерирует звук через встроенный динамик |
ПЗ. Операторы выбора и перехода
Таблица ПЗ. Операторы выбора и перехода| Оператор | Описание |
| GOTO | Безусловный переход на метку |
| IF ... THEN ... ELSE | Переход в зависимости от истинности или ложности проверяемого условия |
| SELECT CASE | Переход в зависимости от значения выражения |
Программирование: Языки - Технологии - Разработка
- Программирование
- Технологии программирования
- Разработка программ
- Работа с данными
- Методы программирования
- IDE интерфейс
- Графический интерфейс
- Программирование интерфейсов
- Отладка программ
- Тестирование программ
- Программирование на Delphi
- Программирование в ActionScript
- Assembler
- Basic
- Pascal
- Perl
- VBA
- VRML
- XML
- Ada
- Lisp
- Python
- UML
- Форт
- Языки программирования