Basic

Урок №1

Не читать!

Данный урок создан DimonSoft. Запрещается использование данного урока и/или его частей в любых формах и проявлениях, кроме самообучения, без официального разрешения правообладателя. Содержание урока может полностью или частично не совпадать с общепринятой точкой зрения. Осуждению не подлежит.

Начать урок


Basic

Урок №1

  • Когда страшно начинать...
  • Собираемся в путь
  • Знакомимся со средой программирования
  • Начинаем командовать
  • Совершенствуем программу
  • Домашка

Когда страшно начинать...

Честно говоря, я подумывал назвать эту часть урока как-нибудь наподобие «Наш первый 3D-шутер», но посчитал, что начинать с обмана уж точно не есть хорошо. Поэтому рассчитываю, что Вы, уважаемый читатель, ответите на мою честность и прочтёте эту часть урока от начала до конца, не обращая внимания на то, что она вводная. В конце концов, дань традиции — это не единственное, что заставило меня добавить её в начало первого урока.

Если Вы остались, продолжу... Самое трудное в изучении языков программирования — начать. Когда я только-только начинал интересоваться программированием, получить ответы на вопросы мне было негде, кроме как в библиотеке. Трудно без смеха вспоминать, как я, приходя в библиотеку, жутко стеснялся. Прикрываясь братом, который и по сей день остаётся вымышленным персонажем, я (тогда всего лишь ученик третьего класса) брал заветную книжку и отправлялся домой читать её. Далеко не все книжки, с которыми мне довелось познакомиться, можно назвать хорошими: по некоторым из них я бы не научился писать программы даже сейчас, имея довольно богатый и разнообразный опыт. Но даже найдя хороший учебник многие ухитряются не разобраться и не научиться.

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

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

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

Напоследок хочу пожелать удачи и терпения в начатом Вами нелёгком деле. Глубокий вдох... выдох... Мы начинаем!

Собираемся в путь

Итак, решение принято, жребий брошен в Рубикон — Вы начинаете изучение языка программирования Basic.

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

Среда программирования, которой мы будем пользоваться, называется QBasic. Найти её в момент написания этих строк в сверхсекретной глобальной компьютерной сети с кодовым названием «Интернет» вполне реально. Лично я искренне верю, что и спустя много лет это не станет проблемой. Ладно, я отвлёкся... Приятная новость! QBasic не нуждается в установке, а это значит, что его можно запустить прямо из архива, с другого компьютера в сети и т.п., удаление этой среды программирования сводится к простому удалению соответствующей папки, можно взять её с собой на флешке и использовать на другом компьютере... Но я бы всё-таки посоветовал Вам создать на своём компьтере отдельную папку, в которую в будущем будут помещаться все среды программирования. На своих компьютерах я называю такую папку Language. В ней я создаю папку QBasic, где и оказывается наша среда программирования. Неплохой идеей будет также создать в папке с QBasic воженную папку для своих проектов. У меня эта папка обычно называется Programs или Projects.

Знакомимся со средой программирования

Настал ответственный момент знакомства со средой программирования. Именно в этой программе нам предстоит провести лучшие часы своей жизни: часы освоения основ программирования. Барабанная дробь... Запускаем QBasic. При запуске может появиться странное окошко с текстовым полем и кнопкой «OK» (как на рисунке 1.1). Всё, что нужно сделать в таком случае, — это как раз щёлкнуть по этой самой кнопке, ни о чём не задумываясь.

Окно, которое может появиться при запуске QBasic
Рисунок 1.1. Окно, которое может появиться при запуске QBasic

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

QBasic после запуска
Рисунок 1.2. QBasic после запуска

Вполне возможно, что среда запустится не в отдельном окне, а в полноэкранном режиме. Какой режим использовать — дело вкуса. Для «полного включения» я предпочитаю именно полноэкранный режим. К тому же это удобнее в том смысле, что не надо пялиться в экран, силясь разглядеть, что же написано: программа при работе в полноэкранном режиме читается куда легче. Впрочем, в некоторых ОС перевести приложение MS-DOS (а именно такм приложением является QBasic) в полноэкранный режим оказывается затруднительным, поэтому выбор зависит исключительно от Ваших возможностей и предпочтений. На всякий случай лишь скажу, что переключение между этими двумя режимами осуществляется нажатием сочетания клавиш Alt+Enter, а переключение между приложениями — по-прежнему через Alt+Tab.

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

