11.07.2015 Views

TURBO BASIC

TURBO BASIC

TURBO BASIC

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

щlieМинистерство образования и науки Республики КазахстанПавлодарский государственный университет им. С. ТорайгыроваКафедра Электрические станции и автоматизация энергосистемПРОГРАММИРОВАНИЕВ СРЕДЕ<strong>TURBO</strong> <strong>BASIC</strong>(лабораторный практикум)Павлодар


т . 4г (о у)УДК 681.3.06(075.8)ББК 32.973.26-018я73Б83Рекомендовано ученым советом института энергетики иавтоматизацииРецензенты:к. т. н., доцент Зайцева Н. М., ПГУ им. С. ТорайгыроваБороденко В. А.Программирование в среде <strong>TURBO</strong> <strong>BASIC</strong>. Лабораторныйпрактикум. - Павлодар, Изд-во ПГУ, 2004. - 39 с.В методических указаниях приводятся рекомендации к выполнениюлабораторных работ по информатике (основы программирования)на языке <strong>TURBO</strong> <strong>BASIC</strong>. Указания могут быть использованыстудентами электротехнических специальностей всех форм обучения© Бороденко В. А , 2004© Павлодарский государственный университет, 2004


coyСодержаниеВведение 41 Вывод сообщений на экран 52 Выборка данных 93 Использование операций в программе 134 Использование графики в программе 175 Построение графика функции 206 Операции с матрицами 247 Кодирование информации 288 Базы данных 32Литература 36Приложение А 37Приложение Б 38С. TopaftFbipoBатындагы ПМУ-дщакадемик С.Бейсембаеватындагы пылымиК1ТАПХАНАСЫ


ВведениеОбязательной частью изучения информатики является овладениеосновами программирования на одном из языков высокого уровня.В настоящем пособии рассматривается ряд лабораторных работ,выполняемых на языке программирования <strong>TURBO</strong> <strong>BASIC</strong>.Каждая работа рассчитана на академическую пару при условии,что обучающийся имеет компьютер в индивидуальном пользовании. Взависимости от уровня подготовки объем работы может быть дифференцирован.Например, в первой работе слабо подготовленные студентымогут воспроизвести только основное меню транслятора TurboBasic. Студенты с хорошей подготовкой выполняют работу полностью,с выводом дополнительного подменю File.Предполагается, что работы выполняются последовательно, т.е.в следующих работах используются навыки и знания, приобретенныепри выполнении предшествующих работ. Кроме того, справочнымматериалом может служить конспект лекций, читаемых параллельно слекционным практикумом, и рекомендуемая учебная литература.4


1 Вывод сообщений на экран1.1 Цель работыИзучить на практике операторы размещения и вывода сообщенийна экран в текстовом режиме, организацию прерывания выполненияпрограммы.1.2 ЗаданиеРазработать и отладить программу, создающую на экране копиюменю транслятора Turbo Basic с соблюдением позиций и цветов надписей.По нажатию любой клавиши организовать вывод подменю File.1.3 Указания к работеЛюбую программу следует начинать комментарием, отображающимназвание программы, данные программиста и сроки написанияпрограммы, напримерrent Работа 1, Бороденко В. 01.05.2003Комментарий - это примечание программиста, обязательныйэлемент документирования программы. Он всегда заканчивает строкуили единственный на ней, начинается невыполняемым операторомREM или одиночной кавычкой' (апостроф). После других операторовREM пишется через двоеточие, апостроф этого не требует. Комментарийкомпьютером не обрабатывается, поэтому его удобно использоватьдля временного исключения каких-то строк программы при еёотладке. Комментарий не выводится на экран в ходе выполнения программыи может содержать любые символы.Программа пишется по строкам в порядке выполнения. Разныеоператоры в одной строке отделяются двоеточием. Регистр не учитывается,т.е. АА и аа - одно и то же имя. Русские символы допустимытолько в комментариях и текстах - нельзя путать английское О, русскоеО, ноль. Липшие пробелы можно использовать для лучшей читаемостипрограммы, однако отсутствие пробелов между командой иаргументом является ошибкой, например, delay 5 - это задержка на 5с, a delay5 - уже переменная.Не следует писать строки более размера экрана (длиннее 80символов), перенос строки производится знаком подчеркивания Заметим,что он не действует внутри комментария и текста в кавычках ине всегда правильно работает в операторе DATA.Оператор SCREEN 0 - задает текстовый режим работы экрана(видеоадаптера), восстанавливает исходные цвета (цвета по умолча-5


нию), очищает экран, ставит курсор в положение 1,1 (первая строка из25, первый столбец из 80). Обычно используется в программе однократно.Он не проверяет число символов в строке, поэтому, например,для правильной работы после употребления оператора SCREEN 1(строка из 40 символов) нужно обязательно задать 80 символов операторомWIDTH.Оператор WIDTH 40 или WIDTH 80 - устанавливает 40 или 80символов в строке экрана (по умолчанию 80 в текстовом режиме).Оператор CLS - очищает экран (закрашивает цветом фона), устанавливаеткурсор в положение 1,1 (первая строка, первая колонка),может использоваться многократно.Цвета кодируются числами: 0 - черный (Black), 1 - синий (Blue),2 - зеленый (Green), 3 - бирюзовый (Cyan), 4 - красный (Red), 5 -фиолетовый (Magenta), 6 - коричневый (Brown), 7 - белый (White).Плюс 8 - увеличивается яркость, например, 8 - это серый (Grey), 14 -это желтый (Yellow), 15 - ярко-белый; ещё плюс 16 - добавляется миганиесимвола. Цвет 31 (ярко-белый мигающий) равен 7+8+16. Приработе в среде Windows мигание символа не поддерживается.Оператор COLOR символ, фон - задает цвет символа и фона (целыечисла). Всегда хотя бы один цвет указывается, для пропущенногоцвета сохраняется ранее заданное значение. Позиция пропущенногоспереди цвета выделяется запятой, например, COLOR ,8, сзади необязательно:COLOR 15. Цвет символа может быть равен 0...31, цвет фона0...7, по умолчанию при первом включении и объявлении SCREEN0 устанавливается цвет символа 7 (белый), цвет фона 0 (черный).Оператор LOCATE строка, столбец - помещает курсор на экранев нужную строку (1...25), столбец (1...80 или 1...40). Либо строку,либо столбец нужно указывать обязательно, для пропущенного номерастроки сохраняется предыдущее значение, например, LOCATE ,40- на той же строке поместить курсор в позицию 40. Можно указатьтолько номер строки LOCATE 12, но в этом случае курсор устанавливается,как правило, в первый столбец.Вывод любых символов на экран начинается с позиции, отмеченнойкурсором, и заканчивается переходом в нижнюю строку. Есливыводимый блок текста или значение переменной не умещаются доконца текущей строки, они целиком переносятся на следующую строкуи печать автоматически продолжается с первой позиции.Текст на экран выводится оператором PRINT (имеет заменитель- знак вопроса). Существуют следующие варианты его применения,которые могут в разных комбинациях образовывать один оператор:6


