Программирование в QuickBASIC
Форматы операторов LET, PRINT, CLS и END. Организация циклов, работа с массивами. Запись массива в файл и чтение из файла. Работа с векторами и матрицами. Решение уравнений методами последовательных приближений. Использование графики в QuickBASIC.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | книга |
Язык | русский |
Дата добавления | 18.12.2014 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
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
Отметим, что циклы весьма важны в написании программ, без них невозможно вводить и считывать массивы данных, вычислять многие функции, вводить списки и т.д.
Именно важностью циклов при написании программ можно объяснить тот факт, что почти во всех языках существуют специальные операторы для организации циклов. В 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
Десятичная запись чисел, как это нетрудно заметить, является наследием биологического присутствия пяти пальцев на наших конечностях. Поэтому те числа, с которыми мы имеем дело каждый день, абсолютно неестественны с точки зрения математики. С точки зрения информатики именно бинарный способ записи числа есть самый натуральный способ записи. Кроме того, еще более неестественно делить полный круг именно на 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 srednego
input "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"; srd
end
Две новые функции, использованные в данной программе достаточно просты и понятны. Функция 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$] в котором сommandstring$ означает имя 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”)
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)) матрицы A и B, тогда под их матричным произведением понимают третью матрицу C той же размерности), элемент 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. Поэтому
A стоит воспользоваться таким преимуществом компьютера перед простой пишущей машинкой, как возможность выделения части текста ({Shift}+{} или {} или {End}), удаления ({Shift}+ {Delete} или копирования ({Ctrl}+{Insert}) такой выделенной части в буфер (иногда говорят “забрать в карман”) и вывода ({Shift}+{Insert}) из буфера в текст. Подсказка по сочетанию клавиш дается в верхнем меню Edit.
A Не забывайте также, что грамотный человек будет перемещаться по тексту с использованием клавиш ({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%
next i%
end
A Хочется заранее предупредить от увлечения большими числами при вводе размерности матриц и других величин. Так, при вводе числа 5 вам придется вводить 25 чисел в каждую матрицу. Если же вы все-таки ввели что-нибудь большое, то прекратить выполнение программы можно двумя путями: 1) нажатие {Ctrl}+{C} приводит к остановке передачи управления; 2) если машина (вашей собственной персоной, больше-то некому...) зациклена или программа «зависла», то нажмите {Ctrl}+{Pause}.
A Не забудьте также перед запуском уже исправленной версии программы нажать {Alt}+{R}, {R}, иначе программа продолжит выполнение шагов старой (неисправленной) версии вашей программы.
A Если по запросу программы вам нужно ввести нуль, то достаточно просто нажать {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 double
INPUT "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)
next i%
print n%; "-oe pribizh.= "; x(n%);
print "s poslednim shagom="; x(n%) - x(n% - 1)
end
Рассмотрим еще один простой, но мощный метод решения уравнений, основанный на том, что при необходимости решить уравнение для функции можно сначала поискать такой сегмент , что (т.е. сегмент, на котором функция меняет знак). Дополнительным предположением для того, чтобы метод наверняка давал хотя бы одно решение, служит требование непрерывности функции на сегменте . Надеюсь, что вы сразу же узнали условия теоремы о нуле непрерывной функции? Помните, как она доказывалась? Пусть . Тогда, очевидно,. Сегмент делится пополам и вычисляется значение функции в его средней точке . Если то результат уже получен. Если то и , а если то и . В новом сегменте процедура повторяется и получается или готовое решение (посередине), или новый сегмент . Последний также может быть снова подвержен той же самой процедуре, и т.д. На каждом шаге с номером получается сегмент длины . С ростом он весьма быстро стремится к нулю. Поэтому (точнее, по лемме о стягивающихся отрезках), существует единственная точка И в этой точке, по нашему построению, мы имеем
Вы уже должны были догадаться по всему вышеизложенному, каким именно способом будет действовать нужный алгоритм. Фактически, именно его мы и прописали в доказательстве теоремы.
Задача. Написать программу для решения уравнения методом «вилки» (деления отрезка пополам)
Решение
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 для создания «движущихся» изображений («секундомер»).
Задача. Нарисовать движущийся объект, напоминающий секундомер
Решение
CLS
c = 3.141502654# / 180
SCREEN 9
CIRCLE (320, 175), 150, 7
FOR i = 1 TO 360 STEP 30
LINE (320 + 145 * SIN(c * i), 175 - 105 * COS(c * i))-(320 + 150 * SIN(c * i), 175 - 110 * COS(c * i)), 4
NEXT i
FOR i = 1 TO 360
LINE (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.
Словарик
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 определенный смысл.
Суффиксы, определяющие тип данных
! --- одинарная точность
# --- двойная точность
% --- целые
& --- длинные целые
$ --- символьные (стринги)
Математические операторы
* -- знак умножения
- -- знак вычитания
/ -- знак деления
= -- оператор сравнения или присваивания
> -- больше, чем
+ -- знак сложения
. -- десятичная точка
< -- меньше, чем
\ -- целочисленное деление
^ -- возведение в натуральную степень
Спецсимволы
`-- символ комментирования
; -- управление действием операторов PRINT и INPUT
, -- управление действием операторов PRINT и INPUT
: -- разделяет операторы на одной строке
? -- промптер оператора INPUT
_ -- подчеркивание для обозначения продолжающейся строки (не используется в QB, хотя и зарезервирован для других версий BASIC)
Коды ошибок и сообщения QB об ошибках
Код ошибки |
Сообщение |
Перевод |
|
1 |
NEXT without FOR |
Оператор NEXT без части FOR |
|
2 |
Syntax error |
Синтаксическая ошибка |
|
3 |
RETURN without GOSUB |
Оператор RETURN без части GOSUB |
|
4 |
Out of DATA |
Не подходит тип данных |
|
5 |
Illegal function call |
Незаконный вызов функции |
|
6 |
Overflow |
Переполнение |
|
7 |
Out of memory |
Не хватает объема памяти |
|
8 |
Label not defined |
Метка не определена |
|
9 |
Subscript out of range |
Индекс выходит за пределы |
|
10 |
Duplicate definition |
Повторное определение |
|
11 |
Division by zero |
Деление на нуль |
|
12 |
Illegal in direct mode |
Нелегальное действие в прямом режиме |
|
13 |
Type mismatch |
Неправильно напечатано |
|
14 |
Out of string space |
Выход за пределы симв. перем. (стринга) |
|
16 |
String formula too complex |
Формула стринга слишком сложна |
|
17 |
Cannot continue |
Не могу продолжить |
|
18 |
Function not defined |
Функция не определена |
|
19 |
No RESUME |
Нет оператора RESUME |
|
20 |
RESUME without error |
Оператор RESUME без ошибки |
|
24 |
Device timeout |
Вышло время ожидания сигнала устройства |
|
25 |
Device fault |
Ошибка устройства |
|
26 |
FOR without NEXT |
Оператор FOR без NEXT |
|
27 |
Out of paper |
Кончилась бумага на принтере |
|
29 |
WHILE without WEND |
Оператор WHILE без WEND |
|
30 |
WEND without WHILE |
Оператор WEND без WHILE |
|
33 |
Duplicate label |
Двойная метка |
|
35 |
Subprogram not defined |
Подпрограмма не определена |
|
37 |
Argument-count mismatch |
Несовпадение счетчика аргумента |
|
38 |
Array not defined |
Массив не определен |
|
40 |
Variable required |
Требуется переменная |
|
50 |
FIELD overflow |
Переполнение FIELD |
|
51 |
Internal error |
Внутренний сбой |
|
52 |
Bad file name or number |
Плохие имя файла или его номер |
|
53 |
File not found |
Файл не найден |
|
54 |
Bad file mode |
Плохой тип файла |
|
55 |
File already open |
Файл уже открыт |
|
56 |
FIELD statement active |
Оператор FIELD уже активен |
|
57 |
Device I/O error |
Ошибка ввода/вывода на устройстве |
|
58 |
File already exists |
Файл уже существует |
|
59 |
Bad record length |
Плохая длина записи |
|
61 |
Disk full |
Диск переполнен |
|
62 |
Input past end of file |
Ввод перешел за метку конца файла |
|
63 |
Bad record number |
Плохой номер записи |
|
64 |
Bad file name |
Плохое имя файла |
|
67 |
Too many files |
Слишком много файлов |
|
68 |
Device unavailable |
Устройство недоступно |
|
69 |
Communication-buffer overflow |
Переполнение буфера связи |
|
70 |
Permission denied |
Доступ запрещен |
|
71 |
Disk not ready |
Диск не готов |
|
72 |
Disk-media error |
Ошибка разметки носителя на диске |
|
73 |
Feature unavailable |
Свойство недоступно |
|
74 |
Rename across disks |
Переименование по символу диска |
|
75 |
Path/File access error |
Ошибка доступа пути/файла |
|
76 |
Path not found |
Путь не найден |
Размещено на Allbest.ru
...Подобные документы
Использование ранжированных переменных в программном пакете Mathcad. Создание матриц без использования шаблонов матриц, описание операторов для работы с векторами и матрицами. Решение систем линейных и нелинейных уравнений с помощью функций Mathcad.
контрольная работа [964,6 K], добавлен 06.03.2011Описание типизированных файлов. Принципы работы с файлами, создание и открытие на запись нового файла. Чтение из файла, открытие существующего файла на чтение. Определение имени файла. Запись в текстовый файл. Описание множества и операции над ними.
реферат [86,4 K], добавлен 07.02.2011Вычисление выражений, использование стандартных функций; работа с графикой. Порядок действий при вычислении, способы ввода данных с клавиатуры. Построение таблиц функций. Организация циклов в программе, итерационные процессы. Работа с массивами чисел.
контрольная работа [614,7 K], добавлен 16.09.2012Типизация данных в JavaScript. Правила объявления локальных и глобальных переменных. Объявление и использование функций. Открытие и закрытие файла, запись в него и чтение из него. Создание теста с использованием средств языка программирования PHP скрипт.
контрольная работа [73,8 K], добавлен 25.01.2016Проверка существования и статуса файла. Определение его размера. Открытие файла для чтения, записи, добавления. Закрытие файловых дескрипторов. Запись из переменной в файл. Загрузка файла из сети. Создание и удаление каталога. Функции работы с каталогами.
презентация [133,9 K], добавлен 21.06.2014Понятие двумерного массива целых чисел. Создание динамического массива из элементов, расположенных в четырех столбах данного массива и имеющих нечетное значение. Сохранение результатов в файл и выведение их на экран. Использование ввода с файла.
курсовая работа [44,0 K], добавлен 09.11.2014Ознакомление с языком программирование PHP. Операторы управления и передачи данных, конструкции разветвления и повторения. Создание функции в PHP. Работа с числами, строками и датой/временем в PHP. Работа с массивами данных. Работа с файловой системой.
курсовая работа [1,5 M], добавлен 09.09.2011Разработка программы для решения системы обыкновенных дифференциальных уравнений на базе языка программирования Паскаль АВС. Чтение исходных данных из внешнего файла. Вывод исходных данных и результатов на дисплей и во внешний файл. Суть метода Ейлера.
реферат [126,1 K], добавлен 12.01.2012Запись кодов команд программы и констант в FlashROM, кодов исходных данных в EEPROM, требуемых значений установочных битов (Fuse Bits) и битов защиты (Lock Bits). Запись и чтение кодов при программировании, способы программирования в микроконтроллерах.
контрольная работа [24,2 K], добавлен 22.08.2010Описание используемых в программе операторов, процедур, функций. Директива include. Правила объявления и определения функций в СИ++. Блок-схема алгоритма программы. Подпрограммы чтения из файла и записи в файл. Использование заголовочных файлов.
курсовая работа [346,8 K], добавлен 26.04.2012Блок-схема программы, подсчитывающей количество слов последовательности, начинающихся с большой буквы и оканчивающихся цифрой. Символьный квадратный массив и его заполнение. Создание программы, которая формирует файл записей заданной структуры.
курсовая работа [529,7 K], добавлен 19.12.2010ASP – внутренняя технология, позволяющая подключать программы к web-страницам и обеспечивать чтение и запись в базе данных. Код разработанной ASP-страницы и его описание. Внешний вид полученного ответа на запуск ASP-страницы. HTML-код файла отчета.
лабораторная работа [219,1 K], добавлен 05.04.2015Пользовательский интерфейс Flash и его типовые функции. Форматы статичной графики. Рисование. Работа с цветом, с текстом. Импорт графики. Работа с графическими фрагментами. Образцы и библиотеки. Проводник Flash. Публикация и экспорт статичной графики.
дипломная работа [156,4 K], добавлен 07.12.2008Работа с элементом управления в VB.net. Работа с файлами, организация последовательного доступа с помощью объектов Streareader и Streamwriter. Последовательный доступ с помощью класса File, программирование задач с использованием циклов с параметром.
лабораторная работа [644,8 K], добавлен 27.12.2013Структура программы Pascal и алгоритмы решения задач. Работа с циклическими операторами, массивами, процедурами. Составление блок-схем задач. Операции над матрицами в программе MathCad. Работа формулами, графиками и диаграммами в оболочке MS Excel.
курсовая работа [459,0 K], добавлен 13.08.2012Функции формирования массива времени. Формирование массива входного напряжения, массива выходного напряжения. Функция вывода таблицы, расчета заданной точности, вывода титульного листа. Запись в файл массива времени. Блок–схема и текст программы.
курсовая работа [155,6 K], добавлен 22.04.2012Динамическая инициализация объектов в Java с помощью зарезервированного слова new. Порядок вызовов при создании объекта. Порядок выполнения операторов при наличии блоков инициализации. Чтение и запись файлов в программе, иерархия классов ввода/вывода.
контрольная работа [120,6 K], добавлен 07.06.2011Особенности работы с массивами с помощью MS Excel. Вычисление определителей матриц, произведения матриц и матрицы на вектор. Скалярное произведения найденных векторов. Поиск обратных матриц. Решение системы линейных уравнений, проверка найденных решений.
лабораторная работа [270,9 K], добавлен 05.06.2015Понятие матриц и операции, выполняемые с ними. Разработка программы для вычислений над матрицами в среде MS Visual Studio Express с применением языка программирования C++. Работа с библиотекой математического типа vector. Реализация перегрузки операций.
курсовая работа [107,3 K], добавлен 22.12.2010Выведение значения элементов массива, которые удовлетворяют неравенству. Подсчет количества отрицательных элементов массива. Изменение исходного массива. Тестирование программы. Проверка её работоспособности. Реакция программы на сообщение об ошибке.
лабораторная работа [1,3 M], добавлен 23.11.2014