Внешне QBasic отличается от привычных нам программ только тем, что все так называемые элементы управления отображаются в текстовом режиме. В остальном же использование кнопок, меню, окон и прочих прелестей пользовательского интерфейса абсолютно ничем не отличается от Windows-программ. В частности, они точно так же хорошо реагируют на действия мыши. Но я настоятельно рекомендую стремиться использоватьдля работы исключительно клавиатуру и не перенастраивать среду под свой вкус, т.к. чаще всего он оказывается весьма извращённым. В конце концов в Microsoft работали в своё время действительно классные специалисты. И они уж точно лучше нашего знали, как должна выглядеть среда, чтобы ей было удобно пользоваться по назначению. На всякий случай сообщу: вход в меню осуществляется нажатием клавиши Alt, перемещение — стрелками, выбор пункта меню — клавишей Enter, выход из меню и подменю — Esc.

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

Начинаем командовать

Настало время перейти непосредственно к самому языку программирования Basic. А он, пока мы до него добирались, успел нажить себе почти полувековую историю. Как и в случае с естественными языками, языки программирования существуют в виде множества рахличных диалектов, т.е. разновидностей. Тот вариант Бейсика, который используется в QBasic, отличается от классического языка Basic рядом удобных возможностей. И, хотя никто не запрещает писать программы по-старому, особого смысла в этом нет: освоив основы какого-либо одного диалекта языка, нетрудно при необходимости приспособиться к особенностям другого диалекта. Диалект, которому посвящены эти уроки, во многом близок к другим языкам программирования, что несомненно является большим плюсом для Вас, при условии, что Вы настроены серьёзно.

Как пишется программа? Языки программирования предоставляют минимальный набор команд, которые можно использовать, располагая их в требуемом порядке. Зная эти команды (их ещё принято называть словом «операторы»), можно писать программы любой сложности. Осваивать их мы будем самым надёжным способом: через использование их в наших программах, т.е. на практике.

Начнём с того, что рано или поздно нашим программам потребуется взаимодействие с пользователем: сообщить о результатах выполнения, о своём назначении и т.п. За вывод текстовой информации на экран отвечает команда PRINT. В переводе с английского языка это слово означает «печатать». Оператор PRINT созранился в Бейсике ещё с тех времён, когда для вывода всей информации использовались печатные устройства — прообразы современных принтеров. Но те времена остались далеко позади: вот уже не первый десяток лет PRINT используется для вывода информации на экран.

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

PRINT "Превед, медвед!"
Обратите внимание!
Если Вам не удаётся набрать символы русского алфавита, попробуйте различный сочетания клавиш наподобие Alt+Shift или Ctrl+Shift, просто клавиши Ctrl. Если ничего не поможет — возможно, Вам придётся решать эту проблему в индивидуальном порядке или обходиться только латиницей.

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

Результат выполнения команды PRINT
Результат выполнения команды PRINT

Как видим, оператор PRINT вывел текст, который мы заключили в кавычки, без изменений и без кавычек :). Надпись «Press any key to continue» добавляется автоматически средой программирования, а НЕ оператором PRINT, и означает, что для возврата к работе со средой следует нажать любую клавишу. Рассмотрим ещё несколько примеров. Набирайте их по очереди с новой строки.

PRINT 10
PRINT 15+23
PRINT 40-36
PRINT 36-40
PRINT 2*7
PRINT 15/3

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

PRINT SIN(3.1415)
PRINT ABS(-5)
PRINT COS(6.283)

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

Обратите внимание!
Для отделения целой и дробной частей числа используется точка, а НЕ запятая.

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

PRINT "16 в квадрате: ", 16*16

В результате выполнения этой команды будет выведено примерно следующее:

16 в квадрате: 256

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

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