PRINT' печать пустой строки (перевод строки)PRINT " т е к с т " ' печать сообщения, помещенного внутри кавычекPRINT 2 * 5 - 7 ' печать результата выражения 2 *5-7=3PRINT a ,b ,C ' печать значений переменных через 14 колонокPRINT a ; b ; c ' печать значений переменных подрядPRINT a b с ' печать значений переменных подрядPRINT a ; ' вывести значение а и остаться в той же строкеPRINT CHR$(m) ' вывести символ с кодом mp r i n t ST R lN G $(n,m ) ' вывести n символов, имеющих код mp r i n t ST R iN G $(n, ' вывести n символов, указанных в кавычкахp r i n t SPC (n ) ' напечатать п пробелов (стереть текст)p r i n t s p a c e $ (n ) ' напечатать п пробелов (стереть текст)p r i n t t a b (n ) * начать печать с п колонки (если заданный номерстолбца больше, чем ширина строки, то есть 80 символов, печатьначнется в следующей строке с п -80 позиции; если заданный номерстолбца меньше текущей позиции курсора, печать начнется в следующейстроке с п колонки).На всем протяжении от предыдущей до новой позиции курсораоператор PRINT закрашивает фон цветом, заданным последним операторомCOLOR. Избежать этого при необходимости позволяют операторLOCATE или переопределение в нужный момент цвета фонаоператором COLOR.Чтобы избежать прокрутки (Scrolling) экрана при печати в 24 и25 строку в конце оператора печати для этих строк обязательно должнастоять точка с запятой. Этот же способ предотвращает двойнойперевод строки при печати в последнюю колонку экрана.Для обрамления надписей в рамку из одинарных или двойныхлиний используются символы псевдографики (приложение А). Ихвводят в текст программы, удерживая нажатой клавишу Alt и одновременнонабирая код символа на цифровой (серой) клавиатуре справа.Код 218 196 194 191 179 195 197 180 192 193 217Символ Г— Т 1 - -- - L J . JВыполняя работу, сначала можно нарисовать рамку, например,оператором print " |-------------------------------------------------------- 1 илиPrint chr$(218);string$(78,196);chr$(191);7


затем наложить сверху надпись (очень важен порядок выполнениякоманд)l o c a t e 1 , 3 5 : c o l o r 1 5 : p r i n t " T urb o B a s i c "Место, куда вписываются буквы или слова, необходимо заранееподсчитать по количеству символов в строке или номеру колонки.В программу желательно заложить возможность аварийного останова(прерывания по усмотрению пользователя) при случайном образованиибесконечного цикла, большом времени счета и в другихслучаях. Для того, чтобы прекратить работу программы, например,клавишей F10, в начале программы нужно поместить строкуON KEY(1 0 ) GOSUB EndPgm: KEY(1 0 ) OHа перед заключительным оператором конца программы END поставитьметку для ссылкиEndPgm:ENDВременный останов выполнения программы с последующим еепродолжением по нажатию любой клавиши может быть организован вТурбо Бейсике разными способами, например, с помощью приводимойниже программной строкиc $ = i n p u t $ (1 )' ожидаем нажатия любой клавишиили цикла WHILEw h ile n o t i n s t a t : wendWHILE INKEY$ = " " :WEND' ожидаем нажатия любой клавишиили цикла DODO: lo o p u n t i l i n s t a tDO:LOOP UNTIL LEN(INKEY$)DO:LOOP WHILE LEN( INKEY$)= 0DO:C$=INKEY$: LOOP WHILE C$=""' ожидаем нажатия любой клавишии так далее. Каждая из приводимых строк дает одинаковый результат.Заканчивать программу рекомендуется оператором END.


2 Выборка данных2.1 Цель работыОзнакомиться с понятиями о выборке данных, оператором вводаINPUT, условным оператором IF...THEN, операциями отношений иалгебры логики, оператором безусловного перехода GOTO.2.2 ЗаданиеНаписать и отладить программу ввода чисел от 0 до 31 с закреплениемместа ввода и вывода на экране и проверкой введенного значения.Программа должна: при вводе нуля завершать работу, при вводечисла, соответствующего номеру студента по списку группы, формироватькороткую мелодию, на числа, большие 31 и меньшие 1, реагироватьтолько коротким звуковым сигналом ошибки; допустимое числопечатать цветом, соответствующим его значению.2.3 Указания к работеВыборкой называется выделение из имеющегося множестваданных таких, которые отвечают заданному критерию. Критерий можетбыть постоянным, например, выбрать все числа, большие по модулю10, либо переменным и даже неизвестным заранее, например,выбрать наибольшее число.Меню программы изображено на рисункеВЫБОРКА ЧИСЕЛ(вводите целые числа от 1 до 31,ввод нуля - конец работы)в в е д и т е ч и с л об ы л о в в е д е н о ч и с л о 5Средняя надпись меню выполняется серым цветом, все остальное- ярко-белым. Строку и колонку, с которых начинается вывод менюна экран, необходимо выбрать самостоятельно из условия размещениярамки по центру. Курсор постоянно находится в конце строки“введите число “. Коды символов двойной рамки:Код 201 205 203 187 186 204 206 185 200 202 188Символ 1г= Г~ JL Jтг Ц Г 1Г _ЛIk JL |9


Для большей наглядности меню лучше нарисовать прямо в текстепрограммы, впечатав средние строки позднее, так как они выполняютсядругим цветом.Ввод данных с клавиатуры производится обычно операторомINPUT, имеющим форматINPUT [;] [“сообщение”] [,] переменная! [, переменная2... ]Точка с запятой сразу за оператором оставляет курсор после вводаданных в той же строке, запятая перед именем первой вводимой переменнойотменяет печать вопросительного знака.(Внимание! При объяснениях в квадратных скобках обычноуказываются необязательные элементы, которые могут и отсутствовать,сами квадратные скобки в тексте программы не пишутся).Переменные в списке при записи оператора должны отделятьсязапятой, при вводе - запятой или пробелом; тип вводимых данныхвсегда должен точно соответствовать типу переменной, как и их число.Текст сообщения выводится на экран дня пользователя. ПримерINPUT " в в е д и т е ч и сл о " ,п' если введенное число равно нулю, закончить работуIF n=0 THEN CLS: PRINT , , "Р абота З а к о н ч ен а " :ENDВвод данных завершается клавишей Enter, которую следует нажиматьтолько после последнего числа в списке. Если клавиша Enterнажата преждевременно, пропущенным переменным автоматическибудет присвоено значение ноль или «пустая строка».Для проверки чисел следует применять условный оператор EF:ЕСЛИ условия выполнены ТО сделать одно ИНАЧЕ сделать другое.Первая форма условного оператора - однострочнаяIF условия THEN действия! [ELSE действия2]При этом все операторы, начиная с IF, обязательно должныумещаться в одной строке, которая может при слишком большой длинеразрываться знаком переноса Часть со слова ELSE может отсутствовать.Если в операторе сразу после THEN должно стоять GOTO,либо то, либо другое можно не писать. Если действие содержит несколькооператоров, они разделяются двоеточием. Условие можетбыть составным, либо представлять собой выражение. Пример‘ если п равно номеру варианта таг, то подать сигналIF n = n v a r THEN ВЕЕР10


Вторая форма условного оператора - блочнаяIF условия 1 THENдействия![ELSEIF условия2 THENдействия2][ELSEдействияЗ]END IFОбязательным в этом случае является перенос строки после оператораTHEN и завершение блока оператором END IF. Досрочный выходпроизводится оператором EXIT IF. Рекомендуется блочные операторызаписывать с отступом относительно основного текста. Эта формадопускает вложение до восьми дополнительных условий, описываемыхс помощью оператора ELSEIF, количество операторов в действияхне ограничивается.Сначала обычно проверяют самое худшее условие, например,что вводимое число равно нулю и следует закончить работу. Затем -менее важное условие: если число меньше 1 и больше 31, то податьсигнал и вернуться на то место программы, где производится вводданных. В конце проверяются благоприятные условия - если введенноечисло равно номеру варианта, сыграть мелодию. Печать введенногочисла и возврат на ввод следующего может производиться бездополнительных условий, так как через предыдущие проверки прошлитолько допустимые числа. Число на месте ввода нужно стирать.Данный фрагмент программы очищает место и повторяет вводчисла п в одной и той же позиции экрана - строка iy, столбец ix, приусловии, что вводимое число ИЛИ меньше 1, ИЛИ больше 31:10 LOCATE iy ,ix :P R I N T SPC(5)LOCATE iy ,ix :I N P U T ,nIF n < l OR n>31 THEN 10Условия в языках программирования обычно записывают с помощьюопераций отношения и операций алгебры логики.Операций отношения в Турбо Бейсике шесть: равно =, не равноо , больше >, меньше


