Microsoft QuickBASIC: операторы, массивы, циклы

Запуск QuickBASIC и его пределы. Операторы LET, PRINT, CLS и END, их использование в программировании. Запись массива в файл и чтение из него. Двумерные и многомерные массивы различной природы. Решение уравнений методами последовательных приближений.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 01.05.2015
Размер файла 1,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

i=0

fkt=1

20 i=i+1

fkt=fkt*i

if i<25 then goto 20

print fkt, i

Программа, как ни странно, работает. Однако дефект программы проявится, если вы в условии перехода возьмете большое число. Так, например, при числе 34 проблем нет, а уже при 35 вы получите сообщение о переполнении (overflow). Для того, чтобы устранить данный недостаток нужно прибегнуть к дополнительным определениям переменной. Хорошие программисты всегда определяют тип переменной и иные ее параметры. Об этом ниже.

5.1 Оператор DIM

Английское слово DIMENSION, от которого и берется сокращение DIM, означает «размерность», «размер». Этот оператор нужен для уточнения и определения переменных, с которыми работает программа. Дело в том, что по умолчанию (так называемый default, который нехорошо ассоциируется с датой 19 августа 1998 года) QB пользуется обычными переменными одинарной точности. Если, скажем, нам понадобятся однопараметрические переменные A(I), то он их нам даст штук 10-12, а затем объявит об overflow (переполнении). Вообще говоря, оператором DIM объявляют массивы (об этом чуть позже) или определяют тип данных для немассивной переменной. Второй оператор REDIM, который можно считать дополнительным видом оператора DIM, заявляет параметры или преобразовывает параметры динамических массивов, снимая предыдущие ограничения. Формат операторов таков:

DIM [SHARED] variable[(subscripts)] [AS type]

[,variable[(subscripts)] [AS type]]...

REDIM [SHARED] variable(subscripts) [AS type]

[,variable(subscripts) [AS type]]...

Дадим некоторые комментарии. Здесь

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

variable это имя переменной или массива.

subscripts размеры массива, указываемые в формате:

[нижний TO] верхний [,[нижний TO] верхний]...

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

AS type объявляет тип данных массива или переменной (INTEGER, LONG, SINGLE, DOUBLE, STRING, или же указывается тип данных, определяемых самим пользователем).

В операторе DIM объявляют также и характер (статический или динамический) массива. Если способ хранения массива не указывается явно как $STATIC, $DYNAMIC, или COMMON, массивы с цифрами вместо индексов являются статическими, а массивы в DIM с символьными переменными являются динамическими. Оператор REDIM всегда объявляет динамические массивы. Режим статических массивов автоматически заявлен при запуске программы и таким и остается. Хранение динамических массивов происходит в памяти машины во время выполнения программы.

Вернемся к программе, считающей факториал. Добавим в ней такие строки

dim fkt as double

i=0

fkt=1

20 i=i+1

fkt=fkt*i

if i<25 then goto 20

print i;“! = ”fkt

end

Вот теперь для того, чтобы заставить программу «заткнуться» от переполнения, нужно взять весьма большое число, например 171.

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

dim fkt as double

i%=0

fkt=1

20 i%=i%+1

fkt=fkt*i%

if i%<25 then goto 20

print i%;“! = ”fkt

end

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

5.2 Оператор FOR … NEXT

Слова FOR … NEXT переводятся как «для» … «следующий». Формат оператора таков

FOR counter = start TO end [STEP increment]

[statementblock]

NEXT [counter [,counter]...]

Здесь

counter числовой счетчик, указываюший на количество необходимых

операций (повторений),

start и end начальное и конечное значения счетчика,

increment шаг, с которым счетчик должен изменяться за один проход цикла,

[statementblock]блок операторов (в которых переменная счетчика должна использоваться).

Отметим, что начальное и конечное значения, как и собственно шаг, могут быть и (целыми) отрицательными величинами. Для вычисления нашего факториала этот оператор придает программе более простой и прозрачный вид:

' vychislenie faktoriala, n!=1*2*3*…*n

dim fkt as double

input “vychilyaem n!; vvedi n (<171)=”,n%

fkt=1

for i%=1 to n%

fkt=fkt*i%

next i%

print i%;“! = ”fkt

end

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

Задача. Найти сумму квадратов первых N членов натурального ряда чисел.

Решение.

cls

dim sum as double

input “vychilyaem summu kvadratov N chisel, N=? ”,n%

for i%=1 to n%

sum=sum+i%^2

next i%

print “summa kvadratov ravna”; sum

end

Задача. Распечатать таблицу синусов углов от 0О до 45О с шагом 5О.

Решение.

cls

print “Tablitsa sinusov ”

print “ugol x (grad), sinx ”

for i%=0 to 45 step 5

print “------------------------------------“

print i%,,sin(i%*3.141592654/180)

next i%

print “------------------------------------“

end

Давайте попробуем решить одну задачу, настолько же важную, насколько важен для вас ответ на вопрос «Как вычисляют различные функции, например, синусы и косинусы в таблицах Брадиса?». Честно говоря, мне кажется, что понять каким образом вычисляется, например, экспонента (т.е. функция или , как иногда ее записывают) очень важно для понимания всей математики. Если вы вспомните формулу Эйлера

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

Формула Тейлора, а вернее ее частный случай -- формула Маклорена, дает нам представление экспоненты степенным рядом

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

Эта частная сумма приближает истинное значение экспоненты тем лучше, чем большее число мы берем.

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

Решение.

