Программирование в QuickBASIC
Форматы операторов LET, PRINT, CLS и END. Организация циклов, работа с массивами. Запись массива в файл и чтение из файла. Работа с векторами и матрицами. Решение уравнений методами последовательных приближений. Использование графики в QuickBASIC.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | книга |
Язык | русский |
Дата добавления | 18.12.2014 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
В последние фактически восемнадцать лет почти все компьютеры «работают» в ставшей привычной для глаза среде Windows. Уже появилось поколение молодых людей и девушек просто теряющихся, завидев пустой черный экран и мерцающий на нем командный «ДОСовский» промптер. Даже простая опция выхода в «DOS-сессию» вызывает у них весьма смутные представления о последствиях сделанного выбора. Нет никаких сомнений в том, что программное обеспечение будет развиваться и далее в сторону все большего «сокрытия» от «пользователей» того, что творится на самом деле с файлами, директориями и т.д., как это уже давно сделано на «Макинтошах», не говоря уже о новейших iOS для iPhone и iPad. Пользователь такого ультрасовременного компьютера понятия не имеет о том, что за драмы происходят на его «винтах» или картах памяти, в файловой системе, какие символы стоят в начале, внутри и в конце файла, как конкретно выглядит машинная программа, что она делает, и т.д. Добраться же до командного промптера в «Маках» - дело трудно-осуществимое по определению.
Однако, а это все же события «новейшей» истории, совсем уж и не так давно всякий студент ничего более сильного, чем ДОСовский Нортон-Коммандер на мониторе учебного компьютера не видел, и видеть не мог. Все сказанное выше объясняется резким скачком в развитии вычислительной техники в сторону качественного увеличения мощности машин, качественных сдвигов в сторону улучшения пользовательских свойств как программных продуктов, так и системных оболочек. И это - аналог закона Мура, только в программном обеспечении. Именно поэтому у всякого преподавателя возникает проблема выбора: преподавать ли в курсе с довольно старым, но весьма обязывающим названием «Программирование на ЭВМ» новейшие офисные приложения (как правило, разработанные компанией Майкрософт г-на Билла Гейтса, но не стоит забывать и проекты IBM (Symphony Office), как и более зрелый проект Open Office, ранее поддерживавшийся выдающейся компанией Sun Microsystems, а теперь мощной фирмой Oracle), работающие исключительно на мощных многоядерных процессорах с качественным монитором и исключительно под руководством «мыша», или же вместо оглушения студенческой головы всяческими «Икселами» и «Уордами» вначале изложить достаточно ясные части ДОС и научить ее (голову) работать хоть на каком-то языке программирования? На вопрос этот ответить сразу достаточно трудно хотя бы потому, что:
Сложно отрицать необходимость «пользовательского» владения двумя-тремя офисными приложениями, но и не менее сложно отрицать силу традиционного подхода к изучению любого предмета по правилам «от простого - к сложному», «от арифметики - к математическому анализу».
Нужно быть твердо убежденным в том, что без осознания ДОСовской «компьютерной арифметики» и изучения какого-либо языка программирования на уровне написания программ нельзя научить студента информатике и открыть ему доступ к действительному овладению компьютером как инструментом научного познания.
Наконец, события последних 2 лет (почти лавинный переход на 64-рахзрядные машины и ОС) почти «прибили» старые «проги». Ан нет, нашлись программисты и специалисты, которые создали аналог доброго BASIC, но теперь для 64-разрядных машин и огромным «довеском» новых функций, вполне годных для самостоятельного создания приложений в новых «операционках».
Именно фундаментальность получаемых знаний во многом определяет качество образования, а в этом отношении отечественной высшей школе за качество краснеть не приходится (чего иногда не скажешь о существующем учебном оборудовании и лицензионном программном обеспечении…). Итак, примем за исходную точку тезис о том, что без овладения элементарными навыками программирования нельзя научиться «понимать» компьютер, да и всю информатику.
Сразу же возникает вопрос второй: какой язык программирования наиболее удобен для начального изучения? Язык «Си», «Паскаль», или же «Бэйсик»? Ответ на этот вопрос не может быть однозначным. Учтем, что далеко не у всех студентов дома есть мощный (или вообще какой-нибудь) компьютер. Далеко не у всех информатика в школе преподавалась на уровне выдающегося лицея. Про язык «Си» говорить не будем, так как выгоднее изучать сразу «С++». Но даже если на вашем факультете исторически сложилось так, что на кафедральных ПК кроме «Паскаля» ничего нет, да и все научные сотрудники понимают только этот язык, то все еще рано сбрасывать QuickBASIC (в дальнейшем, QB) со счетов. Причин этому несколько, важнейшая из которых - совместимость QB с самой операционной системой MS-DOS - этой прабабушкой современных «осей». И еще один плюс -- QB обычно «встраивался» в каталог поставляемых операционных систем MS-DOS 3.1 и выше. Кроме того, нельзя не отметить достаточную мощность QB для решения многих задач по сбору и обработке информации, полученной в эксперименте. Если учесть также и богатую справочную систему QB, в которой приводится не только формат (т.е. способ представления) команд, но и множество деталей и даже примеры (с единственным небольшим недостатком -- все справки выдаются на английском языке), то становятся ясными преимущества данного языка. Кроме того, QB качественно отличается в лучшую сторону от иных существующих версий BASIC'ов своей универсальностью и интегрированностью в операционную систему. А с выходом в 2010 году первых версий qb64 дело вообще приняло оптимистический оборот: начав с QB, обучающийся может даже самостоятельно достигнуть высот самого современного программирования!
Текст, предлагаемый вашему вниманию ниже, ни в коей степени не претендует на звание полного учебника по QB -- для написания книги такого рода нужно намного больше и места, и терпения писателя, и терпения читателя. Цель данного пособия -- помочь разобраться в самых началах программирования в QB, освоить полезные навыки в использовании некоторых популярных команд. Говоря иными словами, красивому и чистому батерфляю мы научиться вряд ли сможем; однако наша промежуточная и очень важная цель -- не утонуть в бассейне -- вполне достижима. Структура книги достаточно проста: вначале мы опишем некоторые особенности QB, затем займемся написанием нескольких конкретных программ на нем, а в конце приведем сведения, без которых читателю (a piori не англоязычному) будет нелегко установить контакт с интерфейсом QB. Мы предполагаем, что самые элементарные команды и понятия операционной системы MS-DOS читателю уже известны.
В качестве еще одного весьма важного обстоятельства отметим, что учащийся просто обязан:
вводить все символы в латинских символах, не употребляя русский шрифт вовсе и ни в коем случае не нажимая на клавиши «Shift» и «CapsLock» для придания правдоподобности набиваемому тексту программ;
уметь свободно набирать текст с клавиатуры и понимать разницу между указаниями {Alt + R, R} и {Alt, R} - в первом случае нужно 1) нажать клавишу {Alt} и затем, НЕ ОТПУСКАЯ КЛАВИШУ Alt, нажать (вряд ли это удастся сделать тем же пальцем!) клавишу R, после чего 3) ОТПУСТИТЬ ОБЕ КЛАВИШИ И 4) СНОВА нажать на клавишу R. Второе указание предусматривает просто последовательное нажатие клавиш Alt и R;
не забывать отделять операторы (то, что определяет действие) от операндов (то, над чем операторы работают, т.е. с чем, собственно, действия и производятся) ПРОБЕЛОМ;
помнить, что, например, механическое вызубривание иностранного языка не приводит к его освоению; в абсолютно той же степени эта истина верна и для языков программирования;
стараться менять условия задач, самому (или самой) придумывать новые задачи и затем самостоятельно писать программы для их решения -- это лучшее средство научиться программировать;
ни в коем случае не заниматься простым (и тупым!) перенабором программ из книги на экран компьютера -- вы тогда просто не научитесь писать программы! Лучше всего набирать программы, скрыв данный текст от ваших глаз;
здесь же отметим одну особенность именно женских характера и памяти: представительницы прекрасной половины человечества способны запоминать огромные количества текста, вовсе даже и не переживая глубоко за его содержание. И этот факт даже можно подтвердить экспериментально. Именно это обстоятельство способствует тому, что многоуважаемые дамы иногда никак не могут понять чего же хочет от них тот, от кого они сами хотят получить зачет - они почти буквально (зрительно) запоминают текст программ (правда, путая при этом операторы и буквы), программы эти (и это тоже правда) почему-то не работают, а зачет почему-то не ставят… Утешением может послужить то обстоятельство, что первым в мире программистом считается Ада (Эйда) Лавлейс -- дочь лорда Байрона;
опыт нескольких лет показывает также, что основной причиной неудач с получением зачетов у молодых людей является сочетание органически непреодолимой лени, большой порции небрежности и потрясающего неумения организовать себя и свою память (а без этого в память компьютера не залезть!).
Если Вы, добравшись до этих строк, улыбнулись, то к Вам они имеют самое малое отношение.
В заключение мне очень бы хотелось поблагодарить сотрудников ДИСа за предоставленную возможность пользоваться на лекциях полноэкранным дисплеем в ауд. 220. Слова искренней благодарности хотелось бы также высказать в адрес работников ДИСа (или ЦИТа), перед знаниями которых можно только преклоняться. Специальное спасибо еще ЦИТу КГУ и лаборатории компьютерных средств обучения за возможность пользования MS QuickBASIC'ом версии 4.5.
1. Запуск QuickBASICа и его пределы
Если вы находитесь в командной строке DOS, а директория, в которой находятся файлы QuickBASICа имеет доступ, заранее открытый через команду MS-DOS “PATH” в файле autoexec.bat, то достаточно набрать символы qb” или “qbasic” и нажать на клавишу «Enter». Вы увидите голубое окно, в котором можно выделить несколько меню и подокон (см. рис.)
Заставка в центре экрана переводится так:
«Добро пожаловать в MS-QuickBASIC.
Авторские права Корпорации Майкрософт. Все права защищены.
Нажмите Enter, чтобы просмотреть Руководство по Выживанию
Нажмите Esc, чтобы очистить это диалоговое окно».
Верхняя часть пользовательского интерфейса (то-бишь, экранного представления той программы, с которой вы работаете) имеет строку меню, которое активизируется при нажатии клавиши Alt.
Основную часть экрана занимает окно редактора QB, в котором под вашим чутким руководством разворачиваются события по написанию программы. Это окно снизу и справа ограничено «полосами прокрутки», т.е. областями, в которых 1) темные квадратики указывают положение видимого куска текста в целом тексте. Если вы работаете в QB с помощью мыши (занятие очень вредное с образовательной точки зрения), то по всему тексту можно передвигаться, щелкая мышкой по стрелкам в полосах прокрутки.
Нижняя часть экрана занята так называемым окном «Сразу». В этом окошке вы можете выяснить некоторые вопросы, не запуская всю программу (например, вычислить или выяснить, чему будет равно число 3,141592654/2). «Прыгать» по окнам нужно клавишей F6.
Самая нижняя строка зеленоватого цвета содержит некоторые подсказки.
Зайдем в верхнее меню. Оно содержит восемь пунктов:
File Edit View Search Run Debug Options и Help
(В конце этой книги имеется маленький англо-русский словарик, в который уже можно заглянуть!)
Всякий конкретный язык программирования, за исключением самых абстрактных версий, работает с числами или оперирует числовыми величинами. Такие величины именуют иногда константами, но они могут и изменяться в процессе выполнения программ. Для использования таких меняющихся цифровых величин служат объекты языка, называемые переменными. Переменные могут содержать не только числовую, но и символьную информацию, поэтому их и различают как числовые и символьные (string). Отметим, что всякая переменная величина должна иметь имя, которое является, по определению, величиной символьной. Сразу отметим, что всякая переменная может быть простой (без дополнительных параметров) или, наоборот, параметризованной, причем параметров может быть не один или два, а больше.
Для большей ясности приведем такую интерпретацию понятия переменной некоторого языка. Если в программе следует работать с какими-то величинами, изменяющимися или изменяемыми в ходе выполнения программы, то машина, натолкнувшись на такой объект в теле программы, который она интерпретирует как переменную, открывает в машинной памяти некий ящик (выделяет частичку памяти на цели работы с числами или символами, которые будут фигурировать под флагом данной переменной). Такой ящик непременно должен иметь имя. Если в программе попадаются простые переменные, то их можно считать разбросанными по программе ящиками, в которые программа что-нибудь складывает, записывает, вычитает, умножает, делится с другими программами и т.д.
Скажем, команда
LET X = 1
означает, что машина создает ящик с именем X и закладывает в этот ящик единицу. Если где-то далее встретится команда
LET Y = X + 1
то машина организует новый ящик с биркой «Y», затем заглянет в ящик X, «увидит» там единицу, эту единицу занесет в Y, а затем добавит туда же еще одну единицу. Таким образом, далее на «поле военных действий» нашей программы возникает два ящика с табличками, в одном лежит 1, в другом же -- число 2. При использовании так называемых параметрических (сложных) переменных, их можно обозначать или некоторой общей частью, или вводить параметр переменной. Например, возможно использование имен X1, X2, X3, …, Xn-1, Xn -- это пример написания в QB простых переменных, о взаимной связи которых мы в явном виде ничего QB не говорим. А вот если мы запишем то же самое в виде X(1), X(2), X(3), …, X(n-1), X(n), то QB поймет это как приказ открыть целую «улицу» «ящиков» с общим именем X, причем на этой улице существует «нумерация домов» от 1 до n. «Номер дома» каждого ящика служит в данном случае параметром этой однопараметрической переменной. Будем надеяться, что теперь запись X(1,.1), X(1,2,), …, X(1,m), X(2,1), X(2,2), …, X(2,m), … X(n, m) станет понятной нам записью некоторого «палаточного городка» с этими самыми ящиками переменных, в котором есть n переулков и m улиц (а может быть и наоборот). Имя этому городку -- двухпараметрическая переменная X(I,J), где I и J изменяются в определенных пределах. Если нам понадобиться записать трехпараметрическую (причем символьную, а не числовую) переменную, то можно воспользоваться записью Pogoda$(I,J,K), где в каждый ящик теперь уже многоэтажного муравейника со своими улицами (это где J и K фиксированы, а I меняется), переулками (на них фиксируются I и K, а свободно меняется J) и этажами (каждому K-ому этажу соответствует фиксация I,J) можно вложить уже не число, а символьную строчку (например, «клюет» или «не клюет»). Если вы проводите наблюдения за успехами вашей рыбалки и записываете под I --номер рыбалки, J -- температура при этой рыбалке, а K --давление, придавая переменной значение «клюет» или «не клюет», то в результате вы сможете организовать некоторое множество данных. Отсортировав их по признаку «клюет» - «не клюет», вы сможете получить метеоусловия, при которых рыба клюет или, наоборот, параметры погоды, при которой удочки надо хранить дома.
Имя переменной в QB не может иметь разрывов или пробелов (представьте себе имя «Ив ан» или «Ел ена»!) и должно не содержать некоторых специальных символов (например, ?,*, / и т.д.).
Очевидно, что никакая машина не может работать со сколь угодно большими или сколь угодно (бесконечно) малыми величинами, будь они числовыми или символьными, т.е. у машины существуют определенные пороги «чувствительности» чисел, или пределы числовых и символьных выражений. Говорят, что на островах Полинезии существуют племена, у которых счет идет по принципу «один, два, три, много». У столь выдающегося создания, коим является компьютер, также существуют рамки, за которыми величины (числовые или символьные) становятся ему, скажем, непонятными. Отметим сразу, что эти пределы зависят также и от описания (или класса) этих величин. QB различает величины:
ЧИСЛОВЫЕ
Целые или INTEGERS,
Длинные целые или LONG INTEGERS,
Числа одинарной точности или SINGLE-PRECISION NUMBERS,
Числа удвоенной точности или DOUBLE-PRECISION NUMBERS;
СИМВОЛЬНЫЕ
(в случае обозначения переменных величин используются простые и параметрические символьные записи, последние отличаются присутствием скобок (), внутри которых через запятую вписываются параметры).
A (NB Nota bene или «запомни хорошенько»): Как только в потоке вводимого вами числа появится буква или иной нецифровой символ, QB проинтерпретирует такое выражение как стринг; если же вы вводите вместо стринга довольно длинное число, то QB проинтерпретирует его как странноватый, но стринг, в котором нет букв, а есть только символы-цифры.
Собственно пределы величин в QB можно описать следующей таблицей:
МАКСИМУМ МИНИМУМ
Длина имени переменной 40 символов 1 символ
Длина символьной величины (стринга) 32 767 символов 0 символов
Целые 32 767 -32 768
Длинные целые2 147 483 647 -2 147 483 648
Числа одинарной точности:
Положительные 3
.402823E+38 2.802597E-45
Отрицательные
-2.802597E-45 -3.402823E+38
Числа двойной точности:
Положительные
1.79769313486231D+308 4.940656458412465D-324
Отрицательные
-4.940656458412465D-324 -1.79769313486231D+308
Это значит, что число, описанное в вашей программе на QB как величина двойной точности, хранится и обрабатывается QB со 1) знаком, 2) шестнадцатью цифрами, 3) указателем точности («D») и 4) порядком. Отметим, что представление чисел в QB использует знак # для обозначения целых величин, значок «E» используется для чисел одинарной точности, тогда как «D» означает двойную точность числа, внутри которого такой знак Вам встретился.
В QB существуют понятия утверждений, которые мы обычно будем традиционно называть операторами, и функций. Для отделения первых (операторов) от того, к чему они относятся (операндов) используется обязательный пробел. Есть, правда, операторы столь популярные, что имя их даже не приводится (оператор присвоения LET). Что же касается функций, то на их присутствие указывает наличие аргумента в скобках.
A В QB все операторы и функции имеют одну отличительную особенность -- они пишутся исключительно заглавными буквами. НО (!) ни в коем случае НЕЛЬЗЯ их вводить с клавиатуры заглавными буквами. Напротив, используйте только маленькие буквы! Редактор QB настолько умен, что распознает ПРАВИЛЬНО введенные операторы и при переходе на новую строку, САМ ПРОПИСЫВАЕТ ИХ ЗАГЛАВНЫМИ БУКВАМИ. Поэтому ввод с клавиатуры заглавных букв при написании программы есть не просто обман программы, а очень вредный САМООБМАН.
A Отметим, что в QB существуют некоторые «запрещенные» имена, которые не стоит использовать для обозначения переменных. В Приложениях можно увидеть список операторов и функций QB.
Меню «File» в минимальном виде содержит опции New Open… Save Save As … Print и Exit. В QB версии 4.5 это меню может быть расширено выбором {Alt + O} и соответствующего пункта.
Буквы, выделяемые белым цветом (у нас они просто полужирные), означают, что при нажатии соответствующей буквы на клавиатуре вы получите желаемый выбор опции без всяких передвижений курсора по пунктам меню. Так, например, сочетание клавиш {Alt + F, x} просто выведет вас из QB, а весьма важное сочетание {Alt + F, S} позволяет достаточно быстро и часто сохранять (спасать) сотворенные вами коды программы или ее листинг (так называют исходный текст программы).
оператор цикл массив графика
2. Немного о программах, программировании и программистах
Известно, что программой называют реализацию какого-то алгоритма на том или ином языке программирования. Алгоритм, в свою очередь, это строго определенная последовательность элементарных шагов и/или переходов для достижения определенной цели.
Та часть алгоритма, которая предусматривает строго последовательное выполнение шагов по порядку, называется линейной частью алгоритма. Если в какой-то точке алгоритма появляется возможность перейти далее на более чем один определенный шаг, то такую точку называют точкой ветвления или точкой перехода.
Если инструкция «перейти на такой-то шаг» не имеет никаких условий, то переход называют безусловным. Если же переход осуществляется в зависимости от значения какой-то величины (параметра), которая к данному шагу становится определенной, то говорят об условном переходе, величину, влияющую на переход, называют параметром перехода, а пороговые или определяющие значения этого параметра -- условием перехода. Выполнение каждого шага или некоторого набора шагов порядком их расположения в тексте программы (мы уже говорили о том, что его иногда называют кодами программы или ее листингом).
Если одна и та же последовательность шагов программы может повториться при ее выполнении более, чем один раз, то такую часть программы называют циклом. Так как количество прохождений цикла (да и вообще «впадение» программы в цикл) определяется некоторым условием на величину, называемую по-иному параметром цикла, то мы обнаруживаем еще одно использование слова параметр. Ясно, что для попадания программы в некоторый цикл требуется, чтобы это позволили сделать пороговые значения параметра. Если цикл прописан неверно, то может произойти так называемое «зацикливание» программы (например, при слишком больших значениях параметра цикла, или при неизменности параметра цикла, несмотря на прохождение по циклу, или «колебательные», «маятниковые» изменения параметра цикла, из-за чего программа не может увести управление из тела цикла). В качестве примера можно рассмотреть такую ситуацию: вы приходите к бюрократу Ивану Ивановичу, а он посылает вас к Петру Петровичу, который вас отсылает к Сидору Сидоровичу, а оный -- снова к Ивану Ивановичу и т.д. Если за параметр принять ваше терпение, то такой цикл прервется только тогда, когда ваше терпение (или здоровье) закончится. Если же обязательным условием Вашей задачи является фраза «непременно получить такую-то бумагу», то из постановки задачи видно, что цикл не закончится полезным результатом. Циклы могут входить один в другой (говорят, «вложенные циклы»), или выполняться по частям каждый период.
Искусство программиста, т.е. человека, пишущего или создающего программы, заключается не в простом буквоедском написании самого текста при безусловно широком и полном знании «оборотов» каждого конкретного языка программирования, но в создании красивой и целенаправленной структуры выполнения программы. Поэтому часто программисты не только пишут саму программу по набору правил, но и находят остроумные и нестандартные решения для выполнения шагов «макро-алгоритма» написания программы и достижения поставленной цели. Именно накапливающийся мировой опыт в создании программ и определяет основные направления развития всего программирования. Некоторые части программ становятся (узко-признанными - потому что среди профессионалов) стандартами. Так, например, уже стал стандартом вид графического пользовательского интерфейса (GUI - Graphic User Interface) -- обычно вверху располагается меню опций, каждый пункт которого разворачивается вниз (pull-down) при выборе. Именно этот принцип построения GUI и использован в QB.
Остановимся подробнее на верхнем меню QB и зайдем в некоторые его пункты.
В пункте File раскрываются подпункты
New -- начать создание новой программы
Open -- открыть ранее созданную программу
Save -- сохранить (спасти) созданную или отредактированную программу под старым именем
Save As-- сохранить (спасти) созданную или отредактированную программу под новым именем или в другом месте
Print -- распечатать программу на принтере
Load file -- загрузить какой-нибудь файл в окно редактора QB
Unload file -- выгрузить файл из окна редактора QB
DOS Shell -- выйти в DOS (обратное возвращение происходит после набора EXIT с клавиатуры)
Exit -- выйти из активного сеанса работы с QB.
Достаточно важным является также и пункт Edit. В нем можно увидеть опции (подпункты)
Cut -- вырезать выделенный фрагмент текста
Copy -- скопировать (не вырезая или не удаляя) выделенный фрагмент текста в буфер
Paste -- вставить фрагмент текста из буфера в текст в окне редактора на текущей позиции курсора
Clear -- удалить весь выделенный фрагмент текста (без запоминания в буфере).
Следует обратить особое внимание на указанные справа от этих опций клавиатурные сокращения (ShotKeys). Например, обычно сочетание клавиш {Ctrl + Insert} забирает фрагмент в буфер без удаления с экрана, {Shift + Delete} -- забирает фрагмент с удалением с экрана, {Shift + Insert}-- вставляет фрагмент из буфера на место после курсора.
AДля выделения текста нужно 1) встать курсором на начало нужной строки, 2) нажав и удерживая клавишу {Shift}, стрелками «забелить» нужный кусок текста.
A Нельзя «тараканить», т.е. по шажочкам ползать курсором по всему тексту. Это утомительно, некрасиво, непрофессионально и т.д. Для перескакивания через слово служит комбинация {Ctrl + [] или []}. В начало строки можно сразу попасть клавишей {Home}, в конец строки -- клавишей {End}. В сочетании с {PgDn} и {PgUp} можно быстро добраться до начала текста или его конца. Разумно пользоваться обеими режимами курсора в редакторе QB: при нажатии клавиши {Insert} вы заметите, что курсор стал мигать во всю букву (а не подчеркивать ее). В этом режиме вы не вставляете новый текст, а замещаете новыми буквами старый (пишите поверх старых знаков). Еще раз нажмите ту же клавишу, и курсор снова уменьшится, а новые буквы будут «вставляться», сдвигая остаток строчки вправо от курсора.
Отметим, что важными (в принципе, все пункты очень важны!) пунктами меню являются Run и Help. Первый пункт позволяет запускать, продолжать выполнять запущенную или перезапускать программу. Во втором пункте вы найдете расширенную помощь по всем вопросам, правда, только на английском языке. История последней половины ХХ века сложилась так, что программирование более всего развивалось в США. Именно поэтому мы имеем дело с операторами, написание которых часто имеет прямую английскую трактовку. Научиться программировать -- значит научиться хотя бы азам английского языка. При этом полезно вспомнить, что 1) весь Интернет понимает только по-английски; 2) человек, знающий два языка становится в два раза богаче; 3) если вы знаете только один язык, то вы и его-то не знаете толком.
Кроме того, QB активно работает с вами, выставляя вам окошко с комментариями или предупреждениями или сразу после ошибки в набираемой программе, или после ее запуска. И это его самое ценное качество! Он помогаем Вам учиться. Просто нужно уметь понимать то, что 1) вам пытаются помочь, 2) что именно вам говорят.
3. Операторы (Statements) QuickBASIC
Все операторы (Statements) в QB, вообще говоря, пишутся прописными буквами (мы уже условились этого никогда не делать, он сам их сделает потом большими!). Операторы предъявляются всегда в определенном формате, т.е. по некоторым правилам, в которых имеется достаточно много свободы, но порядок, в котором указываются опции формата, должен соблюдаться строго. Цель каждого оператора -- реализовать один шаг требуемого алгоритма или некоторую его часть (например, цикл). Оператор всегда занимает начало строки (или строки начала и конца оператора). Единственное, что может стоять перед оператором, это метка. После оператора обязан присутствовать пробел, после которого записывают то, с чем оператор должен оперировать, или операнды.
В тексте (листинге) программы QB автоматически различает строки (каждая строка заканчивается определенным не печатающимся символом EOL (End of Line)), а затем порядок текста в строке (такой порядок называется лексикографическим).
Именно лексикографический порядок и определяет очередность исполнения (или передачи управления) операторов в ходе выполнения той или иной программы. Единственное, что может нарушить такой порядок, это явное указание (опять же при помощи оператора) на «принудительное» исполнение не следующей строки а той, метка которой стоит в операторе перехода. Кстати, в различных старых версиях BASICа обычно текст каждой строки начинался с определенного номера. Фактически, это был способ пометить каждую строку. Старые BASICи определяли для себя порядок выполнения именно по метке в начале строки (номеру, ибо такая метка обычно была числом). Большим неудобством при этом было то, что при желании «втиснуть» какой-то кусок программы между двумя уже написанными строками приходилось перенумеровывать все строки. Способ избежать связанных с этим трудностей заключался в том, что строки нумеровались не подряд, а с «зазором» (например, 100, 110, 120 и т.д.). Как мы видим, теперь QB сам определяет порядок по их нахождению в тексте.
Еще одно замечание: QB может допускать присутствие не одного оператора в одной строке; в этом случае операторы разделяют двоеточием «:». Иногда возможность написать несколько операторов в одной строке не только компактифицирует текст программы, но и позволяет избежать неуклюжести. Не следует, однако, перегружать строки и пользоваться двоеточием без особой нужды.
4. Операторы LET, PRINT, CLS и END
4.1 Оператор LET
Слово «Let» в переводе с английского означает «пусть», «допустим». Оператор LET неизбежен при желании: «зарядить» какую-либо переменную конкретным числом; выполнить операцию присвоения, т.е. присуждения тому, что стоит в левой части выражения того значения (возможно и алгебраического), которое стоит в его правой части. Самое интересное заключается в том, что QB разрешает и вовсе не писать сам оператор.
Формат предъявления оператора LET:
[LET] [new]variable = variable, expression, number
здесь запись выражения внутри квадратных скобок [ ] означает, что его можно опустить, сразу после оператора стоит [новая] переменная, знак равенства всегда и обязательно присутствует, а справа от равенства стоит или старая переменная, или выражение, содержащее определенные (старые) переменные, или вообще число. Довольно общим местом является предложение о том, что знак равенства в программе не имеет ничего общего со знаком равенства в математике. В математике выражения
A = A+1
D= 3*D
B=SQR((B^3))
не имеют достаточно ясного смысла (не может же нормальное число равняться себе да еще плюс единица). Данные выражения читаются так
A = A+1 (теперь переменная A есть старое значение А (имевшееся до этой строки) и еще плюс один),
D = 3*D (а теперь переменная D равна своему старому значению (до этой строки), умноженному на три),
B = SQR((B^3)) (переменная B теперь равна корню квадратному из своего старого значения, возведенного в куб).
Мы уже использовали некоторые «грамматические» правила QB в вышеуказанных записях. Отметим, что в QB арифметические (над числами) или алгебраические (над переменными) действия записывают так:
Сложение => a + b
Вычитание => a - b
Умножение => a * b
Деление => a / b
Возведение в натуральную степень => a ^ b.
QB «понимает», что такое скобки и вложение скобок, а порядок выполнения операций такой же, как и в обычной алгебре (сначала возведение в степень, потом умножение или деление, и лишь затем сложение или вычитание). Рекомендую использовать скобки, если вы не совсем уверены в том, поймет ли QB ваши намерения по очередности выполнения операций. Также рекомендую не путать 2A и 2*A, ибо первое означает просто новую переменную, а второе -- переменную A увеличенную вдвое. Итак, написав
A = 2
B = 2
C = A*B
мы получим, что в переменной C у нас окажется число 4 (= 2 х 2). Однако мы пока не умеем увидеть этот столь крупный результат. Именно для этого существует
4.2 Оператор PRINT
PRINT в переводе с английского означает «печатать». Таким образом, именно этот оператор позволяет возвращать на экран значения переменных, а также тексты.
Формат предъявления оператора PRINT:
PRINT [“Tekst”] [,][;] [variable, expression, symbol, number, etc.] [,][;] [“Tekst2”]
где Tekst2 и Tekst2 -- любой текст; variable, expression, symbol, number, etc. -- все те числовые (или символьные) значения, которые вы хотите вывести на экран монитора. Стоящие между операндами знаки -- запятая или точка с запятой -- используются для того, чтобы на выводе между операндами или оставался табулированный промежуток (при использовании запятой), или же печать происходила с минимальным зазором (точка с запятой).
Отметим, что QB абсолютно равнодушен к тому, что заключено между кавычками -- поэтому вы можете там печатать по-русски, по-китайски, по-амхарски (на амхарском языке говорят в Эфиопии) -- QB все это в полной сохранности выведет на монитор как только до этого дойдет дело (управление), совершенно не вникая в смысл написанного вами.
Одна из наиболее популярных студенческих ошибок -- не закрывать кавычки. Для того, чтобы такое неприличие не случилось именно с вами, послушайтесь моего совета. Все профессиональные кодировщики (те, кто пишет программные листинги) обычно сразу ставят обе кавычки, затем уходят курсором налево, вписывают нужный текст, потом нажимают клавишу {End} (это переводит курсор в конец строки) и пишут себе свою программку далее.
Вторая частая ошибка - это перепутанные буквы переменных. В процессе отладки программы (т.е. доведения программы до правильно работающего состояния) найти или вспомнить то место, где вы могли ошибиться, довольно кропотливо. Поэтому советую сразу смотреть на то, что вы пишите вместо переменных. В противном случае вы будете получать или нули вместо результата, или неприличные комментарии со стороны QB, вроде «попытка деления на нуль» (считается очень большим оскорблением среди программистов).
Еще одно дополнение: в QB вместо ввода строки
print “skorost' = ”;v
достаточно написать
?”skorost' = ”; v
и QB сам вместо «?» поставит оператор PRINT, наладит требуемые по формату пробелы и т.д. К сожалению, другие операторы он в таком виде не распознает.
4.3 Оператор CLS
Происходит от сокращения английских слов «clear screen» (очистить экран). Его формат предъявления очень прост -- напечатайте CLS и … и все! Его действие сводится к очистке экрана, что бывает необходимо при начале очередного интерактивного (или диалогового) блока программы.
Этот оператор обычно ставится первым номером в самом начале программ.
4.4 Оператор END
В переводе с английского означает «конец». Формат предъявления таков же, что и у предыдущего оператора, но ставят его в конце исполнения (в листинге это может стоять и в середине, и даже весьма близко к началу листинга!) программы или используют для того, чтобы прервать программу в каком-то среднем месте в целях отладки.
Если в явном ли неявном виде нет ссылки на строки ниже той, где стоит END, то при попадании управления на строку с END этот оператор прерывает передачу управления на нижележащие строки. Отметим также, что END может попадать несколько раз, завершая отдельные ветви алгоритма программы, в которые она может, скажем, «попасть насовсем».
Еще два коротких оператора, которым не стоит посвящать слишком много места, это
REM (все, что стоит после него в строке, программой игнорируется) и ` -- то же, что и REM, его можно ставить для написания комментариев.
Задача. Расстояние от города A до города B 820 км. Мы летим на самолете со скоростью 532 км/час. Написать программу, которая бы вычисляла время, затраченное на путь из A в B (без учета ветра, дождя, иных метеоусловий, приема пилотом таблеток «Саридон» и отсутствия керосина).
Решение
CLS ` polet samoleta
s=820
v=532
t=s/v
print «vremya v puti »; s
end
Другое решение:
print «vremya v puti», 820/532
end
A в первом решении есть ма-а-аленькая ошибочка. Отладьте!
Второе решение короче, но и … тупее. Потому, что мы далее его развить не сможем. В принципе, программка сама по себе не очень хороша тем, что довольно неинтеллигентно находит одно число как результат обработки двух заданных наперед. Единственно приятное заключается в том, что всякий может убедиться воочию в том, что компьютер не хуже чем калькулятор. Более того, если вы введете строку
print ((3.141502654/2)*(sqr(2))/(256 -512))^2
то в результате выполнения этой строки компьютер выдаст на мониторе
262135.1143094216
Таким образом, в отличие от калькулятора, QB может выполнять гораздо более сложные цепочки действий. Между прочим, указанную строчку можно выполнить, не выгружаясь из программы которую вы набираете. Достаточно воспользоваться клавишей {F6}, и вы из основного окна текста программы в редакторе QB перейдете в нижнее окошко {Immediate}. Оно служит для непосредственного выполнения отдельных строк (вдруг вам надо вычислить что-то по ходу написания программы!). Именно это окошко вполне заменяет и калькулятор.
4.5 Оператор ввода данных INPUT
Input в переводе с английского означает «ввести». Оператор служит для ввода (в таком виде -- с клавиатуры) данных по запросу программы. Формат его
INPUT [“Tekst”] [,][;] variable
где Tekst между кавычками это тот же объект, что использовался в операторе PRINT. Однако оператор PRINT может печатать тексты несколько раз, а у INPUTа такая возможность одна и она всегда завершается именем переменной, к которой будет приписано введенное число или символьная строка. Потому текст просто обязан прокомментировать, что же вы просите ввести. Vartiable, как мы уже видели, это переменная.
Примеры:
input “vvedi argument x”; x
или
input “vvedi familiyu x”; x$
В первом случае будет запрошено число, во втором -- символьная величина.
Еще один пример:
input “vvedi svoyo imya ”; x$
print “Privet,”;x$;”!”
4.6 Операторы перехода GOTO и IF … THEN
Оператор GOTO происходит, очевидно, от «go to» (идти к). Формат его предъявления таков:
GOTO Label
где Label означает метку той строки, на которую осуществляется переход. Метка может быть просто натуральным числом или символьным выражением, завершенным двоеточием, например, «nachalo:», «faktorial:» или «korni:».
Управление выполнением программы по этому оператору (или, говорят, по предъявлению этого оператора, т.е. когда оператор появится в начале строки или, после двоеточия, даже в середине ее или конце) безусловно переходит на строку помеченную меткой. Таким образом, если оператор перехода посылает на метку строки выше себя, и между такой меткой и им самим нет ничего, что может помешать управлению снова добраться до этого GOTO, то мы будем иметь классический пример зацикливания.
Если же этот оператор посылает управление куда-то ниже себя, то далее управление может подняться выше метки (или ссылки) только если в программе используется еще какой-то переход на такую (выше метки) строку.
Теперь обратимся к более активному оператору, смысл которого заключен в передаче управления или выполнении действий в зависимости от состояния условия перехода или параметра перехода.
Слово IF переводится как «если», а THEN -- как «то» или «тогда». Краткий формат оператора:
IF condition THEN action
где condition означает условие, например, raznost=1, i<10, или k>=2 и т.д., а action -- действие (например, переход на строку с определенной меткой, или печать, или что-то еще).
Более полный формат этого оператора предусматривает множественность и условий и действий:
IF condition1 THEN
[statementblock-1]
[ELSEIF condition2 THEN
[statementblock-2]]
… … … …
[ELSE
statementblock-n]]
END IF
Или
IF condition THEN statements [ELSE statements]
Здесь под condition1 подразумевается любое выражение, которое можно оценить как истинное (ненулевое) или ложное (нулевое)
statementblock-1
statementblock-2
statementblock-n
подразумевается использование одного или более оператора на одной или более строках, а под statements подразумеваются один или более операторов, разделенных двоеточием.
Пример:
INPUT "1 or 2? ", i%
IF i% = 1 OR i% = 2 THEN
PRINT "OK"
ELSE
PRINT "Out of range"
END IF
Эта программка просит ввести 1 или 2. Если вы слушаетесь и вводите 1 или 2, она печатает «ОК», в противном случае сообщает вам «Вне пределов».
Возвращаясь к путешествию из Казани в Москву на аэроплане, напишем программу, которая не только запрашивает расстояние и скорость полета, но и выдает некоторые сообщения при неправдоподобии вводимых величин.
20 CLS ` polet samoleta
print “ polet samoleta”
30 input “vvedi rasstoyaniye ”;s
if s>10000 then print “a viza est'?”: goto 30
if s<30 then print “peshkom doidesh'!”: goto 30
40 input “vvedi skorost' ”;v
if v>1200 then print “Gde brali MiG-24?”: goto 40
if v<70 then print “voz'mite velosiped”: goto 40
t=s/v
min=(t-int(t))*60
sec=(min-int(min))*60
print «vremya v puti»
print int(t);”chasov”,int(min);”minut”; sec; “sekund”
input «Eshcho poletaem? Da - vvedi odin. Net -drugoye chislo», ask
if ask = 1 then goto 20
cls
print «Schastlivogo puti!»
end
Написав и отладив программу, вы освоите азы использования оператора IF…THEN.
Задача. Написать программу, которая бы решала квадратные уравнения, т.е. запрашивала значения коэффициентов уравнения и печатала его корни во всех известных случаях
Решение
nachalo: CLS `programma dlya resheniya kv. ur-ya
print “ Reshaem kvadrantoya uravneniye”
print “ 2”
print “ax + bx + c = 0”
input “vvedi a=”;a
input “vvedi b=”;b
input “vvedi c=”;c
dskr=b^2-4*a*c
ch1=-b/(2*a):ch2=(sqr(abs(dskr))/(2*a)
if dskr>0 then gosub real
if dskr=0 then gosub odin
if dskr<0 then gosub compl
input “eshcho reshem? DA=1. Net=2”; vybor
if vybor=1 then goto nachalo
cls
print “spasibo za ispolzovaniye porgammy”
end
real: print “Imeem 2 veshch. kornya,
print “x1=”;ch1-ch2,”x2=”;ch1+ch2
return
odin: print “Imeem 1 veshch. koren',
print “x1=x2=”;ch1
return
compl: print “Imeem 2 compleksnykh kornya,
print “x1=”;ch1;”-i*”;ch2,”x2=”;ch1;”+i*”;ch2
Внимательный читатель увидит здесь два новых оператора -- GOSUB вместо GOTO и tot какой-то оператор RETURN. Оператор GOSUB Label не просто отсылает управление на строку с меткой Label, но и ждет затем появления своей второй половины -- строки RETURN (от английского «вернуться»).
Такой переход похож на безусловный, но обладает дополнительным свойством: управление не просто передается на строку Label: , но и спускается все ниже до тех пор, пока не появится строка RETURN. После этого управление передается на строку, сразу следующую за той, на которой стоял GOSUB и даже на тот оператор, который стоит на той же строке, что и GOSUB, но сразу после (GOSUB:) -- двоеточия! Вообще говоря, GOSUB происходит от GO to SUBroutine (routine = программа, subroutine = подпрограмма).
На возможный вопрос «А чего это мы END в середине программы поставили?» ответ будет таким. Оператор GOSUB...RETURN, вообще говоря, является оператором перехода на подпрограмму (т.е. относительно самостоятельный блок программы). Для того, чтобы выполнение и адресация на подпрограммы была разумной, следует выносить их НИЖЕ ОСНОВНОГО БЛОКА программы. Они (подпрограммы) становятся такими самостоятельными программками, у которых «голова» находится в теле большой программы, а «концом» является как раз оператор RETURN, который, фактически, завершает выполнение подпрограммы и возвращает управление на то место, с которого его передали вниз GOSUBом. Ниже мы приведем пример более слабого решения, в котором GOSUB не используется.
nachalo: CLS `resheniye kv. ur-ya
print “ Reshaem kv. ur-e
print “ 2”
print “ax + bx + c = 0”
input “vvedi a=”;a
input “vvedi b=”;b
input “vvedi c=”;c
dskr=b^2-4*a*c
ch1=-b/(2*a):ch2=(sqr(abs(dskr))/(2*a))
if dskr>0 then
print “2 veshch. kornya”
print “x1=”;ch1-ch2,”x2=”;ch1+ch2
elseif dskr=0 then
print “Imeem 1 veshch. koren',
print “x1=x2=”;ch1
elseif dskr<0 then
print “Imeem 2 compleksnykh kornya,
print “x1=”;ch1;”i*”;ch2,”x2=”;ch1;”+i*”;ch2
input “eshcho reshem? DA=1. Net=2”; vybor
if vybor=1 then goto nachalo
cls
print “spasibo za ispolzovaniye porgammy”
end
Ура, мы поместили подпрограммы внутри программы! Увы, это лишь потому, что подпрограммы очень простенькие… Что выбирать? Ответ такой же, как и со знанием иностранных языков -- нужно знать и то, и другое!
5. Организация циклов
Для того, чтобы пояснить, что такое цикл, рассмотрим такой пример.
Говорят, что когда-то великий математик Эйлер был маленьким и учился в школе. В один прекрасный день преподаватель математики, имея плохое состояние или настроение, начал урок с задания: «А сегодня, господа ученики, вы должны просуммировать все числа от 1 до 100» и уселся в креслах. Маленький Эйлер через несколько минут поднял руку: «Господин учитель, а результат 5050?». Учитель посмотрел в свои записи и спросил: «А как ты это сосчитал?». Эйлер ответил: «Если записать все числа от одного до ста, а потом снизу приписать их же, но только наоборот, то в каждом столбике будет 1+100=2+99=3+98=…=100+1=101. Наверху мы всякий раз добавляем единицу, а внизу отнимаем, поэтому сумма столбика остается той же. Таких столбиков 100, значит, все вместе будет 101*100. Но так как мы брали две одинаковые строчки, то сумма чисел от 1 до 100 будет половина от этого, т.е. ((1+100)*100)/2=5050».
Говорят, правда, что числа были не от 1 до 100, а еще похуже. Однако, разобрав мысли Эйлера, мы можем заметить, как и он, что всякое новое число увеличивается на единицу. Мы сейчас смогли бы написать программу, которая считает числа от 1 до 100, например:
SUM=1+2+3+4+5+6+7+8+9+10+…
print SUM
Н-да… длинновато получается. Проще на счетах. Хорошо, давайте установим некоторое накопительное повторяющееся выражение
SUM =SUM+1
Тогда в ящик SUM при каждом исполнении такой строки будет добавляться единица. Но нужно уметь … остановиться, то есть сделать эту операцию ровно сто раз. Здесь и возникает так называемый «счетчик». Его можно строить так: как только операция добавления единицы в переменную SUM совершается, так счетчик растет ровно на единицу. При достижении этим счетчиком значения 100 действия прекращаются.
i=0
20 i=i+1
sum=sum+1
if i<100 then goto 20
print sum, i
Или иначе
i=101
20 i=i-1
sum=sum+1
if i>0 then goto 20
print sum, i
Стоит ли говорить, что программки не работают правильно? Отладить!
В последнем случае возникает вопрос: а сто ли раз выполняется действие суммирования? Попытайтесь ответить на него, просто подумав, и не загружая компьютер. Затем придумайте способ выяснить ваши подозрения каким-то образом на РС.
Еще один интересный объект для нахождения -- это факториал. Факториал натурального числа определяется как произведение всех натуральных чисел от одного до этого заданного числа, т.е.
.
Роль факториала очень велика (вы, вероятно, помните, что без него не обходились ни формула Тейлора, ни коэффициенты бинома Ньютона, ни определители).
Докажем, что число различных перестановок в наборе из элементов равно . Применим метод математической индукции, суть которого в том, что доказательство справедливости какого-то предложения, скажем ,для любого можно свести к трем действиям:
Проверить, справедливо ли или другом начальном ?
Если да, то, предположив, что предложение верно при некотором , ДОКАЗАТЬ, что тогда оно будет выполняться и при .
Рассуждения в последнем, третьем пункте довольно просты: по пункту 1) имеем, что предложение справедливо при ; но по 2) оно верно и при , следовательно и при и так далее до бесконечности.
В нашем случае, обозначив за число перестановок, имеем с очевидностью (в наборе из одного элемента и вариантов-то всего один). Допустив, что при мы имеем , получаем, что с добавлением одного нового элемента в набор этот элемент будет на первом месте участвовать в перестановках остальных членов, на втором также в перестановках и т.д., всего в = перестановках. По третьему пункту индукции, получаем то, что требовалось доказать.
Число разных комбинаций выхода 6 волейболистов на площадку равно 6! = 1·2·3·4·5·6 = 720 (не правда ли, впечатляет!). Напомню, что число различных вариантов рассадки 25 студентов на 25 местах в одной и той же аудитории как раз равно 25!, что представляет величину 15512100433309859840000001.55·1025. Это больше, чем число Авогадро NA = 6.0221367·1023 mol-1.
Напишем программу для вычисления факториалов. Это то же самое, что и суммирование ряда натуральных чисел, только нужно не добавлять единицу, а домножать на «счетчик».
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 всегда объявляет динамические массивы. Режим статических массивов автоматически заявлен при запуске программы и таким и остается. Хранение динамических массивов происходит в памяти машины во время выполнения программы.
Вернемся к программе, считающей факториал. Добавим в ней такие строки
...Подобные документы
Использование ранжированных переменных в программном пакете 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