Для передачи управления используются адреса (номера строкили метки), одинаковые адреса не допускаются. Номера строк (числаот 0 до 65S3S) необязательны, располагаются в произвольном порядке,после номера через пробел может идти любой текст. Меткой называетсяимя длиной до 64 символов, начинающееся буквой и заканчивающеесядвоеточием, не совпадающее с операторами ТБ; настроке с меткой разрешается помещать только комментарий.Безусловная передача управления на строку с заданным адресом(номером или меткой) производится оператором GOTO адрес.Оператор ВЕЕР [п] - выводит на системный динамик п звуковыхсигналов частотой 800 Гц и длительностью 0.25 с. Без параметрап формирует одиночный сигнал как команда PRINT CHR$(7). Обычноэтот оператор сопровождает сообщение о допущенной ошибке.Оператор SOUND частота, длительность - выводит звук заданнойчастоты (от 37 до 32767 Гц), не останавливая выполнение другихоператоров, в течение интервала времени, измеряемого в тиках(один тик равен 1/18 с). Например, для четвертой октавы нота "до" -это 262 Гц, "ре" - 294 Гц, "ми"- 330 Гц, "фа" - 349 Гц, "соль" - 392 Гц,"ля" - 440 Гц, "си"- 494 Гц, "до" следующей октавы - 524 Гц.Оператор PLAY строка - позволяет воспроизвести целое музыкальноепроизведение, размер строки (буквы и цифры, заключенные вкавычки) ограничен емкостью музыкального буфера (может изменятьсяпри компиляции). Основные сведения:- ноты до, ре, ми, фа, соль, ля, си любой октавы обозначаются буквамиС, D, Е, F, G, А, В; диез (# или +) или бемоль (-) после символа нотывыбирает черную клавишу;- абсолютное значение Nn позволяет напрямую задать одну из существующих(1... 84) нот;- октава задается командой On, где п=0... 6 (по умолчанию подразумевается4 октава); знак >п увеличивает номер октавы и задает ноту п,знак


3 Использование операций в программе3.1 Цель работыЦелью работы является знакомство с типами переменных, арифметическимии функциональными операциями, оператором множественноговыбора SELECT CASE и оператором форматированного выводаPRINT USING.3.2 ЗаданиеРазработать и отладить программу расчета корней алгебраическогополинома второго порядка с использованием меню, соблюдаятребования структурного программирования.3.3 Указания к работеКвадратный трехчлен имеет вид Р(х) = ах3 +Ьх+с, его корни вычисляютсяпо известному аналитическому выражению2аВыражение под знаком квадратного корня носит название дискриминантаD. В зависимости от его значения возможны три случая:а) если D>0, то оба корня трехчлена действительные;б) если D=0, то оба корня действительные и равные;в) если D


циентов а, Ь, с, надпись "Корни полинома" и два столбца чисел в вещественномформате с шестью знаками после запятой под заголовками"Действ, часть" и "Мнимая часть".Структурное программирование требует, чтобы были сделанывсе объявления, программа состояла из явно выделенных блоков (модулей),отделенных друг от друга комментарием. Блоки записываютсяс отступом вправо, метки - с выступом влево относительно основноготекста. Главный (МАШ) модуль заканчивается словом END.Переменная - это именованное место в памяти для храненияданных, которые могут изменяться в ходе выполнения программы.Имя переменной (до 64 символов) начинается с латинской буквы, можетвключать цифры и специальные символы (кроме пробела), недолжно полностью совпадать со служебным словом ТБ (приложениеБ) или повторяться, обычно бывает содержательным.Все типы переменных должны быть явно заданы - либо до первогоприменения по первой букве имени переменной операторомDEFran, либо в тексте программы специальным окончанием (суффиксом)имени отдельной переменной:DEFINT или % - целый тип одинарной точности;DEFLNG или & - целый тип двойной точности;DEFSNG или ! - действительный тип одинарной точности;DEFDBL или # - действительный тип двойной точности;DEFSTR или $ - переменная строкового типа.Определение типа по первой букве имени переменной можетпроизводиться диапазоном или перечислением, например DEFINT I-L,N. Индивидуальное определение типа переменной отменяет общее.До первого использования значение переменной должно быть заданоявно (даже ноль) с клавиатуры, из файла или внутри программы с помощьюоператора = (присваивание). Оператор присваивания можетсодержать специальное служебное слово LET, например, LET с=с+1,но, как правило, его опускают.У вещественных переменных одинарной точности только шестьцифр являются значащими (правильными), двойной точности - только15. Поэтому используемые при расчетах в программе вещественныечисла следует объявить двойной точности для повышения точностивычислений.Оператор CLEAR очищает сразу все переменные и все массивы,помогает от ложного формирования ошибки переполнения (OVER­FLOW), его следует помещать в самом начале программы (после комментария).14


Арифметические операции располагаются по убыванию приоритета(старшинства) следующим образом:+, - присвоение знака,Авозведение в степень,*, / умножение и деление,\, MOD деление нацело и вычисление остатка отцелочисленного деления,+, - сложение и вычитаниеINCR, DECR увеличение, уменьшение (используются отдельноот других операций).В формуле обязательно записываются все знаки (особенно умножение),запись производится в строчку, порядок выполнения действийможет быть изменен скобками. Перед делением обязательно проверяется,что делитель не равен нулю!Форматированный вывод чисел на экран производится операторомPRINT USING "######.###";a,b,..., где решетки в кавычках задаютформат вывода значений а, b - число знаков целой и дробной частей.Точка с запятой указывается после формата обязательно.При проверке нескольких возможностей удобно использоватьусловие множественного выбора SELECT CASE.SELECT CASE выражение\ переменнаяCASE условие 1действия[CASE условие 2действияCASE ELSEдействия]END SELECT' все остальные случаиДля первого значения, совпавшего с условием проверки, выполняютсянеобходимые действия и автоматический выход из блока, досрочныйвыход можно осуществить оператором EXIT SELECT. Действиебез сравнения (CASE ELSE) выполняется быстрее. Например,проверка значения переменной аCELECT CASE аCASE 5: Т$=" много!1CASE ELSE: Т$="как раз"END SELECTPRINT Т$Примеры проверкиCASE