` vechislenie eksponenty

input “Ishchem znachenie y=exp(x). Vvedi x=”;x

input “vvedi stepen', do kotoroi schitetsya ryad, n=”;n%

dim fkt(n%+1) as double, res as double, a as double

for i%=0 to n%

gosub fct

res=res+(x^i%)/fkt(i%)

next i%

a=exp(x)

print “resul'tat =”;res, “machina daet - “;a

end

fct:

fkt(i%)=1

for j%=1 to i%

fkt(i%)=fkt(i%)*j%

next j%

return

Задание. Напишите программы, которые бы вычисляли sinx и cosx с требуемой точностью и выводили результат, который дают встроенные в QB подпрограммы вычисления этих функций.

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

Обратимся к достаточно сложной (но лишь на первый взгляд!) задаче численного интегрирования функций.

Задача. Вычислить интеграл

.

Решение. Напомним, что определенным интегралом от функции по промежутку называют предел всевозможных интегральных сумм по всем -разбиениям при стремлении длины наибольшего отрезка разбиения к нулю (и, следовательно, при N стремящемся к бесконечности. Частная интегральная сумма для некоторого -разбиения сегмента :

,

,

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

Для целей практического численного интегрирования удобнее разбивать весь сегмент интегрирования не произвольно, а равномерно, т.е. на N равных частей. Все окажутся равными некоторой величине h = (b -- a)/N и поэтому это число, уже не зависящее от индекса суммирования, можно вынести за знак суммы как постоянный сомножитель каждого слагаемого.

Далее, в качестве точки также удобно брать, например, самую левую точку или самую правую точку элементарного сегментика. Интегральные суммы, получающиеся при таком выборе значений функции, назовем также левой или правой. Отметим, что при условии возрастания функции на сегменте интегрирования левая сумма становится минимальной для данного разбиения, т.е. нижней суммой Дарбу, в то время как правая сумма есть верхняя сумма Дарбу. При убывании функции все будет с точностью до наоборот. Как известно, критерием существования определенного интеграла является равенство пределов нижних и верхних интегральных сумм Дарбу при неограниченном увеличении числа точек в -разбиении и потому стремлении к нулю. Как известно, при увеличении числа точек, участвующих в разбиении, нижняя сумма Дарбу не убывает, а верхняя не возрастает. Более того, для вычисления определенного интеграла можно воспользоваться формулой трапеций, в которой каждое элементарное произведение в интегральной сумме заменяется на площадь трапеции (вертикально поставленной на одну боковую сторону), основаниями которой будут служить значения функции соответственно в левой и правой точках элементарного сегментика. Помня, что ее площадь равна произведению полусуммы оснований на высоту (а высота -- это ширина h нашей узкой трапеции), мы замечаем, что в качестве результата формулы трапеций при равномерном разбиении сегмента интегрирования можно взять полусумму левой и правой интегральных сумм. Таким образом, для вычисления определенного интеграла от синуса по произвольному промежутку по формуле трапеций мы можем составить следующую программу:

cls

print “Vychislenie integrala”

print “b”

print “”;chr$(218) `217? 179

print ““;chr$(179); “ sinxdx”

print ““;chr$(217)

print “a“

Эта часть программы, которую иногда называют «шапкой», создает вводную часть программы. Мы используем функцию chr$(x), которая возвращает на экран символ, отвечающий его десятичному коду x.

Можно было бы написать интеграл и получше, но проблема в том, что при наличии руссификации в системных файлах autoexec.bat и config.sys вторая половина таблицы из 256 выводимых на экран ASCII кодов (Anerican Standard Codes for Information Interchange, произносится как «аски») содержит руссифицированные символы взамен дополнительных символов (которые по старой памяти иногда называют «псевдографикой»), которые бы позволили нам создать более точное изображение знака интеграла.

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

input “vvedi a”;a

input “vvedi b”;b

input “vvedi kolichestvo razbienii, n=”; n%

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

dim x(n%+1) as double, y(n%+1) as double, h as double

dim sum as double, lsum as double, rsum as double,

dim lint as double, rint as double, int as double

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

for i%=0 to n%

x(i%)=a+i%*h

y(i%)=sin(x%) `zdes stoit sama funnktsiya!

sum=sum+y(i%)

next i%

Теперь можно вычислить левую и правую суммы значений:

lsum=sum-y(n%)

rsum=sum-y(0)

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

lint=lsum*h

rint-rsum*h

int=(lint+rint)/2

Теперь можно печатать результат:

print “zpnachenie integrala ravno”, int

end

В качестве проверки считается интеграл

,

в котором величина берется как 3.1415926536 (Можно взять и большее количество знаков в выражении 3.141592653589793238462643). Нам нужно подставить половину этого числа вместо верхнего предела b. Как это сделать, не выходя из QB для вызова, например, стандартного калькулятора в Windows? Ответ нужно искать на нижней строке интерфейса QB, где имеется подсказка:

<Shift+F1=Help> <F6=Window> <Esc=Cancel> <Ctrl+F1=Next> <Alt+F1=Back>

Именно клавиша F6, выделенная выше полужирным шрифтом, позволяет перейти из окна редактора в нижнее окошко “Immediate” (сразу, непосредственные вычисления). Однако следует помнить, в этом нижнем окошке можно вводить только одну строку, например:

print 3.1415926536/2 {Enter}

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

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

6. Работа с массивами. Одномерные (однопараметрические) массивы

Массивом («array» по-английски) называют упорядоченное множество однородных данных. Тот параметр (или несколько параметров), который упорядочивает массив, называют его параметром (или параметрами). Количество данных, входящий в массив, называют его размером, а количество параметров, определяющих характер массива, называют его размерностью. Например, данные метеорологических ежедневных четырехкратных наблюдений температуры воздуха за пять лет представляют собой одномерный массив, определяющим параметром которого является время (или номер) наблюдения. Нетрудно подсчитать, что данных в таком массиве будет чуть больше 7300 (нужно правильно учесть високосные годы!), т.е. именно таков его размер.

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

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

Например, чем плоха идея о том, что характер погоды за год определяется тем, на какое время выпадает празднование Пасхи или Науруза (другими словами, характер лунного обращения вокруг Земли и поэтому распределения по временам года лунного притяжения и приливов вполне может сказаться на характере погоды!)? Говорят же, что год был засушливым или дождливым, а зима снежной и/или теплой, или, наоборот, суровой. Для проверки такой гипотезы нужно «перелопатить» огромное количество данных метеорологических наблюдений, распределить или перераспределить выборки тем или иным образом, провести строгий статистический анализ и т.д. и т.п.

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

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

Задача. Ввести числовой одномерный массив размера N и найти его среднее значение.

Решение.

`vvod massiva i nakhozhdenie srednego