Экран в текстовом режиме условно разделён по горизонтали на участки, которые называются «зоны». Размер одной зонысоставляет 14 символов. Первая зона начинается в первой позиции строки, вторая — в 15-й, третья — в 29 и т.д. Оператор PRINT рассматривает запятую в списке выводимых значений как указание продолжить вывод с начала ближайшей зоны. Это нетрудно проверить, если вывести через запятую более 5 значений. Ширина экрана в стандартном текстовом режиме составляет 80 символов, поэтому последняя зона в строке оказывается неполной. Неполная зона при выводе оператором PRINT пропускается, выбирается первая зона следующей строки.

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

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

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

PRINT "Сумма и разность: "; 20+10, 20-10

Результат проанализируйте самостоятельно. На данный момент Вы уже знаете достаточно для того, чтобы выводить какую-либо информацию, которая может быть интересна пользователю Вашей программы. Переключитесь на часть экрана, предназначенную для набора программы (она должна сейчас называться «Untitled») — и мы попробуем написать первую несложную программу.

PRINT "Hello, world!"
SYSTEM

Как видите, написание простейшей программы свелось к написанию двух операторов, по одному в строке. Правда, оператор SYSTEM Вам пока ещё незнаком, и этот пробел мы восполним прямо сейчас. Дело всё в том, что рано или поздно программа должна завершить свою работу. Когда это произойдёт, управление компьютером передаётся операционной системе. Оператор SYSTEM как раз и занимается передачей управления операционной системе. Использование этого оператора на самом деле не является обязательным, но это ПРАВИЛО ХОРОШЕГО ТОНА: хотя выполнение программы прервалось бы и без него, в сложных программах намного удобнее вызвать SYSTEM во всех местах, где программа должна завершить работу. У данного оператора есть аналоги: END и STOP. Но они сохранены скорее для совместимости со старыми версиями языка.

Давайте попробуем запустить программу. Для этого можно воспользоваться пунктом меню «Run → Start». А для тех, кто внимательно читает то, что я пишу, могу предложить более быстрый вариант: сочетание клавиш Shift+F5.

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

Обратите внимание!
Написание программ наподобие нашей — своего рода традиция в программировании. Программа, выводящая сообщение «Hello, world!» («Привет, мир!»), часто используется в различных учебниках в качестве программы, на примере которой можно познакомиться с основными правилами того или иного языка программирования. Дань моде :)

Совершенствуем программу

Думаю, Вас (какЖ, впрочем, и меня) волнует то, что при запуске программы с экрана не убирается «мусор» от других программ, да и от предыдущих запусков этой же. Это непорядок, даёшь монополию на экран! Пришло время осилить ещё один оператор — CLS. Название оператор — это сокращение от английского «CLear Screen», т.е. «очистить экран». Каждый раз, когда выполнение программы доходит до этого оператора, экран очищается, а следующий оператор PRINT будет выводить информацию начиная с первой позиции в первой строке, т.е. с верхнего левого угла.

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

CLS
PRINT "Hello, world!"
SYSTEM

Давайте сверимся насчёт того, как программа будет меняться в поведении, если оператор CLS будет перемещаться по программе.

Случай 1. Уже рассмотрели. Экран очищается и программа работает "с чистого листа".

Случай 2. CLS после PRINT. Сообщение выводится программой (следом за «мусором») и тут же удаляется при очистке экрана. Пользователь ничего не успевает заметить, ему кажется, что просто происходит очистка экрана.

Случай 3. CLS после SYSTEM. Программа выводит на фоне «мусора» сообщение и завершает работу. Очистка экрана просто не выполняется.

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

Домашка

Ну, а как же без неё? Надо же предложить Вам что-нибудь, над чем можно будет повозиться.

Задание 1. Нарисовать на экране из звёздочек «ёлочку». Внешний вид ёлочки произвольный, на Ваши совесть и эстетическое удовлетворение.

Задание 2. Нарисовать на экране свои инициалы. Например, если Вы — Василий Иванович Пупкин, то это будет выглядеть приблизительно так:

ВВВВВВ И И ПППППП
В В И ИИ П П
В В И ИИ П П
В В И И И П П
ВВВВВВ И И И П П
В В И И И П П
В В И И И П П
В В ИИ И П П
В В ИИ И П П
В В И И П П
ВВВВВВ И И П П

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

Общая подсказка 2. Оператор PRINT может использоваться без параметров.

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