жатием клавиши, соответствующей заданной букве опции меню). Привыборе с помощью курсора вызов функции производится после нажатияклавиши Enter, при выборе быстрой клавишей - сразу.Наиболее часто используемые в меню клавиши имеют коды: Enter- 13, Esc - 27, Space (Пробел) - 32, Стрелка влево - 75, Стрелкавправо - 77, Стрелка вверх - 72, Стрелка вниз - 80, Ins - 82, Del - 83,Tab - 9. Для получения кода нажатой клавиши ikey можно использоватьфрагмент программыwhile not instat:Wend ' ждать нажатия клавишиC$=inkey$ :ikey=asc (right $ (с$,1)) ' получить кодЗдесь INSTAT - функция, равная нулю, пока ни одна клавишане нажата, и отличная от нуля при нажатии любой клавиши, INKEYS -функция, проверяющая, какой символ поступил в буфер клавиатурыпри последнем нажатии клавиши, С$ - строковая переменная, которойприсваивается значение этого символа. Функция ASC0 позволяет получитькод символа.Проверка быстрых клавиш может производиться также функциейINPUT$(n), где п - количество вводимых символов, напримерWait:c$=input$ (i)' ожидаем нажатия клавишиif с$"А" or с$"а" then wait ' проверка введенногосимвола в обоих регистрах (а еще лучше - и в двух алфавитах,английскоми русском!), если введено не А или а, то идти снова на Waitилиc$=input$ (1)' ожидаем нажатия клавиши' если нажата Enter, то идти на начало,иначе проходим дальшеif a s c (с$)=13 then startendОбычно меню находится перед оператором END главного модуляпрограммы, поэтому при нажатии любой другой клавиши, кромеEnter, работа программы заканчивается. Метка START должна находитьсяв тексте программы, с неё может начинаться ввод коэффициентовили печать названия программы.16


4 Использование графики в программе4.1 Цель работыЦелью работы является освоение циклов, графических операторови методов вывода графических изображений на экран.4.2 ЗаданиеРазработать и отладить программу построения круговой диаграммыпо введенным значениям составляющих элементов (не болеедевяти) с проверкой исходных данных и использованием меню, соблюдаятребования структурного программирования.4.3 Указания к работеКруговая диаграмма отражает вклад значения каждой составляющейв общую сумму. Составляющие отображаются в виде секторовобщего круга, имеющих отличающуюся окраску. Заметим, что диаграммывоспринимаются с трудом, если число частей больше десяти.КРУГОВАЯ ДИАГМПЯЧисло показателей 91 показатель! 22 показатель: 43 показатель: 64 показатель: 85 показатель: 96 показатель: 77 показатель: SВ показатель: 39 показатель: 1Enter - повторить вводДля вывода графики после комментария должен быть объявленсоответствующий режим экрана, например SCREEN 9. Затем следуетоператор очистки экрана CLS и печать на экране названия программы,сюда должно передаваться управление при повторгам.етоде данных?Размер экрана в режиме 9 равен 6401 [ икселеи (тс^ек)1! ^ ^ЙЙЙ-Взонтали X и 350 пикселей по вертикали Y.начинается с нуля, отсчет оси X - слева Haity8ftQ£efW к сверху ш т .'й а е ватындагы гылыми17К1ТАПХАНАСЫ


Положение текстового курсора на экране задается операторомLOCATE строка, столбец, цвет текста - оператором COLOR цвет,печать выполняется оператором PRINT. Следует иметь в виду, что невсе операторы, предназначенные для работы в текстовом режиме,аналогично ведут себя и в графическом, например, при указании цветафона в операторе COLOR этим цветом закрашивается весь экран.К графическим операторам относятся:а) построение линииLINE [(xl,yl)]- (х2,у2) [, цвет, BF, шаблон]здесь xl,yl и х2,у2 - координаты начала и конца линии, отсчитываемыев пикселях от начала экрана, В - построить рамку, F - заполнитьее цветом линии, шаблон задает форму линии в виде шестнадцатеричнойконстанты, например, &hOFOF. Параметры в квадратных скобкахмогут отсутствовать.б) построение окружностиCIRCLE (хс,ус), радиус [,цвет, начало дуги, конец дуги, аспект]здесь хс, ус - координаты центра круга в пикселях от начала экрана,радиус также задается в пикселях. Параметры в квадратных скобкахмогут отсутствовать. Начало и конец дуги описывают угловую мерудуги, отсчитываемой прошв часовой стрелки, в радианах. Если передчислом начала или конца дуги стоит знак "минус", эта точка соединяетсялинией с центром окружности, однако угол не должен быть равнымнулю. Аспект определяет отношение высоты фигуры к ее ширине,для режима SCREEN 9 равен по умолчанию примерно у/х = 0,73.в) закрашивание фигурыPAINT(x,y) , цвет заливки, цвет границыздесь х,у - координаты точки, с которой начинается заливка фигуры,цвет границы - это цвет замкнутой линии, за которую не должна заходитькраска. Цвет точки, с которой начинается заливка, не долженсовпадать с цветом границы.Для хранения значений показателей необходимо объявить массивDIM х(9) в начале программы (после операторов объявления типапеременных, но до операторов объявления режима экрана SCREEN).На экран следует вывести название программы и поле для ввода количествапоказателей п (обязательно проверять, что их число не меньше1 и не больше 9). Для ввода самих показателей следует организоватьсчетный цикл FOR i=l ТО п ... операторы ... NEXT.Эти п показателей вводятся затем построчно: в каждой строкеполоска с цветом сектора, номер показателя и поле для ввода его значенияx(i). Цветные полоски можно выполнять как в текстовом режи-18


ме, с помощью окрашенных элементов псевдографики, так и в графическомрежиме оператором LINE.Вводимые показатели являются вещественными числами одинарнойточности. Все их значения должны быть просуммированы втом же цикле и если сумма SUM оказалась в итоге равной нулю, т.е.не введено ни одного значения, следует повторить ввод. Удельноезначение DEL определяется отношением угловой меры полного круга6.283185307 радиан к сумме значений SUM. До цикла нужно задатьсамое первое значение угла KON=0.000001 радиан (не равное нулю,чтобы соединялось с центром окружности), от которого пойдет отсчет.Второй счетный цикл FOR i=l ТО п ... NEXT следует организоватьдля построения круговой диаграммы. Каждый сектор строится впределах от начального угла BEG до конечного угла KON. Дуга дляодного показателя имеет длину, равную произведению удельного значенияна величину показателя DEL*x(i). Для каждого следующегосектора за начальный угол принимают конечный угол предыдущегосектора BEG=KON, а конечный пересчитывают по формуле KON=BEG+DEL*x(i). Цвет сектора каждый раз равен очередному значениюi (номеру показателя).Сложнее всего организовать заливку сектора, так как нужноправильно выбрать начальную точку - она должна находиться внутризакрашиваемого сектора. Возможный (но не единственный) способвыбора начальной точки заключается в том, чтобы найти середину дугиочередного сектора и значение угла ANG для нее, а затем из прямоугольноготреугольника рассчитать координаты х,у и отложить ихна расстоянии z от центра круга хс,ус.При этом величину 0


5.1 Цель работыЦелью работы является освоение методов задания, расчета ивывода графика функции одной переменной на экран.5.2 ЗаданиеРазработать и отладить программу построения графика заданнойфункции по вводимым значениям интервала изменения аргументах, с форматированным выводом значений корней функции и использованиемменю, соблюдая требования структурного программирования.Функция равнаsin vx - vxу = ------- е0,lvгде v - номер варианта студента по списку группы.5.3 Указания к работеКорнем функции является значение х, обращающее функцию у вноль. На графике это соответствует точке пересечения кривой с горизонтальнойосью (осью абсцисс). В момент пересечения оси изменяетсязнак функции - с плюса на минус или наоборот. Поэтому, еслисравнивать знак функции до и после приращения, напримерилиS Построение графика функцииi f s g n ( y ( i - l ) ) < > s g n ( y ( i ) ) th e n . . .i f у ( i —1 ) * y ( i ) < 0 th e n ...,то можно найти (отделить) значение корня функции, которое затемуточняют, задавая новые пределы изменения аргумента х.Функцию следует определить в самом начале программы операторомDEF, напримерDEF FNfimc(x)=5*sin(1.5*x)*exp(-x*0.5),где func - собственное имя функции, две буквы FN в началеимени функции являются обязательными. Здесь же нужно объявитьдва массива для хранения значений аргумента и функции размером100...200 элементов, например DIM х(100),у(100). До этих объявленийдолжен быть объявлен тип всех используемых в программе переменных- целый, вещественный и т.п.20