input “vvedi razmer odnoparametricheskogo massiva, N”; n%

dim a(n%) as double

for i%=1 to n%

print “a(“;i%;”)=”:input a(i%)

next i%

for i%=1 to n%

sum=sum+a(i%)

next i%

srd=sum/n%

print “srednee massiva ravno”; srd

end

Более элегантное решение с одновременной проверкой вводимых величин можно записать в виде:

cls 'vvod massiva i nakhozhdenie srednegoinput "vvedi razmer N odnomernogo massiva "; n%

dim a(n%) as double

for i% = 1 to n%

20 print " a("; i%; ")="; : input a(i%)

print "Vy vveli a("; i%; ")="; a(i%);

print "Pravil'no? Enter (y/n)";

40 input resp$

if len(resp$)> 1 then ` ogrnichitel dliny vvoda

print "po-vimatelnee! <<y>> ili <<n>>?": goto 40

if lcase$(resp$) = "n" then

print "vvedem zanovo...": GOTO 20

elseif lcase$(resp$)<> "y" then

print "otvechaite po-vnimatel'nee!...": goto 40

end if

sum = sum + a(i%)

next i%print “vvod zavershen, spasibo!”

srd = sum / n%print "srednee massiva ravno"; srdend

Две новые функции, использованные в данной программе достаточно просты и понятны. Функция len(variable$) возвращает длину символьной строки (стринга) variable$, поэтому в строчке с комментарием срабатывает ограничение «не больше одного символа», а функция lcase$(variable$) указывает на нижний регистр введенного символа.

7. Запись массива в файл и чтение из файла

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

OPEN file$ [FOR mode][ACCESS access][lock]AS [#]fileno% [LEN=reclen%]

Здесь опции операндов таковы:

file$ Имя файла или устройства. Имя файла может включать также и полный путь к нему.

modeОдин из режимов: APPEND (присоединить), BINARY (бинарный ввод/вывод), INPUT (ввод или считывание из файла), OUTPUT (вывод или запись в файл), или RANDOM (открытый или произвольный доступ).

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

lock В сетевом окружении указывает на тип блокировки (доступность/недоступность) файла: SHARED (разделенный ресурс), LOCK READ (закрыт для чтения), LOCK WRITE (закрыт для записи), LOCK READ WRITE (закрыт и для того, и для другого).

fileno% Натуральное число в пределах от 1 до 255 идентифицирующее открытый файл в программе.

reclen% Для файлов оперативного (случайного) доступа означает максимально возможную длину одновременной записи (по умолчанию -128 байт). Для последовательно записываемых и считываемых файлов -- число символов в буфере (по умолчанию - 512 байт).

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

Предположим, что мы ввели некоторый массив. Как записать его в файл с именем mass.dat? Для этого применяется уже знакомый нам оператор print в формате

print#n%, “text”, const, variable, variable$

Таким образом, указание «#n%,» распознается этим оператором как «почтовый адрес» записи данных или текста. Отметим, что при записи данных в файл разделители «запятая» и «точка с запятой» работают аналогично тому, как это происходит с выводом информации на экран монитора оператором print, т.е. разделитель операндов «запятая» организует запись с табуляцией (отделение пробелами фиксированной длины).

Чтение данных из файла с массивом в оперативную память машины осуществляется при помощи тех же операторов открытия-закрытия файлов, но с другим блоком действий между ними и с выбором опции for input вместо for output в операторе open.

Рассмотрим еще один оператор или команду, которая позволяет осуществлять временный выход в операционную систему DOS. Формат этой команды

shell [commandstring$]

в котором

commandstring$

означает имя DOS-команды или bat-файла. Исполнение программы возобновляется сразу же после того как выполнена команда или bat-файл. Если операнд commandstring$ опущен, то shell выводит вас в DOS сессию и отображает на экране DOS промптер. Завершить работу в DOS нужно вводом командной строки exit. Отметим, что данная команда весьма полезна, например, при сортировке файлов данных с помощью известной DOSовской команды sort. Но, на самом деле, считать, что вы вышли именно в ту DOS-сессию, из которой запускали QB неверно. На самом деле осуществляется новая эмуляция DOS с запуском нового командного интерпретатора command.com в новом разделе оперативной памяти. Если вы входили в QB из оболочки Norton Commander, то при правильном распределении ресурсов оперативной памяти вы даже сможете запустить еще один Norton Commander (не тот, из которого вы, скажем, запускали первый Norton Commander!). Более того, можно запустить даже еще один QB (!) и попытаться из него снова выйти в еще один DOS.

Доходчивее всего, на мой взгляд, ситуация с выходом в DOS и возвратом из него интерпретируется одной старинной гравюрой, на которой изображена воображаемая небесная сфера и человек, просунувший голову через нее и выглядывающий наружу (а что это вы там делаете?); правда, композицию нужно слегка изменить -- человек должен смотреть вовнутрь сферы извне… Так вот, выйдя по указанной команде (оператору) в новый DOS, вы сможете посмотреть, присутствует ли записанный вами файл mass.dat в каталогах (например, DOS-команда с маской dir m*.dat), можно даже просмотреть этот DOSовской файл командой type m*.dat. А затем вернуться в исполняемую программу уже упомянутой командой exit.

8. Двумерные и многомерные массивы различной природы

Запись, чтение

Перейдем к практической реализации того, о чем мы писали выше.

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

Решение.

cls 'vvod spiska dannykh (i ego sortirovka) n%=12 `zameniv etu stroku, mozhno poluchit vozmozhnist'

`vvodit' spisok proizvil'nogo razmera…

dim a$( n%), o1(n%), o2(n%), o3(n%), osr(n%)

for i% = 1 to n%

print i%; " chelovek. Familiya?": input a$(i%)

print "otsenka1 ("; i%; ")="; : input o1(i%)

print "otsenka2 ("; i%; ")="; : input o2(i%)

print "otsenka3 ("; i%; ")="; : input o3(i%)

osr(i%)=(o1(i%)+o2(i%)+o3(i%))/3

next i%print “vvod zavershen, spasibo!”

`obshchaya srednyaya otsenka po gruppe

for i%=1 to n%

ComOts=ComOts+o1(i%)+o2(i%)+o3(i%)

next i%

print “vash fail sokhranyaetsya kak <<spisok.dat>>

open spisok.dat for output as #1

print #1,“Familiya”,“ots1”,“ots2”,“ots3”,“sred.”

print #1,

for i%=1 to n%

print #1,a$(i%),o1(i%),o2(i%),o3(i%),osr(i%)

next i%

print #1,“srednii ball po gruppe =”; ComOts/(n%*3)

close

shell “sort name$.dat” При эмуляции QB из среды Windows не все DOSовские команды проходят корректно. Поэтому не расстраивайтесь при получении сообщения «Incorrect DOS version». Можно обратиться к системному администратору или попытаться запускать QB в сеансе DOS, вызванном через «Пуск» и перезагрузку компьютера в DOS режим. Вообще говоря, рано или поздно нужно изучить Linux -- эта операционная система, наследница UNIX'а, работает гораздо стабильнее.)

exit

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

9. Работа с векторами и матрицами

Как известно, операции с векторами и/или матрицами составляют основу самого большого числа современных математических действий и расчетов. Ясно, что всякий n-мерный вектор представляет собой однопараметрический числовой массив, а всякая вещественная nЧm-матрица есть двумерный (двухпараметрический) массив размера n·m. Таким образом, ввести два вектора -- это просто ввести два массива (одной и той же длины или размера). Ввод матрицы представляет собой ввод двухпараметрического массива, у которого размеры матрицы служат ограничителями соответствующих двухпараметрических переменных в операторе dim.

Ниже мы приведем решение двух задач алгебраического характера.

Скалярное произведение двух векторов и равно следующему выражению

,

где , .

Задача. Написать программу, вычисляющую скалярное произведение двух векторов произвольной размерности n.

Решение.

cls

print“skalyarnoye proizvedenie <a,b> vektorov a i b”input "vvedi razmernost' vektorov n"; n%

dim a(n%), b(n%)

for i% = 1 to n%

skl=skl+a(i%)*b(i%)

next i%

print “<a,b> = “; skl

end

При желании можно вставить блок сверки/проверки вводимых данных. Перейдем теперь к умножению таких важных алгебраических структур, какими являются матрицы. Если даны две (квадратные и одинаковой размерности nЧn) Можно посчитать и произведение nЧm-матрицы на mЧp -матрицу, слегка подправив программу. ) матрицы A и B, тогда под их матричным произведением понимают третью матрицу C той же размерности Точнее, размерности nЧ p, см. предыдущую сноску.), элемент cij которой есть обычное скалярное произведение i-ой строки первой матрицы A на j-ый столбец второй матрицы B. Иными словами,

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

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

Решение. Вначале напишем блок ввода матрицы А

cls ` umnozhenie matrits

input “Vvedi razmernost' matrits A i B ”; n%

print “Vvod matritsy A”

for i%=1 to n%

for j%=1 to n%

print “a(“;i,j;”)=”: input a(i.j)

next j%

next i%

print “Matritsa A vvedena”

Отметим, что блок ввода реализуется в форме двух вложенных циклов. В самом деле, открыв первый цикл по i, мы на каждом его шаге уже по циклу в отношении j (j=1 to n%) вводим все элементы первой строки, затем (когда i=2) всю вторую строку и т.д.

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

??стоит воспользоваться таким преимуществом компьютера перед простой пишущей машинкой, как возможность выделения части текста ({Shift}+{} или {} или {End}), удаления ({Shift}+ {Delete} или копирования ({Ctrl}+{Insert}) такой выделенной части в буфер (иногда говорят “забрать в карман”) и вывода ({Shift}+{Insert}) из буфера в текст. Подсказка по сочетанию клавиш дается в верхнем меню Edit.

??Не забывайте также, что грамотный человек будет перемещаться по тексту с использованием клавиш ({Home}, {End}) и сочетания клавиши {Ctrl} со стрелками, перепрыгивая, таким образом, через целые слова, а не тащиться по текстовому полю «по-символьно».

print “Vvod matritsy B”

for i%=1 to n%

for j%=1 to n%

print “b(“;i,j;”)=”: input b(i,j)

next j%

next i%

print “Matritsa B vvedena”

Теперь можно устроить блок вычисления элементов произведения. Его также легче скопировать из блока ввода матрицы A с дополнительной редакцией и добавлением строк.

for i%=1 to n%

for j%=1 to n%

for k%=1 to n%

c(i%,j%)= c(i%,j%)+a(i%,k%)*b(k%,j%)

next k%

next j%

next i%

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

Далее следует блок вывода результата, который также весьма близок к первому блоку ввода:

for i%=1 to n%

for j%=1 to n%

print c(i%,j%), `, ili ; vliayet na pechat!