Для вывода графики должен быть объявлен соответствующийрежим экрана, например SCREEN 9: CLS. Размер экрана в режиме 9равен 640 пикселей (точек) по горизонтали X и 350 пикселей по вертикалиY. Отсчет пикселей на экране начинается с нуля, отсчет оси X -слева направо, оси Y • сверху вниз.К операторам рисования относятся:а) построение линииLINE [(xl,yl)]-(x2,y2) [, цвет, BF, шаблон]здесь xl,yl и х2,у2 - координаты начала и конца линии, отсчитываемыев единицах измерения реального графика, В - построить рамку,F - заполнить ее цветом линии, шаблон задает форму линии в видешестнадцатеричной константы, например, &h0F0F. Параметры вквадратных скобках могут отсутствовать.б) установка цветной точки по адресу х, уPSET(x,y), цветТекст размещается в 25 строках и 80 колонках. Положение текстовогокурсора на экране задается оператором LOCATE строка,столбец, цвет текста - оператором COLOR цвет, печать выполняетсяоператором PRINT, форматированный вывод - оператором PRINTUSING.На экране в первую очередь должны быть напечатаны названиепрограммы и вид исследуемой функции. После ввода пользователемминимального и максимального значений аргумента х (интервала егоизменения) следует организовать проверку, что:а) значения xmin и хшах не равны друг другу;б) оба значения не равны нулю;в) xmin не оказалось больше хшах.Если оба введенных значения равны нулю, можно завершитьработу. Если введенное xmin больше хшах, их значения меняют местамис помощью оператора SWAP xmin, xmax. Если введенные значениях одинаковы, то рекомендуется уменьшить xmin и увеличитьxmax, например, xmin=0.9*xmin, xmax=l.l*xmax. Новые значенияследует впечатать вместо введенных. Вводимые значения являютсявещественными переменными одинарной точности.Затем задают число расчетных точек п, соответствующее количествуэлементов в массивах х, у, например 100, и определяют шагприращения аргумента dx=(xmax-xmin)/n.Первый счетный цикл FOR i=l ТО п ... NEXT следует организоватьдля расчета графика и выбора предельных значений (шкалы) поу. До цикла нужно задать значения ymin (наибольшее возможное) и21


ушах (наименьшее возможное), затем в ходе расчета сравнивать их свычисленными значениями, напримерy m in « l. 0е35 : утпах=-1. 0е35x=xminf o r i “ l t o ny = fn fu n c (x )'расчет функцииi f ym in>y th en ym in=yi f ymax


if ymin*ymax


б Операции с матрицами6.1 Цель работыЦелью работы является освоение основных операций с матрицамии методов использования в программе модулей (подпрограмм,процедур).6.2 ЗаданиеРазработать и отладить программу для выполнения операций сматрицами, используя для ввода и вывода матриц модули и соблюдаяправила структурного программирования. Состав операций выбираетсясогласно номеру студента по списку группы (таблица 6.1).Таблица 6.1Вариант 1,11 2,12 3,13 4,14 5,15 6,16 7,17 8,18 9,19 10,20транспонироватьматрицу+ + + +заменить противоположной+ + + +умножить начисло+ + + +разделить начисло+ + + +сложить с матрицей+ + + +вычесть матрицу + + +вычислить следматрицы+ + + +умножить наматрицу+ + +6.3 Указания к работеПодпрограмма - это выполняющая конкретную функцию группаоператоров, к которой можно обратиться из любого места программыоператором GOSUB метка, где метка указывает строку входа в подпрограмму.Такая группа операторов должна заканчиваться операторомRETURN. Размещать подпрограммы правильнее после оператораEND главного модуля программы, у них общие переменные.Пример подпрограммы ввода матрицы:w o d a :p r i n t "Ввод матрицы А"l o c a t e , 1 0 : in p u t "число строк : " ,пl o c a t e , 1 0 : in p u t "число столбцов : ",ш24


f o r i = l t o n : f o r j = l t o mp r i n t " a ( " i" ," j " ) ■ " ; : i n p u t , a ( i , j )n e x t :n e x tr e t u r nОбращение в тексте программы будет следующим GOSUB woda.Пример подпрограммы опроса нажатой клавиши:o p r o s :w h ile n o t in s t a t : w e n dc $ = in k e y $ : i c s = a s c ( r i g h t $ ( c $ , 1 ))r e tu r nПосле выполнения команды GOSUB opros переменная ics будетсодержать код нажатой клавиши, например 13 - для клавиши Enter, 27- для Esc, 48... 57 - соответственно для цифровых клавиш 0...9.Процедура - это группа операторов, более независимая от главнойпрограммы. Она начинается строкой SUB имя(список формальныхпараметров) и заканчивается обязательным оператором End sub.Например, процедура вывода матрицы на экран:su b v y v o d ( n ,m ,c ( 2 ) )f o r i = l t o nf o r j = l t o mp r i n t u s in g " # # # # # # .# # # " ,c ( i , j ) ;n e x tp r i n tn e x ten d su bкоторая будет выполнена после обращения в тексте программыc a l l v y v o d ( n ,m ,a ( ) )Имена переменных в списке фактических параметров обращенияк процедуре и в списке формальных параметров самой процедурымогут не совпадать, однако обязательно соблюдается порядок их перечисленияи тип. Если в список входит массив, то в обращении для негоуказываются просто скобки, а в процедуре для этого массива указываютв скобках число размерностей, например 2 для двумернойматрицы.Несмотря на независимость от главного модуля для процедурыдолжны выполняться следующие требования:а) общие массивы объявляются в главной программе;25


б) метки (номера строк) в процедуре и в главной программе не должнысовпадать.На экран после его очистки в первую очередь должно быть выведеноназвание программы, затем главное меню, например• ---------------------------- гл ав н ое м е н ю -----------------------------------l o c a t e 3 , 3 0 : p r i n t "Операции с матрицами"l o c a t e 5 , 2 0 : p r i n t "Выберите ном ер операции"l o c a t e ,3 0 : p r i n t "1 - Транспонирование матрицы"l o c a t e ,3 0 : p r i n t "2 - Сложение матриц"l o c a t e ,3 0 : p r i n t "3 - Умножение матриц"l o c a t e ,3 5 : p r i n t "E sc - выход"gosu b o p r o ss e l e c t c a s e i c sc a s e 4 9 :g o su b tr a n sc a s e 5 0 :g o su b summc a s e 5 1 :g o su b m u ltc a s e 2 7 : e l s : e n dend s e l e c tl o c a t e 2 2 ,3 0 : p r i n t " E n ter-продолж ить р а боту"gosu b o p r o si f ic s = 1 3 th e n s t a r te ls : e n di -------------------------- подпрограммы -------------------------------а после оператора END, завершающего главный модуль программы,располагают подпрограммы и процедуры, напримерs o r t : 1— выбор наибольш его элем ен та матрицы —e l s : p r i n t , , "Выбор максимального элем ен та"p r i n t : gosu b w o d ae l s : p r i n t , , "Выбор максимального элем ен та"p r i n t : p r i n t , "Исходная матрица"c a l l v y v o d ( n ,m ,a ( ) )a n a x - a ( 1 ,1 )f o r i = l t o nf o r j = l t o mi f a ( i,j ) > a m a x th e n a m a x = a (i,j)n e x tn e x tp r i n t : p r i n t , "Наибольший элем ент равен"p r i n t u s in g " # # # # # # # .# # # " ;amaxr e tu r nРекомендуется называть первую матрицу А, вторую - В, результирующуюматрицу - С, размер матриц не должен превышать 6 (проверятьпри вводе). После завершения ввода на экране должны заново26