next j%

`print

next i%

end

??Хочется заранее предупредить от увлечения большими числами при вводе размерности матриц и других величин. Так, при вводе числа 5 вам придется вводить 25 чисел в каждую матрицу. Если же вы все-таки ввели что-нибудь большое, то прекратить выполнение программы можно двумя путями: 1) нажатие {Ctrl}+{C} приводит к остановке передачи управления; 2) если машина (вашей собственной персоной, больше-то некому...) зациклена или программа «зависла», то нажмите {Ctrl}+{Pause}.

??Не забудьте также перед запуском уже исправленной версии программы нажать {Alt}+{R}, {R}, иначе программа продолжит выполнение шагов старой (неисправленной) версии вашей программы.

??Если по запросу программы вам нужно ввести нуль, то достаточно просто нажать {Enter}.

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

10. Решение уравнений методами последовательных приближений

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

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

.

Решение.

cls'metod posled. priblizh.print "Reshaem uravneniye, presobrazovannyi vid kotorogo"print "x = tg(0.2x) - 0.9sqr(x)"input "vvedi kolichestvo iteratsii"; n%dim x(n% + 1) as double, r(n%) as doubleINPUT "vvedi nachalnoye znachenie"; x(0)

FOR i% = 1 TO n% STEP 1

x(i%) = 3 + TAN(.2 * x(i% - 1)) - .9 * SQR(ABS(x(i% - 1)))

print "reshenie na"; i%; "iteratsii = "; x(i%);

print "shag ="; x(i%) - x(i% - 1)print next i%print print n%; "-oe pribizh.= "; x(n%);

print "s poslednim shagom="; x(n%) - x(n% - 1)

end

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

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

Задача. Написать программу для решения уравнения

методом «вилки» (деления отрезка пополам).

Решение. ) Мы напечатали операторы “как положено”, т.е. прописными буквами. Вводить же их с клавиатуры следует в обычном режиме, т.е. без нажатия клавиши “CapsLock”. Кроме того, здесь использован новый оператор DEF FN, который позволяет определять функции пользователя. И даже для нескольких переменных!)

CLS

?”Ishchem resheniye uravneniya x^3-2x^2+5x-4.1234567=0”

DIM x AS DOUBLE, y AS DOUBLE, z AS DOUBLE

'opredeleniye funktsii, izmenit' dlya drogoi zadachi!!!

DEF FNUser (x) = x * x * x - 2 * x * x + 5 * x - 4.1234567#

DEF FNNew (y, z) = y * z

INPUT "predely simmetrichnogo intervala [-A;A], A=?"; Dia

m% = INT(ABS(Dia))

DIM x(m%) AS DOUBLE, y(m%) AS DOUBLE

FOR i% = -m% TO m%

PRINT i%, FNUser(i%)

NEXT i%

20 INPUT "dlya [a;b] vvedi a="; Left: INPUT "i b="; Right

INPUT "opredeli kolichestvo iterastii N"; n%

REDIM a(n% + 1) AS DOUBLE, b(n% + 1) AS DOUBLE, c(n% + 1) AS DOUBLE

a(0) = Left: b(0) = Right

CLS

PRINT "proverka godnosti intervala..."

IF FNNew(Left, Right) < 0 THEN CLS : PRINT "OK": GOTO 40

PRINT "Interval ne goditsya!!!"

GOTO 20

40 PRINT "interval goditsya!"

PRINT "Nazhmi <<PROBEL>> dlya prodolzheniya..."

DO

LOOP UNTIL INKEY$ = CHR$(32) '032 is the ASCII code for "Space"

GOTO 60

50 INPUT "opredeli NOVOYE kolichestvo iterastii N"; n%

REDIM a(n% + 1) AS DOUBLE, b(n% + 1) AS DOUBLE, c(n% + 1) AS DOUBLE

a(0) = Left: b(0) = Right

60 FOR i% = 1 TO n%

c(i%) = (a(i% - 1) + b(i% - 1)) * .5

PRINT i%, c(i%), FNUser(c(i%))

GOSUB decision

GOSUB decision2

NEXT i%

PRINT "poluchili interval [an;bn]="; "["; a(n%); ";"; b(n%); "]"

PRINT "Znachenie funktsii v an ="; FNUser(a(n%))

PRINT "Znachenie funktsii v bn ="; FNUser(b(n%))

PRINT "Znachenie funktsii v seredine ="; FNUser((a(n%) + b(n%)) * .5)

PRINT "Resheniye c="; (a(n%) + b(n%)) * .5

INPUT "Uvelichit' kol-vo iteratsii? Da=1/Net-drugoe chislo", ask

IF ask = 1 THEN GOTO 50

PRINT "Zadacha zavershena!"

END

decision:

k = i%

IF FNUser(c(k)) = 0 THEN

PRINT "Resheniye polycheno! c="; c(k)

ELSE PRINT "Srazu ne popali!"

END IF

RETURN

decision2:

k = i%

IF (FNUser(c(k)) * FNUser(b(k - 1))) < 0 THEN

b(i%) = b(i% - 1): a(i%) = c(i%)

ELSEIF (FNUser(c(k)) * FNUser(a(k - 1))) < 0 THEN

a(i%) = a(i% - 1): b(i%) = c(i%)

END IF

RETURN

Как это видно из предложенного решения, две подпрограммы после оператора End обрабатывают оба возможных случая: 1) когда решение получается посередине нового (decision) и 2) когда в середине текущего интервала решения нет (decision2).

11. Графика в QB

Одним из основных преимуществ компьютера перед иными вычислительными устройствами является возможность вывода данных в графической форме. Как известно, электронный луч (или несколько лучей, как это происходит при передаче цветных изображений) разогнанный катодной пушкой лучевой трубки кинескопа и отклоняемый затем магнитами для получения не просто яркой точки на экране, а целого пучка параллельных горизонтальных линий, которые и передают изображение, движется в лексикографическом порядке. Так же, например, читаются элементы матриц в алгебре -- сначала строка слева направо, а затем переход на нижележащую строку. При этом экран монитора становится куском координатной плоскости, у которой: 1) началом координат является левый верхний угол; 2) ось X горизонтальна и растет вправо, 3) а ось Y, в отличие от привычного расположения на графиках функций из курса математики, растет не вверх, а вниз.

Основными характеристиками графического режима, в который можно перейти при помощи QB, являются количество точек по горизонтали и по вертикали, а также передача цветов. Кроме того, принято говорить о графическом режиме при помощи терминов, отражающих развитие графических адаптеров мониторов компьютеров (CGA, EGA, VGA, SVGA). Существуют также и иные типы адаптеров (Hercules, MCGA и т.д.). Ниже приведем таблицу, в которой дается резюме основных графических экранных режимов, обычно поддерживаемых QB.

Для графических адаптеров MDPA, CGA, Hercules, Olivetti, EGA, VGA, или MCGA

Режим -- SCREEN 0: Режим только текста

Формат текста -- 40 x 25, 40 x 43, 40 x 50, 80 x 25, 80 x 43, или 80 x 50,

Ячейки букв -- 8 x 8 (8 x 14, 9 x 14, или 9 x 16 с адаптерами EGA или VGA)

Цвет -- 16 цветов приписываются любому из 16 атрибутов (при CGA или EGA)

64 цвета при каждом из 16 атрибутов (при EGA или VGA)

Видеопамять -- до 8 страниц видеопамяти, в зависимости от разрешения текста и адаптера

(0-7), 4 стр. (0-3), 2 стр. (0-1) или 1 страница (0)

Для графических адаптеров CGA, EGA, VGA или MCGA

Режим -- SCREEN 1: графика 320x200 точек

Формат текста -- 40 x 25 при размере буквенной ячейки 8 x 8

Цвет --16 фоновых цветов и один или два набора из трех 3 наложенных цветов приписываемых при помощи оператора COLOR при адаптере CGA, 16 цветов, приписываемых 4 атрибутам при EGA или VGA

1 страница видеопамяти (0)

Режим -- SCREEN 2: графика 640 x 200 точек

Формат текста -- 80 x 25 при ячейке 8 x 8

Цвет -- 16 цветов приписаны 2 атрибутам при EGA или VGA

1 видеостраница памяти (0)

Адаптеры Hercules, Olivetti или AT&T

Режим -- SCREEN 3: требуется адаптер Hercules, только монохромный

Графика --720 x 348 точек

Формат текста -- 80 x 25 при ячейках 9 x 14

Обычно 2 видеостраницы памяти (0-1); 1 страница (0), если установлен второй дисплей

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

Следует вызвать драйвер для Hercules MSHERC.COM перед использованием оператора screen mode 3

Режим -- SCREEN 4:

Поддерживается ПК Olivetti Personal Computers моделей M24, M240, M28, M280,

M380, M380/C, а также M380/T и ПК AT&T серии 6300

Графика -- 640 x 400 точек

Формат текста --80 x 25 при ячейке 8 x 16

1 из 16 цветов приписывается как наложенный цвет (выбирается при помощи оператора COLOR); фиксированный фоновый цвет -- черный

1 видеостраница памяти (0)

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

Адаптеры EGA или VGA

Режим -- SCREEN 7: графика 320 x 200 точек

Формат текста -- 40 x 25 при ячейке 8 x 8

Приписываются 16 цветов любому из 16 атрибутов

Если память адаптера EGA равна 64K, то 2 видеостраницы памяти (0-1); в противном случае, до 8 страниц (0-7)

Режим -- SCREEN 8: графика 640 x 200 точек

Формат текста --80 x 25 при ячейке 8 x 8

Приписываются 16 цветов любому из 16 атрибутов

Если адаптер EGA имеет память объемом 64K, то 1 видеостраница в памяти (0); иначе, до 4 стр. (0-3)

Режим -- SCREEN 9: графика 640 x 350 точек

Формат текста -- 80 x 25 или 80 x 43 при ячейке 8 x 14 или 8 x 8

Цвет --16 цветов приписаны 4 атрибутам (память адаптера 64K) или же

64 цвета приписываются 16 атрибутам (если память видеоадаптера больше 64K)

При 64K памяти у EGA адаптера 1 страница видеопамяти (0); иначе 2 страницы (0-1)

Адаптеры EGA или VGA, только для монохромных мониторов:

Режим -- SCREEN 10: графика 640 x 350 точек только для монохромных мониторов

Формат текста -- 80 x 25 или 80 x 43 при ячейках 8 x 14 или 8 x 8

До 9 псевдоцветов приписываются 4 атрибутам

2 страницы видеопамяти (0-1), требуется 256K памяти адаперта

Адаптеры VGA или MCGA

Режим -- Screen 11 (VGA или MCGA)

Графика -- 640 x 480 точек

Формат текста 80 x 30 или 80 x 60 при ячейках 8 x 16 или 8 x 8

Приписываются до 256K цветов по 2 атрибутам

1 страница видеопамяти (0)

Режим -- Screen 12 (VGA)

Графика --640 x 480 точек

Формат текста 80 x 30 или 80 x 60 при ячейках 8 x 16 или 8 x 8

Приписаны до 256K цветов по 16 атрибутам

1 страница видеопамяти (0)

Режим --13 (VGA или MCGA)

Графика -- 320 x 200 точек

Формат текста -- 40 x 25 при ячейке 8 x 8

Приписываются до 256K цветов по 256 атрибутам

1 страница видеопамяти (0)

Таким образом, оператор SCREEN определяет в каком именно режиме будет работать монитор, сколько точек составит ось X, а сколько -- ось Y. Так, при режиме 9 (640х350 точек), по горизонтали можно разместить 640 точек, а по вертикали -- 350.

Существует еще один важный оператор для работы с цветом (он уже упоминался в вышеприведенной таблице) -- оператор COLOR. Формат предъявления этого оператора таков:

COLOR [foreground%] [,[background%] [,border%] Screen mode 0 (text only)

COLOR [background%] [,palette%] Screen mode 1

COLOR [foreground%] Screen modes 4, 12, 13

COLOR [foreground%] [,background&] Screen modes 7-10

Здесь

foreground% число, устанавливающее на мониторе цвет переднего foreground& плана. При режиме screen mode 0,

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

background% число, устанавливающее фоновый цвет background&дисплея. При screen mode 0,

background% является цветовым

атрибутом. При screen mode 1, background% есть 4-битное значение цвета. При режимах screen mode от 7 до 10, background& есть значение цвета.

border% цветовой атрибут для каймы экрана.

palette% число (0 или 1) указывающее который из двух атрибутов используется:

palette% Атрибут 1Атрибут 2 Атрибут 3

НННННННН ННННННННННН ННННННННННН НННННННННННН

0 Зеленый Красный Коричневый

1 ЦианПурпурный Ярко-белый

Доступные цветовые атрибуты и значения зависят от графического адаптера и последнего значения (режима) оператора SCREEN.

Если система снабжена адаптером EGA, VGA или MCGA, то используйте оператор PALETTE для изменения цветовых приписываний цветовым атрибутам.

Пример:

'Пример требует наличия цветного адаптера.

SCREEN 7 FOR i% = 0 TO 15 COLOR i% PRINT i% NEXT i%

end

Для работы с точками следует использовать операторы, которые могут рисовать на экране. Основных операторов воспроизведения графики в QB два, это операторы LINE и CIRLE.

Оператор LINE рисует на экране линию, пунктирную линию, прямоугольник или заполненный прямоугольник. Формат предъявления этого оператора в программах таков:

LINE [[STEP](x1!,y1!)]-[STEP](x2!,y2!) [,[color%] [,[B | BF] [,style%]]]

где

STEPуказывает на то, что координаты берутся относительно

текущей позиции графического курсора.

(x1!,y1!)экранные координаты начала линии

(x2!,y2!) экранные координаты конца линии.

color% атрибут цвета, которые определяет цвет линии или

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

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

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

style% 16-битовое значение, биты указывают но то,

прорисовываются или нет пиксели. Используется для

прорисовки точечный или пунктирных линий.

Пример:

'Пример требует наличия цветного адаптера.

SCREEN 1

LINE (110, 70)-(190, 120), , B

LINE (0, 0)-(320, 200), 3, , &HFF00

End

Наконец, рассмотрим оператор CIRCLE, используемый для прорисовки на экране заполненных или нет кругов и эллипсов. Его формат предъявления таков:

CIRCLE [STEP] (x!,y!),radius![,[color%] [,[start!] [,[end!] [,aspect!]]]]

Здесь

STEP указывает на то, что координаты берутся относительно

текущего положения графического курсора.

(x!,y!) координаты центра окружности или эллипса.radius! радиус окружности ил эллипса в единицах текущей

координатной системы, определяемой, фактически,

последним предъявлением операторов SCREEN, VIEW и WINDOW.

color% цветовой атрибут цвета линии. Доступность атрибутов

зависит от типа графического адаптера и последнего

предъявления оператора SCREEN.

start! начальный угол дуги окружности в радианах

end! конечный угол дуги в радианах.

aspect! отношение длины оси Y к длине оси X у рорисовываемого эллипса.

Для перевода градусов в радианы градусы умножаются на (PI / 180).

Пример:

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

SCREEN 2

CIRCLE (320, 100), 200

CIRCLE STEP (0,0), 100

endПри помощи этих операторов можно добиться получения различных рисунков на экране монитора, например, нарисовать карту определенного региона. Для этой цели можно использовать такой прием: через поднятие карты на светостоле на миллиметровую бумагу получают возможность отследить на какое количество пикселей и в каком направлении нужно переместить графический курсор при переходе по контуру региона от одной точки до следующей. Для упрощения задачи, определив в какую именно сторону должен быть направлен градиент перемещения графического курсора, можно использовать относительные координаты, значения которых будут колебаться в небольших пределах. Если же вам захочется использовать везде абсолютные, а не относительные координаты точек контура на карте, то придется создавать файл массива, в котором будет присутствовать двух- трехзначные числа. Раскрасить карту, т.е. залить контуры (открытые, незамкнутые линии заливать сложнее, о приемах чуть ниже) можно оператором PAINT (раскрась) -- он заливает области с полностью закрытым контуром границы. Если же понадобится закрасить область с незамкнутой границей, то можно под нее нарисовать копию с замкнутым контуром, но без цвета (используя нулевую краску), а затем уже видимым цветом поверх закрашенной области нарисовать незамкнутую границу.

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

Ниже мы приведем пример использования графических возможностей QB для создания «движущихся» изображений («секундомер»).

Задача. Нарисовать движущийся объект, напоминающий секундомер.

Решение.

CLSc = 3.141502654# / 180SCREEN 9CIRCLE (320, 175), 150, 7FOR i = 1 TO 360 STEP 30LINE (320 + 145 * SIN(c * i), 175 - 105 * COS(c * i))-(320 + 150 * SIN(c * i), 175 - 110 * COS(c * i)), 4NEXT iFOR i = 1 TO 360LINE (320, 175)-(320 + 120 * SIN(c * i), 175 - 96 * COS(c * i)), 6

FOR j = 1 TO 2000

s = s ^ 3

NEXT j

LINE (320 + 120 * SIN(c * i), 175 - 96 * COS(c * i))-(320, 175), 0

NEXT i

END

Не все строчки поместились полностью, но нужно помнить, что длина строки может быть гораздо больше, чем на экране редактора (до 256 символов). Здесь вложенный цикл по j нужен для того, чтобы «заторомозить» прорисовку движущейся стрелки секундомера. Ее движение можно довольно точно прокалибровать, меняя конечное значение параметра цикла j.

Литература

1. Microsoft QuickBASIC. Programming in BASIC. Microsoft Document. 00888 Part No. 04376. 1988. P. 457.

Приложения

Словарик
Alt -- альтернатива (название клавиши)
Array -- массив
Arrow -- стрелка
Backspace -- шаг назад (название клавиши)
Cancel -- отказаться
CapsLock -- переход в режим заглавных букв (название клавиши)
Clear -- очистить
Close -- закрыть
Control -- управление (название клавиши)
Copy -- копировать
Delete --удалить
Division by zero -- попытка деления на нуль!
DOS -- Дисковая Операционная Система
Edit -- редактировать
End -- на конец строки (название клавиши)
Enter -- ввести, клавиша «Ввод» (название клавиши)
Escape -- выйти, убежать (название клавиши)
Execute -- выполнить, исполнить
Exit -- выйти, выход
File -- файл
Find -- найти
Help -- помощь
Home -- на начало строки (название клавиши)
Insert -- переход в режим замещения (или вставки) (название
клавиши)
Label -- метка
Line -- срока
Name -- имя
Number -- число
NumLock -- включена правая цифровая подклавиатура (клавиша , надпись под фотодиодом)
One or more -- один или несколько
Open -- открыть
Overflow -- переполнение
Past -- вывести из буфера
Path -- путь (к файлу по структуре каталогов, начиная от корневого)
Press -- нажать
Prompter -- значок командной строки операционной системы
Quit -- выйти
Replace -- заменить
Restart -- перезапуск
Resume -- принять, вернуться и продолжить
Return -- возвратиться
Run -- запуск
Save -- сохранить
Save as -- сохранить, изменив имя или место
Search -- искать
Shift -- сдвиг регистра (название клавиши)
Specify -- указать
Start -- начать, начало
String -- символьная переменная или строка
Tab -- клавиша табуляции (обычно, позволяет переходить из
окна в окно в диалоговом режиме)
Upper/Lower case --прописные/маленькие буквы
View -- просмотреть
Window -- окно

Основной символьный набор в QB

Набор символов в QB включает в себя все буквы латинского алфавита (A-Z, a-z), цифры (от 0 до 9, а также A-F и a-f, различаемые как дополнительные для шестнадцатеричной записи чисел). Помимо этого существуют специальные символы, которые имеют в QB определенный смысл.


Подобные документы

  • Широкое использование компьютерных и информационных технологий. Концепции типов данных. Алгоритмы сортировки одномерных массивов. Описание двумерного массива Паскаля. Методы доступа к элементам массивов. Индексные, динамические и гетерогенные массивы.

    курсовая работа [66,3 K], добавлен 07.12.2010

  • Запись в файл и чтение в С++. Общее понятие о структуре. Многомерные и двумерные массивы. Логика работы программы. Схема алгоритма функции Main. Определение суммарного заработка, сотрудника с наибольшей зарплатой. Создание новой базы, листинг программы.

    курсовая работа [275,7 K], добавлен 07.10.2012

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

    лабораторная работа [32,6 K], добавлен 06.07.2009

  • Объявление, выделение, освобождение памяти под динамические массивы. Обращение к элементам. Решение задач с использованием динамических массивов на языке C++. Разработка и реализация программы для формирования и обработки динамического двумерного массива.

    курсовая работа [813,4 K], добавлен 13.06.2014

  • Разработка программы для решения системы линейных уравнений методом Крамера и с помощью расширенной матрицы на языке С++. Описание метода Крамера. Структура программы: заголовочные файлы, типы данных, переменные, идентификаторы, операторы, массивы.

    курсовая работа [32,3 K], добавлен 19.01.2009

  • Аппаратные и программные RAID-массивы. Расчет объема массива. Временные затраты на расчет и запись контрольных сумм. Пример распределения файлов по JBOD-массиву. Вероятности отказа каждого диска в массиве. Сравнение стандартных уровней RAID-массивов.

    курсовая работа [3,0 M], добавлен 28.03.2011

  • Вычисление суммы положительных элементов массива. Упорядочивание элементов массива по убыванию. Решение задачи с помощью алгоритма, реализованного в среде Microsoft Visual 2008 Express. Реализация и тестирование программы. Выполнение трассировки функций.

    практическая работа [146,3 K], добавлен 23.01.2015

  • Значение и применение персонального компьютера и программного обеспечения в профессиональной деятельности. Перечень и содержание работы в системе программирования Pascal и Delphi. Условные операторы, массивы и строки. Общая схема работы с файлами.

    отчет по практике [642,2 K], добавлен 04.06.2013

  • Понятие и функциональные возможности индексных массивов, принципы их формирования. Особенности использования функции array, range. Ассоциативные массивы, исследование их преимуществ и недостатков, этапы создания. Просмотр массива с помощью цикла.

    презентация [144,3 K], добавлен 21.06.2014

  • Решение задач, прямо связанных с применением циклов и массивов. Условия применения различных видов циклической структуры. Операторы цикла с предусловием while, постусловием do-while и for. Особенности работы с одномерными и двумерными массивами.

    курсовая работа [1,1 M], добавлен 31.08.2019

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.