печататься заголовок (вид операции), исходная матрица в нормальномвиде (по строкам и столбцам), дополнительная матрица (если есть),результирующая матрица или другой результат (рисунок 6.1).Умножение матрицИсходная матрица A1.200 2.300 3.400 3.5000.890 1.000 7.000 23.0007.650 12.000 4.000 0.000Исходная матрица В1.000 2.0003.000 4.0005.000 6.0007.000 0.000Результирующая матрица49.600 32.000199.890 47.78063.650 87.300Enter-продолжить работуРисунок 6.1Замена матрицы противоположной означает умножение всех еёэлементов на -1, след матрицы - это сумма элементов её главной диагонали,при транспонировании строки матрицы заменяются её столбцамии наоборот (меняются местами индексы элементов).Перед выполнением операций следует проверять соблюдениенеобходимых требований, например, нельзя делить на ноль, при сложении/вычитанииматриц их размер (число строк и число столбцов)должен быть одинаковым, при умножении матриц число столбцов левойматрицы должно быть равным числу строк правой и т.д.Умножение матриц а(п * к) и b(k * т ) выполняют в три циклаfor i = l t o nFOR j=*l t o m: c ( i , j ) = 0FOR i j “ l TO kc ( i , j)- c (i, j)+a(i, ij)*b(ij, j)NEXTNEXTNEXT27


7 Кодирование информации7.1 Цель работыЦелью работы является закрепление навыков кодирования символовв двоичном коде, работы с системными переменными, строковымиоперациями и операторами хранения данных в программе.7.2 ЗаданиеРазработать и отладить программу для вывода на экран текущеговремени с помощью самостоятельно сформированных в двоичномкоде символов, соблюдая правила структурного программирования.7.3 Указания к работеВ двоичной (Binary, BIN) системе основание х = 2, один разряд(1 бит) может принимать значения 1 или 0, восемь бит образуют байт.Счет разрядов в двоичной системе идет справа налево, по нарастаниюстепени двух. Один байт способен передать десятичное число255(без знака)1111Ш 12= 1 *27+1 *2б+1 *2S+1 *24+1 *23+ 1 *22+1*21+1 *2°== 128+64+32+16+8+4+2+1=255,0Побитовая запись употребляется в очень многих случаях, часто сцелью экономии, например, для хранения растровых шрифтов. Так,нулю в памяти компьютера будет соответствовать восемь чисел (сверхувниз) 60 66 70 74 82 98 66 60, описывающих последовательно положениесветящихся точек в каждой строке изображения символа.128 64 32 16* 8 4 2 1 Код♦ ♦ * * 60♦ * 66* ♦ * 70* ♦ * 74* * * 82* * ♦ 98* ♦ 66* * * ♦ 60Логическая операция AND позволяет проверить наличие в числеопределенного бита, так, результат выполнения фрагмента х AND 1628


или х AND &Ь00010000 ненулевой, если в числе х есть бит 16 = 2 , иравен 0, если такой бит отсутствует.Если шрифт загружен в память с известного адреса 0, тогда каждыйследующий символ считывается из памяти со смещением от началакод*размер, например, третий символ - с позиции 3*8=24.Для загрузки больших объемов неизменяемых в дальнейшемданных, хранящихся в теле программы, используются операторы:DATA список - хранит данные, перечисленные в виде спискачерез запятую. Число операторов DATA не ограничивается, они не обрабатываютсякомпьютером и могут находиться в любом месте программы.READ список - задает порядок чтения данных из списка данныхи их тип (должен соответствовать). При запуске программы всегда начинаетчтение с первого элемента первого оператора DATA, каждыйраз увеличивая смещение на единицу. При выходе смещения за пределыпоследнего элемента последнего оператора DATA возникаетошибка.RESTORE [п] - оператор установки смещения на строку с номером(меткой) п, позволяет читать данные многократно. Если п отсутствует,указатель смещения автоматически сбрасывается, т. е. устанавливаетсяна первый оператор DATA в тексте.К системным относятся переменные, используемые разнымипрограммами, в частности, хранящие значения даты и времени.DATES - функция возвращает строку с текущей датой в формате"мм-дд-гпт", оператор позволяет присвоить новое значение в томже формате.TIMES - функция возвращает строку с текущим временем вформате "чч:мм:сс", оператор позволяет присвоить новое значение втом же формате. Цифры на 1-2 позициях соответствуют часам, на 4-5позициях - минутам, и цифры на 7-8 позициях соответствуют секундам.Выделить необходимые значения из строковой переменной позволяютстроковые функции.Самостоятельно закодируйте цифры от 0 до 9 (символ размером8x8 точек) и поместите коды в десять строк, начинающихся каждаяоператором DATA. Строка с изображением нуля, например, такаяО data 60,66,70,74,82,98,66,60должна быть первой из этих десяти строк. Примерный фрагмент программы(печатает только десятки часов и только символ нуля) приведенниже, строки с кодами других цифр и операторы для печати внужное место экрана единиц часов, минут, секунд необходимо доба­29


вить самостоятельно. Работа программы прекращается по нажатиюлюбой клавиши.defint a-zdim ср(80)• ------------подготовка-------------screen Оfor i=0 to 7 9 : r e a d cp(i):next20 els: print ,/"Точное время"locate 22,20: print "любая клавиша - конец работы"' ------- выводим время по символам -----------х=5у=10:k=val(mid$(time$,1,1)):gosub symbol» ------- выбор действий ------10 if val(mid$(time$,8,1))=k then' ждем изменения времени или нажатия клавишиif inkey$"" thenels:locate ll,40:print "Конец работы":endend ifgoto 10elsegoto 20 ' при изменении времени печатаем цифрыend ifend» ---- подпрограмма печати цифры ---------symbol:for i=0 to 7for j=0 to 7locate x+i,y+jif cp(k*8+i) and 2A (7-j) then print chr$(219)nextnextreturn' -------- кодирование цифр ---------0 data 60,66,70,74,82,98,66,60Возможные дополнения (цвет цифр, мигающий указатель междуцифрами и т.п.) можно ввести в программу самостоятельно.В языке <strong>TURBO</strong> <strong>BASIC</strong> возможны следующие операции с переменнымистрокового типа (в том числе используемые в программе):Операция КОНКАТЕНАЦИЯ (слияние строк) - выполняетсязнаком плюс: c$="body" + "building".Функция LEN (строка) - определяет количество символов встроковой переменной, включая окаймляющие пробелы. Для пустойстроки возвращает 0.30


Функция INSTR([m, ] строка, подстрока) - проверяет наличиеподстроки в строке, начиная с позиции m (по умолчанию с первогосимвола), возвращает номер позиции первого вхождения (смещение),либо 0. Пример: INSTR(3, "titul", "i") равно 0, INSTR(2, "titul", "i")равно 1, INSTR("titul", "i") равно 2.Функция LEVl$(cmpoKa, n) - выбор n левых символов строки.Функция RIGHT$(cmpo/oa, n) - выбор n правых символов строки.Функция МЮ$(строка, m [, п]) - выбор п символов из строки,начиная с ш-ой позиции. По умолчанию выбираются все символы доконца.Оператор МГО$(с/и/?ога, m [, п])=подстрока - вставляет в строкуп символов подстроки, начиная с m-ой позиции (по умолчанию всюподстроку).Функция \JCASES(cmpoKa) - преобразует все буквы строки вбольшие (удобно для сортировки или поиска независимо от регистра).Функция LCASES{строка) - преобразует все буквы строки в малые(строчные) - обе функции только для латинских символов.Функции НЕХ$(а), ОСТ$(а), BIN$(a) - возвращают строку с шестнадцатеричным,восьмеричным, двоичным представлением целойчасти числа а, находящегося в пределах от -32768 до 65535.Функция БТК$(переменная\выражение) - преобразует число встроку из цифр.Функция VАЬ(строка) - преобразует строку из цифр в число, вкачестве разделителя целой и дробной частей допускает только точку,на первом недопустимом символе прекращает преобразование.Функция CHR$(n) - возвращает символ с кодом п. Для рисованияцифр на экране в текстовом режиме удобно использовать символ,код которого равен 219 (белый прямоугольник), т.е. chr$(219).Функция ASС(строка) - возвращает значение ASCII кода первогосимвола строки.Функция SPACE$(n) - возвращает строку из п пробелов, в графическихрежимах с оператором PRINT предпочтительней, чемSPC(n).Функция STRING$(n, m) - возвращает строку из п символов скодом т .Функция STRING$(n, "символ") - возвращает строку из п символов,заданных в виде строковой константы или переменной.31


8 Базы данных8.1 Цель работыЦелью работы является закрепление навыков сортировки списков,формирования баз данных, работы с файлами и строковыми переменными.8.2 ЗаданиеРазработать и отладить программу, позволяющую создавать телефоннуюкнигу с возможностью изменения, сортировки данных и ихсохранения в файлах.8.3 Указания к работеМеню телефонной книги должно содержать опции: добавитьномер, удалить, найти, просмотр, выход, в частности10 1 ---------- м е н ю ----------dolocate 22,10,0:color 14,0print "Esc-выход, Ins-добавить, Del-удалить, Tab-найти, 11;print chr$(24) chr$ (25) 11-просмотр"while not instat:wendlocate 22,10:color 7,0:print space$(69) 1 стереть менюc$=inkey$:kod=asc(right$(c$,1)) ' проверка нажатой клавишиselect case kodcase 82:gosub 201 добавить номерcase 83:gosub 401 удалить номерcase 9 :gosub phone:gosub clean 1 найти номерcase 72,75:if m>l then deer m ' к началу спискаcase 80,77:if nKn then incr m ' к концу спискаend selectgosub 30' показать списокloop until kod—271 выход по клавише Esc' ----- Завершение работы --------------Каждая запись - строковая переменная record$(), включает триполя данных, начинающихся с первой, 20 и 40 позиции: телефон (номер),абонент (фамилия) и адрес. Число записей ограничим размером100, поэтому можно сразу объявить статические массивы для записейи вспомогательных индексов, напримерdim record$(100), index(lOO)обозначая n - общее количество записей, m - номер текущей записи.Для хранения данных обычно используют специальные файлы,причем в Бейсике различают файлы с последовательным, параллельнымдоступом и двоичные. Пример сохранения в конце работы строковыхпеременных record$Q в последовательный файл с разделите-32


лями (если файл уже существовал, он будет заменен новым)• завершение работы --------------els:locate 12,25:print "Пробел - сохранить данные в файл"c$=input$(1)if с$=" " thenopen "basa.dat" for output as #1 * открыть файл для записиfor 1=1 to n:write #l,record$(i):nextclose #1' закрыть файлend ifels:locate 12,35:print "Работа закончена"endи чтения этих переменных из файла в начале программы (если в каталогефайл с таким именем отсутствует, возникает ошибка чтения иуправление передается сразу на строку с номером 10)• загрузка существующей б а з ы -------on error goto 10open "basa.dat" for input as #1 ' открыть файл для чтенияwhile not eof(l)' пока не найден конец файлаincr n:input #1,record$(n)wend' определяем индекс конца списка пclose #1gosub 2 5 :от=1:gosub 30 ' сортировать и показать с первого10 ' ---------- м е н ю ----------При вводе номера телефона следует проверять путем сравненияС образцовой строкой f$="0123456789" ’ допустимые символы, ЧТОвводятся только цифры (любые остальные символы не принимаются),а кроме того, что номер не равен нулю и не повторяетсяphone: 1 -- ------- ввод номера т е лефона---------------locate 19,20,1:print "номер телефона :1 курсор виденphone$=""do 1 цикл, пока не нажата клавиша Enter (код 13)c$=input$(1)' проверка вводимых символовif instr(f$,c$) then phone$=phone$+c$:print c$; 1 это цифраloop until c$=chr$(13)print1 -------- поиск одинаковых номеров ---------------if val(phone$)=0 then ifind=l:beep’ номер равен нулюfor i=l to n ' введенный номер совпадает с существующимif val(phone$)=val(left$(record$(i),9)) then m=i:ifind=l:beepnextreturnВ программе предусматривается сортировка данных только пономеру телефона (первое поле записи), причем используется стандарт-33


ный метод пузырьковой сортировки. В этом методе самый легкий илисамый тяжелый (в зависимости от выбранного знака неравенства)элемент постепенно перемещается (всплывает) к концу массива. Сортировканеобходима после добавления очередной записи2 0 1 ------————------ д о б а в и т ь —— -------------ifind=0:gosub phone:gosub cleanif ifind=l then gosub 30:return1 неверный номерlocate 19,20:input "фамилия клиента: ",aname$:gosub cleanlocate 19,20:input "адрес абонента : ”,addrs$:gosub clean' — помещаем все три поля в одну строковую переменную—записьincr n :record?(n)=space$(79) 1 заполнили запись пробеламиmid$(record$(n),1 ) =phone$mid$(record?(n),20)=aname$mid$(recordS(n),40)=addrs$25 '---—— сортируем Записи в порядке неубывания номера телефонаfor i=l to n :index(i)=i:next ' запоминаем, где стоял элементfor i=l to n —1for j=l to n - 1' если текущий номер больше следующего, меняем записи местамиif val(left$(record?(j),9))>val(left$(record$(j+1 ) ,9)) thenswap record$ (j) ,record? (j+1 ) :swap index (j) ,index (34-1)end ifnextnextfor i=l to nnextreturnif index(i) =71 then m=i1 проверяем, куда он переместилсяПодпрограмма просмотра данных (вывода в окно из 10 строк)30 1 ------------п р о с м о т р ------- —locate 6:color 15for i=l to 10:print space?(79):next1 очистили окноlocate 6if n-nKlO then nn=n else nn=m+9 1 число строк не более 10for i=m to nn1 новый номер всегда первый и выделенif i=m then color , 1 else color ,0print record?(i)nextcolor 7,0returnДля удаления m-ой записи просто перемещают все последующиезаписи, начиная с т + 1 , на позицию вперед40 1 -— — — удаление записи ------for i=m to n - 1 :record?(i)=record$(±+1 ):nextdeer n * переместили записи вперед и сократили списокr e t u r n34


Подпрограмма Clean предназначена для очистки поля вводаданныхC le a n : ' --------- оч и стк а п о л я -----------l o c a t e 1 9 ,2 0 : p r i n t s p a c e $ (5 0 )r e t u r nПримерный вид окна программы в ходе работы показан нижеТелефонная книгаНомер тел еф она Фамилия а б о н ен т а А дресШ Й К Я Н 0 m .c o d e , - г а к . С а тп а ев а , 1363 26814 Фантазия а к . С атп аев а, 6 5 /13 26973 Экси п л . Победы, 7Б4 50904 ПГУ Ломова 645 31753 М агех новый ЦУМ5 32793 РОМ а к . С атп аев а, 36Б ес-в ы х о д , I n s -д о б а в и т ь , D e l-у д а л и т ь , Tab-п о и ск ,t j -просм отрБлок объявлений в начале программы может быть сформированобычным образом' телеф онная книга н а 100 за п и с е й , 1 2 .1 2 .2 0 0 3d e f i n t i - ndim r e c o r d $ ( 1 0 0 ) ,in d e x ( 1 0 0 )f $="0123456789"1 допустимы е символыm = l: i n d e x ( 1 ) =m :kod=0:n=0s c r e e n 01 --------------- форма на эк р ан е -----------e l sc o l o r 1 5 : p r i n t Телефонная к н и га" : p r i n tp r i n t s t r i n g $ ( 8 0 ,1 9 6 ) ;p r i n t "Номер телеф она Фамилия а б о н ен т а Адрес"p r i n t s t r i n g $ ( 8 0 ,1 9 6 ) ;l o c a t e 1 6 : p r i n t s t r i n g $ ( 8 0 ,1 9 6 )c o l o r 7i з а г р у з к а существующей базы -----------35


Литература1Смирнов Н. Н. Программные средства персональных ЭВМ. -JL: Машиностроение. Лснннгр. отд-ннс, 1990. - 272 с.2 Светозарова Г. И. Описание языка Турбо-Бейсик: Справочноепособие для студентов всех специальностей. - М.: Изд-во МГИСиС,1994. - 33 с.3 Алиев В. К. Языки Бейсик. - М.: Изд-во «Солон-Р», 2000. -224 с.4 В. Е. Алексеев и др. Вычислительная техника и программирование.Практикум по программированию - М.: Высш. шк., 1991. -400 с.5. Бороденко В. А. Программирование в среде <strong>TURBO</strong> <strong>BASIC</strong>.Учебное пособие. - Павлодар, Изд-во ПГУ, 2004. - 83 с.36


Приложение А(справочное)ASCII-коды страницы 866 (DOS)Стандартная таблица (коды 0-127) Расширенная таблица (коды 128 - 255)КодСимволКодСимволКодСимволКодСимволКодСимволКодСимволКодСимволКодСимволООО nul 032 Sp 064 096 128 А 160 а 192 L 224 Р001 soh 033 1 065 A 097 a 129 Б 161 б 193 225 С002 stx 034 * 066 В 098 b 130 В 162 в 194 226 т003 etx 035 # 067 С 099 с 131 Г 163 г 195 227 у004 eot 036 S 068 D 100 d 132 д 164 д 196 — 228 Ф005 enq 037 % 069 E 101 e 133 Е 165 е 197 229 X006 ack 038 & 070 F 102 f 134 Ж 166 ж 198 s 230 ц007 bel 039 1 071 G 103 g 135 3 167 3 199 • 231 ч008 bs 040 ( 072 H 104 h 136 и 168 и 200 L 232 ш009 tab 041 ) 073 I 105 i 137 и 169 й 201 |г 233 щ010 If 042 * 074 J 106 j 138 к 170 к 202 JL 234 ъ011 vt 043 + 075 К 107 k 139 л 171 л 203 г 235 ы012 ff 044 076 L 108 1 140 м 172 м 204 L г 236 ь013 cr 045 - 077 M 109 Ш 141 н 173 н 205 = 237 3014 so 046 078 N n o n 142 О 174 О 206 JL т 238 ю015 si 047 / 079 0 111 0 143 п 175 п 207 JL 239 я016 die 048 0 080 P 112 p 144 р 176 208 А 240 Е017 del 049 1 081 Q 113 Я 145 С 177 Н 209 *Р 241 ё018 dc2 050 2 082 R 114 г 146 т 178 11 210 т 242 €019 dc3 051 3 083 T 115 s 147 У 179 211 IL 243 е020 dc4 052 4 084 S 116 t 148 ф 180 - 212 U 244 i021 nak 053 5 085 u 117 u 149 X 181 = 213 р 245 !У022 syn 054 6 086 V 118 V 150 ц 182 ■| 214 246023 etb 055 7 087 w 119 w 151 ч 183 11 215 247024 can 056 8 088 X 120 X 152 ш 184 216 248у0025 em 057 9 089 Y 121 У 153 щ 185 = 217 249 .026 eof 058 090 Z 122 z 154 ъ 186 218 г 250027 esc 059 091 [ 123 { 155 ы 187 i| 219 1 251 V028 fs 060 < 092 \ 124 1 156 ь 188 1 220 I■ 252 №029 gs 061 = 093 ] 125 } 157 э 189 221 1 253 0030 rs 062 > A094 126 - 158 ю 190 л 222 254 ■031 us 063 ? 095 127 del 159 я 191, 223 ■1 255Примечание - коды с 0 по 31 и 127 являются управляющими.37


Приложение Б(справочное)Зарезервированны е слова T urbo BasicSCOM1 CLOSE ERR LOC POKE STRINGSSCOM2 CLS ERROR LOCAL POS SUBSDEBUG COLOR EXIT LOCATE PRESET SWAPSDYNAMIC COM EXP LOF PRINT SYSTEMSELSE COMMANDS EXP10 LOG PRINT# TABSENDIF COMMON EXP2 LOGIO PSET TANSEVENT COS FIELD LOG2 PUT THEN$DF CSNG FILES LOOP PUTS TIMESSINCLUDE CSRLIN FIX LPOS RANDOM TIMERSINLINE CVD FN LPRINT RANDOMIZE TOSLIST CVI FOR LPRINT# READ TROFFSOPTION CVL FRE LSET REG TRONSSEGMENT CVMD GET MEMSET REM UBOUNDSSOUND CVMS GETS МШ$ RESET UCASESSSTACK CVS GOSUB MKDIR RESTORE UNTILSSTATIC DATA GOTO MKDS RESUME USINGABS DATES HEXS MKIS RETURN USRABSOLUTE DECR IF MKL$ RIGHTS USROAND DEF IMP MKMDS RMDIR USR1APPEND DEFDBL INCR MKMSS RND USR2AS DEFINT INKEYS MKSS RSET USR3ASC DEFLNG INLINE MOD RUN USR4AT DEFSNG INP MTTMER SAVE USR5ATN DEFSTR INPUT NAME SCREEN USR6BASE DELAY INPUT# NEXT SEEK USR7BEEP DIM INPUTS NOT SEG USR8BINS DO INSTAT OCTS SELECT USR9BINARY DRAM INSTR OFF SERVICE VALBLOAD DYNAMIC INT ON SGN VARPTRBSAVE ELSE INTERRUPT OPEN SHARED VARPTRSCALL ELSEIF IOCIL OPTION SHELL VARSEGCASE END IOCTLS OR SIN VIEWCDBL ENDMEM KEY OUT SOUND WAITCEIL ENVIRON KILL OUTPUT SPACES WENDCHAIN ENVIRONS LBOUND PAINT SPC WHILECHDIR EOF LCASES PALETTE SQR WIDTHCHR$ EQV LEFTS PALETTE STATIC WINDOWUSINGCINT ERADR LEN PEEK STEP WRITECIRCLE ERASE LET PEN STICK WRITE#CLEAR ERDEV LINE PLAY STOP XORCLNGERDEVSERLLISTPMAPPOINTSTRSSTRIG38

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!